Merge 5.4.63 into android12-5.4

Changes in 5.4.63
	HID: core: Correctly handle ReportSize being zero
	HID: core: Sanitize event code and type when mapping input
	perf record/stat: Explicitly call out event modifiers in the documentation
	drm/sched: Fix passing zero to 'PTR_ERR' warning v2
	drm/etnaviv: fix TS cache flushing on GPUs with BLT engine
	KVM: arm64: Add kvm_extable for vaxorcism code
	KVM: arm64: Survive synchronous exceptions caused by AT instructions
	KVM: arm64: Set HCR_EL2.PTW to prevent AT taking synchronous exception
	dt-bindings: mmc: tegra: Add tmclk for Tegra210 and later
	arm64: tegra: Add missing timeout clock to Tegra194 SDMMC nodes
	arm64: tegra: Add missing timeout clock to Tegra186 SDMMC nodes
	arm64: tegra: Add missing timeout clock to Tegra210 SDMMC
	sdhci: tegra: Remove SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK for Tegra210
	sdhci: tegra: Remove SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK for Tegra186
	scsi: target: tcmu: Fix size in calls to tcmu_flush_dcache_range
	scsi: target: tcmu: Optimize use of flush_dcache_page
	Linux 5.4.63

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ibf5601b09547d17e07ae6b1567f2f9125d0b1127
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..7f730c4 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -1,260 +1,351 @@
 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.
 
 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.
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/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 13984b6..bed8207 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]
@@ -3231,6 +3237,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/vm.rst b/Documentation/admin-guide/sysctl/vm.rst
index 64aeee1..9e84700 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
 =================
 
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..354817b
--- /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`` on the ``blk_keyslot_manager``, which 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.
+
+``blk_ksm_destroy`` should be called to free up all resources used by a keyslot
+manager upon ``blk_ksm_init``, once the ``blk_keyslot_manager`` 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/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/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/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..eeaa24f 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
@@ -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.
 
@@ -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
@@ -601,6 +658,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
 -----------
 
@@ -618,7 +686,8 @@
     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,6 +704,12 @@
             } u;
     };
 
+    struct fscrypt_provisioning_key_payload {
+            __u32 type;
+            __u32 __reserved;
+            __u8 raw[];
+    };
+
 :c:type:`struct fscrypt_add_key_arg` must be zeroed, then initialized
 as follows:
 
@@ -657,9 +732,26 @@
   ``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 a :c:type:`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 +773,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
@@ -1061,7 +1158,7 @@
 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 +1167,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 +1178,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 +1204,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
 -----------------------------
 
@@ -1141,7 +1250,7 @@
 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.
+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 +1262,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 +1291,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 +1299,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..a95536b 100644
--- a/Documentation/filesystems/fsverity.rst
+++ b/Documentation/filesystems/fsverity.rst
@@ -226,6 +226,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
 ======================
 
@@ -398,7 +406,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
@@ -434,7 +442,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``.
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..4579d14 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.
 
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 8d4ad1d..927139f 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/MAINTAINERS b/MAINTAINERS
index 1407008..e34f8dd 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
@@ -11508,6 +11508,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)
@@ -15540,6 +15546,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/
diff --git a/Makefile b/Makefile
index 418814b..59ed358 100644
--- a/Makefile
+++ b/Makefile
@@ -549,7 +549,11 @@
 
 ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
 ifneq ($(CROSS_COMPILE),)
-CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
+CLANG_TRIPLE	?= $(CROSS_COMPILE)
+CLANG_FLAGS	+= --target=$(notdir $(CLANG_TRIPLE:%-=%))
+ifeq ($(shell $(srctree)/scripts/clang-android.sh $(CC) $(CLANG_FLAGS)), y)
+$(error "Clang with Android --target detected. Did you specify CLANG_TRIPLE?")
+endif
 GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
 CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
 GCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
@@ -668,6 +672,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 +803,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
@@ -861,6 +884,56 @@
 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
+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)
 
@@ -1088,9 +1161,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)
 
@@ -1109,7 +1185,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
@@ -1169,12 +1246,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
@@ -1751,7 +1833,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
 # ---------------------------------------------------------------------------
@@ -1810,7 +1893,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..f33265b
--- /dev/null
+++ b/android/abi_gki_aarch64
@@ -0,0 +1,143 @@
+[abi_whitelist]
+# commonly used symbols
+  module_layout
+  __put_task_struct
+
+# required by erofs.ko
+  add_to_page_cache_lru
+  __alloc_pages_nodemask
+  alloc_workqueue
+  arm64_const_caps_ready
+  bcmp
+  bio_add_page
+  bio_alloc_bioset
+  bio_associate_blkg
+  bio_put
+  bit_wait
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  call_rcu
+  capable
+  __cfi_slowpath
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  destroy_workqueue
+  d_make_root
+  d_splice_alias
+  event_triggers_call
+  finish_wait
+  flush_dcache_page
+  fs_bio_set
+  fs_ftype_to_dtype
+  generic_block_bmap
+  generic_file_llseek
+  generic_fillattr
+  generic_read_dir
+  generic_ro_fops
+  iget5_locked
+  iget_failed
+  init_special_inode
+  init_user_ns
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  inode_nohighmem
+  iput
+  kfree
+  kill_block_super
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kvfree
+  kvmalloc_node
+  __list_add_valid
+  __list_del_entry_valid
+  __lock_page
+  LZ4_decompress_safe_partial
+  match_strdup
+  match_token
+  memcpy
+  memmove
+  memset
+  mount_bdev
+  __mutex_init
+  mutex_lock
+  mutex_trylock
+  mutex_unlock
+  new_inode
+  out_of_line_wait_on_bit_lock
+  pagecache_get_page
+  page_get_link
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  posix_acl_access_xattr_handler
+  posix_acl_default_xattr_handler
+  posix_acl_from_xattr
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  print_hex_dump
+  printk
+  __put_page
+  put_pages_list
+  queue_work_on
+  radix_tree_delete
+  radix_tree_gang_lookup
+  radix_tree_insert
+  radix_tree_lookup
+  radix_tree_preload
+  _raw_spin_lock
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_irqrestore
+  rcu_barrier
+  __rcu_read_lock
+  __rcu_read_unlock
+  read_cache_page
+  read_cache_page_gfp
+  register_filesystem
+  register_shrinker
+  sb_set_blocksize
+  schedule
+  seq_puts
+  set_nlink
+  simple_get_link
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strlen
+  strnlen
+  strscpy
+  strsep
+  submit_bio
+  __sw_hweight64
+  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_print_flags_seq
+  trace_print_symbols_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  unlock_new_inode
+  unlock_page
+  unregister_filesystem
+  unregister_shrinker
+  vm_map_ram
+  vm_unmap_aliases
+  vm_unmap_ram
+  wake_up_bit
+  __wake_up_locked
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
new file mode 100644
index 0000000..073d8f8
--- /dev/null
+++ b/android/abi_gki_aarch64.xml
@@ -0,0 +1,123239 @@
+<abi-corpus-group architecture='elf-arm-aarch64'>
+  <abi-corpus path='vmlinux' architecture='elf-arm-aarch64'>
+    <elf-function-symbols>
+      <elf-symbol name='LZ4_decompress_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7c1107a'/>
+      <elf-symbol name='LZ4_decompress_safe_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15bed7a5'/>
+      <elf-symbol name='PDE_DATA' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4214b5bf'/>
+      <elf-symbol name='__ClearPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x802392'/>
+      <elf-symbol name='__SetPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3febbd'/>
+      <elf-symbol name='___pskb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdff7fd6f'/>
+      <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='0xc99a4911'/>
+      <elf-symbol name='__alloc_pages_nodemask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4192db1c'/>
+      <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='0x3fc541a1'/>
+      <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='0xf0b8b9f4'/>
+      <elf-symbol name='__blkdev_issue_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dc5b07a'/>
+      <elf-symbol name='__blkdev_issue_zeroout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf25ca4aa'/>
+      <elf-symbol name='__blockdev_direct_IO' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f55056b'/>
+      <elf-symbol name='__bread_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a641add'/>
+      <elf-symbol name='__breadahead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf41ffa2'/>
+      <elf-symbol name='__break_lease' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c74312c'/>
+      <elf-symbol name='__brelse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79d0a667'/>
+      <elf-symbol name='__cfg80211_alloc_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfd417f3'/>
+      <elf-symbol name='__cfg80211_alloc_reply_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x603a8eac'/>
+      <elf-symbol name='__cfg80211_send_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x972bca88'/>
+      <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='0xce7e83e9'/>
+      <elf-symbol name='__class_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdce41960'/>
+      <elf-symbol name='__clk_determine_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6f301df'/>
+      <elf-symbol name='__clk_get_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17e3551'/>
+      <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='0xe595e823'/>
+      <elf-symbol name='__clk_mux_determine_rate_closest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e76efc2'/>
+      <elf-symbol name='__clocksource_register_scale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6555cd5e'/>
+      <elf-symbol name='__close_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb252c147'/>
+      <elf-symbol name='__compat_only_sysfs_link_entry_to_kobj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa805388a'/>
+      <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='0xf8ace709'/>
+      <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='__dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b79c5fa'/>
+      <elf-symbol name='__dev_kfree_skb_any' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x626f42dc'/>
+      <elf-symbol name='__dev_kfree_skb_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38ca4a97'/>
+      <elf-symbol name='__devm_iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52975bf5'/>
+      <elf-symbol name='__devm_of_phy_provider_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaee72432'/>
+      <elf-symbol name='__devm_regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefd36f66'/>
+      <elf-symbol name='__devm_regmap_init_i2c' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5c2d2a8'/>
+      <elf-symbol name='__devm_regmap_init_mmio_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa6343b1'/>
+      <elf-symbol name='__devm_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe299b1ed'/>
+      <elf-symbol name='__devm_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5e60b47'/>
+      <elf-symbol name='__devm_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98b3170f'/>
+      <elf-symbol name='__dma_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29f5f54a'/>
+      <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='0x3da97a05'/>
+      <elf-symbol name='__drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x880e5b20'/>
+      <elf-symbol name='__drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x608c98cc'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe499e143'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x897c6457'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44f4d253'/>
+      <elf-symbol name='__drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9a225d4'/>
+      <elf-symbol name='__drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc315dca6'/>
+      <elf-symbol name='__drm_atomic_helper_private_obj_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5194ee2c'/>
+      <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='__ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x708380af'/>
+      <elf-symbol name='__find_get_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2826424d'/>
+      <elf-symbol name='__free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3febe89'/>
+      <elf-symbol name='__generic_file_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47e787d8'/>
+      <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='0x63dfb655'/>
+      <elf-symbol name='__getblk_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7b266f6'/>
+      <elf-symbol name='__hid_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f42696a'/>
+      <elf-symbol name='__hid_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea134eb6'/>
+      <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='0x97330bb1'/>
+      <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='0x62160e58'/>
+      <elf-symbol name='__hwspin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcbb68d3'/>
+      <elf-symbol name='__i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cfc2812'/>
+      <elf-symbol name='__ieee80211_schedule_txq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa610c6d1'/>
+      <elf-symbol name='__iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ed4af02'/>
+      <elf-symbol name='__iio_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1315dacb'/>
+      <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='0x23b1ae5d'/>
+      <elf-symbol name='__ion_device_add_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c4b09a5'/>
+      <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='__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='0xc0ba6d7e'/>
+      <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_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf23fcb99'/>
+      <elf-symbol name='__kfifo_in_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3955fcf6'/>
+      <elf-symbol name='__kfifo_max_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6cb465a'/>
+      <elf-symbol name='__kfifo_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13d0adf7'/>
+      <elf-symbol name='__kfifo_out_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33fcf44a'/>
+      <elf-symbol name='__kfifo_skip_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce4e47b6'/>
+      <elf-symbol name='__kfifo_to_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4578f528'/>
+      <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='0x82128337'/>
+      <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='0x470de53a'/>
+      <elf-symbol name='__lock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58be485c'/>
+      <elf-symbol name='__mark_inode_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82705326'/>
+      <elf-symbol name='__mdiobus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb36b10e6'/>
+      <elf-symbol name='__media_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aa3029e'/>
+      <elf-symbol name='__media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83d74e2f'/>
+      <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='0x72983160'/>
+      <elf-symbol name='__mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a7ea34e'/>
+      <elf-symbol name='__mmdrop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2aa5338'/>
+      <elf-symbol name='__module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7be62542'/>
+      <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='0x88deadae'/>
+      <elf-symbol name='__napi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89c0e29'/>
+      <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='0xc633fd4'/>
+      <elf-symbol name='__netif_set_xps_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89a86eb8'/>
+      <elf-symbol name='__netlink_dump_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3b20fbd'/>
+      <elf-symbol name='__netlink_kernel_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdd590ea'/>
+      <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='0xb9251cb2'/>
+      <elf-symbol name='__of_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a2d247f'/>
+      <elf-symbol name='__pci_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe772e606'/>
+      <elf-symbol name='__platform_driver_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa95a41ac'/>
+      <elf-symbol name='__platform_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46d9064a'/>
+      <elf-symbol name='__platform_register_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d00f68d'/>
+      <elf-symbol name='__pm_relax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bf0372d'/>
+      <elf-symbol name='__pm_runtime_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf36d86d6'/>
+      <elf-symbol name='__pm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35602bf6'/>
+      <elf-symbol name='__pm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7554ba90'/>
+      <elf-symbol name='__pm_runtime_set_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39eea866'/>
+      <elf-symbol name='__pm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a56fbba'/>
+      <elf-symbol name='__pm_runtime_use_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0abdfa'/>
+      <elf-symbol name='__pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c48f394'/>
+      <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='0x3a352c38'/>
+      <elf-symbol name='__pskb_pull_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdc8be92'/>
+      <elf-symbol name='__put_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4ea2038'/>
+      <elf-symbol name='__put_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb1168c8'/>
+      <elf-symbol name='__put_task_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49a8c29b'/>
+      <elf-symbol name='__raw_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf932015f'/>
+      <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='0x18a80406'/>
+      <elf-symbol name='__register_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64ad029d'/>
+      <elf-symbol name='__register_rpmsg_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd63d44a0'/>
+      <elf-symbol name='__regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4490d070'/>
+      <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='0x9a1cbbf6'/>
+      <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='0x10a9b677'/>
+      <elf-symbol name='__scsi_device_lookup_by_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4e4dc30'/>
+      <elf-symbol name='__scsi_execute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb325f946'/>
+      <elf-symbol name='__scsi_print_sense' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7cedebd'/>
+      <elf-symbol name='__sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce008c81'/>
+      <elf-symbol name='__seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba00a0f3'/>
+      <elf-symbol name='__serio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b840f83'/>
+      <elf-symbol name='__serio_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd397848'/>
+      <elf-symbol name='__sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe869f42c'/>
+      <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='__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='0x5efd93b7'/>
+      <elf-symbol name='__skb_get_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3817d020'/>
+      <elf-symbol name='__skb_gso_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x636b5d97'/>
+      <elf-symbol name='__skb_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebae1f2'/>
+      <elf-symbol name='__sock_recv_ts_and_drops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ffd854d'/>
+      <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='0xa4c66ea6'/>
+      <elf-symbol name='__spi_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66cd03e6'/>
+      <elf-symbol name='__splice_from_pipe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c764d59'/>
+      <elf-symbol name='__spmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d518a0e'/>
+      <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='0x6945f234'/>
+      <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='0x4b68b5bf'/>
+      <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='0xdd6a8846'/>
+      <elf-symbol name='__tty_insert_flip_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f0929a0'/>
+      <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='0xdd13e294'/>
+      <elf-symbol name='__unregister_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bc3fbc0'/>
+      <elf-symbol name='__usb_create_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e082003'/>
+      <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='0x7b2f229f'/>
+      <elf-symbol name='__v4l2_ctrl_s_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a9b72b'/>
+      <elf-symbol name='__video_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15e48d65'/>
+      <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='0x2999244f'/>
+      <elf-symbol name='__wake_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eeb2322'/>
+      <elf-symbol name='__wake_up_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2773c485'/>
+      <elf-symbol name='__warn_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56470118'/>
+      <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='0x73579f0b'/>
+      <elf-symbol name='_copy_from_iter_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd65f524a'/>
+      <elf-symbol name='_copy_to_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d604229'/>
+      <elf-symbol name='_dev_crit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3509cfc'/>
+      <elf-symbol name='_dev_emerg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d9a432'/>
+      <elf-symbol name='_dev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc78acfe'/>
+      <elf-symbol name='_dev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66b0c1ed'/>
+      <elf-symbol name='_dev_notice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb04f7395'/>
+      <elf-symbol name='_dev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22b1141'/>
+      <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='0xb47c6650'/>
+      <elf-symbol name='ack_all_badblocks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9b03f3'/>
+      <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_to_page_cache_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf17071df'/>
+      <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='0x6f89b86c'/>
+      <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='0xea8ee15e'/>
+      <elf-symbol name='alloc_anon_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x806d121'/>
+      <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='0x659b3312'/>
+      <elf-symbol name='alloc_io_pgtable_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x311a67d'/>
+      <elf-symbol name='alloc_netdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x166a5d80'/>
+      <elf-symbol name='alloc_page_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fcc4cb5'/>
+      <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='0xd9a734c5'/>
+      <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='0xe46a8efa'/>
+      <elf-symbol name='amba_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa35ce0dd'/>
+      <elf-symbol name='amba_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67753684'/>
+      <elf-symbol name='amba_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeca3838'/>
+      <elf-symbol name='anon_inode_getfd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe76e5a7'/>
+      <elf-symbol name='anon_inode_getfile' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa687b9f1'/>
+      <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='0x7db6f741'/>
+      <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='0x1a4e7b24'/>
+      <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='0xd241163b'/>
+      <elf-symbol name='backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78c5548'/>
+      <elf-symbol name='backlight_device_set_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca696e91'/>
+      <elf-symbol name='backlight_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b49ae2e'/>
+      <elf-symbol name='badblocks_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc78b6a38'/>
+      <elf-symbol name='badblocks_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9104228c'/>
+      <elf-symbol name='badblocks_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecc13cf3'/>
+      <elf-symbol name='badblocks_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44652565'/>
+      <elf-symbol name='badblocks_show' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70d33b09'/>
+      <elf-symbol name='badblocks_store' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4753eba3'/>
+      <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='0x45796669'/>
+      <elf-symbol name='bd_unlink_disk_holder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f1847c8'/>
+      <elf-symbol name='bdev_read_only' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed61bca1'/>
+      <elf-symbol name='bdevname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34df0801'/>
+      <elf-symbol name='bdget_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ca40ff3'/>
+      <elf-symbol name='bdput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12e7658d'/>
+      <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='0x407f96dd'/>
+      <elf-symbol name='bio_alloc_bioset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9aac9c2b'/>
+      <elf-symbol name='bio_associate_blkg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98d4cd5b'/>
+      <elf-symbol name='bio_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdccd7116'/>
+      <elf-symbol name='bio_clone_blkg_association' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81c2789c'/>
+      <elf-symbol name='bio_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea020c24'/>
+      <elf-symbol name='bio_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfa935b4'/>
+      <elf-symbol name='bio_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfc3dd56'/>
+      <elf-symbol name='bioset_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe178170c'/>
+      <elf-symbol name='bioset_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80ec4568'/>
+      <elf-symbol name='bit_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16e297c3'/>
+      <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='0xa3bef84c'/>
+      <elf-symbol name='blk_cleanup_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85aafd78'/>
+      <elf-symbol name='blk_execute_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d7dd344'/>
+      <elf-symbol name='blk_execute_rq_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdce1eaa'/>
+      <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='0x66a48a70'/>
+      <elf-symbol name='blk_get_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594ba9a0'/>
+      <elf-symbol name='blk_get_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86e2914c'/>
+      <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='0x2bcc30ce'/>
+      <elf-symbol name='blk_mq_alloc_request_hctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ad80dee'/>
+      <elf-symbol name='blk_mq_alloc_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd123af4b'/>
+      <elf-symbol name='blk_mq_complete_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37868a57'/>
+      <elf-symbol name='blk_mq_delay_kick_requeue_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe215f536'/>
+      <elf-symbol name='blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b0a48af'/>
+      <elf-symbol name='blk_mq_free_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda4b28f4'/>
+      <elf-symbol name='blk_mq_free_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7e5fde4'/>
+      <elf-symbol name='blk_mq_freeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe35146e'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62d8f522'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce64d24e'/>
+      <elf-symbol name='blk_mq_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44d74879'/>
+      <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='0xf1e3b019'/>
+      <elf-symbol name='blk_mq_quiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dd82a09'/>
+      <elf-symbol name='blk_mq_request_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26ebce48'/>
+      <elf-symbol name='blk_mq_requeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf5492ff'/>
+      <elf-symbol name='blk_mq_run_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56654ae5'/>
+      <elf-symbol name='blk_mq_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ee2473e'/>
+      <elf-symbol name='blk_mq_start_stopped_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d602e14'/>
+      <elf-symbol name='blk_mq_stop_hw_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58a5a7d4'/>
+      <elf-symbol name='blk_mq_tag_to_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1072bdc'/>
+      <elf-symbol name='blk_mq_tagset_busy_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b3c135'/>
+      <elf-symbol name='blk_mq_tagset_wait_completed_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x303dcf0d'/>
+      <elf-symbol name='blk_mq_unfreeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f3bd4b1'/>
+      <elf-symbol name='blk_mq_unique_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27625b91'/>
+      <elf-symbol name='blk_mq_unquiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b65eb8c'/>
+      <elf-symbol name='blk_mq_update_nr_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a75458'/>
+      <elf-symbol name='blk_mq_virtio_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63b731ab'/>
+      <elf-symbol name='blk_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6b09b6'/>
+      <elf-symbol name='blk_put_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b75a053'/>
+      <elf-symbol name='blk_put_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b30a196'/>
+      <elf-symbol name='blk_queue_alignment_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe09bac63'/>
+      <elf-symbol name='blk_queue_bounce_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa53f6829'/>
+      <elf-symbol name='blk_queue_can_use_dma_map_merging' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7be30501'/>
+      <elf-symbol name='blk_queue_chunk_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1bcf0c1'/>
+      <elf-symbol name='blk_queue_flag_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b2ce7a7'/>
+      <elf-symbol name='blk_queue_flag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5717b6d'/>
+      <elf-symbol name='blk_queue_flag_test_and_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72d4ac47'/>
+      <elf-symbol name='blk_queue_io_min' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b6b2cc8'/>
+      <elf-symbol name='blk_queue_io_opt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74294b92'/>
+      <elf-symbol name='blk_queue_logical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefd436bf'/>
+      <elf-symbol name='blk_queue_make_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3665833f'/>
+      <elf-symbol name='blk_queue_max_discard_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3d23c98'/>
+      <elf-symbol name='blk_queue_max_discard_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c904bb7'/>
+      <elf-symbol name='blk_queue_max_hw_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc48a77a6'/>
+      <elf-symbol name='blk_queue_max_segment_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51deb4fe'/>
+      <elf-symbol name='blk_queue_max_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d9978f6'/>
+      <elf-symbol name='blk_queue_max_write_zeroes_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67b02a9'/>
+      <elf-symbol name='blk_queue_physical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36ce7480'/>
+      <elf-symbol name='blk_queue_rq_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x677dc37e'/>
+      <elf-symbol name='blk_queue_split' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63367b49'/>
+      <elf-symbol name='blk_queue_update_dma_alignment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb561d9c1'/>
+      <elf-symbol name='blk_queue_virt_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbb5a14f'/>
+      <elf-symbol name='blk_queue_write_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad694642'/>
+      <elf-symbol name='blk_register_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6753e344'/>
+      <elf-symbol name='blk_rq_map_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1794d66'/>
+      <elf-symbol name='blk_rq_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34a8e0'/>
+      <elf-symbol name='blk_rq_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1490b882'/>
+      <elf-symbol name='blk_rq_map_user_iov' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5343eec'/>
+      <elf-symbol name='blk_rq_unmap_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b2c3e94'/>
+      <elf-symbol name='blk_set_queue_dying' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8844e4a'/>
+      <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='0x991901d2'/>
+      <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='0xf6b0cea4'/>
+      <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='0x54446da9'/>
+      <elf-symbol name='blkdev_get_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50f1af4d'/>
+      <elf-symbol name='blkdev_issue_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bfe0653'/>
+      <elf-symbol name='blkdev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13cc2647'/>
+      <elf-symbol name='block_is_partially_uptodate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8302c9db'/>
+      <elf-symbol name='block_write_full_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa511b004'/>
+      <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='0x87e741d5'/>
+      <elf-symbol name='bpf_prog_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x389e4990'/>
+      <elf-symbol name='bpf_prog_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4520edb'/>
+      <elf-symbol name='bpf_prog_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe014c2f3'/>
+      <elf-symbol name='bpf_trace_run1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x199e8cdf'/>
+      <elf-symbol name='bpf_trace_run10' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeeb9b04'/>
+      <elf-symbol name='bpf_trace_run11' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10ec5395'/>
+      <elf-symbol name='bpf_trace_run12' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd85273d5'/>
+      <elf-symbol name='bpf_trace_run2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaae227be'/>
+      <elf-symbol name='bpf_trace_run3' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35bb3ddb'/>
+      <elf-symbol name='bpf_trace_run4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x629d68cb'/>
+      <elf-symbol name='bpf_trace_run5' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce871df8'/>
+      <elf-symbol name='bpf_trace_run6' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4fe54ff'/>
+      <elf-symbol name='bpf_trace_run7' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdae6bbd9'/>
+      <elf-symbol name='bpf_trace_run8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcf546a8'/>
+      <elf-symbol name='bpf_trace_run9' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99e5c916'/>
+      <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='0xb90d47b6'/>
+      <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='0x87d12cc3'/>
+      <elf-symbol name='build_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb80e7ce'/>
+      <elf-symbol name='bus_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b365964'/>
+      <elf-symbol name='bus_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f5c1b4d'/>
+      <elf-symbol name='bus_for_each_drv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x572782f2'/>
+      <elf-symbol name='bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe865ba33'/>
+      <elf-symbol name='bus_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f4dfcf'/>
+      <elf-symbol name='bus_set_iommu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x428f3923'/>
+      <elf-symbol name='bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad4f9f1c'/>
+      <elf-symbol name='bus_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa93d190'/>
+      <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='0x86e87d4c'/>
+      <elf-symbol name='call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28aa6a67'/>
+      <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='0x4200b9db'/>
+      <elf-symbol name='cdev_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d860824'/>
+      <elf-symbol name='cdev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38fe403d'/>
+      <elf-symbol name='cdev_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0e06095'/>
+      <elf-symbol name='cdev_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd34132f'/>
+      <elf-symbol name='cdev_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d2640b7'/>
+      <elf-symbol name='cdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95732e02'/>
+      <elf-symbol name='cec_allocate_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x869c16d'/>
+      <elf-symbol name='cec_delete_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1b04ef1'/>
+      <elf-symbol name='cec_received_msg_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bb669dc'/>
+      <elf-symbol name='cec_register_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2204597'/>
+      <elf-symbol name='cec_s_log_addrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35bcf751'/>
+      <elf-symbol name='cec_s_phys_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2913067d'/>
+      <elf-symbol name='cec_s_phys_addr_from_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f4fedee'/>
+      <elf-symbol name='cec_transmit_attempt_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d580fe9'/>
+      <elf-symbol name='cec_transmit_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb65d0372'/>
+      <elf-symbol name='cec_unregister_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2b917ce'/>
+      <elf-symbol name='cfg80211_assoc_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46ddb563'/>
+      <elf-symbol name='cfg80211_auth_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd371053'/>
+      <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='0x5797a8ca'/>
+      <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='0x71dee4f8'/>
+      <elf-symbol name='cfg80211_connect_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa81557cc'/>
+      <elf-symbol name='cfg80211_cqm_pktloss_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3842116'/>
+      <elf-symbol name='cfg80211_cqm_rssi_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc8a5b10'/>
+      <elf-symbol name='cfg80211_del_sta_sinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x757741e8'/>
+      <elf-symbol name='cfg80211_disconnected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe47d7feb'/>
+      <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='0x5dd5902b'/>
+      <elf-symbol name='cfg80211_get_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e26b288'/>
+      <elf-symbol name='cfg80211_gtk_rekey_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9b7034d'/>
+      <elf-symbol name='cfg80211_ibss_joined' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b5a9f4c'/>
+      <elf-symbol name='cfg80211_inform_bss_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cb3ce08'/>
+      <elf-symbol name='cfg80211_inform_bss_frame_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf64ba49c'/>
+      <elf-symbol name='cfg80211_mgmt_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54861be'/>
+      <elf-symbol name='cfg80211_michael_mic_failure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x177d2ad0'/>
+      <elf-symbol name='cfg80211_new_sta' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9509368a'/>
+      <elf-symbol name='cfg80211_pmksa_candidate_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68fbe4bc'/>
+      <elf-symbol name='cfg80211_put_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a9b04b4'/>
+      <elf-symbol name='cfg80211_ready_on_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61aebcf9'/>
+      <elf-symbol name='cfg80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a815a08'/>
+      <elf-symbol name='cfg80211_roamed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd00bf18a'/>
+      <elf-symbol name='cfg80211_rx_assoc_resp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfde888'/>
+      <elf-symbol name='cfg80211_rx_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb18e7328'/>
+      <elf-symbol name='cfg80211_rx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a8906b'/>
+      <elf-symbol name='cfg80211_rx_unprot_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x596914ce'/>
+      <elf-symbol name='cfg80211_scan_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc48f2c2'/>
+      <elf-symbol name='cfg80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21c97742'/>
+      <elf-symbol name='cfg80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbae993fb'/>
+      <elf-symbol name='cfg80211_tdls_oper_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb66f720c'/>
+      <elf-symbol name='cfg80211_tx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebdf16ee'/>
+      <elf-symbol name='cfg80211_unlink_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad21f8d1'/>
+      <elf-symbol name='cfg80211_unregister_wdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58dc8b2c'/>
+      <elf-symbol name='cfg80211_vendor_cmd_reply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebaf2977'/>
+      <elf-symbol name='check_disk_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4423040'/>
+      <elf-symbol name='class_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e57da95'/>
+      <elf-symbol name='class_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1349ceec'/>
+      <elf-symbol name='class_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6685123'/>
+      <elf-symbol name='class_interface_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2072096c'/>
+      <elf-symbol name='class_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc92d1267'/>
+      <elf-symbol name='class_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x782dbf84'/>
+      <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='0x1a0be5c7'/>
+      <elf-symbol name='clear_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75d5a355'/>
+      <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='0xf7edcae8'/>
+      <elf-symbol name='clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x870dc488'/>
+      <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='0x53ca857e'/>
+      <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='0xfd732285'/>
+      <elf-symbol name='clk_hw_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42319087'/>
+      <elf-symbol name='clk_hw_get_num_parents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90466799'/>
+      <elf-symbol name='clk_hw_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e2159ff'/>
+      <elf-symbol name='clk_hw_get_parent_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15107854'/>
+      <elf-symbol name='clk_hw_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5330ad8'/>
+      <elf-symbol name='clk_hw_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3d7b163'/>
+      <elf-symbol name='clk_hw_is_prepared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfebbc3b7'/>
+      <elf-symbol name='clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6404a3cb'/>
+      <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='0xc755566a'/>
+      <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='0xe6000be9'/>
+      <elf-symbol name='clk_hw_set_rate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7216b0'/>
+      <elf-symbol name='clk_hw_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf578d2f9'/>
+      <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='0xb61ef017'/>
+      <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='0x757742a7'/>
+      <elf-symbol name='clk_register_fixed_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc61d204d'/>
+      <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='0x4423e6a'/>
+      <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='0x93afff16'/>
+      <elf-symbol name='cma_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8da4ae0f'/>
+      <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='0x984448e1'/>
+      <elf-symbol name='cmd_db_read_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e39398'/>
+      <elf-symbol name='cmd_db_read_aux_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0b2419f'/>
+      <elf-symbol name='cmd_db_read_slave_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x450d9a35'/>
+      <elf-symbol name='cmd_db_ready' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5203d176'/>
+      <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='0x8fdcc053'/>
+      <elf-symbol name='component_bind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9dbcd845'/>
+      <elf-symbol name='component_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab118ce8'/>
+      <elf-symbol name='component_master_add_with_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1d69910'/>
+      <elf-symbol name='component_master_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bf9970'/>
+      <elf-symbol name='component_match_add_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1286441f'/>
+      <elf-symbol name='component_unbind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7956e008'/>
+      <elf-symbol name='config_ep_by_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57de5062'/>
+      <elf-symbol name='config_group_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ac2011b'/>
+      <elf-symbol name='config_group_init_type_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17598e64'/>
+      <elf-symbol name='config_item_init_type_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd65873b6'/>
+      <elf-symbol name='config_item_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x353c7105'/>
+      <elf-symbol name='configfs_register_subsystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f1395e8'/>
+      <elf-symbol name='configfs_unregister_subsystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19a18984'/>
+      <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='0xdfe8c968'/>
+      <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='0xf6554f82'/>
+      <elf-symbol name='cont_write_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d6bdf3a'/>
+      <elf-symbol name='copy_fs_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9ac667'/>
+      <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='0x19ef20de'/>
+      <elf-symbol name='cpu_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cb1ae69'/>
+      <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_cpu_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e6c7474'/>
+      <elf-symbol name='cpufreq_cpu_get_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x921f862f'/>
+      <elf-symbol name='cpufreq_cpu_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bd42d0'/>
+      <elf-symbol name='cpufreq_driver_resolve_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fddcfca'/>
+      <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='0x53a3d0ef'/>
+      <elf-symbol name='cpufreq_freq_transition_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dc1677'/>
+      <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='0xe6c640f8'/>
+      <elf-symbol name='cpufreq_get_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72319bc9'/>
+      <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='0x94d8bac0'/>
+      <elf-symbol name='cpufreq_register_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3622f0c4'/>
+      <elf-symbol name='cpufreq_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d9e877'/>
+      <elf-symbol name='cpufreq_table_index_unsorted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1191b55'/>
+      <elf-symbol name='cpufreq_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eee40e9'/>
+      <elf-symbol name='cpufreq_unregister_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ae69d96'/>
+      <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='0x80529b6d'/>
+      <elf-symbol name='crypto_aead_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39d99812'/>
+      <elf-symbol name='crypto_aead_setauthsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6682378b'/>
+      <elf-symbol name='crypto_aead_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2d626a6'/>
+      <elf-symbol name='crypto_alloc_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1150048a'/>
+      <elf-symbol name='crypto_alloc_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73bbfc18'/>
+      <elf-symbol name='crypto_alloc_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecfa7e63'/>
+      <elf-symbol name='crypto_alloc_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5be53388'/>
+      <elf-symbol name='crypto_dequeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb787508'/>
+      <elf-symbol name='crypto_destroy_tfm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9a72ef5'/>
+      <elf-symbol name='crypto_engine_alloc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b29f120'/>
+      <elf-symbol name='crypto_engine_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b66b668'/>
+      <elf-symbol name='crypto_engine_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0f6aa6a'/>
+      <elf-symbol name='crypto_enqueue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0cb9603'/>
+      <elf-symbol name='crypto_finalize_ablkcipher_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x997e9484'/>
+      <elf-symbol name='crypto_has_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x951a2773'/>
+      <elf-symbol name='crypto_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x499043d3'/>
+      <elf-symbol name='crypto_register_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a678e1e'/>
+      <elf-symbol name='crypto_register_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebe53e9b'/>
+      <elf-symbol name='crypto_register_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb73521e2'/>
+      <elf-symbol name='crypto_register_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73ff000e'/>
+      <elf-symbol name='crypto_register_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78f8d531'/>
+      <elf-symbol name='crypto_register_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd854bcb'/>
+      <elf-symbol name='crypto_register_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78446dd3'/>
+      <elf-symbol name='crypto_shash_digest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96c7d3e7'/>
+      <elf-symbol name='crypto_shash_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf68e105c'/>
+      <elf-symbol name='crypto_shash_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2eb2eb74'/>
+      <elf-symbol name='crypto_shash_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e7f58a'/>
+      <elf-symbol name='crypto_skcipher_decrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61a71545'/>
+      <elf-symbol name='crypto_skcipher_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82bbd3f3'/>
+      <elf-symbol name='crypto_transfer_ablkcipher_request_to_engine' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d814c62'/>
+      <elf-symbol name='crypto_unregister_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d54b33'/>
+      <elf-symbol name='crypto_unregister_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81fa9d54'/>
+      <elf-symbol name='crypto_unregister_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8df01c3a'/>
+      <elf-symbol name='crypto_unregister_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb42960d5'/>
+      <elf-symbol name='crypto_unregister_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3248e133'/>
+      <elf-symbol name='crypto_unregister_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95da9719'/>
+      <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='0x554e5fdb'/>
+      <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='0x7c501bfd'/>
+      <elf-symbol name='d_add_ci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95366f98'/>
+      <elf-symbol name='d_alloc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e0a112f'/>
+      <elf-symbol name='d_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9416a6'/>
+      <elf-symbol name='d_drop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb441ceca'/>
+      <elf-symbol name='d_find_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf93b0f1'/>
+      <elf-symbol name='d_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ff79d0d'/>
+      <elf-symbol name='d_invalidate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b4fee91'/>
+      <elf-symbol name='d_make_root' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad177577'/>
+      <elf-symbol name='d_move' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70005d06'/>
+      <elf-symbol name='d_obtain_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2522063'/>
+      <elf-symbol name='d_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde93fedd'/>
+      <elf-symbol name='d_rehash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bbf05df'/>
+      <elf-symbol name='d_set_d_op' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1da2058e'/>
+      <elf-symbol name='d_splice_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74e98e54'/>
+      <elf-symbol name='dapm_pinctrl_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52525a48'/>
+      <elf-symbol name='dapm_regulator_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17ff485e'/>
+      <elf-symbol name='datagram_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d85959a'/>
+      <elf-symbol name='deactivate_locked_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x115b74f5'/>
+      <elf-symbol name='debugfs_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8e23426'/>
+      <elf-symbol name='debugfs_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b9ff512'/>
+      <elf-symbol name='debugfs_create_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x353ad9ec'/>
+      <elf-symbol name='debugfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x140fda34'/>
+      <elf-symbol name='debugfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c513a6d'/>
+      <elf-symbol name='debugfs_create_file_unsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e34cd76'/>
+      <elf-symbol name='debugfs_create_regset32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25d7fc0'/>
+      <elf-symbol name='debugfs_create_size_t' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0ad32ba'/>
+      <elf-symbol name='debugfs_create_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d40eb08'/>
+      <elf-symbol name='debugfs_create_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee9d159'/>
+      <elf-symbol name='debugfs_create_x32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9217e3dc'/>
+      <elf-symbol name='debugfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x627861f1'/>
+      <elf-symbol name='debugfs_remove_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594d594b'/>
+      <elf-symbol name='dec_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97c9bcfc'/>
+      <elf-symbol name='default_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafa1429e'/>
+      <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='0xdf3c9cab'/>
+      <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='0xc7b6d3bb'/>
+      <elf-symbol name='dequeue_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f2ed289'/>
+      <elf-symbol name='desc_to_gpio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b9c2bb'/>
+      <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='0x6be2dcf'/>
+      <elf-symbol name='dev_alloc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89362915'/>
+      <elf-symbol name='dev_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72c67580'/>
+      <elf-symbol name='dev_driver_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde7a06a3'/>
+      <elf-symbol name='dev_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75f83fd8'/>
+      <elf-symbol name='dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a17101'/>
+      <elf-symbol name='dev_get_by_index_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a9d2db'/>
+      <elf-symbol name='dev_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcce64078'/>
+      <elf-symbol name='dev_get_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4582274c'/>
+      <elf-symbol name='dev_get_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x104b6b8c'/>
+      <elf-symbol name='dev_mc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11d572b1'/>
+      <elf-symbol name='dev_mc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18987bba'/>
+      <elf-symbol name='dev_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b2743c8'/>
+      <elf-symbol name='dev_pm_clear_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82f99eb5'/>
+      <elf-symbol name='dev_pm_domain_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11cbd03c'/>
+      <elf-symbol name='dev_pm_domain_attach_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd63d1c2'/>
+      <elf-symbol name='dev_pm_domain_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52289705'/>
+      <elf-symbol name='dev_pm_genpd_set_performance_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa907a5'/>
+      <elf-symbol name='dev_pm_opp_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89a917ae'/>
+      <elf-symbol name='dev_pm_opp_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc32b3bd0'/>
+      <elf-symbol name='dev_pm_opp_find_freq_ceil' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88c8cae'/>
+      <elf-symbol name='dev_pm_opp_find_freq_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf44f064'/>
+      <elf-symbol name='dev_pm_opp_find_freq_floor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2350e058'/>
+      <elf-symbol name='dev_pm_opp_free_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ffef8ac'/>
+      <elf-symbol name='dev_pm_opp_get_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b6445bd'/>
+      <elf-symbol name='dev_pm_opp_get_level' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x444b9521'/>
+      <elf-symbol name='dev_pm_opp_get_max_transition_latency' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3e69cdd'/>
+      <elf-symbol name='dev_pm_opp_get_opp_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa26eaabc'/>
+      <elf-symbol name='dev_pm_opp_get_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bb36912'/>
+      <elf-symbol name='dev_pm_opp_get_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6fbb28b'/>
+      <elf-symbol name='dev_pm_opp_get_suspend_opp_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x162db5d8'/>
+      <elf-symbol name='dev_pm_opp_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2381dd04'/>
+      <elf-symbol name='dev_pm_opp_init_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd96d54'/>
+      <elf-symbol name='dev_pm_opp_of_add_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x311deb31'/>
+      <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='0x944061f0'/>
+      <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='0x840b87f6'/>
+      <elf-symbol name='dev_pm_opp_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9bde5cf'/>
+      <elf-symbol name='dev_pm_opp_put_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5d9ecb'/>
+      <elf-symbol name='dev_pm_opp_put_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf289f4'/>
+      <elf-symbol name='dev_pm_opp_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44be9c3f'/>
+      <elf-symbol name='dev_pm_opp_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x902f139a'/>
+      <elf-symbol name='dev_pm_opp_set_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae2e0952'/>
+      <elf-symbol name='dev_pm_opp_set_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf44eec1'/>
+      <elf-symbol name='dev_pm_opp_set_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ea20c3d'/>
+      <elf-symbol name='dev_pm_opp_set_supported_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee5d613d'/>
+      <elf-symbol name='dev_pm_opp_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x201aa95a'/>
+      <elf-symbol name='dev_pm_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9737f618'/>
+      <elf-symbol name='dev_pm_qos_expose_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ba02143'/>
+      <elf-symbol name='dev_pm_qos_hide_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x659f4f5d'/>
+      <elf-symbol name='dev_pm_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x637d5842'/>
+      <elf-symbol name='dev_pm_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6b16862'/>
+      <elf-symbol name='dev_pm_qos_update_user_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f62682c'/>
+      <elf-symbol name='dev_pm_set_dedicated_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49159a55'/>
+      <elf-symbol name='dev_pm_set_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa652a12'/>
+      <elf-symbol name='dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bd31c5a'/>
+      <elf-symbol name='dev_queue_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x165ca19f'/>
+      <elf-symbol name='dev_remove_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4eb8b92'/>
+      <elf-symbol name='dev_set_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e4b7124'/>
+      <elf-symbol name='dev_set_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52025f29'/>
+      <elf-symbol name='dev_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd31e2fd'/>
+      <elf-symbol name='dev_uc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdf8009d'/>
+      <elf-symbol name='dev_uc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b0608a8'/>
+      <elf-symbol name='devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e4d337a'/>
+      <elf-symbol name='devfreq_add_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce4f2e67'/>
+      <elf-symbol name='devfreq_cooling_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8610b5cd'/>
+      <elf-symbol name='devfreq_recommended_opp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x980ad195'/>
+      <elf-symbol name='devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeefa1199'/>
+      <elf-symbol name='devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccf446de'/>
+      <elf-symbol name='devfreq_remove_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f787c'/>
+      <elf-symbol name='devfreq_resume_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x175193a6'/>
+      <elf-symbol name='devfreq_suspend_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x486d3e73'/>
+      <elf-symbol name='devfreq_unregister_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x395e9183'/>
+      <elf-symbol name='devfreq_update_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa50ffd8c'/>
+      <elf-symbol name='device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e9ff6a1'/>
+      <elf-symbol name='device_add_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5372d6a9'/>
+      <elf-symbol name='device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1468ada0'/>
+      <elf-symbol name='device_bind_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d69c5fc'/>
+      <elf-symbol name='device_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa738f01'/>
+      <elf-symbol name='device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17ae698b'/>
+      <elf-symbol name='device_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce4c1bd4'/>
+      <elf-symbol name='device_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81f45159'/>
+      <elf-symbol name='device_create_with_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee4ee343'/>
+      <elf-symbol name='device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3248d501'/>
+      <elf-symbol name='device_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586b5d05'/>
+      <elf-symbol name='device_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c41adc'/>
+      <elf-symbol name='device_for_each_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f9a7792'/>
+      <elf-symbol name='device_get_child_node_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35786c12'/>
+      <elf-symbol name='device_get_dma_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x143f3b27'/>
+      <elf-symbol name='device_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d5d00f8'/>
+      <elf-symbol name='device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bb5a8b'/>
+      <elf-symbol name='device_get_named_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc729ddc'/>
+      <elf-symbol name='device_get_next_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7da8b08d'/>
+      <elf-symbol name='device_init_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x896060b3'/>
+      <elf-symbol name='device_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6f06b33'/>
+      <elf-symbol name='device_link_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3df9a5bc'/>
+      <elf-symbol name='device_link_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeef94a5d'/>
+      <elf-symbol name='device_match_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x290728b6'/>
+      <elf-symbol name='device_match_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c0c4c71'/>
+      <elf-symbol name='device_pm_wait_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e117db2'/>
+      <elf-symbol name='device_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa57e6c66'/>
+      <elf-symbol name='device_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c6a4fc6'/>
+      <elf-symbol name='device_property_read_string_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4929e69'/>
+      <elf-symbol name='device_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc989be31'/>
+      <elf-symbol name='device_property_read_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb70811d'/>
+      <elf-symbol name='device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ea57e3a'/>
+      <elf-symbol name='device_release_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e0e1109'/>
+      <elf-symbol name='device_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49c6d830'/>
+      <elf-symbol name='device_remove_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8e80b8f'/>
+      <elf-symbol name='device_remove_file_self' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce01107b'/>
+      <elf-symbol name='device_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a5fe4e'/>
+      <elf-symbol name='device_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a14f318'/>
+      <elf-symbol name='device_set_wakeup_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a690c24'/>
+      <elf-symbol name='device_set_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb826469'/>
+      <elf-symbol name='device_show_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbda23b00'/>
+      <elf-symbol name='device_show_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22162e0'/>
+      <elf-symbol name='device_store_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a99154d'/>
+      <elf-symbol name='device_store_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21325810'/>
+      <elf-symbol name='device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbec7c9c4'/>
+      <elf-symbol name='device_wakeup_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90dd1261'/>
+      <elf-symbol name='device_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eaca6d7'/>
+      <elf-symbol name='devm_add_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d5923fc'/>
+      <elf-symbol name='devm_backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x901cff68'/>
+      <elf-symbol name='devm_clk_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x420eec2'/>
+      <elf-symbol name='devm_clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca249e92'/>
+      <elf-symbol name='devm_clk_bulk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d5bec91'/>
+      <elf-symbol name='devm_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b759e9a'/>
+      <elf-symbol name='devm_clk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf5edc7b'/>
+      <elf-symbol name='devm_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f1ee380'/>
+      <elf-symbol name='devm_clk_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaaee4b0'/>
+      <elf-symbol name='devm_clk_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x371c019'/>
+      <elf-symbol name='devm_devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7262fa56'/>
+      <elf-symbol name='devm_devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x550688ee'/>
+      <elf-symbol name='devm_devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10d5875f'/>
+      <elf-symbol name='devm_extcon_dev_allocate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72fb181f'/>
+      <elf-symbol name='devm_extcon_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x418bf72c'/>
+      <elf-symbol name='devm_extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabf57f56'/>
+      <elf-symbol name='devm_extcon_register_notifier_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec9acb38'/>
+      <elf-symbol name='devm_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1f8b570'/>
+      <elf-symbol name='devm_fwnode_get_index_gpiod_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x989d8a0a'/>
+      <elf-symbol name='devm_get_clk_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45c80acb'/>
+      <elf-symbol name='devm_gpio_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x854073bd'/>
+      <elf-symbol name='devm_gpio_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf15ff6d5'/>
+      <elf-symbol name='devm_gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb1b6c0a'/>
+      <elf-symbol name='devm_gpiochip_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8148123d'/>
+      <elf-symbol name='devm_gpiod_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e51cae'/>
+      <elf-symbol name='devm_gpiod_get_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e54099'/>
+      <elf-symbol name='devm_gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce83111c'/>
+      <elf-symbol name='devm_hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c708483'/>
+      <elf-symbol name='devm_iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fbbff02'/>
+      <elf-symbol name='devm_iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6858de7e'/>
+      <elf-symbol name='devm_input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15d2665b'/>
+      <elf-symbol name='devm_ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33aa9f38'/>
+      <elf-symbol name='devm_ioremap_nocache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35dc6f31'/>
+      <elf-symbol name='devm_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3794e15'/>
+      <elf-symbol name='devm_ioremap_wc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50bf9cd5'/>
+      <elf-symbol name='devm_iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3c2e7f3'/>
+      <elf-symbol name='devm_kasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c4e4c6d'/>
+      <elf-symbol name='devm_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d3f6067'/>
+      <elf-symbol name='devm_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14540ab5'/>
+      <elf-symbol name='devm_kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2405d0b5'/>
+      <elf-symbol name='devm_kstrdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe022f2cd'/>
+      <elf-symbol name='devm_kvasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x189545dc'/>
+      <elf-symbol name='devm_led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4814ff9d'/>
+      <elf-symbol name='devm_led_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbee9d7c9'/>
+      <elf-symbol name='devm_mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23b8960c'/>
+      <elf-symbol name='devm_memremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa17e0ec9'/>
+      <elf-symbol name='devm_mfd_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5851f0c'/>
+      <elf-symbol name='devm_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec29344f'/>
+      <elf-symbol name='devm_nvmem_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd62acbe'/>
+      <elf-symbol name='devm_nvmem_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75442800'/>
+      <elf-symbol name='devm_of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7188edb1'/>
+      <elf-symbol name='devm_of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e455a98'/>
+      <elf-symbol name='devm_of_pci_get_host_bridge_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3ac2c05'/>
+      <elf-symbol name='devm_of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fc0f227'/>
+      <elf-symbol name='devm_of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe67c8fe'/>
+      <elf-symbol name='devm_pci_alloc_host_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1de1c0c4'/>
+      <elf-symbol name='devm_phy_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4251a616'/>
+      <elf-symbol name='devm_phy_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a50185'/>
+      <elf-symbol name='devm_pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60dfc9f6'/>
+      <elf-symbol name='devm_pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2871976'/>
+      <elf-symbol name='devm_pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c13f03b'/>
+      <elf-symbol name='devm_platform_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c30c13f'/>
+      <elf-symbol name='devm_power_supply_get_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5882b7ec'/>
+      <elf-symbol name='devm_power_supply_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0686d95'/>
+      <elf-symbol name='devm_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb364bb3d'/>
+      <elf-symbol name='devm_pwm_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54da584f'/>
+      <elf-symbol name='devm_regmap_add_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe052ca65'/>
+      <elf-symbol name='devm_regmap_del_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbda17a5b'/>
+      <elf-symbol name='devm_regmap_field_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf313f5c6'/>
+      <elf-symbol name='devm_regulator_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb99e58'/>
+      <elf-symbol name='devm_regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xead25249'/>
+      <elf-symbol name='devm_regulator_get_exclusive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa301e72e'/>
+      <elf-symbol name='devm_regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22126a20'/>
+      <elf-symbol name='devm_regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa86ba790'/>
+      <elf-symbol name='devm_regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x488d091'/>
+      <elf-symbol name='devm_regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9360c65'/>
+      <elf-symbol name='devm_request_any_context_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9089c0'/>
+      <elf-symbol name='devm_request_pci_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf465753b'/>
+      <elf-symbol name='devm_request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cb627fe'/>
+      <elf-symbol name='devm_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10879cb3'/>
+      <elf-symbol name='devm_reset_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc13bea96'/>
+      <elf-symbol name='devm_rtc_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5661138b'/>
+      <elf-symbol name='devm_rtc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf5a3dac'/>
+      <elf-symbol name='devm_snd_dmaengine_pcm_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40cb08e'/>
+      <elf-symbol name='devm_snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0b2a22'/>
+      <elf-symbol name='devm_snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5b8c2c6'/>
+      <elf-symbol name='devm_spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bcc625e'/>
+      <elf-symbol name='devm_thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3df8af'/>
+      <elf-symbol name='devm_thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc5b2026'/>
+      <elf-symbol name='devm_usb_get_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a9883f3'/>
+      <elf-symbol name='devm_usb_get_phy_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ba7bd90'/>
+      <elf-symbol name='devm_watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17fa1e64'/>
+      <elf-symbol name='devres_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbc4ffe8'/>
+      <elf-symbol name='devres_alloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54f270d6'/>
+      <elf-symbol name='devres_close_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4481077'/>
+      <elf-symbol name='devres_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe8dd813'/>
+      <elf-symbol name='devres_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe93e49c3'/>
+      <elf-symbol name='devres_open_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb91d2eba'/>
+      <elf-symbol name='devres_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81506333'/>
+      <elf-symbol name='devres_release_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb83fafbe'/>
+      <elf-symbol name='dget_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc538fb7'/>
+      <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='0x8786dc3b'/>
+      <elf-symbol name='dma_async_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaba4c021'/>
+      <elf-symbol name='dma_async_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e1625e8'/>
+      <elf-symbol name='dma_async_tx_descriptor_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d72c066'/>
+      <elf-symbol name='dma_buf_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbf35779'/>
+      <elf-symbol name='dma_buf_begin_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9c51c19'/>
+      <elf-symbol name='dma_buf_begin_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b3e4b33'/>
+      <elf-symbol name='dma_buf_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb5c9bf7'/>
+      <elf-symbol name='dma_buf_end_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb2b5a9c'/>
+      <elf-symbol name='dma_buf_end_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7772eaac'/>
+      <elf-symbol name='dma_buf_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa37195d1'/>
+      <elf-symbol name='dma_buf_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30aff1b5'/>
+      <elf-symbol name='dma_buf_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff2c968f'/>
+      <elf-symbol name='dma_buf_get_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3db44b3d'/>
+      <elf-symbol name='dma_buf_get_uuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb15b3c99'/>
+      <elf-symbol name='dma_buf_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x561e9aa2'/>
+      <elf-symbol name='dma_buf_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62b4bbb5'/>
+      <elf-symbol name='dma_buf_map_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa359a7a0'/>
+      <elf-symbol name='dma_buf_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f9d0886'/>
+      <elf-symbol name='dma_buf_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb76fb6ec'/>
+      <elf-symbol name='dma_buf_unmap_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87d6d74a'/>
+      <elf-symbol name='dma_buf_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fe3015e'/>
+      <elf-symbol name='dma_buf_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0c8055b'/>
+      <elf-symbol name='dma_direct_map_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbc77a81'/>
+      <elf-symbol name='dma_direct_map_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa26971c1'/>
+      <elf-symbol name='dma_direct_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5e8549a'/>
+      <elf-symbol name='dma_direct_sync_sg_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccd7c33a'/>
+      <elf-symbol name='dma_direct_sync_sg_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2851d8ef'/>
+      <elf-symbol name='dma_direct_sync_single_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5136aa4c'/>
+      <elf-symbol name='dma_direct_sync_single_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb35d0b2'/>
+      <elf-symbol name='dma_direct_unmap_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf111d9c'/>
+      <elf-symbol name='dma_direct_unmap_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a429766'/>
+      <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='0x45c0a661'/>
+      <elf-symbol name='dma_get_merge_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf67de1fb'/>
+      <elf-symbol name='dma_get_sgtable_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x925b16d3'/>
+      <elf-symbol name='dma_get_slave_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a41e223'/>
+      <elf-symbol name='dma_get_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3866a4f5'/>
+      <elf-symbol name='dma_max_mapping_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a91b4a0'/>
+      <elf-symbol name='dma_mmap_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75d1d88b'/>
+      <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='0x5a6540c4'/>
+      <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='0xa67e3bd6'/>
+      <elf-symbol name='dma_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18d10eed'/>
+      <elf-symbol name='dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e3d45b4'/>
+      <elf-symbol name='dma_resv_add_excl_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39c2e86d'/>
+      <elf-symbol name='dma_resv_add_shared_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd3e38d3'/>
+      <elf-symbol name='dma_resv_copy_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e5223c'/>
+      <elf-symbol name='dma_resv_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9dc49644'/>
+      <elf-symbol name='dma_resv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa382beaa'/>
+      <elf-symbol name='dma_resv_reserve_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe234fae7'/>
+      <elf-symbol name='dma_resv_test_signaled_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e72cb3b'/>
+      <elf-symbol name='dma_resv_wait_timeout_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70111398'/>
+      <elf-symbol name='dma_set_coherent_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca51fa2b'/>
+      <elf-symbol name='dma_set_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64abb475'/>
+      <elf-symbol name='dmaengine_unmap_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ac97699'/>
+      <elf-symbol name='dmam_alloc_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef542ba5'/>
+      <elf-symbol name='dmam_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf30067e8'/>
+      <elf-symbol name='dmam_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7defa845'/>
+      <elf-symbol name='do_SAK' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72cc019e'/>
+      <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_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='0x4fc782e7'/>
+      <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='0x544bd382'/>
+      <elf-symbol name='driver_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a119627'/>
+      <elf-symbol name='driver_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x741582f5'/>
+      <elf-symbol name='driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbaa75ff'/>
+      <elf-symbol name='driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcc05e1b'/>
+      <elf-symbol name='drm_add_edid_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ad77808'/>
+      <elf-symbol name='drm_add_modes_noedid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2215d4b7'/>
+      <elf-symbol name='drm_atomic_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a6b78e0'/>
+      <elf-symbol name='drm_atomic_get_connector_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cb632c9'/>
+      <elf-symbol name='drm_atomic_get_crtc_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae319c36'/>
+      <elf-symbol name='drm_atomic_get_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x134570eb'/>
+      <elf-symbol name='drm_atomic_get_private_obj_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfadac2e5'/>
+      <elf-symbol name='drm_atomic_helper_async_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e9dcce'/>
+      <elf-symbol name='drm_atomic_helper_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8a32a89'/>
+      <elf-symbol name='drm_atomic_helper_check_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68b4db44'/>
+      <elf-symbol name='drm_atomic_helper_cleanup_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20e2d5f7'/>
+      <elf-symbol name='drm_atomic_helper_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd2dc8dc'/>
+      <elf-symbol name='drm_atomic_helper_commit_cleanup_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeba31488'/>
+      <elf-symbol name='drm_atomic_helper_commit_duplicated_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2de0748'/>
+      <elf-symbol name='drm_atomic_helper_commit_hw_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3f484c1'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_disables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb05c617'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_enables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x977af721'/>
+      <elf-symbol name='drm_atomic_helper_commit_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d2a45ac'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46c768e'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail_rpm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec01c62c'/>
+      <elf-symbol name='drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0086829'/>
+      <elf-symbol name='drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe871707f'/>
+      <elf-symbol name='drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3833990'/>
+      <elf-symbol name='drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44a64fde'/>
+      <elf-symbol name='drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5295ce8'/>
+      <elf-symbol name='drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52f8d3ca'/>
+      <elf-symbol name='drm_atomic_helper_dirtyfb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70cb0580'/>
+      <elf-symbol name='drm_atomic_helper_disable_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x306f2e1f'/>
+      <elf-symbol name='drm_atomic_helper_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b3f5acf'/>
+      <elf-symbol name='drm_atomic_helper_page_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2de4e29f'/>
+      <elf-symbol name='drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd50b248f'/>
+      <elf-symbol name='drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba4887ba'/>
+      <elf-symbol name='drm_atomic_helper_plane_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92c6d48a'/>
+      <elf-symbol name='drm_atomic_helper_prepare_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2922ee9a'/>
+      <elf-symbol name='drm_atomic_helper_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82987c33'/>
+      <elf-symbol name='drm_atomic_helper_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27208a07'/>
+      <elf-symbol name='drm_atomic_helper_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d65c89'/>
+      <elf-symbol name='drm_atomic_helper_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x846dc8dd'/>
+      <elf-symbol name='drm_atomic_helper_swap_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x238f1c7c'/>
+      <elf-symbol name='drm_atomic_helper_update_legacy_modeset_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf9204d2'/>
+      <elf-symbol name='drm_atomic_helper_update_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81670477'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_dependencies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab87389f'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebdb952a'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_vblanks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x234f7e96'/>
+      <elf-symbol name='drm_atomic_private_obj_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa49a27b'/>
+      <elf-symbol name='drm_atomic_private_obj_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe61ee357'/>
+      <elf-symbol name='drm_atomic_set_crtc_for_connector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c70cf71'/>
+      <elf-symbol name='drm_atomic_set_fence_for_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7fb8999'/>
+      <elf-symbol name='drm_atomic_set_mode_for_crtc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb6420b4'/>
+      <elf-symbol name='drm_atomic_state_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4310fe2c'/>
+      <elf-symbol name='drm_atomic_state_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9bf958'/>
+      <elf-symbol name='drm_atomic_state_default_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70f369fa'/>
+      <elf-symbol name='drm_atomic_state_default_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fb05e76'/>
+      <elf-symbol name='drm_atomic_state_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe351a002'/>
+      <elf-symbol name='drm_bridge_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdfe5b78'/>
+      <elf-symbol name='drm_bridge_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdd14488'/>
+      <elf-symbol name='drm_bridge_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcec67004'/>
+      <elf-symbol name='drm_bridge_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3045e6f'/>
+      <elf-symbol name='drm_bridge_mode_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54ff84f1'/>
+      <elf-symbol name='drm_bridge_post_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x457cd6d'/>
+      <elf-symbol name='drm_bridge_pre_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e1d7be6'/>
+      <elf-symbol name='drm_bridge_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe31bafc2'/>
+      <elf-symbol name='drm_calc_vbltimestamp_from_scanoutpos' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30530a6b'/>
+      <elf-symbol name='drm_class_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5fe0350'/>
+      <elf-symbol name='drm_class_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d620734'/>
+      <elf-symbol name='drm_clflush_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x398c929b'/>
+      <elf-symbol name='drm_client_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x471bb3b4'/>
+      <elf-symbol name='drm_client_modeset_commit_force' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a6febbe'/>
+      <elf-symbol name='drm_client_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeff78be'/>
+      <elf-symbol name='drm_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x881b1a40'/>
+      <elf-symbol name='drm_connector_attach_content_protection_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e4c0b5'/>
+      <elf-symbol name='drm_connector_attach_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fc35cce'/>
+      <elf-symbol name='drm_connector_attach_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf537ad7'/>
+      <elf-symbol name='drm_connector_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fbc905'/>
+      <elf-symbol name='drm_connector_has_possible_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55f6e862'/>
+      <elf-symbol name='drm_connector_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d35328d'/>
+      <elf-symbol name='drm_connector_list_iter_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f94709f'/>
+      <elf-symbol name='drm_connector_list_iter_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7050c5df'/>
+      <elf-symbol name='drm_connector_list_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0c65d21'/>
+      <elf-symbol name='drm_connector_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce264012'/>
+      <elf-symbol name='drm_connector_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50363f17'/>
+      <elf-symbol name='drm_connector_update_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8acb9416'/>
+      <elf-symbol name='drm_crtc_arm_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70a1634'/>
+      <elf-symbol name='drm_crtc_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93cf5a33'/>
+      <elf-symbol name='drm_crtc_handle_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68767049'/>
+      <elf-symbol name='drm_crtc_init_with_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae09cc61'/>
+      <elf-symbol name='drm_crtc_send_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb786f68e'/>
+      <elf-symbol name='drm_crtc_set_max_vblank_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e35bedf'/>
+      <elf-symbol name='drm_crtc_vblank_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x478f79ad'/>
+      <elf-symbol name='drm_crtc_vblank_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce6f4832'/>
+      <elf-symbol name='drm_crtc_vblank_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf66a293'/>
+      <elf-symbol name='drm_crtc_vblank_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45d45559'/>
+      <elf-symbol name='drm_crtc_vblank_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2122fa90'/>
+      <elf-symbol name='drm_crtc_wait_one_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bd78dff'/>
+      <elf-symbol name='drm_cvt_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ee0358f'/>
+      <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='0x9039edf1'/>
+      <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='0xa1fb690c'/>
+      <elf-symbol name='drm_dev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13feb29b'/>
+      <elf-symbol name='drm_dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf02f39cd'/>
+      <elf-symbol name='drm_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3351edd3'/>
+      <elf-symbol name='drm_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51200591'/>
+      <elf-symbol name='drm_dev_set_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5787d960'/>
+      <elf-symbol name='drm_dev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa30ff1dd'/>
+      <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='0x5684e93'/>
+      <elf-symbol name='drm_dp_atomic_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84eb93f9'/>
+      <elf-symbol name='drm_dp_atomic_release_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fbf4402'/>
+      <elf-symbol name='drm_dp_aux_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7b91e88'/>
+      <elf-symbol name='drm_dp_aux_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x682fa523'/>
+      <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='0x3ca53a22'/>
+      <elf-symbol name='drm_dp_dpcd_read_link_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x359d3042'/>
+      <elf-symbol name='drm_dp_dpcd_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9603d67f'/>
+      <elf-symbol name='drm_dp_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e5652b8'/>
+      <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='0x296b5594'/>
+      <elf-symbol name='drm_dp_link_power_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d09238c'/>
+      <elf-symbol name='drm_dp_link_power_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad81857c'/>
+      <elf-symbol name='drm_dp_link_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc91965f9'/>
+      <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='0x9e07d489'/>
+      <elf-symbol name='drm_dp_mst_deallocate_vcpi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84fe9a88'/>
+      <elf-symbol name='drm_dp_mst_detect_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd61e83f6'/>
+      <elf-symbol name='drm_dp_mst_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb069376f'/>
+      <elf-symbol name='drm_dp_mst_hpd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x598dab6'/>
+      <elf-symbol name='drm_dp_mst_reset_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x682a21b0'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadf948a7'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a83f60a'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_set_mst' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x800d182a'/>
+      <elf-symbol name='drm_dp_send_power_updown_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31031c7e'/>
+      <elf-symbol name='drm_dp_update_payload_part1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79c58021'/>
+      <elf-symbol name='drm_dp_update_payload_part2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bade99f'/>
+      <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='0x116464aa'/>
+      <elf-symbol name='drm_encoder_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7be39f7b'/>
+      <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='0x42ca7d9'/>
+      <elf-symbol name='drm_fb_cma_get_gem_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8f89747'/>
+      <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='0x994e79e4'/>
+      <elf-symbol name='drm_framebuffer_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1e2daa4'/>
+      <elf-symbol name='drm_framebuffer_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87efc8cb'/>
+      <elf-symbol name='drm_framebuffer_unregister_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7d0e4e7'/>
+      <elf-symbol name='drm_gem_cma_dumb_create_internal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba0e34fc'/>
+      <elf-symbol name='drm_gem_cma_free_object' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3424542'/>
+      <elf-symbol name='drm_gem_cma_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39746a72'/>
+      <elf-symbol name='drm_gem_cma_prime_get_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab0c4113'/>
+      <elf-symbol name='drm_gem_cma_prime_import_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fcf2616'/>
+      <elf-symbol name='drm_gem_cma_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb65aa0'/>
+      <elf-symbol name='drm_gem_cma_prime_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe035e3ae'/>
+      <elf-symbol name='drm_gem_cma_prime_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4078156'/>
+      <elf-symbol name='drm_gem_create_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43e67686'/>
+      <elf-symbol name='drm_gem_fb_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25324764'/>
+      <elf-symbol name='drm_gem_fb_create_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d382b1a'/>
+      <elf-symbol name='drm_gem_fb_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1cadf75'/>
+      <elf-symbol name='drm_gem_fb_get_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17f4ab75'/>
+      <elf-symbol name='drm_gem_fb_prepare_fb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d6af927'/>
+      <elf-symbol name='drm_gem_free_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc575c555'/>
+      <elf-symbol name='drm_gem_get_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa813494d'/>
+      <elf-symbol name='drm_gem_handle_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3d14ff2'/>
+      <elf-symbol name='drm_gem_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94109'/>
+      <elf-symbol name='drm_gem_mmap_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32f1bf91'/>
+      <elf-symbol name='drm_gem_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52a2d3a2'/>
+      <elf-symbol name='drm_gem_object_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2719d78'/>
+      <elf-symbol name='drm_gem_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86ab61de'/>
+      <elf-symbol name='drm_gem_object_put_unlocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9616687d'/>
+      <elf-symbol name='drm_gem_object_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a37b533'/>
+      <elf-symbol name='drm_gem_prime_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6676d6f'/>
+      <elf-symbol name='drm_gem_prime_fd_to_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x601d02d'/>
+      <elf-symbol name='drm_gem_prime_handle_to_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27fe2b27'/>
+      <elf-symbol name='drm_gem_prime_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf97d3dc'/>
+      <elf-symbol name='drm_gem_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25d406d1'/>
+      <elf-symbol name='drm_gem_private_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a70124'/>
+      <elf-symbol name='drm_gem_put_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b1af41d'/>
+      <elf-symbol name='drm_gem_vm_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90b20f60'/>
+      <elf-symbol name='drm_gem_vm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x769213e7'/>
+      <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='0x8c8ae00f'/>
+      <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='0x189fdc5b'/>
+      <elf-symbol name='drm_hdcp_check_ksvs_revoked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfbe8abc'/>
+      <elf-symbol name='drm_hdcp_update_content_protection' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb73e913f'/>
+      <elf-symbol name='drm_hdmi_avi_infoframe_from_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa01553c8'/>
+      <elf-symbol name='drm_helper_hpd_irq_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd93666c4'/>
+      <elf-symbol name='drm_helper_mode_fill_fb_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4202d041'/>
+      <elf-symbol name='drm_helper_probe_single_connector_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x476b6f5b'/>
+      <elf-symbol name='drm_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62712c57'/>
+      <elf-symbol name='drm_irq_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97f9001a'/>
+      <elf-symbol name='drm_irq_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9df8a4b'/>
+      <elf-symbol name='drm_kms_helper_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddb30aea'/>
+      <elf-symbol name='drm_kms_helper_poll_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9dbb2157'/>
+      <elf-symbol name='drm_kms_helper_poll_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcce34809'/>
+      <elf-symbol name='drm_kms_helper_poll_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24452ba4'/>
+      <elf-symbol name='drm_kms_helper_poll_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71be089b'/>
+      <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='0xc103faae'/>
+      <elf-symbol name='drm_mode_config_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc78b5669'/>
+      <elf-symbol name='drm_mode_config_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9097528'/>
+      <elf-symbol name='drm_mode_convert_umode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb796f586'/>
+      <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='0x95af88f0'/>
+      <elf-symbol name='drm_mode_create_dp_colorspace_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7949c70'/>
+      <elf-symbol name='drm_mode_crtc_set_gamma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb32629c'/>
+      <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='0xabfb223a'/>
+      <elf-symbol name='drm_mode_duplicate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34b9d3e3'/>
+      <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='0x47a511ab'/>
+      <elf-symbol name='drm_mode_object_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ecc2fe3'/>
+      <elf-symbol name='drm_mode_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7b8e8dc'/>
+      <elf-symbol name='drm_mode_probed_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29cedd92'/>
+      <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='0xa71db04f'/>
+      <elf-symbol name='drm_modeset_acquire_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x826c1faa'/>
+      <elf-symbol name='drm_modeset_backoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1923b92b'/>
+      <elf-symbol name='drm_modeset_drop_locks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa945e0c3'/>
+      <elf-symbol name='drm_modeset_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90cb62d2'/>
+      <elf-symbol name='drm_modeset_lock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f45f036'/>
+      <elf-symbol name='drm_modeset_lock_all_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac6db09c'/>
+      <elf-symbol name='drm_modeset_lock_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff606e57'/>
+      <elf-symbol name='drm_modeset_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x724cf627'/>
+      <elf-symbol name='drm_modeset_unlock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b96fc1d'/>
+      <elf-symbol name='drm_object_attach_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44500e2c'/>
+      <elf-symbol name='drm_object_property_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc443e961'/>
+      <elf-symbol name='drm_of_component_match_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafae578f'/>
+      <elf-symbol name='drm_of_find_possible_crtcs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ad3f983'/>
+      <elf-symbol name='drm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8d65dbf'/>
+      <elf-symbol name='drm_panel_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8708a754'/>
+      <elf-symbol name='drm_panel_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a7f1e66'/>
+      <elf-symbol name='drm_panel_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x999068ae'/>
+      <elf-symbol name='drm_panel_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cc21ada'/>
+      <elf-symbol name='drm_panel_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa13cedb3'/>
+      <elf-symbol name='drm_panel_get_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39e2a65f'/>
+      <elf-symbol name='drm_panel_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22b75eb4'/>
+      <elf-symbol name='drm_panel_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91c81ad4'/>
+      <elf-symbol name='drm_panel_notifier_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7c6801b'/>
+      <elf-symbol name='drm_panel_notifier_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x713bd29e'/>
+      <elf-symbol name='drm_panel_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdd6a6'/>
+      <elf-symbol name='drm_panel_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x545b0657'/>
+      <elf-symbol name='drm_panel_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8c597ab'/>
+      <elf-symbol name='drm_plane_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ebe8117'/>
+      <elf-symbol name='drm_plane_create_alpha_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45eae7c2'/>
+      <elf-symbol name='drm_plane_create_blend_mode_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x336c05d5'/>
+      <elf-symbol name='drm_plane_create_color_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1da3720c'/>
+      <elf-symbol name='drm_plane_create_rotation_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x593b9746'/>
+      <elf-symbol name='drm_plane_create_zpos_immutable_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bd9fb76'/>
+      <elf-symbol name='drm_plane_create_zpos_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5df56758'/>
+      <elf-symbol name='drm_plane_enable_fb_damage_clips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479c5a44'/>
+      <elf-symbol name='drm_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fcaea2f'/>
+      <elf-symbol name='drm_prime_gem_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb99a090c'/>
+      <elf-symbol name='drm_prime_pages_to_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x238dda00'/>
+      <elf-symbol name='drm_prime_sg_to_page_addr_arrays' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17566737'/>
+      <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='0xa821bd53'/>
+      <elf-symbol name='drm_property_blob_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52f14ffd'/>
+      <elf-symbol name='drm_property_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d2ac0a0'/>
+      <elf-symbol name='drm_property_create_bitmask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13f9bc3b'/>
+      <elf-symbol name='drm_property_create_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc53bc636'/>
+      <elf-symbol name='drm_property_create_enum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd742708'/>
+      <elf-symbol name='drm_property_create_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fb42670'/>
+      <elf-symbol name='drm_property_lookup_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72a152ec'/>
+      <elf-symbol name='drm_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594e069'/>
+      <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='0x143d290e'/>
+      <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='0x5af4670b'/>
+      <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='0x8cbe887'/>
+      <elf-symbol name='drm_set_preferred_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfab8cf86'/>
+      <elf-symbol name='drm_state_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb88c041b'/>
+      <elf-symbol name='drm_sysfs_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6be07714'/>
+      <elf-symbol name='drm_universal_plane_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74e5b172'/>
+      <elf-symbol name='drm_vblank_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8492cbbe'/>
+      <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='0x2986b37a'/>
+      <elf-symbol name='drop_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x825a7308'/>
+      <elf-symbol name='dst_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8a50f23'/>
+      <elf-symbol name='dump_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce03e251'/>
+      <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='0x4fd04723'/>
+      <elf-symbol name='dw_pcie_host_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5c31319'/>
+      <elf-symbol name='dw_pcie_msi_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x878f3d5c'/>
+      <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='0x2a2c8c11'/>
+      <elf-symbol name='dw_pcie_wait_for_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfe7d31'/>
+      <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='0x3d6b837a'/>
+      <elf-symbol name='eth_commit_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x264acdda'/>
+      <elf-symbol name='eth_mac_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0b7257b'/>
+      <elf-symbol name='eth_platform_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b66e340'/>
+      <elf-symbol name='eth_prepare_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa9a9e8f'/>
+      <elf-symbol name='eth_type_trans' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b592026'/>
+      <elf-symbol name='eth_validate_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7034d943'/>
+      <elf-symbol name='ether_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c1f879'/>
+      <elf-symbol name='ethtool_op_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb29cc58'/>
+      <elf-symbol name='ethtool_op_get_ts_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1189d8d5'/>
+      <elf-symbol name='event_triggers_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54a257e7'/>
+      <elf-symbol name='extcon_find_edev_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x829d0159'/>
+      <elf-symbol name='extcon_get_edev_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb56fda3'/>
+      <elf-symbol name='extcon_get_edev_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf1bbb1a'/>
+      <elf-symbol name='extcon_get_extcon_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebd5a8f1'/>
+      <elf-symbol name='extcon_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2efb6b8d'/>
+      <elf-symbol name='extcon_get_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed249578'/>
+      <elf-symbol name='extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa7ce60f'/>
+      <elf-symbol name='extcon_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1bc7b89'/>
+      <elf-symbol name='extcon_set_property_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcbc8365'/>
+      <elf-symbol name='extcon_set_state_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8dc1745'/>
+      <elf-symbol name='extcon_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee6dc711'/>
+      <elf-symbol name='fasync_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64da3238'/>
+      <elf-symbol name='fd_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf9c6f73'/>
+      <elf-symbol name='fget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd72f1e6'/>
+      <elf-symbol name='file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f8ccb1b'/>
+      <elf-symbol name='filemap_fdatawait_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x687b8165'/>
+      <elf-symbol name='filemap_fdatawrite_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd79d56c'/>
+      <elf-symbol name='filemap_write_and_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93e37f4b'/>
+      <elf-symbol name='filp_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39894faa'/>
+      <elf-symbol name='filp_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33e21166'/>
+      <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='0x647c9e66'/>
+      <elf-symbol name='find_vma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb590ec'/>
+      <elf-symbol name='find_vpid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb764c819'/>
+      <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='0x3bbc2ae6'/>
+      <elf-symbol name='flush_dcache_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8771237'/>
+      <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='0xb2a30ba2'/>
+      <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='0xa7bce39b'/>
+      <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='0x679ff7ca'/>
+      <elf-symbol name='free_fs_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31117999'/>
+      <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='0xc9d4eb69'/>
+      <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='0xe7822e7'/>
+      <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='0x87fe18ec'/>
+      <elf-symbol name='fs_ftype_to_dtype' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3805cd1'/>
+      <elf-symbol name='fs_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x441004c8'/>
+      <elf-symbol name='fscrypt_register_key_removal_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x449bda78'/>
+      <elf-symbol name='fscrypt_unregister_key_removal_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3e616e1'/>
+      <elf-symbol name='fsl8250_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac009bb3'/>
+      <elf-symbol name='fsstack_copy_attr_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fe01d13'/>
+      <elf-symbol name='fsstack_copy_inode_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccdf7ad2'/>
+      <elf-symbol name='fsync_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcba8119a'/>
+      <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='0xcc72f058'/>
+      <elf-symbol name='fuse_conn_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5b125ea'/>
+      <elf-symbol name='fuse_conn_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e01b5ff'/>
+      <elf-symbol name='fuse_dequeue_forget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20b14cf9'/>
+      <elf-symbol name='fuse_dev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27f12715'/>
+      <elf-symbol name='fuse_dev_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe68d2842'/>
+      <elf-symbol name='fuse_dev_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aa8b70e'/>
+      <elf-symbol name='fuse_fill_super_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb274f107'/>
+      <elf-symbol name='fuse_free_conn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94b8f8e'/>
+      <elf-symbol name='fuse_get_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb20fa2f1'/>
+      <elf-symbol name='fuse_kill_sb_anon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x457d95b2'/>
+      <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='0x548561d0'/>
+      <elf-symbol name='fuse_send_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea8e5ffa'/>
+      <elf-symbol name='fwnode_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3f0dc8c'/>
+      <elf-symbol name='fwnode_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x557cf517'/>
+      <elf-symbol name='fwnode_handle_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479c2d24'/>
+      <elf-symbol name='fwnode_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9caa7cc5'/>
+      <elf-symbol name='fwnode_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9a60e6b'/>
+      <elf-symbol name='fwnode_property_read_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7875b4fb'/>
+      <elf-symbol name='fwnode_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48ae99b8'/>
+      <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='0xdf1d8580'/>
+      <elf-symbol name='generic_cont_expand_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa81b1c4c'/>
+      <elf-symbol name='generic_delete_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3fb3bb9'/>
+      <elf-symbol name='generic_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c06f503'/>
+      <elf-symbol name='generic_end_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ab97e76'/>
+      <elf-symbol name='generic_error_remove_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa73cb62'/>
+      <elf-symbol name='generic_fh_to_dentry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ef8f724'/>
+      <elf-symbol name='generic_fh_to_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e9e8f1d'/>
+      <elf-symbol name='generic_file_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9e9995c'/>
+      <elf-symbol name='generic_file_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf345c210'/>
+      <elf-symbol name='generic_file_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa15f9e2c'/>
+      <elf-symbol name='generic_file_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69f2080e'/>
+      <elf-symbol name='generic_file_read_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1305b943'/>
+      <elf-symbol name='generic_file_splice_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7abdcc3f'/>
+      <elf-symbol name='generic_file_write_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d15c7ec'/>
+      <elf-symbol name='generic_fillattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bfedefd'/>
+      <elf-symbol name='generic_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ceaf0d5'/>
+      <elf-symbol name='generic_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89d5db3e'/>
+      <elf-symbol name='generic_permission' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38b2a963'/>
+      <elf-symbol name='generic_read_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x170ce094'/>
+      <elf-symbol name='generic_shutdown_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf36b8136'/>
+      <elf-symbol name='generic_start_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd02a6922'/>
+      <elf-symbol name='generic_write_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f5dc1d9'/>
+      <elf-symbol name='genl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1336952'/>
+      <elf-symbol name='genl_register_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5685edfc'/>
+      <elf-symbol name='genl_unregister_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a4b711f'/>
+      <elf-symbol name='genlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8878527'/>
+      <elf-symbol name='genphy_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e1f3cff'/>
+      <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='0x6def2e45'/>
+      <elf-symbol name='get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bbb5798'/>
+      <elf-symbol name='get_device_system_crosststamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcff434'/>
+      <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='0xdb12db96'/>
+      <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='0x972ac962'/>
+      <elf-symbol name='get_task_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3da8a6b4'/>
+      <elf-symbol name='get_tree_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39ee7d74'/>
+      <elf-symbol name='get_tree_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc00c0594'/>
+      <elf-symbol name='get_unmapped_area' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fd8b399'/>
+      <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='0x4d79978b'/>
+      <elf-symbol name='get_user_pages_fast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f6912f1'/>
+      <elf-symbol name='get_user_pages_remote' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23771e42'/>
+      <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='gnss_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1683636'/>
+      <elf-symbol name='gnss_deregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc52380f'/>
+      <elf-symbol name='gnss_insert_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e76d14'/>
+      <elf-symbol name='gnss_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb73b5f63'/>
+      <elf-symbol name='gnss_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16383118'/>
+      <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='0x59517e4c'/>
+      <elf-symbol name='gpiochip_add_data_with_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79a49d17'/>
+      <elf-symbol name='gpiochip_add_pin_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f8954d6'/>
+      <elf-symbol name='gpiochip_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d8a7f36'/>
+      <elf-symbol name='gpiochip_generic_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8abd98fc'/>
+      <elf-symbol name='gpiochip_generic_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba39c0a0'/>
+      <elf-symbol name='gpiochip_get_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbb33450'/>
+      <elf-symbol name='gpiochip_line_is_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1476ab8b'/>
+      <elf-symbol name='gpiochip_lock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe24ba60f'/>
+      <elf-symbol name='gpiochip_populate_parent_fwspec_fourcell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72642c99'/>
+      <elf-symbol name='gpiochip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47b4842c'/>
+      <elf-symbol name='gpiochip_unlock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc330c8d'/>
+      <elf-symbol name='gpiod_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec274791'/>
+      <elf-symbol name='gpiod_direction_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf01f937d'/>
+      <elf-symbol name='gpiod_direction_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a59652'/>
+      <elf-symbol name='gpiod_direction_output_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7de5aaa2'/>
+      <elf-symbol name='gpiod_get_direction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581584f'/>
+      <elf-symbol name='gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46682e43'/>
+      <elf-symbol name='gpiod_get_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34904357'/>
+      <elf-symbol name='gpiod_get_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfefc643c'/>
+      <elf-symbol name='gpiod_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb9bf896'/>
+      <elf-symbol name='gpiod_get_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bb343c6'/>
+      <elf-symbol name='gpiod_is_active_low' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2bc5591'/>
+      <elf-symbol name='gpiod_set_consumer_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ff647b5'/>
+      <elf-symbol name='gpiod_set_debounce' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b9d6ae4'/>
+      <elf-symbol name='gpiod_set_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51939c0a'/>
+      <elf-symbol name='gpiod_set_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x910c30d6'/>
+      <elf-symbol name='gpiod_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b18351d'/>
+      <elf-symbol name='gpiod_set_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc35f790a'/>
+      <elf-symbol name='gpiod_to_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x927cd6d2'/>
+      <elf-symbol name='gpiod_to_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9666326'/>
+      <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='0x582b5c2'/>
+      <elf-symbol name='gro_cells_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff43c30c'/>
+      <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='0x560b61e'/>
+      <elf-symbol name='gserial_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf85aaaca'/>
+      <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='0xc18e918e'/>
+      <elf-symbol name='handle_edge_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5cd9f56'/>
+      <elf-symbol name='handle_fasteoi_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb8f1c36'/>
+      <elf-symbol name='handle_level_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ad4e156'/>
+      <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='0x81cb6b63'/>
+      <elf-symbol name='handle_sysrq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7647726c'/>
+      <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='hid_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8b166c'/>
+      <elf-symbol name='hid_alloc_report_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2bd60cd'/>
+      <elf-symbol name='hid_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa977f22'/>
+      <elf-symbol name='hid_compare_device_paths' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f394853'/>
+      <elf-symbol name='hid_destroy_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x684e644f'/>
+      <elf-symbol name='hid_field_extract' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43986202'/>
+      <elf-symbol name='hid_hw_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1184b22b'/>
+      <elf-symbol name='hid_hw_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x142049d6'/>
+      <elf-symbol name='hid_hw_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64e34c02'/>
+      <elf-symbol name='hid_hw_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2f7fb85'/>
+      <elf-symbol name='hid_input_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ef839e4'/>
+      <elf-symbol name='hid_match_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d0a712b'/>
+      <elf-symbol name='hid_open_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2e8bd2f'/>
+      <elf-symbol name='hid_parse_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc33c065e'/>
+      <elf-symbol name='hid_report_raw_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb6cbbd8'/>
+      <elf-symbol name='hid_set_field' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5e7efba'/>
+      <elf-symbol name='hid_snto32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b13a8b8'/>
+      <elf-symbol name='hid_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15a6d10'/>
+      <elf-symbol name='hidinput_calc_abs_res' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f11d2f7'/>
+      <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='0x616dcd96'/>
+      <elf-symbol name='hvc_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ec14782'/>
+      <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='0x82463368'/>
+      <elf-symbol name='hvc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1dd7ba4'/>
+      <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='0x63472cda'/>
+      <elf-symbol name='hwspin_lock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86aed2c7'/>
+      <elf-symbol name='hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72d306c6'/>
+      <elf-symbol name='hwspin_lock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20ddb905'/>
+      <elf-symbol name='i2c_add_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9779fc8'/>
+      <elf-symbol name='i2c_add_numbered_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6622fcbe'/>
+      <elf-symbol name='i2c_del_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb32e9bb1'/>
+      <elf-symbol name='i2c_del_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfdae1e8'/>
+      <elf-symbol name='i2c_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x105fc2dd'/>
+      <elf-symbol name='i2c_generic_scl_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2be96e2d'/>
+      <elf-symbol name='i2c_get_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa21d9e46'/>
+      <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='0xc67e5600'/>
+      <elf-symbol name='i2c_new_dummy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25eee7a8'/>
+      <elf-symbol name='i2c_new_probed_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d8868d1'/>
+      <elf-symbol name='i2c_parse_fw_timings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28972db4'/>
+      <elf-symbol name='i2c_put_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc38d1d'/>
+      <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='0xec2b0f24'/>
+      <elf-symbol name='i2c_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe81e2ecf'/>
+      <elf-symbol name='i2c_smbus_read_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb42b4c8f'/>
+      <elf-symbol name='i2c_smbus_read_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66d49b2c'/>
+      <elf-symbol name='i2c_smbus_read_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24002609'/>
+      <elf-symbol name='i2c_smbus_write_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57461b80'/>
+      <elf-symbol name='i2c_smbus_write_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41c00fbf'/>
+      <elf-symbol name='i2c_smbus_write_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a243918'/>
+      <elf-symbol name='i2c_smbus_write_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85c94345'/>
+      <elf-symbol name='i2c_smbus_xfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18e90585'/>
+      <elf-symbol name='i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf469f585'/>
+      <elf-symbol name='i2c_transfer_buffer_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ff23607'/>
+      <elf-symbol name='i2c_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc670a1ca'/>
+      <elf-symbol name='i2c_verify_client' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc82d5280'/>
+      <elf-symbol name='icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c0fc930'/>
+      <elf-symbol name='icc_link_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab46fa4c'/>
+      <elf-symbol name='icc_node_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab5a49d'/>
+      <elf-symbol name='icc_node_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ff85eed'/>
+      <elf-symbol name='icc_node_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89a4b0ef'/>
+      <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='0x6091546d'/>
+      <elf-symbol name='icc_provider_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6f597ff'/>
+      <elf-symbol name='icc_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9fefb28'/>
+      <elf-symbol name='icc_set_bw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f7e2ee6'/>
+      <elf-symbol name='icc_set_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd3737ec'/>
+      <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_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='0x4664f258'/>
+      <elf-symbol name='ieee80211_amsdu_to_8023s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7770f87'/>
+      <elf-symbol name='ieee80211_ap_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df70007'/>
+      <elf-symbol name='ieee80211_beacon_get_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcff37561'/>
+      <elf-symbol name='ieee80211_beacon_get_tim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc978ab67'/>
+      <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='0xb9d0a9df'/>
+      <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='0xfbbd3c9f'/>
+      <elf-symbol name='ieee80211_free_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20f5c7d5'/>
+      <elf-symbol name='ieee80211_free_txskb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x943d0dd1'/>
+      <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='0xf8889b4a'/>
+      <elf-symbol name='ieee80211_get_hdrlen_from_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a979185'/>
+      <elf-symbol name='ieee80211_get_tx_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ac7bcea'/>
+      <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='0x480ce239'/>
+      <elf-symbol name='ieee80211_iterate_active_interfaces_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f97d86c'/>
+      <elf-symbol name='ieee80211_iterate_interfaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae3f94c8'/>
+      <elf-symbol name='ieee80211_iterate_stations_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4aee8ae2'/>
+      <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='0x18d34da5'/>
+      <elf-symbol name='ieee80211_nullfunc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b65e957'/>
+      <elf-symbol name='ieee80211_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34d56a2c'/>
+      <elf-symbol name='ieee80211_proberesp_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x927d565f'/>
+      <elf-symbol name='ieee80211_pspoll_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe767a975'/>
+      <elf-symbol name='ieee80211_queue_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16c65e14'/>
+      <elf-symbol name='ieee80211_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a0fb38e'/>
+      <elf-symbol name='ieee80211_radar_detected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2add6093'/>
+      <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='0xe8caa3f9'/>
+      <elf-symbol name='ieee80211_register_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b61ea8d'/>
+      <elf-symbol name='ieee80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a5f63f'/>
+      <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='0x37c7a062'/>
+      <elf-symbol name='ieee80211_rx_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x284e1c8f'/>
+      <elf-symbol name='ieee80211_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7aaab99'/>
+      <elf-symbol name='ieee80211_scan_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22f84ccc'/>
+      <elf-symbol name='ieee80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffa80a0d'/>
+      <elf-symbol name='ieee80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc29e15'/>
+      <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='0xcf4e1d72'/>
+      <elf-symbol name='ieee80211_stop_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ae77d56'/>
+      <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='0x5547f53a'/>
+      <elf-symbol name='ieee80211_tx_rate_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4da4adf'/>
+      <elf-symbol name='ieee80211_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4ad9ed'/>
+      <elf-symbol name='ieee80211_tx_status_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b40a86'/>
+      <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='0x2abb58d0'/>
+      <elf-symbol name='ieee80211_txq_schedule_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32f50db1'/>
+      <elf-symbol name='ieee80211_unregister_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f787a79'/>
+      <elf-symbol name='ieee80211_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x474dcc5'/>
+      <elf-symbol name='ieee80211_wake_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb459f149'/>
+      <elf-symbol name='iget5_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb9d37ff'/>
+      <elf-symbol name='iget_failed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86ea03b7'/>
+      <elf-symbol name='iget_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x567f6e87'/>
+      <elf-symbol name='igrab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8f75a17'/>
+      <elf-symbol name='ihold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf35e5ff6'/>
+      <elf-symbol name='iio_alloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8ab148'/>
+      <elf-symbol name='iio_buffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37b0349f'/>
+      <elf-symbol name='iio_buffer_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7610c7a7'/>
+      <elf-symbol name='iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6732d7bf'/>
+      <elf-symbol name='iio_channel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdfc5e50'/>
+      <elf-symbol name='iio_dealloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb83f2470'/>
+      <elf-symbol name='iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f3a47bd'/>
+      <elf-symbol name='iio_device_attach_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x335e0283'/>
+      <elf-symbol name='iio_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76da7500'/>
+      <elf-symbol name='iio_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bf4f2de'/>
+      <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='0x33bd7272'/>
+      <elf-symbol name='iio_read_channel_processed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x687c0d92'/>
+      <elf-symbol name='iio_read_channel_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12ecca1e'/>
+      <elf-symbol name='iio_trigger_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a99d32'/>
+      <elf-symbol name='iio_trigger_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9aba6d12'/>
+      <elf-symbol name='iio_trigger_notify_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd74aa196'/>
+      <elf-symbol name='iio_trigger_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b84d919'/>
+      <elf-symbol name='iio_trigger_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7353770e'/>
+      <elf-symbol name='iio_triggered_buffer_postenable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13f3aef6'/>
+      <elf-symbol name='iio_triggered_buffer_predisable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc01850d5'/>
+      <elf-symbol name='iio_write_channel_attribute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbce26b22'/>
+      <elf-symbol name='ilookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10c5f296'/>
+      <elf-symbol name='import_iovec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf82bdd81'/>
+      <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='0x6b3766b2'/>
+      <elf-symbol name='inc_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb04148a'/>
+      <elf-symbol name='inet_select_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc426293'/>
+      <elf-symbol name='init_dummy_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc741e3f'/>
+      <elf-symbol name='init_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45e09dd8'/>
+      <elf-symbol name='init_special_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30ede9fa'/>
+      <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='inode_init_once' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9eb1570'/>
+      <elf-symbol name='inode_init_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49cfb845'/>
+      <elf-symbol name='inode_newsize_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbda28520'/>
+      <elf-symbol name='inode_nohighmem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb267692'/>
+      <elf-symbol name='input_alloc_absinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x461faf59'/>
+      <elf-symbol name='input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d2ebe57'/>
+      <elf-symbol name='input_close_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82a80d44'/>
+      <elf-symbol name='input_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c08b858'/>
+      <elf-symbol name='input_ff_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b75da0a'/>
+      <elf-symbol name='input_ff_create_memless' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x180b5339'/>
+      <elf-symbol name='input_ff_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x157c00d3'/>
+      <elf-symbol name='input_free_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86a7cc9d'/>
+      <elf-symbol name='input_mt_destroy_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bbb0952'/>
+      <elf-symbol name='input_mt_get_slot_by_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38831407'/>
+      <elf-symbol name='input_mt_init_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63b7f768'/>
+      <elf-symbol name='input_mt_report_pointer_emulation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7013020f'/>
+      <elf-symbol name='input_mt_report_slot_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d56854'/>
+      <elf-symbol name='input_mt_sync_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21827bdd'/>
+      <elf-symbol name='input_open_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba589f57'/>
+      <elf-symbol name='input_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x618850b8'/>
+      <elf-symbol name='input_register_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33b17478'/>
+      <elf-symbol name='input_register_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdef0604'/>
+      <elf-symbol name='input_set_abs_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ce4afed'/>
+      <elf-symbol name='input_set_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb042a6f'/>
+      <elf-symbol name='input_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc88ff960'/>
+      <elf-symbol name='input_unregister_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x518a825a'/>
+      <elf-symbol name='input_unregister_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e837536'/>
+      <elf-symbol name='int_pow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1af267f8'/>
+      <elf-symbol name='int_sqrt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb678366f'/>
+      <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='0x500c233f'/>
+      <elf-symbol name='invalidate_inode_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52abb488'/>
+      <elf-symbol name='invalidate_mapping_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf51a8bf'/>
+      <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='0xd2bf5394'/>
+      <elf-symbol name='iommu_attach_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0aa94ad'/>
+      <elf-symbol name='iommu_detach_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd409aac'/>
+      <elf-symbol name='iommu_device_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf11d43eb'/>
+      <elf-symbol name='iommu_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe8d2294'/>
+      <elf-symbol name='iommu_device_sysfs_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3283197f'/>
+      <elf-symbol name='iommu_device_sysfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e1bb154'/>
+      <elf-symbol name='iommu_device_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e99ab7c'/>
+      <elf-symbol name='iommu_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcd20b1e'/>
+      <elf-symbol name='iommu_dma_get_resv_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85c65309'/>
+      <elf-symbol name='iommu_dma_reserve_iova' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e414698'/>
+      <elf-symbol name='iommu_domain_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b3747a3'/>
+      <elf-symbol name='iommu_domain_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf38bec8'/>
+      <elf-symbol name='iommu_domain_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb50df461'/>
+      <elf-symbol name='iommu_domain_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d9c495c'/>
+      <elf-symbol name='iommu_fwspec_add_ids' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97c79720'/>
+      <elf-symbol name='iommu_fwspec_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586919d0'/>
+      <elf-symbol name='iommu_get_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4757316d'/>
+      <elf-symbol name='iommu_get_domain_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb54c4fd7'/>
+      <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='0xa2473a11'/>
+      <elf-symbol name='iommu_group_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf99cbca6'/>
+      <elf-symbol name='iommu_group_get_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a7615ff'/>
+      <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='0xca3633cd'/>
+      <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='0x62a1074b'/>
+      <elf-symbol name='iommu_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf71f0bda'/>
+      <elf-symbol name='iommu_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6a158b9'/>
+      <elf-symbol name='iommu_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32f0024e'/>
+      <elf-symbol name='iommu_put_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63268a12'/>
+      <elf-symbol name='iommu_register_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82f97df3'/>
+      <elf-symbol name='iommu_report_device_fault' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5f11249'/>
+      <elf-symbol name='iommu_set_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3103c96'/>
+      <elf-symbol name='iommu_unmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c17132e'/>
+      <elf-symbol name='iommu_unregister_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x859ffa17'/>
+      <elf-symbol name='ion_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d7919e3'/>
+      <elf-symbol name='ion_buffer_prep_noncached' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd60bc2e'/>
+      <elf-symbol name='ion_buffer_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f91336'/>
+      <elf-symbol name='ion_device_remove_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe839d5ab'/>
+      <elf-symbol name='ion_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x367224c'/>
+      <elf-symbol name='ion_heap_map_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42222153'/>
+      <elf-symbol name='ion_heap_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4ac107a'/>
+      <elf-symbol name='ion_heap_unmap_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd7756e'/>
+      <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='0xb02b3601'/>
+      <elf-symbol name='ip6_local_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79208aa1'/>
+      <elf-symbol name='ip6_route_output_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1508cdc2'/>
+      <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='0x8e42619b'/>
+      <elf-symbol name='ip_route_output_flow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b85b6c8'/>
+      <elf-symbol name='ip_send_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2124474'/>
+      <elf-symbol name='iput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf755474'/>
+      <elf-symbol name='ipv6_dev_get_saddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe514d975'/>
+      <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='0x34e63248'/>
+      <elf-symbol name='ipv6_skip_exthdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5f5f83a'/>
+      <elf-symbol name='irq_chip_ack_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdbc0642'/>
+      <elf-symbol name='irq_chip_disable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb754a2ae'/>
+      <elf-symbol name='irq_chip_enable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x218049b6'/>
+      <elf-symbol name='irq_chip_eoi_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1ac8977'/>
+      <elf-symbol name='irq_chip_get_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57382422'/>
+      <elf-symbol name='irq_chip_mask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfca501e5'/>
+      <elf-symbol name='irq_chip_retrigger_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe72b3a9'/>
+      <elf-symbol name='irq_chip_set_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9b34f26'/>
+      <elf-symbol name='irq_chip_set_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16753302'/>
+      <elf-symbol name='irq_chip_set_type_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96c14336'/>
+      <elf-symbol name='irq_chip_set_vcpu_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ff5cb7'/>
+      <elf-symbol name='irq_chip_set_wake_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20cfa44f'/>
+      <elf-symbol name='irq_chip_unmask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89918c22'/>
+      <elf-symbol name='irq_create_fwspec_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b6f0e75'/>
+      <elf-symbol name='irq_create_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0e776ae'/>
+      <elf-symbol name='irq_create_of_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeef6ba9'/>
+      <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='0xdbae5ac2'/>
+      <elf-symbol name='irq_domain_create_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe24d889a'/>
+      <elf-symbol name='irq_domain_free_irqs_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1107e625'/>
+      <elf-symbol name='irq_domain_free_irqs_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5550348'/>
+      <elf-symbol name='irq_domain_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a555cc7'/>
+      <elf-symbol name='irq_domain_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf418e47b'/>
+      <elf-symbol name='irq_domain_set_hwirq_and_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf48401ee'/>
+      <elf-symbol name='irq_domain_set_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe92545c4'/>
+      <elf-symbol name='irq_domain_update_bus_token' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb725c6a3'/>
+      <elf-symbol name='irq_domain_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb54d6939'/>
+      <elf-symbol name='irq_domain_xlate_onetwocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c21980d'/>
+      <elf-symbol name='irq_domain_xlate_twocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3653b7ee'/>
+      <elf-symbol name='irq_find_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6b050b'/>
+      <elf-symbol name='irq_find_matching_fwspec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9257453'/>
+      <elf-symbol name='irq_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40f8bf3a'/>
+      <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='0x615f2230'/>
+      <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='0x622dd1d4'/>
+      <elf-symbol name='irq_set_chip_and_handler_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a6513af'/>
+      <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='0xed2136ee'/>
+      <elf-symbol name='is_bad_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ab9ec3e'/>
+      <elf-symbol name='is_console_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x944a564d'/>
+      <elf-symbol name='iterate_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6188a388'/>
+      <elf-symbol name='iterate_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7884104'/>
+      <elf-symbol name='iunique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9aa3b7e4'/>
+      <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='0x6dd25f6c'/>
+      <elf-symbol name='kern_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0b7198'/>
+      <elf-symbol name='kern_unmount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23119620'/>
+      <elf-symbol name='kernel_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd24a3c46'/>
+      <elf-symbol name='kernel_getsockname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x242ef877'/>
+      <elf-symbol name='kernel_param_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1252dc24'/>
+      <elf-symbol name='kernel_param_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5abf2c1'/>
+      <elf-symbol name='kernel_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf184d189'/>
+      <elf-symbol name='kernel_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1b27208'/>
+      <elf-symbol name='kernel_recvmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa493b752'/>
+      <elf-symbol name='kernel_sendmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfc7889a'/>
+      <elf-symbol name='kernel_sigaction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6df1aaf1'/>
+      <elf-symbol name='kernel_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1c4409f'/>
+      <elf-symbol name='kernfs_find_and_get_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1952d283'/>
+      <elf-symbol name='kernfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45e242ad'/>
+      <elf-symbol name='kernfs_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf77b615'/>
+      <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='0x6d2fb359'/>
+      <elf-symbol name='kfree_skb_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdad5594b'/>
+      <elf-symbol name='kill_anon_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2576b2c4'/>
+      <elf-symbol name='kill_block_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae13290d'/>
+      <elf-symbol name='kill_fasync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e26261d'/>
+      <elf-symbol name='kill_litter_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69fddb16'/>
+      <elf-symbol name='kill_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x407bbefe'/>
+      <elf-symbol name='kiocb_set_cancel_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdca6649b'/>
+      <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='0x517a2d97'/>
+      <elf-symbol name='kmem_cache_alloc_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1747c0c6'/>
+      <elf-symbol name='kmem_cache_alloc_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb15f745'/>
+      <elf-symbol name='kmem_cache_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61945fa2'/>
+      <elf-symbol name='kmem_cache_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bef4fcc'/>
+      <elf-symbol name='kmem_cache_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa082b1e9'/>
+      <elf-symbol name='kmem_cache_free_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4fbc800'/>
+      <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='0x8b2394f9'/>
+      <elf-symbol name='kobject_create_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa74963d'/>
+      <elf-symbol name='kobject_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x357b9c5e'/>
+      <elf-symbol name='kobject_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d3bd77c'/>
+      <elf-symbol name='kobject_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95cb44e7'/>
+      <elf-symbol name='kobject_init_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d2c099d'/>
+      <elf-symbol name='kobject_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x676ca985'/>
+      <elf-symbol name='kobject_uevent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x289ef841'/>
+      <elf-symbol name='kobject_uevent_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcc2b2be'/>
+      <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='0x7b39a1c8'/>
+      <elf-symbol name='kset_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x813d4999'/>
+      <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='0xba39a0ac'/>
+      <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='kthread_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedf11618'/>
+      <elf-symbol name='kthread_cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x740fc2e2'/>
+      <elf-symbol name='kthread_cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41e27e34'/>
+      <elf-symbol name='kthread_create_on_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd96e31c7'/>
+      <elf-symbol name='kthread_create_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30ec4518'/>
+      <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='0x29aa0d46'/>
+      <elf-symbol name='kthread_flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6670e243'/>
+      <elf-symbol name='kthread_flush_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fa3c8bf'/>
+      <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='0xce993b7f'/>
+      <elf-symbol name='kthread_park' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48e1739a'/>
+      <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='0xf7615422'/>
+      <elf-symbol name='kthread_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bfbadb8'/>
+      <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='0x3d82c571'/>
+      <elf-symbol name='kthread_unpark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bd6a436'/>
+      <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_mono_fast_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ebe366f'/>
+      <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='led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19e8f9fe'/>
+      <elf-symbol name='led_classdev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80ab69d6'/>
+      <elf-symbol name='led_trigger_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf105f5fe'/>
+      <elf-symbol name='led_trigger_register_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21783737'/>
+      <elf-symbol name='led_trigger_unregister_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb59f4b04'/>
+      <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='0x86289dc6'/>
+      <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='0x4376a37b'/>
+      <elf-symbol name='load_nls_default' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd176bac7'/>
+      <elf-symbol name='lock_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fd06243'/>
+      <elf-symbol name='lock_sock_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64bca80e'/>
+      <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='0xb0df32a0'/>
+      <elf-symbol name='lookup_one_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x434257d5'/>
+      <elf-symbol name='lookup_one_len_unlocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5323c579'/>
+      <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='0x5baf7f7e'/>
+      <elf-symbol name='mark_buffer_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa95bfc06'/>
+      <elf-symbol name='mark_page_accessed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ecb660b'/>
+      <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_strdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacf4d843'/>
+      <elf-symbol name='match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81188c30'/>
+      <elf-symbol name='match_token' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44e9a829'/>
+      <elf-symbol name='mbox_chan_received_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x132e3c83'/>
+      <elf-symbol name='mbox_chan_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c83b778'/>
+      <elf-symbol name='mbox_client_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b3247bb'/>
+      <elf-symbol name='mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e836d55'/>
+      <elf-symbol name='mbox_controller_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc421269'/>
+      <elf-symbol name='mbox_free_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8508085'/>
+      <elf-symbol name='mbox_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x418d00a0'/>
+      <elf-symbol name='mbox_send_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38ea26de'/>
+      <elf-symbol name='mdiobus_alloc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17f13c3a'/>
+      <elf-symbol name='mdiobus_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x644dd4a0'/>
+      <elf-symbol name='mdiobus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b8fa9f1'/>
+      <elf-symbol name='media_create_intf_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d28d91a'/>
+      <elf-symbol name='media_create_pad_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x917d4948'/>
+      <elf-symbol name='media_device_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdead2ed1'/>
+      <elf-symbol name='media_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x562bdc45'/>
+      <elf-symbol name='media_device_register_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x307867e'/>
+      <elf-symbol name='media_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28178e54'/>
+      <elf-symbol name='media_device_unregister_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d430ed8'/>
+      <elf-symbol name='media_devnode_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27ef9792'/>
+      <elf-symbol name='media_devnode_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f76e4a6'/>
+      <elf-symbol name='media_entity_find_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57486b2a'/>
+      <elf-symbol name='media_entity_pads_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbca5304d'/>
+      <elf-symbol name='media_entity_remote_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf41eadd2'/>
+      <elf-symbol name='media_entity_remove_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ec474cf'/>
+      <elf-symbol name='media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e60b49d'/>
+      <elf-symbol name='media_graph_walk_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a57363c'/>
+      <elf-symbol name='media_graph_walk_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a7fc9b2'/>
+      <elf-symbol name='media_graph_walk_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a602b18'/>
+      <elf-symbol name='media_remove_intf_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd81f204'/>
+      <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='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='0xf5693332'/>
+      <elf-symbol name='mfd_remove_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58528c3f'/>
+      <elf-symbol name='mii_check_media' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fab3c69'/>
+      <elf-symbol name='mii_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e269fa9'/>
+      <elf-symbol name='mii_ethtool_gset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9257291'/>
+      <elf-symbol name='mii_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x385510d3'/>
+      <elf-symbol name='mii_link_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd3334b0'/>
+      <elf-symbol name='mii_nway_restart' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xace49c96'/>
+      <elf-symbol name='mipi_dsi_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x306b7ff9'/>
+      <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='0x764e8339'/>
+      <elf-symbol name='mipi_dsi_dcs_set_display_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb4f45ce'/>
+      <elf-symbol name='mipi_dsi_dcs_set_tear_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98424369'/>
+      <elf-symbol name='mipi_dsi_dcs_write_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefd977da'/>
+      <elf-symbol name='mipi_dsi_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9a75ae5'/>
+      <elf-symbol name='mipi_dsi_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36064e4f'/>
+      <elf-symbol name='mipi_dsi_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea4a8973'/>
+      <elf-symbol name='mipi_dsi_driver_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba42e0d9'/>
+      <elf-symbol name='mipi_dsi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x135f11b1'/>
+      <elf-symbol name='mipi_dsi_generic_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ebaa804'/>
+      <elf-symbol name='mipi_dsi_generic_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcacc12c'/>
+      <elf-symbol name='mipi_dsi_host_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d96b152'/>
+      <elf-symbol name='mipi_dsi_host_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29f7aee4'/>
+      <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='0x17138eb9'/>
+      <elf-symbol name='misc_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2328f66'/>
+      <elf-symbol name='misc_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6edefdda'/>
+      <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='0x81484b8f'/>
+      <elf-symbol name='mmc_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbc1d8c4'/>
+      <elf-symbol name='mmc_alloc_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c372d4e'/>
+      <elf-symbol name='mmc_app_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0130e58'/>
+      <elf-symbol name='mmc_calc_max_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d0acf5c'/>
+      <elf-symbol name='mmc_can_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce1ab0c'/>
+      <elf-symbol name='mmc_can_gpio_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6b91262'/>
+      <elf-symbol name='mmc_can_sanitize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde6838a5'/>
+      <elf-symbol name='mmc_can_secure_erase_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9c7d759'/>
+      <elf-symbol name='mmc_can_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9de42861'/>
+      <elf-symbol name='mmc_cmdq_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd42382a8'/>
+      <elf-symbol name='mmc_cmdq_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56b4d7c'/>
+      <elf-symbol name='mmc_cqe_post_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83027d6b'/>
+      <elf-symbol name='mmc_cqe_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23bbfdc8'/>
+      <elf-symbol name='mmc_cqe_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56439c16'/>
+      <elf-symbol name='mmc_cqe_start_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c2f4104'/>
+      <elf-symbol name='mmc_detect_card_removed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x507b4ed8'/>
+      <elf-symbol name='mmc_detect_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17a9fb63'/>
+      <elf-symbol name='mmc_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e036106'/>
+      <elf-symbol name='mmc_erase_group_aligned' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18aec7b6'/>
+      <elf-symbol name='mmc_flush_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9123448'/>
+      <elf-symbol name='mmc_free_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dda2c08'/>
+      <elf-symbol name='mmc_get_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c1d9c36'/>
+      <elf-symbol name='mmc_get_ext_csd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbc7816b'/>
+      <elf-symbol name='mmc_gpio_get_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaf58b28'/>
+      <elf-symbol name='mmc_gpio_get_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42c1633e'/>
+      <elf-symbol name='mmc_gpiod_request_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db29617'/>
+      <elf-symbol name='mmc_gpiod_request_cd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e1e50e8'/>
+      <elf-symbol name='mmc_gpiod_request_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b955943'/>
+      <elf-symbol name='mmc_hw_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeef41334'/>
+      <elf-symbol name='mmc_of_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2184623'/>
+      <elf-symbol name='mmc_of_parse_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79e79bd6'/>
+      <elf-symbol name='mmc_put_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d7d0b03'/>
+      <elf-symbol name='mmc_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdf73dbe'/>
+      <elf-symbol name='mmc_regulator_get_supply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1c92d44'/>
+      <elf-symbol name='mmc_regulator_set_ocr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe91de97f'/>
+      <elf-symbol name='mmc_regulator_set_vqmmc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5138f4b'/>
+      <elf-symbol name='mmc_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37b2d8d0'/>
+      <elf-symbol name='mmc_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66ab201'/>
+      <elf-symbol name='mmc_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee3aabb2'/>
+      <elf-symbol name='mmc_retune_pause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94c9ab12'/>
+      <elf-symbol name='mmc_retune_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88da1904'/>
+      <elf-symbol name='mmc_retune_unpause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56043a8d'/>
+      <elf-symbol name='mmc_run_bkops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1daed95a'/>
+      <elf-symbol name='mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbed88a73'/>
+      <elf-symbol name='mmc_send_tuning' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44da3858'/>
+      <elf-symbol name='mmc_set_data_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ca32fa0'/>
+      <elf-symbol name='mmc_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4367fe'/>
+      <elf-symbol name='mmc_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c8b9f08'/>
+      <elf-symbol name='mmc_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fc7bb1a'/>
+      <elf-symbol name='mmc_wait_for_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65faf7ac'/>
+      <elf-symbol name='mmc_wait_for_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4fd7e8e'/>
+      <elf-symbol name='mmput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5b6c2a7'/>
+      <elf-symbol name='mntget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a33b0dd'/>
+      <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='0x2b53fd4e'/>
+      <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='0x787615cc'/>
+      <elf-symbol name='module_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57cc43f6'/>
+      <elf-symbol name='mount_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2be460d4'/>
+      <elf-symbol name='mpage_readpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x293aa23f'/>
+      <elf-symbol name='mpage_readpages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d10595b'/>
+      <elf-symbol name='mpage_writepages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83185854'/>
+      <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='0xf25a7336'/>
+      <elf-symbol name='msm_pinctrl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x163ad942'/>
+      <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='napi_complete_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa82e5f17'/>
+      <elf-symbol name='napi_consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ba5d8a'/>
+      <elf-symbol name='napi_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c02b94c'/>
+      <elf-symbol name='napi_gro_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f013d20'/>
+      <elf-symbol name='napi_gro_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7444319'/>
+      <elf-symbol name='napi_hash_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96ea06f7'/>
+      <elf-symbol name='napi_schedule_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed61cb99'/>
+      <elf-symbol name='neigh_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8828878c'/>
+      <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='0xda5833d2'/>
+      <elf-symbol name='netdev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d2786aa'/>
+      <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='0x74335cbe'/>
+      <elf-symbol name='netdev_lower_state_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1aec793'/>
+      <elf-symbol name='netdev_master_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x747f8b95'/>
+      <elf-symbol name='netdev_notify_peers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d30ea98'/>
+      <elf-symbol name='netdev_pick_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90be7e49'/>
+      <elf-symbol name='netdev_rx_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34cf8e9c'/>
+      <elf-symbol name='netdev_rx_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bcba99a'/>
+      <elf-symbol name='netdev_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3e2a172'/>
+      <elf-symbol name='netdev_upper_dev_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74d1863'/>
+      <elf-symbol name='netdev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x893580c6'/>
+      <elf-symbol name='netif_carrier_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bed1127'/>
+      <elf-symbol name='netif_carrier_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63e443ee'/>
+      <elf-symbol name='netif_device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x244781eb'/>
+      <elf-symbol name='netif_device_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7fb397b'/>
+      <elf-symbol name='netif_napi_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x197f390e'/>
+      <elf-symbol name='netif_napi_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f2d3999'/>
+      <elf-symbol name='netif_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0391934'/>
+      <elf-symbol name='netif_rx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x556de390'/>
+      <elf-symbol name='netif_rx_ni' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ee610e6'/>
+      <elf-symbol name='netif_schedule_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bbd103'/>
+      <elf-symbol name='netif_set_real_num_rx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf6905e4'/>
+      <elf-symbol name='netif_set_real_num_tx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbb7d1c3'/>
+      <elf-symbol name='netif_stacked_transfer_operstate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb418d771'/>
+      <elf-symbol name='netif_tx_stop_all_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf119b7ab'/>
+      <elf-symbol name='netif_tx_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d85375d'/>
+      <elf-symbol name='netlink_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d4e4841'/>
+      <elf-symbol name='netlink_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x423df15a'/>
+      <elf-symbol name='netlink_has_listeners' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x843f0b0'/>
+      <elf-symbol name='netlink_kernel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a8b2612'/>
+      <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='0x297e612f'/>
+      <elf-symbol name='netlink_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf54a8f7'/>
+      <elf-symbol name='new_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8e5f51'/>
+      <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='0x818499f'/>
+      <elf-symbol name='nf_ct_get_tuplepr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee95df83'/>
+      <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_register_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6608018'/>
+      <elf-symbol name='nf_unregister_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d7521ed'/>
+      <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='no_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa569c7f7'/>
+      <elf-symbol name='no_seek_end_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd815663f'/>
+      <elf-symbol name='nonseekable_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x918974c7'/>
+      <elf-symbol name='noop_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaeda5356'/>
+      <elf-symbol name='notify_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x489dc033'/>
+      <elf-symbol name='notify_change2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4e8f79d'/>
+      <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='0x512a0017'/>
+      <elf-symbol name='nvdimm_bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb794c04d'/>
+      <elf-symbol name='nvdimm_pmem_region_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5b536cb'/>
+      <elf-symbol name='nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62ef3613'/>
+      <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='0x7d865009'/>
+      <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='0xa0653b1f'/>
+      <elf-symbol name='nvmem_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e7dc38d'/>
+      <elf-symbol name='of_address_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4cc9bca'/>
+      <elf-symbol name='of_alias_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7923ef2'/>
+      <elf-symbol name='of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3736d804'/>
+      <elf-symbol name='of_clk_add_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x788ab76'/>
+      <elf-symbol name='of_clk_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x194a950e'/>
+      <elf-symbol name='of_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x952fbb02'/>
+      <elf-symbol name='of_clk_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3795ccd'/>
+      <elf-symbol name='of_clk_get_from_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd304b603'/>
+      <elf-symbol name='of_clk_get_parent_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6462f01'/>
+      <elf-symbol name='of_clk_get_parent_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed43c3d'/>
+      <elf-symbol name='of_clk_hw_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7afc015e'/>
+      <elf-symbol name='of_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c28bd0e'/>
+      <elf-symbol name='of_clk_hw_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5592324a'/>
+      <elf-symbol name='of_clk_set_defaults' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f9f4fbc'/>
+      <elf-symbol name='of_clk_src_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa97f9d40'/>
+      <elf-symbol name='of_clk_src_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x288f3ef9'/>
+      <elf-symbol name='of_count_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb84472d'/>
+      <elf-symbol name='of_devfreq_cooling_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda23a7b3'/>
+      <elf-symbol name='of_devfreq_cooling_register_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad457dac'/>
+      <elf-symbol name='of_device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65c9d92c'/>
+      <elf-symbol name='of_device_is_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6ba282c'/>
+      <elf-symbol name='of_device_is_big_endian' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48931342'/>
+      <elf-symbol name='of_device_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95e7acb9'/>
+      <elf-symbol name='of_device_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1cfc232'/>
+      <elf-symbol name='of_device_request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d024404'/>
+      <elf-symbol name='of_device_uevent_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5425fedf'/>
+      <elf-symbol name='of_dma_configure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0df0fcf'/>
+      <elf-symbol name='of_dma_controller_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd76d1c1'/>
+      <elf-symbol name='of_dma_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d605242'/>
+      <elf-symbol name='of_dma_is_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ef5381'/>
+      <elf-symbol name='of_dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dfc8d8c'/>
+      <elf-symbol name='of_dma_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48f4c8e2'/>
+      <elf-symbol name='of_drm_find_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c6a8ca3'/>
+      <elf-symbol name='of_drm_find_panel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd80a1f24'/>
+      <elf-symbol name='of_fdt_unflatten_tree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeb1ed31'/>
+      <elf-symbol name='of_find_backlight_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc1ac154'/>
+      <elf-symbol name='of_find_compatible_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce68813'/>
+      <elf-symbol name='of_find_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65badb70'/>
+      <elf-symbol name='of_find_i2c_adapter_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29c1756e'/>
+      <elf-symbol name='of_find_i2c_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44d53105'/>
+      <elf-symbol name='of_find_matching_node_and_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bc45817'/>
+      <elf-symbol name='of_find_mipi_dsi_host_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x814822a8'/>
+      <elf-symbol name='of_find_node_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa362d4b2'/>
+      <elf-symbol name='of_find_node_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc202d8e9'/>
+      <elf-symbol name='of_find_node_by_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x200dd54b'/>
+      <elf-symbol name='of_find_node_opts_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8fb835b'/>
+      <elf-symbol name='of_find_node_with_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfee4e10'/>
+      <elf-symbol name='of_find_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7db70629'/>
+      <elf-symbol name='of_genpd_add_provider_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbefad77e'/>
+      <elf-symbol name='of_genpd_add_provider_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf04475d'/>
+      <elf-symbol name='of_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa63596a3'/>
+      <elf-symbol name='of_genpd_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23f9113e'/>
+      <elf-symbol name='of_get_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7404df0'/>
+      <elf-symbol name='of_get_child_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8508d6eb'/>
+      <elf-symbol name='of_get_compatible_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbbd7e76'/>
+      <elf-symbol name='of_get_cpu_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97a99c00'/>
+      <elf-symbol name='of_get_dma_window' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1921669c'/>
+      <elf-symbol name='of_get_drm_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64ed9c03'/>
+      <elf-symbol name='of_get_named_gpio_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26e8dfbf'/>
+      <elf-symbol name='of_get_next_available_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d1d35f3'/>
+      <elf-symbol name='of_get_next_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf9190e'/>
+      <elf-symbol name='of_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc779e5a4'/>
+      <elf-symbol name='of_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48ef4b46'/>
+      <elf-symbol name='of_get_regulator_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x154d6388'/>
+      <elf-symbol name='of_graph_get_endpoint_by_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f111c75'/>
+      <elf-symbol name='of_graph_get_next_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dd0e076'/>
+      <elf-symbol name='of_graph_get_remote_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88536cec'/>
+      <elf-symbol name='of_graph_get_remote_port_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3c8e7f9'/>
+      <elf-symbol name='of_graph_parse_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cb88557'/>
+      <elf-symbol name='of_hwspin_lock_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf973cb70'/>
+      <elf-symbol name='of_hwspin_lock_get_id_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa260e8e6'/>
+      <elf-symbol name='of_icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bcfd803'/>
+      <elf-symbol name='of_icc_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ddde713'/>
+      <elf-symbol name='of_io_request_and_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1718761b'/>
+      <elf-symbol name='of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f37eebe'/>
+      <elf-symbol name='of_irq_find_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6930b45a'/>
+      <elf-symbol name='of_irq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18fa8b95'/>
+      <elf-symbol name='of_irq_get_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92ccc14a'/>
+      <elf-symbol name='of_irq_parse_and_map_pci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x364873ef'/>
+      <elf-symbol name='of_irq_parse_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74a508ee'/>
+      <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='0xe807e766'/>
+      <elf-symbol name='of_match_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0a5495a'/>
+      <elf-symbol name='of_modalias_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe5a4b7a'/>
+      <elf-symbol name='of_n_addr_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ce0b86b'/>
+      <elf-symbol name='of_n_size_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3ba3da7'/>
+      <elf-symbol name='of_node_name_eq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x387573f8'/>
+      <elf-symbol name='of_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc6958b5'/>
+      <elf-symbol name='of_parse_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec6fc1b0'/>
+      <elf-symbol name='of_parse_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe0232ab'/>
+      <elf-symbol name='of_parse_phandle_with_fixed_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3598e1e'/>
+      <elf-symbol name='of_phandle_iterator_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73ae0a62'/>
+      <elf-symbol name='of_phandle_iterator_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe7c4992'/>
+      <elf-symbol name='of_phy_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66d543e'/>
+      <elf-symbol name='of_platform_depopulate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e577d49'/>
+      <elf-symbol name='of_platform_device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74b2577f'/>
+      <elf-symbol name='of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c2a900b'/>
+      <elf-symbol name='of_prop_next_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d33f9f'/>
+      <elf-symbol name='of_prop_next_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf1bcc83'/>
+      <elf-symbol name='of_property_count_elems_of_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77a3b094'/>
+      <elf-symbol name='of_property_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d4b04ce'/>
+      <elf-symbol name='of_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe50aea16'/>
+      <elf-symbol name='of_property_read_string_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe328ce45'/>
+      <elf-symbol name='of_property_read_u32_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f80a27f'/>
+      <elf-symbol name='of_property_read_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e6cbb47'/>
+      <elf-symbol name='of_property_read_variable_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef880c62'/>
+      <elf-symbol name='of_property_read_variable_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x971828b4'/>
+      <elf-symbol name='of_property_read_variable_u64_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44f03f24'/>
+      <elf-symbol name='of_property_read_variable_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b67bc45'/>
+      <elf-symbol name='of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17b9bfb'/>
+      <elf-symbol name='of_pwm_xlate_with_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81af1be4'/>
+      <elf-symbol name='of_reserved_mem_device_init_by_idx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9131dd1c'/>
+      <elf-symbol name='of_reserved_mem_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6488038'/>
+      <elf-symbol name='of_reserved_mem_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x384bb2e7'/>
+      <elf-symbol name='of_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61fcb000'/>
+      <elf-symbol name='of_thermal_get_ntrips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf7fd88f'/>
+      <elf-symbol name='of_thermal_get_trip_points' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f070104'/>
+      <elf-symbol name='of_thermal_is_trip_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x287171cf'/>
+      <elf-symbol name='of_translate_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4517165e'/>
+      <elf-symbol name='of_usb_get_phy_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17b0fed'/>
+      <elf-symbol name='of_usb_host_tpl_support' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbaa5b6fe'/>
+      <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='0x61e173cb'/>
+      <elf-symbol name='out_of_line_wait_on_bit_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3687850'/>
+      <elf-symbol name='override_creds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x459c9429'/>
+      <elf-symbol name='page_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd053b23a'/>
+      <elf-symbol name='page_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x413edec4'/>
+      <elf-symbol name='page_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa326173e'/>
+      <elf-symbol name='pagecache_get_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71057e4'/>
+      <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='0x9a17e736'/>
+      <elf-symbol name='param_get_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f7f0fb8'/>
+      <elf-symbol name='param_set_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ba1aee4'/>
+      <elf-symbol name='param_set_copystring' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x702660dd'/>
+      <elf-symbol name='param_set_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x639edb1'/>
+      <elf-symbol name='passthru_features_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0b1df11'/>
+      <elf-symbol name='path_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc34087f'/>
+      <elf-symbol name='path_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf693cbba'/>
+      <elf-symbol name='pci_alloc_irq_vectors_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5057cd78'/>
+      <elf-symbol name='pci_assign_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5dd30f0'/>
+      <elf-symbol name='pci_assign_unassigned_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c036f80'/>
+      <elf-symbol name='pci_bus_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d0713e7'/>
+      <elf-symbol name='pci_clear_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fd69de1'/>
+      <elf-symbol name='pci_clear_mwi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbe8cec'/>
+      <elf-symbol name='pci_common_swizzle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fab70e5'/>
+      <elf-symbol name='pci_d3cold_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb146b347'/>
+      <elf-symbol name='pci_dev_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc675ca1d'/>
+      <elf-symbol name='pci_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d799d3c'/>
+      <elf-symbol name='pci_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf5cad3a'/>
+      <elf-symbol name='pci_device_is_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66acd847'/>
+      <elf-symbol name='pci_disable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b641a41'/>
+      <elf-symbol name='pci_disable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5330791'/>
+      <elf-symbol name='pci_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcee8195'/>
+      <elf-symbol name='pci_enable_device_mem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacdc7a14'/>
+      <elf-symbol name='pci_enable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44d93d94'/>
+      <elf-symbol name='pci_find_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x690a93f0'/>
+      <elf-symbol name='pci_find_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x776a3800'/>
+      <elf-symbol name='pci_find_ext_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa064a9c'/>
+      <elf-symbol name='pci_find_next_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f48eaf6'/>
+      <elf-symbol name='pci_find_pcie_root_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc76fa8e'/>
+      <elf-symbol name='pci_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9c7953f'/>
+      <elf-symbol name='pci_free_irq_vectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dcdb705'/>
+      <elf-symbol name='pci_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b34f24a'/>
+      <elf-symbol name='pci_get_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7d02dd1'/>
+      <elf-symbol name='pci_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5204ebd9'/>
+      <elf-symbol name='pci_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe59a5dd2'/>
+      <elf-symbol name='pci_iomap_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fdcfe2a'/>
+      <elf-symbol name='pci_ioremap_bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x616b4d15'/>
+      <elf-symbol name='pci_irq_get_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89d08f1b'/>
+      <elf-symbol name='pci_irq_vector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bfb27cb'/>
+      <elf-symbol name='pci_load_and_free_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392a5810'/>
+      <elf-symbol name='pci_load_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa609333e'/>
+      <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='0x6483e68d'/>
+      <elf-symbol name='pci_msi_create_irq_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7557cec4'/>
+      <elf-symbol name='pci_msi_mask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x355f741f'/>
+      <elf-symbol name='pci_msi_unmask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb8d28b3'/>
+      <elf-symbol name='pci_read_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3162766a'/>
+      <elf-symbol name='pci_read_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1217a2df'/>
+      <elf-symbol name='pci_read_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ce19edf'/>
+      <elf-symbol name='pci_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1d9235e'/>
+      <elf-symbol name='pci_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70202724'/>
+      <elf-symbol name='pci_release_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e14d54e'/>
+      <elf-symbol name='pci_request_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x859c2974'/>
+      <elf-symbol name='pci_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa04199c7'/>
+      <elf-symbol name='pci_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa41fffb5'/>
+      <elf-symbol name='pci_request_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x126c993'/>
+      <elf-symbol name='pci_rescan_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26154de1'/>
+      <elf-symbol name='pci_restore_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa94e4b7d'/>
+      <elf-symbol name='pci_save_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaded8048'/>
+      <elf-symbol name='pci_scan_child_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dd57d62'/>
+      <elf-symbol name='pci_scan_root_bus_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5baac4f'/>
+      <elf-symbol name='pci_select_bars' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a1bc525'/>
+      <elf-symbol name='pci_set_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x593c8eaf'/>
+      <elf-symbol name='pci_set_mwi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3d3d564'/>
+      <elf-symbol name='pci_set_power_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57c5b267'/>
+      <elf-symbol name='pci_stop_and_remove_bus_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21129fa7'/>
+      <elf-symbol name='pci_store_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba310c8f'/>
+      <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='0xd2f0955b'/>
+      <elf-symbol name='pci_walk_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd50a80f'/>
+      <elf-symbol name='pci_write_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20447f6a'/>
+      <elf-symbol name='pci_write_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d2d8bf9'/>
+      <elf-symbol name='pci_write_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeed46c1f'/>
+      <elf-symbol name='pcie_aspm_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21ba4beb'/>
+      <elf-symbol name='pcie_bus_configure_settings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59ef7bf8'/>
+      <elf-symbol name='pcie_capability_read_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84e766eb'/>
+      <elf-symbol name='pcie_capability_write_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61a3bed9'/>
+      <elf-symbol name='pcim_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc88dabc'/>
+      <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='0x4c5755ff'/>
+      <elf-symbol name='perf_event_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3851ca2'/>
+      <elf-symbol name='perf_event_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6954601a'/>
+      <elf-symbol name='perf_event_read_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde1e27b7'/>
+      <elf-symbol name='perf_event_release_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1c29f56'/>
+      <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='0xc3b715d7'/>
+      <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='0xa7e45849'/>
+      <elf-symbol name='phy_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb2d7f03'/>
+      <elf-symbol name='phy_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x174d7ace'/>
+      <elf-symbol name='phy_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47eca431'/>
+      <elf-symbol name='phy_ethtool_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca1e8ab2'/>
+      <elf-symbol name='phy_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd6ca20f'/>
+      <elf-symbol name='phy_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39c49800'/>
+      <elf-symbol name='phy_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59698e39'/>
+      <elf-symbol name='phy_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb223904'/>
+      <elf-symbol name='phy_pm_runtime_get_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf10ae0ba'/>
+      <elf-symbol name='phy_pm_runtime_put_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc48b0db7'/>
+      <elf-symbol name='phy_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67f09085'/>
+      <elf-symbol name='phy_power_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cd237bd'/>
+      <elf-symbol name='phy_print_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63631252'/>
+      <elf-symbol name='phy_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c5543a4'/>
+      <elf-symbol name='phy_set_mode_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb9540c7'/>
+      <elf-symbol name='phy_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d74289b'/>
+      <elf-symbol name='phy_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6ebcc0d'/>
+      <elf-symbol name='pid_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58664536'/>
+      <elf-symbol name='pin_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd9456f'/>
+      <elf-symbol name='pinconf_generic_dt_node_to_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf939bee6'/>
+      <elf-symbol name='pinconf_generic_parse_dt_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72d27b3d'/>
+      <elf-symbol name='pinctrl_add_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2c2d44'/>
+      <elf-symbol name='pinctrl_dev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddf23e46'/>
+      <elf-symbol name='pinctrl_force_sleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc45e2fb8'/>
+      <elf-symbol name='pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65023bbd'/>
+      <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='0xb0cefe70'/>
+      <elf-symbol name='pinctrl_pm_select_default_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f5a3f47'/>
+      <elf-symbol name='pinctrl_pm_select_idle_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8243ee3a'/>
+      <elf-symbol name='pinctrl_pm_select_sleep_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cae618d'/>
+      <elf-symbol name='pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4dce961'/>
+      <elf-symbol name='pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x461037da'/>
+      <elf-symbol name='pinctrl_remove_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50ef9dc6'/>
+      <elf-symbol name='pinctrl_select_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x402c88c8'/>
+      <elf-symbol name='pinctrl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc283ce9e'/>
+      <elf-symbol name='pinctrl_utils_add_map_configs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc6382d0'/>
+      <elf-symbol name='pinctrl_utils_add_map_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf36a3376'/>
+      <elf-symbol name='pinctrl_utils_free_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d6273a1'/>
+      <elf-symbol name='pinctrl_utils_reserve_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaea42689'/>
+      <elf-symbol name='pipe_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83c36994'/>
+      <elf-symbol name='pipe_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e2cccde'/>
+      <elf-symbol name='platform_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93cdaf9b'/>
+      <elf-symbol name='platform_device_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1fb95a3'/>
+      <elf-symbol name='platform_device_add_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2684fa9a'/>
+      <elf-symbol name='platform_device_add_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e9eb8ef'/>
+      <elf-symbol name='platform_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5144cf41'/>
+      <elf-symbol name='platform_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5bfea34'/>
+      <elf-symbol name='platform_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf7155b9'/>
+      <elf-symbol name='platform_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe674baaa'/>
+      <elf-symbol name='platform_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8581c1a'/>
+      <elf-symbol name='platform_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bdf01f0'/>
+      <elf-symbol name='platform_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa10e5bce'/>
+      <elf-symbol name='platform_get_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf49828ba'/>
+      <elf-symbol name='platform_get_irq_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3863c997'/>
+      <elf-symbol name='platform_get_irq_byname_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23ee7002'/>
+      <elf-symbol name='platform_get_irq_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce3e4b17'/>
+      <elf-symbol name='platform_get_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1a3e01d'/>
+      <elf-symbol name='platform_get_resource_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb6fce46'/>
+      <elf-symbol name='platform_irq_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f5bdb9a'/>
+      <elf-symbol name='platform_unregister_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d11bd80'/>
+      <elf-symbol name='pm_generic_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecf78783'/>
+      <elf-symbol name='pm_generic_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda34e4f9'/>
+      <elf-symbol name='pm_generic_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a9a6ca1'/>
+      <elf-symbol name='pm_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda7c37e0'/>
+      <elf-symbol name='pm_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadce1011'/>
+      <elf-symbol name='pm_genpd_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b81c9d3'/>
+      <elf-symbol name='pm_genpd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57ea7103'/>
+      <elf-symbol name='pm_genpd_remove_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94a26850'/>
+      <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='0x665f7074'/>
+      <elf-symbol name='pm_runtime_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6f338c'/>
+      <elf-symbol name='pm_runtime_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dd5097f'/>
+      <elf-symbol name='pm_runtime_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f80aa85'/>
+      <elf-symbol name='pm_runtime_forbid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea760284'/>
+      <elf-symbol name='pm_runtime_force_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f3ef179'/>
+      <elf-symbol name='pm_runtime_force_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67ad012b'/>
+      <elf-symbol name='pm_runtime_get_if_in_use' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93efc1a3'/>
+      <elf-symbol name='pm_runtime_irq_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe60408f2'/>
+      <elf-symbol name='pm_runtime_no_callbacks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x326fdbe4'/>
+      <elf-symbol name='pm_runtime_set_autosuspend_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1425b024'/>
+      <elf-symbol name='pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea99efce'/>
+      <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='0x6409c7b7'/>
+      <elf-symbol name='pm_wakeup_ws_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d37cd46'/>
+      <elf-symbol name='policy_has_boost_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e44f9c5'/>
+      <elf-symbol name='posix_acl_from_xattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fe7c3c7'/>
+      <elf-symbol name='power_supply_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x652add1e'/>
+      <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='0x6c85386a'/>
+      <elf-symbol name='power_supply_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x198b4769'/>
+      <elf-symbol name='power_supply_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a351d0'/>
+      <elf-symbol name='power_supply_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccee3671'/>
+      <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='0xacbd8016'/>
+      <elf-symbol name='power_supply_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cb73eca'/>
+      <elf-symbol name='power_supply_put_battery_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62a0d2c8'/>
+      <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='0x1a24e4ae'/>
+      <elf-symbol name='power_supply_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2aafc3f'/>
+      <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='0x80e5724f'/>
+      <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='0xe5a9bf48'/>
+      <elf-symbol name='prepare_creds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2823e32'/>
+      <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='print_hex_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x167c5967'/>
+      <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='0xad09cc48'/>
+      <elf-symbol name='proc_create_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc02f7c08'/>
+      <elf-symbol name='proc_create_net_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe55d60da'/>
+      <elf-symbol name='proc_create_net_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64172d5'/>
+      <elf-symbol name='proc_create_seq_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x660843bf'/>
+      <elf-symbol name='proc_create_single_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8f016d4'/>
+      <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='0x6f5399fd'/>
+      <elf-symbol name='proc_mkdir_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ebb2b68'/>
+      <elf-symbol name='proc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4df60d7'/>
+      <elf-symbol name='proto_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecf3fdf1'/>
+      <elf-symbol name='proto_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0ab0cc9'/>
+      <elf-symbol name='pskb_expand_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63e827a5'/>
+      <elf-symbol name='put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2f0101f'/>
+      <elf-symbol name='put_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53d98a1c'/>
+      <elf-symbol name='put_pages_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0009fee'/>
+      <elf-symbol name='put_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e5575fb'/>
+      <elf-symbol name='put_tty_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb76037b'/>
+      <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='0x4e15930'/>
+      <elf-symbol name='pwm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9757328'/>
+      <elf-symbol name='pwm_get_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e390fe4'/>
+      <elf-symbol name='pwm_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9256b063'/>
+      <elf-symbol name='pwm_set_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4afb319c'/>
+      <elf-symbol name='pwmchip_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b065521'/>
+      <elf-symbol name='pwmchip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7042d1c'/>
+      <elf-symbol name='qcom_smem_state_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cf93ebc'/>
+      <elf-symbol name='qcom_smem_state_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89fbcd3f'/>
+      <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='0x46b69050'/>
+      <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_gang_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b27729b'/>
+      <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='radix_tree_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32ce3777'/>
+      <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='rcu_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a13e90'/>
+      <elf-symbol name='rdev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a9ed839'/>
+      <elf-symbol name='rdev_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf50c7d70'/>
+      <elf-symbol name='read_cache_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5da9de7d'/>
+      <elf-symbol name='read_cache_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9af5118'/>
+      <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='0x2212aa40'/>
+      <elf-symbol name='regcache_drop_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x824e785a'/>
+      <elf-symbol name='regcache_mark_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61638962'/>
+      <elf-symbol name='regcache_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaabc0b6d'/>
+      <elf-symbol name='regcache_sync_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1660e911'/>
+      <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='0xf10a5568'/>
+      <elf-symbol name='register_die_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6261484'/>
+      <elf-symbol name='register_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6f0414f'/>
+      <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_net_sysctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f0155ea'/>
+      <elf-symbol name='register_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a8f871c'/>
+      <elf-symbol name='register_netdevice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2381ad80'/>
+      <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='0xd483f854'/>
+      <elf-symbol name='register_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31834b10'/>
+      <elf-symbol name='register_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cc4f70a'/>
+      <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='0xf5e500c3'/>
+      <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_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d316fa1'/>
+      <elf-symbol name='register_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc281f8b'/>
+      <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='0x75dd3237'/>
+      <elf-symbol name='regmap_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ca2ad99'/>
+      <elf-symbol name='regmap_bulk_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13f0d715'/>
+      <elf-symbol name='regmap_bulk_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33e7568e'/>
+      <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='0xac28a684'/>
+      <elf-symbol name='regmap_field_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f26cec'/>
+      <elf-symbol name='regmap_field_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2cea719'/>
+      <elf-symbol name='regmap_get_reg_stride' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a0a45f'/>
+      <elf-symbol name='regmap_get_val_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2afd703b'/>
+      <elf-symbol name='regmap_irq_get_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53abbe2'/>
+      <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='0x953969e9'/>
+      <elf-symbol name='regmap_multi_reg_write_bypassed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa9b75c5'/>
+      <elf-symbol name='regmap_raw_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87012325'/>
+      <elf-symbol name='regmap_raw_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52f1a7cd'/>
+      <elf-symbol name='regmap_raw_write_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47ba8421'/>
+      <elf-symbol name='regmap_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30d885e2'/>
+      <elf-symbol name='regmap_register_patch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9749c29'/>
+      <elf-symbol name='regmap_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39d75ac4'/>
+      <elf-symbol name='regmap_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x364d60bd'/>
+      <elf-symbol name='regulator_bulk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad737d82'/>
+      <elf-symbol name='regulator_bulk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfba99ed2'/>
+      <elf-symbol name='regulator_count_voltages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0b495e6'/>
+      <elf-symbol name='regulator_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d6671d0'/>
+      <elf-symbol name='regulator_disable_deferred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66859d40'/>
+      <elf-symbol name='regulator_disable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3fdf22'/>
+      <elf-symbol name='regulator_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fbbff13'/>
+      <elf-symbol name='regulator_enable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d42c6db'/>
+      <elf-symbol name='regulator_force_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbf66280'/>
+      <elf-symbol name='regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2827cfd'/>
+      <elf-symbol name='regulator_get_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43988835'/>
+      <elf-symbol name='regulator_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91e75d8a'/>
+      <elf-symbol name='regulator_get_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x722a0c6c'/>
+      <elf-symbol name='regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bb8ea63'/>
+      <elf-symbol name='regulator_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96899fab'/>
+      <elf-symbol name='regulator_get_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec2a0f36'/>
+      <elf-symbol name='regulator_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b4ac6ae'/>
+      <elf-symbol name='regulator_is_enabled_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dc8f34f'/>
+      <elf-symbol name='regulator_is_supported_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43553283'/>
+      <elf-symbol name='regulator_list_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee555ef9'/>
+      <elf-symbol name='regulator_list_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e71fed8'/>
+      <elf-symbol name='regulator_list_voltage_linear_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50178271'/>
+      <elf-symbol name='regulator_list_voltage_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8615ba4b'/>
+      <elf-symbol name='regulator_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15c3d371'/>
+      <elf-symbol name='regulator_map_voltage_ascend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81ec7c66'/>
+      <elf-symbol name='regulator_map_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7d33fe4'/>
+      <elf-symbol name='regulator_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x242c4159'/>
+      <elf-symbol name='regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d1389c5'/>
+      <elf-symbol name='regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1280f22a'/>
+      <elf-symbol name='regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8971cb0'/>
+      <elf-symbol name='regulator_set_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee7e8300'/>
+      <elf-symbol name='regulator_set_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c681954'/>
+      <elf-symbol name='regulator_set_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77172d4b'/>
+      <elf-symbol name='regulator_set_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2725f0f'/>
+      <elf-symbol name='regulator_set_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeadc39e3'/>
+      <elf-symbol name='regulator_set_voltage_time_sel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27e89408'/>
+      <elf-symbol name='regulator_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48a86cb5'/>
+      <elf-symbol name='regulator_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x815c154a'/>
+      <elf-symbol name='regulator_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87ce27c9'/>
+      <elf-symbol name='regulatory_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3961b71'/>
+      <elf-symbol name='regulatory_set_wiphy_regd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcee68bde'/>
+      <elf-symbol name='release_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d1e83bb'/>
+      <elf-symbol name='release_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9706ef15'/>
+      <elf-symbol name='release_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7cc1545'/>
+      <elf-symbol name='remap_pfn_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1020353c'/>
+      <elf-symbol name='remap_vmalloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf2bbe7c'/>
+      <elf-symbol name='remove_arg_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x339110d9'/>
+      <elf-symbol name='remove_proc_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6c3a168'/>
+      <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='0xe609683e'/>
+      <elf-symbol name='request_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1ef5625'/>
+      <elf-symbol name='request_firmware_direct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bec84de'/>
+      <elf-symbol name='request_firmware_into_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dafe244'/>
+      <elf-symbol name='request_firmware_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8764020'/>
+      <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='0x33249923'/>
+      <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='0x3db74eae'/>
+      <elf-symbol name='revert_creds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83ca6a2f'/>
+      <elf-symbol name='rfkill_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x917fe7ed'/>
+      <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='rpmh_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54e5b019'/>
+      <elf-symbol name='rpmh_invalidate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9990301e'/>
+      <elf-symbol name='rpmh_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9e96214'/>
+      <elf-symbol name='rpmh_write_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab28c955'/>
+      <elf-symbol name='rpmh_write_batch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa014ff83'/>
+      <elf-symbol name='rpmsg_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fb963fd'/>
+      <elf-symbol name='rpmsg_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43aca32c'/>
+      <elf-symbol name='rpmsg_trysend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4f10c7f'/>
+      <elf-symbol name='rpmsg_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x638e84c2'/>
+      <elf-symbol name='rproc_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2b79ce3'/>
+      <elf-symbol name='rproc_add_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82251857'/>
+      <elf-symbol name='rproc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84bc5ade'/>
+      <elf-symbol name='rproc_coredump_add_custom_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3eabc0c'/>
+      <elf-symbol name='rproc_coredump_add_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f153104'/>
+      <elf-symbol name='rproc_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30c1fd3b'/>
+      <elf-symbol name='rproc_elf_get_boot_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e7ba5f8'/>
+      <elf-symbol name='rproc_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bc7c820'/>
+      <elf-symbol name='rproc_get_by_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca0dfd05'/>
+      <elf-symbol name='rproc_remove_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ba91bd2'/>
+      <elf-symbol name='rproc_report_crash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55851d1a'/>
+      <elf-symbol name='rq_flush_dcache_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ef6d4bc'/>
+      <elf-symbol name='rt6_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x963ebe1e'/>
+      <elf-symbol name='rt_mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b29f2c1'/>
+      <elf-symbol name='rtc_class_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97da257c'/>
+      <elf-symbol name='rtc_class_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2af9e19'/>
+      <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='0xb05a9c2e'/>
+      <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='0xf9e4fd02'/>
+      <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='0x2e464b80'/>
+      <elf-symbol name='rtnl_link_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47fccf2a'/>
+      <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='0x12bab623'/>
+      <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='0xf9c5cc03'/>
+      <elf-symbol name='sb800_prefetch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa801315'/>
+      <elf-symbol name='sb_min_blocksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4481d08f'/>
+      <elf-symbol name='sb_set_blocksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e08e32'/>
+      <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='0xa71b9bb7'/>
+      <elf-symbol name='sched_setscheduler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd4d3531'/>
+      <elf-symbol name='sched_setscheduler_nocheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40223a21'/>
+      <elf-symbol name='sched_show_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2c7105e'/>
+      <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='0x11077018'/>
+      <elf-symbol name='scmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef7bb4f1'/>
+      <elf-symbol name='scmi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3861c0db'/>
+      <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='0x58184b3f'/>
+      <elf-symbol name='scsi_autopm_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f7983d5'/>
+      <elf-symbol name='scsi_autopm_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46d23ecf'/>
+      <elf-symbol name='scsi_block_requests' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45fa61d2'/>
+      <elf-symbol name='scsi_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf88f9c5a'/>
+      <elf-symbol name='scsi_change_queue_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda7de959'/>
+      <elf-symbol name='scsi_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ee9eaa5'/>
+      <elf-symbol name='scsi_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b94ce97'/>
+      <elf-symbol name='scsi_eh_prep_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x696aca7c'/>
+      <elf-symbol name='scsi_eh_restore_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2ed8cab'/>
+      <elf-symbol name='scsi_get_host_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd64ebf46'/>
+      <elf-symbol name='scsi_host_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6aabf3d'/>
+      <elf-symbol name='scsi_host_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f354dde'/>
+      <elf-symbol name='scsi_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb9653fc'/>
+      <elf-symbol name='scsi_ioctl_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ce90d1d'/>
+      <elf-symbol name='scsi_is_host_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6dadf68'/>
+      <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='0x34383bec'/>
+      <elf-symbol name='scsi_print_sense_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x629f0c01'/>
+      <elf-symbol name='scsi_register_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9184edc0'/>
+      <elf-symbol name='scsi_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4866f4ea'/>
+      <elf-symbol name='scsi_report_bus_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8970262'/>
+      <elf-symbol name='scsi_report_device_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdb47395'/>
+      <elf-symbol name='scsi_scan_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa3447aa'/>
+      <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='0x87868aae'/>
+      <elf-symbol name='sdev_prefix_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c3a311'/>
+      <elf-symbol name='sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c622e28'/>
+      <elf-symbol name='sdhci_cleanup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x563885f2'/>
+      <elf-symbol name='sdhci_cqe_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b3eeb4c'/>
+      <elf-symbol name='sdhci_cqe_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8477bc42'/>
+      <elf-symbol name='sdhci_cqe_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaf23918'/>
+      <elf-symbol name='sdhci_enable_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc25691e8'/>
+      <elf-symbol name='sdhci_enable_v4_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba1ed732'/>
+      <elf-symbol name='sdhci_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c471729'/>
+      <elf-symbol name='sdhci_pltfm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1f3a81c'/>
+      <elf-symbol name='sdhci_pltfm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3efa174a'/>
+      <elf-symbol name='sdhci_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23398285'/>
+      <elf-symbol name='sdhci_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa6b4602'/>
+      <elf-symbol name='sdhci_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5104b83'/>
+      <elf-symbol name='sdhci_runtime_resume_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cce3b57'/>
+      <elf-symbol name='sdhci_runtime_suspend_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3153901'/>
+      <elf-symbol name='sdhci_set_bus_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbbfef6d'/>
+      <elf-symbol name='sdhci_setup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51e232cd'/>
+      <elf-symbol name='sdio_align_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb90f2554'/>
+      <elf-symbol name='sdio_claim_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2f8012e'/>
+      <elf-symbol name='sdio_disable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x523b6eff'/>
+      <elf-symbol name='sdio_enable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf698c58d'/>
+      <elf-symbol name='sdio_f0_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64603bf3'/>
+      <elf-symbol name='sdio_f0_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6187e27'/>
+      <elf-symbol name='sdio_get_host_pm_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcea503b3'/>
+      <elf-symbol name='sdio_memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4fd9099'/>
+      <elf-symbol name='sdio_memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe66b067b'/>
+      <elf-symbol name='sdio_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd893ac89'/>
+      <elf-symbol name='sdio_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdef8759c'/>
+      <elf-symbol name='sdio_readsb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb4421c7'/>
+      <elf-symbol name='sdio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x475ab95'/>
+      <elf-symbol name='sdio_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x273edc2b'/>
+      <elf-symbol name='sdio_set_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8f2aa07'/>
+      <elf-symbol name='sdio_set_host_pm_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x162f7282'/>
+      <elf-symbol name='sdio_signal_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f1b4736'/>
+      <elf-symbol name='sdio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9f62348'/>
+      <elf-symbol name='sdio_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba413515'/>
+      <elf-symbol name='sdio_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde72b8fe'/>
+      <elf-symbol name='sdio_writesb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37f8f2fb'/>
+      <elf-symbol name='search_binary_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb63d05c'/>
+      <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='0xfa3fbcbe'/>
+      <elf-symbol name='securityfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e555f92'/>
+      <elf-symbol name='securityfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x730b8962'/>
+      <elf-symbol name='send_sig_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50d9adf2'/>
+      <elf-symbol name='seq_file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x457f8430'/>
+      <elf-symbol name='seq_hex_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf02b50cf'/>
+      <elf-symbol name='seq_lseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2c12192'/>
+      <elf-symbol name='seq_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16fd4d11'/>
+      <elf-symbol name='seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60cf8f2a'/>
+      <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9c6a1c2'/>
+      <elf-symbol name='seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89074bc9'/>
+      <elf-symbol name='seq_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeca26a2'/>
+      <elf-symbol name='seq_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc43c91b5'/>
+      <elf-symbol name='seq_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23a9bb7'/>
+      <elf-symbol name='seq_release_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f75fdee'/>
+      <elf-symbol name='seq_vprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88bda7e4'/>
+      <elf-symbol name='seq_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c6456ee'/>
+      <elf-symbol name='serdev_device_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18511903'/>
+      <elf-symbol name='serdev_device_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8c25612'/>
+      <elf-symbol name='serdev_device_set_baudrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4f342a2'/>
+      <elf-symbol name='serdev_device_set_flow_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52e4965d'/>
+      <elf-symbol name='serdev_device_wait_until_sent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8a76e92'/>
+      <elf-symbol name='serdev_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8080a15'/>
+      <elf-symbol name='serdev_device_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48072325'/>
+      <elf-symbol name='serial8250_get_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc82e78f1'/>
+      <elf-symbol name='serial8250_register_8250_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbb295d9'/>
+      <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='0x8664ae17'/>
+      <elf-symbol name='serio_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2079409e'/>
+      <elf-symbol name='serio_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1890c73f'/>
+      <elf-symbol name='serio_reconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87590d4f'/>
+      <elf-symbol name='serio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78a5af2e'/>
+      <elf-symbol name='serio_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ca70259'/>
+      <elf-symbol name='set_anon_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x773cd1a3'/>
+      <elf-symbol name='set_cpus_allowed_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2ecb96'/>
+      <elf-symbol name='set_disk_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x412378cf'/>
+      <elf-symbol name='set_freezable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e61bb05'/>
+      <elf-symbol name='set_fs_pwd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7a97a2c'/>
+      <elf-symbol name='set_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdf9dc4d'/>
+      <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='0xbab5df78'/>
+      <elf-symbol name='set_page_dirty_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30e9e882'/>
+      <elf-symbol name='set_user_nice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdbd0b6d'/>
+      <elf-symbol name='setattr_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x289bb6ba'/>
+      <elf-symbol name='setattr_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5f9a7aa'/>
+      <elf-symbol name='setup_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d98a857'/>
+      <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='0xc7df8275'/>
+      <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='0xc44e6c9f'/>
+      <elf-symbol name='sg_miter_skip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ca1f5c'/>
+      <elf-symbol name='sg_miter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ddd978b'/>
+      <elf-symbol name='sg_miter_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7805a6e'/>
+      <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='0xd5aaa5b6'/>
+      <elf-symbol name='sg_zero_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d192c70'/>
+      <elf-symbol name='sget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb114de2'/>
+      <elf-symbol name='sget_fc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x745b16f'/>
+      <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='shmem_file_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5015ad3'/>
+      <elf-symbol name='shmem_read_mapping_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf441b5aa'/>
+      <elf-symbol name='shmem_truncate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a44c8e2'/>
+      <elf-symbol name='shrink_dcache_sb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ba94901'/>
+      <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='simple_attr_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e1f44f1'/>
+      <elf-symbol name='simple_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x755a1383'/>
+      <elf-symbol name='simple_attr_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5667b8b8'/>
+      <elf-symbol name='simple_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f180d84'/>
+      <elf-symbol name='simple_fill_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40dc45a3'/>
+      <elf-symbol name='simple_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x711146c9'/>
+      <elf-symbol name='simple_getattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6f9d6e0'/>
+      <elf-symbol name='simple_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13d6b8c1'/>
+      <elf-symbol name='simple_pin_fs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9e265ea'/>
+      <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='0x76af489e'/>
+      <elf-symbol name='simple_setattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe85a1473'/>
+      <elf-symbol name='simple_statfs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb1a632'/>
+      <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='0xab1920ff'/>
+      <elf-symbol name='single_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90d6f602'/>
+      <elf-symbol name='sk_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x597fe688'/>
+      <elf-symbol name='sk_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a1af697'/>
+      <elf-symbol name='skb_add_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4daaeca3'/>
+      <elf-symbol name='skb_append_pagefrags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde07bc1b'/>
+      <elf-symbol name='skb_checksum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x649c9263'/>
+      <elf-symbol name='skb_checksum_help' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec8ae0d3'/>
+      <elf-symbol name='skb_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55b96440'/>
+      <elf-symbol name='skb_coalesce_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e486022'/>
+      <elf-symbol name='skb_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d9a97ec'/>
+      <elf-symbol name='skb_copy_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34abb196'/>
+      <elf-symbol name='skb_copy_datagram_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b8002bc'/>
+      <elf-symbol name='skb_copy_expand' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15fe7c48'/>
+      <elf-symbol name='skb_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x309e018'/>
+      <elf-symbol name='skb_free_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x796b7b85'/>
+      <elf-symbol name='skb_page_frag_refill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a19aed9'/>
+      <elf-symbol name='skb_partial_csum_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1649bb3a'/>
+      <elf-symbol name='skb_pull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79e95e57'/>
+      <elf-symbol name='skb_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46282ec0'/>
+      <elf-symbol name='skb_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5b7eb23'/>
+      <elf-symbol name='skb_queue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3438291d'/>
+      <elf-symbol name='skb_queue_purge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab5bb7f3'/>
+      <elf-symbol name='skb_queue_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57632318'/>
+      <elf-symbol name='skb_realloc_headroom' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49f4b653'/>
+      <elf-symbol name='skb_recv_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aa5b62e'/>
+      <elf-symbol name='skb_set_owner_w' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20a4731f'/>
+      <elf-symbol name='skb_store_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc217e73'/>
+      <elf-symbol name='skb_to_sgvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b455a93'/>
+      <elf-symbol name='skb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ce28195'/>
+      <elf-symbol name='skb_tstamp_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4554572'/>
+      <elf-symbol name='skb_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5e54f84'/>
+      <elf-symbol name='skcipher_walk_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x836e06e9'/>
+      <elf-symbol name='skcipher_walk_virt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64bb0b3'/>
+      <elf-symbol name='skip_spaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0a91bab'/>
+      <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='0xc97281ad'/>
+      <elf-symbol name='snd_card_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab8f9e92'/>
+      <elf-symbol name='snd_card_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd4034fd'/>
+      <elf-symbol name='snd_card_free_when_closed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68d21d7'/>
+      <elf-symbol name='snd_card_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aa724c8'/>
+      <elf-symbol name='snd_card_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca96c4c3'/>
+      <elf-symbol name='snd_card_rw_proc_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ac029bb'/>
+      <elf-symbol name='snd_component_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff333fe7'/>
+      <elf-symbol name='snd_compr_stop_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa500e3aa'/>
+      <elf-symbol name='snd_ctl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x975f8e79'/>
+      <elf-symbol name='snd_ctl_add_vmaster_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60af951c'/>
+      <elf-symbol name='snd_ctl_apply_vmaster_slaves' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefa3dd18'/>
+      <elf-symbol name='snd_ctl_boolean_mono_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb613e2ec'/>
+      <elf-symbol name='snd_ctl_boolean_stereo_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd93b6cc5'/>
+      <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='0x44aedd69'/>
+      <elf-symbol name='snd_ctl_make_virtual_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d48a579'/>
+      <elf-symbol name='snd_ctl_new1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeacf5703'/>
+      <elf-symbol name='snd_ctl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ba4e942'/>
+      <elf-symbol name='snd_ctl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbe21734'/>
+      <elf-symbol name='snd_ctl_remove_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82a22389'/>
+      <elf-symbol name='snd_ctl_sync_vmaster' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc26db7f2'/>
+      <elf-symbol name='snd_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c06ffe7'/>
+      <elf-symbol name='snd_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7617f27a'/>
+      <elf-symbol name='snd_device_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe21ab12f'/>
+      <elf-symbol name='snd_dma_alloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4865eb18'/>
+      <elf-symbol name='snd_dma_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x520634a4'/>
+      <elf-symbol name='snd_dmaengine_pcm_close_release_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c6ff225'/>
+      <elf-symbol name='snd_dmaengine_pcm_get_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97e16269'/>
+      <elf-symbol name='snd_dmaengine_pcm_open_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9acb8f18'/>
+      <elf-symbol name='snd_dmaengine_pcm_pointer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4bf5381'/>
+      <elf-symbol name='snd_dmaengine_pcm_prepare_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x296c686'/>
+      <elf-symbol name='snd_dmaengine_pcm_trigger' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ad5a1e1'/>
+      <elf-symbol name='snd_hwdep_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38e44914'/>
+      <elf-symbol name='snd_hwparams_to_dma_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f2eaf5c'/>
+      <elf-symbol name='snd_info_create_card_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x372c89aa'/>
+      <elf-symbol name='snd_info_create_module_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b711c52'/>
+      <elf-symbol name='snd_info_free_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb94b6879'/>
+      <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='0x909dfe27'/>
+      <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='0x80405dd9'/>
+      <elf-symbol name='snd_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x873853b5'/>
+      <elf-symbol name='snd_jack_set_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc60adb71'/>
+      <elf-symbol name='snd_pci_quirk_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42a0fc21'/>
+      <elf-symbol name='snd_pcm_add_chmap_ctls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bd22419'/>
+      <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='0x7980a8d1'/>
+      <elf-symbol name='snd_pcm_hw_constraint_integer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32a87aad'/>
+      <elf-symbol name='snd_pcm_hw_constraint_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8590551d'/>
+      <elf-symbol name='snd_pcm_hw_constraint_mask64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbab00cd7'/>
+      <elf-symbol name='snd_pcm_hw_constraint_minmax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb504088'/>
+      <elf-symbol name='snd_pcm_hw_constraint_msbits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa09f95a0'/>
+      <elf-symbol name='snd_pcm_hw_constraint_step' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45e08dd0'/>
+      <elf-symbol name='snd_pcm_hw_rule_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8414cfb'/>
+      <elf-symbol name='snd_pcm_lib_default_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2ce394f'/>
+      <elf-symbol name='snd_pcm_lib_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc87c8e1'/>
+      <elf-symbol name='snd_pcm_lib_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0d1bcf8'/>
+      <elf-symbol name='snd_pcm_lib_malloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x803d86ca'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_free_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa36d74d4'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3e208'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad04f839'/>
+      <elf-symbol name='snd_pcm_limit_hw_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb621840'/>
+      <elf-symbol name='snd_pcm_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf264c31e'/>
+      <elf-symbol name='snd_pcm_period_elapsed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4970ff2'/>
+      <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='0xfaba2563'/>
+      <elf-symbol name='snd_pcm_set_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x362c7980'/>
+      <elf-symbol name='snd_pcm_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a2df652'/>
+      <elf-symbol name='snd_rawmidi_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc88bbb8'/>
+      <elf-symbol name='snd_rawmidi_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40e2cdcd'/>
+      <elf-symbol name='snd_rawmidi_set_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55bf8670'/>
+      <elf-symbol name='snd_soc_add_card_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9a82aeb'/>
+      <elf-symbol name='snd_soc_add_component_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x223e03d6'/>
+      <elf-symbol name='snd_soc_bytes_info_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b8e930d'/>
+      <elf-symbol name='snd_soc_bytes_tlv_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8bcc159'/>
+      <elf-symbol name='snd_soc_card_get_kcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb050b4d7'/>
+      <elf-symbol name='snd_soc_card_jack_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fcc421c'/>
+      <elf-symbol name='snd_soc_component_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d897d71'/>
+      <elf-symbol name='snd_soc_component_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd704a8f'/>
+      <elf-symbol name='snd_soc_component_exit_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d8ab861'/>
+      <elf-symbol name='snd_soc_component_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab8127da'/>
+      <elf-symbol name='snd_soc_component_init_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0138f8d'/>
+      <elf-symbol name='snd_soc_component_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66e2a964'/>
+      <elf-symbol name='snd_soc_component_read32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cedd715'/>
+      <elf-symbol name='snd_soc_component_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95803b9a'/>
+      <elf-symbol name='snd_soc_component_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b4dca3f'/>
+      <elf-symbol name='snd_soc_component_update_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf2fc757'/>
+      <elf-symbol name='snd_soc_component_update_bits_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeed9c56'/>
+      <elf-symbol name='snd_soc_component_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xece74346'/>
+      <elf-symbol name='snd_soc_dai_get_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb780d334'/>
+      <elf-symbol name='snd_soc_dai_set_bclk_ratio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5618f8f0'/>
+      <elf-symbol name='snd_soc_dai_set_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ba6e2c7'/>
+      <elf-symbol name='snd_soc_dai_set_clkdiv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1053997'/>
+      <elf-symbol name='snd_soc_dai_set_fmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e957701'/>
+      <elf-symbol name='snd_soc_dai_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cf02e16'/>
+      <elf-symbol name='snd_soc_dai_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30f687b'/>
+      <elf-symbol name='snd_soc_dai_set_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ff7aafc'/>
+      <elf-symbol name='snd_soc_dapm_add_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x126d1cc4'/>
+      <elf-symbol name='snd_soc_dapm_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb306bcd2'/>
+      <elf-symbol name='snd_soc_dapm_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd93773b8'/>
+      <elf-symbol name='snd_soc_dapm_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3445743'/>
+      <elf-symbol name='snd_soc_dapm_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7621ad23'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94883023'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd7ce930'/>
+      <elf-symbol name='snd_soc_dapm_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14e7080d'/>
+      <elf-symbol name='snd_soc_dapm_ignore_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3010b73b'/>
+      <elf-symbol name='snd_soc_dapm_info_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x951db8e4'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_dapm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65f3e5db'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_widget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb0f9525'/>
+      <elf-symbol name='snd_soc_dapm_mixer_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2c88154'/>
+      <elf-symbol name='snd_soc_dapm_mux_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fb88c13'/>
+      <elf-symbol name='snd_soc_dapm_new_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6775ca5c'/>
+      <elf-symbol name='snd_soc_dapm_new_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29b8b4da'/>
+      <elf-symbol name='snd_soc_dapm_new_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23d53121'/>
+      <elf-symbol name='snd_soc_dapm_put_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43f8cb6b'/>
+      <elf-symbol name='snd_soc_dapm_put_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91b25b18'/>
+      <elf-symbol name='snd_soc_dapm_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79a077fa'/>
+      <elf-symbol name='snd_soc_dapm_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91458d0'/>
+      <elf-symbol name='snd_soc_dapm_weak_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x405b201e'/>
+      <elf-symbol name='snd_soc_find_dai' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99cd02b7'/>
+      <elf-symbol name='snd_soc_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa546ecdd'/>
+      <elf-symbol name='snd_soc_get_pcm_runtime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96db2ddf'/>
+      <elf-symbol name='snd_soc_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23ee2f84'/>
+      <elf-symbol name='snd_soc_get_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5058849'/>
+      <elf-symbol name='snd_soc_get_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcebddf07'/>
+      <elf-symbol name='snd_soc_get_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98cebc0a'/>
+      <elf-symbol name='snd_soc_info_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6513f0b2'/>
+      <elf-symbol name='snd_soc_info_multi_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdedf42f9'/>
+      <elf-symbol name='snd_soc_info_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ba0832d'/>
+      <elf-symbol name='snd_soc_info_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c951c52'/>
+      <elf-symbol name='snd_soc_info_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76228892'/>
+      <elf-symbol name='snd_soc_info_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x740e98'/>
+      <elf-symbol name='snd_soc_jack_add_gpios' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcda7766e'/>
+      <elf-symbol name='snd_soc_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d9d956c'/>
+      <elf-symbol name='snd_soc_lookup_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb53479b1'/>
+      <elf-symbol name='snd_soc_new_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x551a8f7e'/>
+      <elf-symbol name='snd_soc_of_get_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ada9da5'/>
+      <elf-symbol name='snd_soc_of_get_dai_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbe54199'/>
+      <elf-symbol name='snd_soc_of_parse_audio_routing' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbed0c48c'/>
+      <elf-symbol name='snd_soc_of_parse_audio_simple_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22a92c0e'/>
+      <elf-symbol name='snd_soc_of_parse_card_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21b90b7b'/>
+      <elf-symbol name='snd_soc_of_parse_daifmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d62e8e'/>
+      <elf-symbol name='snd_soc_of_parse_node_prefix' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaddd758c'/>
+      <elf-symbol name='snd_soc_of_parse_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3e41f27'/>
+      <elf-symbol name='snd_soc_of_put_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42be61e0'/>
+      <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='0x4729e6cd'/>
+      <elf-symbol name='snd_soc_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb9ff77a'/>
+      <elf-symbol name='snd_soc_put_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe76a8259'/>
+      <elf-symbol name='snd_soc_put_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f048f88'/>
+      <elf-symbol name='snd_soc_put_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70bf64f4'/>
+      <elf-symbol name='snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x881a2ff6'/>
+      <elf-symbol name='snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5dede3f'/>
+      <elf-symbol name='snd_soc_rtdcom_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ea845eb'/>
+      <elf-symbol name='snd_soc_set_runtime_hwparams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe41c19a'/>
+      <elf-symbol name='snd_soc_tplg_component_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99e99d0e'/>
+      <elf-symbol name='snd_soc_tplg_component_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x462d5679'/>
+      <elf-symbol name='snd_soc_tplg_widget_bind_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98f67e35'/>
+      <elf-symbol name='snd_soc_unregister_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8db3045'/>
+      <elf-symbol name='snd_soc_unregister_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b47748'/>
+      <elf-symbol name='snd_timer_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcef37fb6'/>
+      <elf-symbol name='snd_usb_enable_audio_stream' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe52f0515'/>
+      <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='0x8aef641b'/>
+      <elf-symbol name='soc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1720057c'/>
+      <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='0x71b19e4c'/>
+      <elf-symbol name='sock_create_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6fd9c40'/>
+      <elf-symbol name='sock_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb68dfbc4'/>
+      <elf-symbol name='sock_diag_save_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd020fa1'/>
+      <elf-symbol name='sock_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfef3bdac'/>
+      <elf-symbol name='sock_efree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5235fdbe'/>
+      <elf-symbol name='sock_gettstamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81563121'/>
+      <elf-symbol name='sock_i_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54006ebe'/>
+      <elf-symbol name='sock_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b0f876f'/>
+      <elf-symbol name='sock_no_accept' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc4907fb'/>
+      <elf-symbol name='sock_no_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e3ae4a2'/>
+      <elf-symbol name='sock_no_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0631986'/>
+      <elf-symbol name='sock_no_getname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8952379'/>
+      <elf-symbol name='sock_no_getsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0dbacb6'/>
+      <elf-symbol name='sock_no_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fe5bee0'/>
+      <elf-symbol name='sock_no_listen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b4e1bb'/>
+      <elf-symbol name='sock_no_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6dee331'/>
+      <elf-symbol name='sock_no_sendpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x942b9d70'/>
+      <elf-symbol name='sock_no_setsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf25baa4d'/>
+      <elf-symbol name='sock_no_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f10efb2'/>
+      <elf-symbol name='sock_no_socketpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x171e87dc'/>
+      <elf-symbol name='sock_queue_rcv_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x157dd4be'/>
+      <elf-symbol name='sock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bf7213d'/>
+      <elf-symbol name='sock_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb390dc1'/>
+      <elf-symbol name='sock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62737e1d'/>
+      <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='0x9b1b7555'/>
+      <elf-symbol name='spi_bus_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6985e151'/>
+      <elf-symbol name='spi_busnum_to_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc7d4aeb'/>
+      <elf-symbol name='spi_controller_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90dbcbca'/>
+      <elf-symbol name='spi_controller_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e5e1281'/>
+      <elf-symbol name='spi_finalize_current_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0f8cefa'/>
+      <elf-symbol name='spi_finalize_current_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49ae8150'/>
+      <elf-symbol name='spi_get_next_queued_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4e18a03'/>
+      <elf-symbol name='spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6d608d7'/>
+      <elf-symbol name='spi_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd2f2c80'/>
+      <elf-symbol name='spi_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88268b81'/>
+      <elf-symbol name='spi_sync_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x799620e1'/>
+      <elf-symbol name='spi_unregister_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x552d9de5'/>
+      <elf-symbol name='spi_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fdc3232'/>
+      <elf-symbol name='split_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8f885e5'/>
+      <elf-symbol name='spmi_controller_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6014714'/>
+      <elf-symbol name='spmi_controller_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37bfa4e9'/>
+      <elf-symbol name='spmi_controller_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e9a0978'/>
+      <elf-symbol name='spmi_ext_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x672b64b7'/>
+      <elf-symbol name='spmi_ext_register_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3afbf697'/>
+      <elf-symbol name='spmi_ext_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70918b76'/>
+      <elf-symbol name='spmi_ext_register_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4702c2bb'/>
+      <elf-symbol name='spmi_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6899b20f'/>
+      <elf-symbol name='spmi_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c52029f'/>
+      <elf-symbol name='spmi_register_zero_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa66e3848'/>
+      <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='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='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='0xa13469f5'/>
+      <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='strndup_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41482d8b'/>
+      <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='0xc5a23755'/>
+      <elf-symbol name='submit_bio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22e49d1f'/>
+      <elf-symbol name='submit_bio_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50446aac'/>
+      <elf-symbol name='subsys_system_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x699fa424'/>
+      <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='0xe2ed16a5'/>
+      <elf-symbol name='sync_dirty_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40db136f'/>
+      <elf-symbol name='sync_file_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fd0805e'/>
+      <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='0x30a7a046'/>
+      <elf-symbol name='sync_mapping_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcd1782f'/>
+      <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='0xa3e3be07'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x641ef4cf'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf982610'/>
+      <elf-symbol name='sysfs_add_file_to_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ca4df43'/>
+      <elf-symbol name='sysfs_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee8235d0'/>
+      <elf-symbol name='sysfs_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cd7155a'/>
+      <elf-symbol name='sysfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x599669c0'/>
+      <elf-symbol name='sysfs_create_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc737472'/>
+      <elf-symbol name='sysfs_create_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe47ea931'/>
+      <elf-symbol name='sysfs_create_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb95e4bba'/>
+      <elf-symbol name='sysfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d7240cf'/>
+      <elf-symbol name='sysfs_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdee49c27'/>
+      <elf-symbol name='sysfs_remove_file_from_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41656e67'/>
+      <elf-symbol name='sysfs_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38a7ba63'/>
+      <elf-symbol name='sysfs_remove_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a7f68d6'/>
+      <elf-symbol name='sysfs_remove_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82eea196'/>
+      <elf-symbol name='sysfs_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38640f90'/>
+      <elf-symbol name='sysfs_remove_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ccfab02'/>
+      <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='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='0x78be37d4'/>
+      <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='0xde274d16'/>
+      <elf-symbol name='thermal_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1abf1a02'/>
+      <elf-symbol name='thermal_cooling_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2da7d571'/>
+      <elf-symbol name='thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a2e5fe0'/>
+      <elf-symbol name='thermal_zone_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a63afb5'/>
+      <elf-symbol name='thermal_zone_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1523d3c'/>
+      <elf-symbol name='thermal_zone_device_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37d88075'/>
+      <elf-symbol name='thermal_zone_get_temp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d7c93e9'/>
+      <elf-symbol name='thermal_zone_get_zone_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa79f391e'/>
+      <elf-symbol name='thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62a557b7'/>
+      <elf-symbol name='thermal_zone_of_sensor_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12dffeb7'/>
+      <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='0xb8b32ed1'/>
+      <elf-symbol name='timespec64_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf93b9d8'/>
+      <elf-symbol name='touch_atime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79752fa1'/>
+      <elf-symbol name='touch_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a160dcf'/>
+      <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='0x51d49be8'/>
+      <elf-symbol name='trace_event_buffer_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b11759'/>
+      <elf-symbol name='trace_event_buffer_reserve' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x646dc454'/>
+      <elf-symbol name='trace_event_ignore_this_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0ab9f8f'/>
+      <elf-symbol name='trace_event_raw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6718898c'/>
+      <elf-symbol name='trace_event_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x243a478f'/>
+      <elf-symbol name='trace_handle_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaddbd5a'/>
+      <elf-symbol name='trace_print_array_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfb4a296'/>
+      <elf-symbol name='trace_print_flags_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ebd4be4'/>
+      <elf-symbol name='trace_print_hex_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7d16b61'/>
+      <elf-symbol name='trace_print_symbols_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61520529'/>
+      <elf-symbol name='trace_raw_output_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x207fac93'/>
+      <elf-symbol name='trace_seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8888b156'/>
+      <elf-symbol name='trace_seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e68ce14'/>
+      <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' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x619bf470'/>
+      <elf-symbol name='truncate_inode_pages_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x101b0251'/>
+      <elf-symbol name='truncate_pagecache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a9a7683'/>
+      <elf-symbol name='truncate_setsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf85da0ca'/>
+      <elf-symbol name='try_module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1554cd0f'/>
+      <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='0xe4f32efc'/>
+      <elf-symbol name='ttm_bo_del_sub_from_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e1bcc70'/>
+      <elf-symbol name='ttm_bo_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6a4df90'/>
+      <elf-symbol name='ttm_bo_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4be672f9'/>
+      <elf-symbol name='ttm_bo_dma_acc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75b5e91a'/>
+      <elf-symbol name='ttm_bo_eviction_valuable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd124722e'/>
+      <elf-symbol name='ttm_bo_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10482e76'/>
+      <elf-symbol name='ttm_bo_init_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ba3b93c'/>
+      <elf-symbol name='ttm_bo_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7550a2d0'/>
+      <elf-symbol name='ttm_bo_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d3ff4a'/>
+      <elf-symbol name='ttm_bo_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d614dc8'/>
+      <elf-symbol name='ttm_bo_move_to_lru_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9991f66'/>
+      <elf-symbol name='ttm_bo_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eeca5cf'/>
+      <elf-symbol name='ttm_bo_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaffcd9b'/>
+      <elf-symbol name='ttm_bo_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35473974'/>
+      <elf-symbol name='ttm_dma_tt_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bc3f38d'/>
+      <elf-symbol name='ttm_dma_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb61ffa89'/>
+      <elf-symbol name='ttm_eu_backoff_reservation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d48a08f'/>
+      <elf-symbol name='ttm_eu_fence_buffer_objects' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a18bec3'/>
+      <elf-symbol name='ttm_eu_reserve_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaff13c2d'/>
+      <elf-symbol name='ttm_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60fce9db'/>
+      <elf-symbol name='tty_flip_buffer_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9851a9fd'/>
+      <elf-symbol name='tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaf70a54'/>
+      <elf-symbol name='tty_insert_flip_string_fixed_flag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd67bd10f'/>
+      <elf-symbol name='tty_kref_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x703a0854'/>
+      <elf-symbol name='tty_ldisc_deref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd67276d'/>
+      <elf-symbol name='tty_ldisc_ref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3451b7c3'/>
+      <elf-symbol name='tty_port_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a740796'/>
+      <elf-symbol name='tty_port_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeefb29a1'/>
+      <elf-symbol name='tty_port_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc0acb0d'/>
+      <elf-symbol name='tty_port_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2992351a'/>
+      <elf-symbol name='tty_port_link_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad2ca601'/>
+      <elf-symbol name='tty_port_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb37efb94'/>
+      <elf-symbol name='tty_port_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb69cd895'/>
+      <elf-symbol name='tty_port_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33e4c4e2'/>
+      <elf-symbol name='tty_port_tty_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a9f7bfd'/>
+      <elf-symbol name='tty_port_tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a7208a0'/>
+      <elf-symbol name='tty_port_tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x853d38c4'/>
+      <elf-symbol name='tty_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7e1449'/>
+      <elf-symbol name='tty_schedule_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e55250f'/>
+      <elf-symbol name='tty_set_operations' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb78a547'/>
+      <elf-symbol name='tty_standard_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdecc5702'/>
+      <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='0x4a19ce56'/>
+      <elf-symbol name='tty_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8ca1bfa'/>
+      <elf-symbol name='tty_vhangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4ffde1f'/>
+      <elf-symbol name='tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe147cdc6'/>
+      <elf-symbol name='typec_altmode_attention' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce698fb1'/>
+      <elf-symbol name='typec_altmode_get_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b4b984c'/>
+      <elf-symbol name='typec_altmode_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d748e02'/>
+      <elf-symbol name='typec_altmode_update_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfade84f'/>
+      <elf-symbol name='typec_altmode_vdm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8aeb4f08'/>
+      <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='0x8a656b8e'/>
+      <elf-symbol name='typec_port_register_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41095649'/>
+      <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='0xaf2c894e'/>
+      <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='0x46beb9e4'/>
+      <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='0x25f17a38'/>
+      <elf-symbol name='uart_console_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4464eb99'/>
+      <elf-symbol name='uart_console_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8ccf64c'/>
+      <elf-symbol name='uart_get_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2290573'/>
+      <elf-symbol name='uart_get_divisor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa19e6298'/>
+      <elf-symbol name='uart_handle_cts_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x202b6397'/>
+      <elf-symbol name='uart_handle_dcd_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87e167e5'/>
+      <elf-symbol name='uart_insert_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7f17481'/>
+      <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='0x713137ff'/>
+      <elf-symbol name='uart_remove_one_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x230ca2c6'/>
+      <elf-symbol name='uart_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b438fa'/>
+      <elf-symbol name='uart_set_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69a37ed2'/>
+      <elf-symbol name='uart_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d5ac049'/>
+      <elf-symbol name='uart_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf38a6c4'/>
+      <elf-symbol name='uart_update_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf810f4de'/>
+      <elf-symbol name='uart_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed651fc'/>
+      <elf-symbol name='ufshcd_dme_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9fce8e0'/>
+      <elf-symbol name='ufshcd_dme_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fa9d9b7'/>
+      <elf-symbol name='ufshcd_dump_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x689983a3'/>
+      <elf-symbol name='ufshcd_get_local_unipro_ver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e0c6eb5'/>
+      <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='0xc3ed936a'/>
+      <elf-symbol name='ufshcd_pltfrm_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0c9f63c'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68f7223b'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a89c338'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fa1b2de'/>
+      <elf-symbol name='ufshcd_pltfrm_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab1c8e79'/>
+      <elf-symbol name='ufshcd_pltfrm_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581636f2'/>
+      <elf-symbol name='ufshcd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3b4b5d7'/>
+      <elf-symbol name='ufshcd_uic_hibern8_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3c2f168'/>
+      <elf-symbol name='ufshcd_uic_hibern8_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5ad4666'/>
+      <elf-symbol name='uio_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4901f5dd'/>
+      <elf-symbol name='unload_nls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c0d311f'/>
+      <elf-symbol name='unlock_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2b28233'/>
+      <elf-symbol name='unlock_new_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaef8c7a1'/>
+      <elf-symbol name='unlock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41e0242e'/>
+      <elf-symbol name='unlock_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b8e6fc9'/>
+      <elf-symbol name='unmap_mapping_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdefa1537'/>
+      <elf-symbol name='unregister_binfmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5912fc3b'/>
+      <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='0xf75e4934'/>
+      <elf-symbol name='unregister_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdddcb6d9'/>
+      <elf-symbol name='unregister_gadget_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde4536dd'/>
+      <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_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7acd3137'/>
+      <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='0xa3a8d364'/>
+      <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='0x6a2ae9b3'/>
+      <elf-symbol name='unregister_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f2a5af7'/>
+      <elf-symbol name='unregister_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7681946c'/>
+      <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='0x9403c974'/>
+      <elf-symbol name='unregister_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6b771bb'/>
+      <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_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2a5b993'/>
+      <elf-symbol name='unregister_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c3e61ed'/>
+      <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='0x31269d83'/>
+      <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='0x5c7307d5'/>
+      <elf-symbol name='usb_add_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x894b48f4'/>
+      <elf-symbol name='usb_add_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a0557d3'/>
+      <elf-symbol name='usb_add_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb94c7783'/>
+      <elf-symbol name='usb_add_phy_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9287a9b6'/>
+      <elf-symbol name='usb_alloc_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a71726e'/>
+      <elf-symbol name='usb_alloc_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdce2418a'/>
+      <elf-symbol name='usb_alloc_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2724b713'/>
+      <elf-symbol name='usb_alloc_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f68667c'/>
+      <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='0x826fb87'/>
+      <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='0x8b66882a'/>
+      <elf-symbol name='usb_asmedia_modifyflowcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x397ab1bf'/>
+      <elf-symbol name='usb_assign_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87cb0785'/>
+      <elf-symbol name='usb_autopm_get_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29db10b1'/>
+      <elf-symbol name='usb_autopm_get_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74ec9063'/>
+      <elf-symbol name='usb_autopm_get_interface_no_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62a47f57'/>
+      <elf-symbol name='usb_autopm_put_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31d4c97e'/>
+      <elf-symbol name='usb_autopm_put_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ae1c3b4'/>
+      <elf-symbol name='usb_autopm_put_interface_no_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6512c23'/>
+      <elf-symbol name='usb_bulk_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36bffc77'/>
+      <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='0x65c96b11'/>
+      <elf-symbol name='usb_composite_setup_continue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9b297bf'/>
+      <elf-symbol name='usb_control_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa908a573'/>
+      <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='0xa2409ff5'/>
+      <elf-symbol name='usb_create_shared_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586e4967'/>
+      <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='0x3de75791'/>
+      <elf-symbol name='usb_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9f22854'/>
+      <elf-symbol name='usb_disable_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1321d5e4'/>
+      <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='0x16dde245'/>
+      <elf-symbol name='usb_driver_release_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1364c62a'/>
+      <elf-symbol name='usb_enable_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b75f07c'/>
+      <elf-symbol name='usb_enable_intel_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef7d3ba8'/>
+      <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='0x4f3cf338'/>
+      <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='0x7e2704e3'/>
+      <elf-symbol name='usb_free_all_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b2960ac'/>
+      <elf-symbol name='usb_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a07f51'/>
+      <elf-symbol name='usb_free_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32c924bb'/>
+      <elf-symbol name='usb_free_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb64c1614'/>
+      <elf-symbol name='usb_function_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3d65a38'/>
+      <elf-symbol name='usb_function_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3268d8cb'/>
+      <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='0xe3f24f95'/>
+      <elf-symbol name='usb_gadget_probe_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x979ddc4d'/>
+      <elf-symbol name='usb_gadget_set_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c865a5e'/>
+      <elf-symbol name='usb_gadget_udc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b7cc59b'/>
+      <elf-symbol name='usb_gadget_unmap_request_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8bc712a'/>
+      <elf-symbol name='usb_gadget_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x631a4290'/>
+      <elf-symbol name='usb_gadget_vbus_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e946d97'/>
+      <elf-symbol name='usb_gadget_vbus_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65e53104'/>
+      <elf-symbol name='usb_gadget_vbus_draw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6a40782'/>
+      <elf-symbol name='usb_gadget_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb3adc6f'/>
+      <elf-symbol name='usb_get_current_frame_number' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1fee23e'/>
+      <elf-symbol name='usb_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3ebf1ce'/>
+      <elf-symbol name='usb_get_dr_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31a3ade7'/>
+      <elf-symbol name='usb_get_from_anchor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72fe1049'/>
+      <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='0x140547e5'/>
+      <elf-symbol name='usb_get_maximum_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29c1d0d7'/>
+      <elf-symbol name='usb_get_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcd38d0a'/>
+      <elf-symbol name='usb_gstrings_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefa5508c'/>
+      <elf-symbol name='usb_hc_died' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc9312f'/>
+      <elf-symbol name='usb_hcd_check_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x497f7ab'/>
+      <elf-symbol name='usb_hcd_end_port_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83f8f00d'/>
+      <elf-symbol name='usb_hcd_giveback_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45962f68'/>
+      <elf-symbol name='usb_hcd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70cf032f'/>
+      <elf-symbol name='usb_hcd_is_primary_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc49184b'/>
+      <elf-symbol name='usb_hcd_link_urb_to_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f0d94ce'/>
+      <elf-symbol name='usb_hcd_map_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97cd6c33'/>
+      <elf-symbol name='usb_hcd_pci_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x425d1ccd'/>
+      <elf-symbol name='usb_hcd_pci_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83f48d86'/>
+      <elf-symbol name='usb_hcd_pci_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x902aae71'/>
+      <elf-symbol name='usb_hcd_platform_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1ab4a7c'/>
+      <elf-symbol name='usb_hcd_poll_rh_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40e1877b'/>
+      <elf-symbol name='usb_hcd_resume_root_hub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x345c30d4'/>
+      <elf-symbol name='usb_hcd_start_port_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1158305'/>
+      <elf-symbol name='usb_hcd_unlink_urb_from_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0517857'/>
+      <elf-symbol name='usb_hcd_unmap_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa01670aa'/>
+      <elf-symbol name='usb_hub_clear_tt_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x446939f7'/>
+      <elf-symbol name='usb_hub_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500e09fa'/>
+      <elf-symbol name='usb_ifnum_to_if' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bebc1a8'/>
+      <elf-symbol name='usb_interface_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3063edd9'/>
+      <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='0x3eb9e13d'/>
+      <elf-symbol name='usb_lock_device_for_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6435adeb'/>
+      <elf-symbol name='usb_match_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92fe37e2'/>
+      <elf-symbol name='usb_match_one_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9be42fc1'/>
+      <elf-symbol name='usb_of_get_companion_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e746d69'/>
+      <elf-symbol name='usb_os_desc_prepare_interf_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa17fbeb3'/>
+      <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='0xefcd7817'/>
+      <elf-symbol name='usb_phy_set_charger_current' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed1e6a6c'/>
+      <elf-symbol name='usb_phy_set_charger_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf90e6eac'/>
+      <elf-symbol name='usb_poison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5716a95'/>
+      <elf-symbol name='usb_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43480bbd'/>
+      <elf-symbol name='usb_put_function_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9fa8d3c'/>
+      <elf-symbol name='usb_put_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x932e017b'/>
+      <elf-symbol name='usb_put_intf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a171c2'/>
+      <elf-symbol name='usb_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd507387d'/>
+      <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='0x9f0a7bca'/>
+      <elf-symbol name='usb_remove_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3164d836'/>
+      <elf-symbol name='usb_reset_configuration' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95f48970'/>
+      <elf-symbol name='usb_reset_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d9d7242'/>
+      <elf-symbol name='usb_reset_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98b52ee6'/>
+      <elf-symbol name='usb_role_switch_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7517cf0e'/>
+      <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='0x83964735'/>
+      <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='0x76b93d57'/>
+      <elf-symbol name='usb_set_device_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64ad153e'/>
+      <elf-symbol name='usb_set_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8421e7be'/>
+      <elf-symbol name='usb_sg_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a6151f5'/>
+      <elf-symbol name='usb_sg_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x862159a3'/>
+      <elf-symbol name='usb_sg_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe89d6d59'/>
+      <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='0xfdaa6cad'/>
+      <elf-symbol name='usb_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e57d066'/>
+      <elf-symbol name='usb_string_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2271ad9b'/>
+      <elf-symbol name='usb_submit_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8916707'/>
+      <elf-symbol name='usb_unanchor_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1cfc8d4a'/>
+      <elf-symbol name='usb_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x832e7812'/>
+      <elf-symbol name='usb_unpoison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0b84961'/>
+      <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='0x6585cdc'/>
+      <elf-symbol name='usbnet_change_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdbc9943'/>
+      <elf-symbol name='usbnet_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe467776c'/>
+      <elf-symbol name='usbnet_get_drvinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe88a034e'/>
+      <elf-symbol name='usbnet_get_endpoints' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9be79ea7'/>
+      <elf-symbol name='usbnet_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91ab5059'/>
+      <elf-symbol name='usbnet_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3db0174d'/>
+      <elf-symbol name='usbnet_get_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4961ab04'/>
+      <elf-symbol name='usbnet_get_stats64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87bea88c'/>
+      <elf-symbol name='usbnet_link_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb3d5d04'/>
+      <elf-symbol name='usbnet_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8825eeaa'/>
+      <elf-symbol name='usbnet_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4893dff6'/>
+      <elf-symbol name='usbnet_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3410903e'/>
+      <elf-symbol name='usbnet_read_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49944c7b'/>
+      <elf-symbol name='usbnet_read_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3d5bf16'/>
+      <elf-symbol name='usbnet_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48e79f04'/>
+      <elf-symbol name='usbnet_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a930105'/>
+      <elf-symbol name='usbnet_set_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe070329e'/>
+      <elf-symbol name='usbnet_skb_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb826ebb9'/>
+      <elf-symbol name='usbnet_start_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99196690'/>
+      <elf-symbol name='usbnet_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde36f781'/>
+      <elf-symbol name='usbnet_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19436935'/>
+      <elf-symbol name='usbnet_tx_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x549286b6'/>
+      <elf-symbol name='usbnet_unlink_rx_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bb18e32'/>
+      <elf-symbol name='usbnet_update_max_qlen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf099dfcc'/>
+      <elf-symbol name='usbnet_write_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c2dca3c'/>
+      <elf-symbol name='usbnet_write_cmd_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa6bc56c'/>
+      <elf-symbol name='usbnet_write_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53d43694'/>
+      <elf-symbol name='use_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e4b7108'/>
+      <elf-symbol name='user_path_at_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce91cf29'/>
+      <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='0xedd448a5'/>
+      <elf-symbol name='v4l2_ctrl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd258e792'/>
+      <elf-symbol name='v4l2_ctrl_g_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5c49566'/>
+      <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='0xc5e3f6fc'/>
+      <elf-symbol name='v4l2_ctrl_handler_init_class' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1da604f7'/>
+      <elf-symbol name='v4l2_ctrl_handler_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c8c67e1'/>
+      <elf-symbol name='v4l2_ctrl_log_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x115fd50c'/>
+      <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='0xbb1e9c6c'/>
+      <elf-symbol name='v4l2_ctrl_new_int_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbcca45b'/>
+      <elf-symbol name='v4l2_ctrl_new_std' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa97a7db3'/>
+      <elf-symbol name='v4l2_ctrl_new_std_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1972d40'/>
+      <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='0x2c7b59f3'/>
+      <elf-symbol name='v4l2_ctrl_subscribe_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f15c48d'/>
+      <elf-symbol name='v4l2_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6680d5da'/>
+      <elf-symbol name='v4l2_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c5e3864'/>
+      <elf-symbol name='v4l2_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b8bc5ec'/>
+      <elf-symbol name='v4l2_device_register_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e1d6d11'/>
+      <elf-symbol name='v4l2_device_register_subdev_nodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c1f9977'/>
+      <elf-symbol name='v4l2_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3a4b5c'/>
+      <elf-symbol name='v4l2_device_unregister_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53d75d4a'/>
+      <elf-symbol name='v4l2_event_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ccf454b'/>
+      <elf-symbol name='v4l2_event_pending' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x261dfb26'/>
+      <elf-symbol name='v4l2_event_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6564c64'/>
+      <elf-symbol name='v4l2_event_queue_fh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x842a2c9f'/>
+      <elf-symbol name='v4l2_event_subdev_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c27a476'/>
+      <elf-symbol name='v4l2_event_subscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda23daf9'/>
+      <elf-symbol name='v4l2_event_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b0725b1'/>
+      <elf-symbol name='v4l2_fh_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x224ef76c'/>
+      <elf-symbol name='v4l2_fh_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a7924d6'/>
+      <elf-symbol name='v4l2_fh_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cf1001'/>
+      <elf-symbol name='v4l2_fh_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ba0ca29'/>
+      <elf-symbol name='v4l2_fh_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa37201e8'/>
+      <elf-symbol name='v4l2_fh_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5926abc'/>
+      <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='0x5424be73'/>
+      <elf-symbol name='v4l2_i2c_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee8673c'/>
+      <elf-symbol name='v4l2_i2c_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31c4dc70'/>
+      <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='0xa1480155'/>
+      <elf-symbol name='v4l2_spi_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6707651f'/>
+      <elf-symbol name='v4l2_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdac4135a'/>
+      <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='0x9fd75cde'/>
+      <elf-symbol name='vb2_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69fac363'/>
+      <elf-symbol name='vb2_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x173b4113'/>
+      <elf-symbol name='vb2_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ff57c14'/>
+      <elf-symbol name='vb2_fop_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x352144e9'/>
+      <elf-symbol name='vb2_fop_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d264d04'/>
+      <elf-symbol name='vb2_fop_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95b05da6'/>
+      <elf-symbol name='vb2_fop_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc57d526'/>
+      <elf-symbol name='vb2_ioctl_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce77e5fb'/>
+      <elf-symbol name='vb2_ioctl_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf27e1ea9'/>
+      <elf-symbol name='vb2_ioctl_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6159ecd'/>
+      <elf-symbol name='vb2_ioctl_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x711d9b5a'/>
+      <elf-symbol name='vb2_ioctl_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0a97468'/>
+      <elf-symbol name='vb2_ioctl_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x705e4785'/>
+      <elf-symbol name='vb2_ioctl_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x238ba6b3'/>
+      <elf-symbol name='vb2_ioctl_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bc984c1'/>
+      <elf-symbol name='vb2_ioctl_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ba07b91'/>
+      <elf-symbol name='vb2_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a061d79'/>
+      <elf-symbol name='vb2_ops_wait_finish' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x204a201'/>
+      <elf-symbol name='vb2_ops_wait_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4d4f9ad'/>
+      <elf-symbol name='vb2_plane_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f051e4a'/>
+      <elf-symbol name='vb2_plane_vaddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd98b1d62'/>
+      <elf-symbol name='vb2_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf744243'/>
+      <elf-symbol name='vb2_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd83a92f8'/>
+      <elf-symbol name='vb2_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x458c127a'/>
+      <elf-symbol name='vb2_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4771e926'/>
+      <elf-symbol name='vb2_queue_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x387738eb'/>
+      <elf-symbol name='vb2_queue_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed0f91a4'/>
+      <elf-symbol name='vb2_queue_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a840a3f'/>
+      <elf-symbol name='vb2_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8950b4d1'/>
+      <elf-symbol name='vb2_request_object_is_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f4cd9e9'/>
+      <elf-symbol name='vb2_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe720b72'/>
+      <elf-symbol name='vb2_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe726337a'/>
+      <elf-symbol name='vb2_wait_for_all_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x122da415'/>
+      <elf-symbol name='vfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x999e8297'/>
+      <elf-symbol name='vfs_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b136707'/>
+      <elf-symbol name='vfs_create2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40da5400'/>
+      <elf-symbol name='vfs_fallocate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6214a607'/>
+      <elf-symbol name='vfs_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda2fed18'/>
+      <elf-symbol name='vfs_fsync_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f175e4'/>
+      <elf-symbol name='vfs_get_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf120bee5'/>
+      <elf-symbol name='vfs_getattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8aa368c'/>
+      <elf-symbol name='vfs_getxattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x308d66f'/>
+      <elf-symbol name='vfs_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee5fc769'/>
+      <elf-symbol name='vfs_listxattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x715fcb6e'/>
+      <elf-symbol name='vfs_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b6b77c3'/>
+      <elf-symbol name='vfs_mkdir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb11c8e89'/>
+      <elf-symbol name='vfs_mkdir2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b592d1a'/>
+      <elf-symbol name='vfs_path_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb659bc54'/>
+      <elf-symbol name='vfs_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdc26dcc'/>
+      <elf-symbol name='vfs_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e623acd'/>
+      <elf-symbol name='vfs_rename2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9a0bded'/>
+      <elf-symbol name='vfs_rmdir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x950ddd4c'/>
+      <elf-symbol name='vfs_rmdir2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d61795'/>
+      <elf-symbol name='vfs_setxattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6897cc5d'/>
+      <elf-symbol name='vfs_statfs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc12938d6'/>
+      <elf-symbol name='vfs_statx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfef8cf74'/>
+      <elf-symbol name='vfs_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x140e0566'/>
+      <elf-symbol name='vfs_unlink2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67fa4596'/>
+      <elf-symbol name='vfs_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d0fb46f'/>
+      <elf-symbol name='video_devdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91563456'/>
+      <elf-symbol name='video_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x420033e'/>
+      <elf-symbol name='video_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bf630e0'/>
+      <elf-symbol name='video_device_release_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x885745a5'/>
+      <elf-symbol name='video_ioctl2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57699531'/>
+      <elf-symbol name='video_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cc0df2c'/>
+      <elf-symbol name='virtio_check_driver_offered_feature' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1693f59'/>
+      <elf-symbol name='virtio_config_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x238749c9'/>
+      <elf-symbol name='virtio_device_freeze' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66a41dee'/>
+      <elf-symbol name='virtio_device_restore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x263fe5f7'/>
+      <elf-symbol name='virtio_max_dma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbed5480'/>
+      <elf-symbol name='virtio_transport_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fda6c70'/>
+      <elf-symbol name='virtio_transport_deliver_tap_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29448ec7'/>
+      <elf-symbol name='virtio_transport_destruct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f9420e2'/>
+      <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='0x15e7d11c'/>
+      <elf-symbol name='virtio_transport_dgram_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41bba2f1'/>
+      <elf-symbol name='virtio_transport_dgram_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521797ae'/>
+      <elf-symbol name='virtio_transport_do_socket_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcc4a649'/>
+      <elf-symbol name='virtio_transport_free_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5a1a2f5'/>
+      <elf-symbol name='virtio_transport_notify_buffer_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5f884f1'/>
+      <elf-symbol name='virtio_transport_notify_poll_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70a4f373'/>
+      <elf-symbol name='virtio_transport_notify_poll_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a0a802a'/>
+      <elf-symbol name='virtio_transport_notify_recv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d9e9602'/>
+      <elf-symbol name='virtio_transport_notify_recv_post_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d4e0770'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98bcab6e'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20eb4268'/>
+      <elf-symbol name='virtio_transport_notify_send_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x224ed1d'/>
+      <elf-symbol name='virtio_transport_notify_send_post_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14b7faff'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x776ad830'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a48405a'/>
+      <elf-symbol name='virtio_transport_recv_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd767f035'/>
+      <elf-symbol name='virtio_transport_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eef86cd'/>
+      <elf-symbol name='virtio_transport_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83ba5b47'/>
+      <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='0xb2f84415'/>
+      <elf-symbol name='virtio_transport_stream_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d4ef1ba'/>
+      <elf-symbol name='virtio_transport_stream_has_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54836a10'/>
+      <elf-symbol name='virtio_transport_stream_has_space' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92c8b3ed'/>
+      <elf-symbol name='virtio_transport_stream_is_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc76fe069'/>
+      <elf-symbol name='virtio_transport_stream_rcvhiwat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e9ffe9e'/>
+      <elf-symbol name='virtqueue_add_inbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3df82b4'/>
+      <elf-symbol name='virtqueue_add_inbuf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8016fde7'/>
+      <elf-symbol name='virtqueue_add_outbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4564e85b'/>
+      <elf-symbol name='virtqueue_add_sgs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6775cfe'/>
+      <elf-symbol name='virtqueue_detach_unused_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6504dc0'/>
+      <elf-symbol name='virtqueue_disable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66bd3f4'/>
+      <elf-symbol name='virtqueue_enable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3d86a06'/>
+      <elf-symbol name='virtqueue_enable_cb_delayed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aca7b2'/>
+      <elf-symbol name='virtqueue_enable_cb_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f3cc416'/>
+      <elf-symbol name='virtqueue_get_avail_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc76883f8'/>
+      <elf-symbol name='virtqueue_get_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5387286b'/>
+      <elf-symbol name='virtqueue_get_buf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x928deec'/>
+      <elf-symbol name='virtqueue_get_desc_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x679ed9ee'/>
+      <elf-symbol name='virtqueue_get_used_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e01fa4'/>
+      <elf-symbol name='virtqueue_get_vring_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25ff0608'/>
+      <elf-symbol name='virtqueue_is_broken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce335d18'/>
+      <elf-symbol name='virtqueue_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2abbe9a'/>
+      <elf-symbol name='virtqueue_kick_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17320f32'/>
+      <elf-symbol name='virtqueue_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b4a47ee'/>
+      <elf-symbol name='virtqueue_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c13240a'/>
+      <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='0x3443e501'/>
+      <elf-symbol name='vm_iomap_memory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91f964c3'/>
+      <elf-symbol name='vm_map_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdae71c73'/>
+      <elf-symbol name='vm_map_ram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed680523'/>
+      <elf-symbol name='vm_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab1e1f3f'/>
+      <elf-symbol name='vm_unmap_aliases' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22a3091'/>
+      <elf-symbol name='vm_unmap_ram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd2571'/>
+      <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='0x9d69227c'/>
+      <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='0xad8fc2ea'/>
+      <elf-symbol name='vmf_insert_mixed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbaee8e7a'/>
+      <elf-symbol name='vmf_insert_pfn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6439e2b4'/>
+      <elf-symbol name='vmf_insert_pfn_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57891f93'/>
+      <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='0x7f428ad2'/>
+      <elf-symbol name='vring_del_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d11327e'/>
+      <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='0x28fd1c89'/>
+      <elf-symbol name='vring_transport_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36cef63d'/>
+      <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='0xabbcdf75'/>
+      <elf-symbol name='vsock_core_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c8cdfdb'/>
+      <elf-symbol name='vsock_for_each_connected_socket' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27132855'/>
+      <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_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0fbac79'/>
+      <elf-symbol name='wake_up_process' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcee980fe'/>
+      <elf-symbol name='wakeup_source_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6a12ea'/>
+      <elf-symbol name='wakeup_source_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa42f0cdf'/>
+      <elf-symbol name='wakeup_source_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x945d0168'/>
+      <elf-symbol name='wakeup_source_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3653de2d'/>
+      <elf-symbol name='wakeup_source_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74a318a2'/>
+      <elf-symbol name='wakeup_source_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50ae23f2'/>
+      <elf-symbol name='watchdog_init_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafaee350'/>
+      <elf-symbol name='watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5a8ee36'/>
+      <elf-symbol name='watchdog_set_restart_priority' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ac5a797'/>
+      <elf-symbol name='watchdog_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x419e7b97'/>
+      <elf-symbol name='wiphy_apply_custom_regulatory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdac283d2'/>
+      <elf-symbol name='wiphy_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x337c0ed1'/>
+      <elf-symbol name='wiphy_new_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7802f09'/>
+      <elf-symbol name='wiphy_read_of_freq_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80a278b2'/>
+      <elf-symbol name='wiphy_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e408e0f'/>
+      <elf-symbol name='wiphy_to_ieee80211_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x942f910c'/>
+      <elf-symbol name='wiphy_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1acbcdb6'/>
+      <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='0x6fb3ed8a'/>
+      <elf-symbol name='write_inode_now' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2b4d98'/>
+      <elf-symbol name='ww_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x679e220e'/>
+      <elf-symbol name='ww_mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff6ab628'/>
+      <elf-symbol name='ww_mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa605c552'/>
+      <elf-symbol name='xdp_convert_zc_to_xdp_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72a3e021'/>
+      <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='0x9c535b80'/>
+      <elf-symbol name='xdp_return_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x713f5ed5'/>
+      <elf-symbol name='xdp_return_frame_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59dbb353'/>
+      <elf-symbol name='xdp_rxq_info_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x901fb54'/>
+      <elf-symbol name='xdp_rxq_info_reg_mem_model' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7254ebbd'/>
+      <elf-symbol name='xdp_rxq_info_unreg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd65ee636'/>
+      <elf-symbol name='xfrm_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x557a6f56'/>
+      <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_inflateInit2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35a88f28'/>
+      <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_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='0x500e4560'/>
+      <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='544' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8879296'/>
+      <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='0x5c39e812'/>
+      <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='0x9b6fe216'/>
+      <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='0xad65362d'/>
+      <elf-symbol name='cpufreq_freq_attr_scaling_boost_freqs' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bdd6f25'/>
+      <elf-symbol name='cpufreq_generic_attr' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39efd835'/>
+      <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='crypto_ablkcipher_type' size='72' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed0b6aad'/>
+      <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='136' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6662cb5'/>
+      <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='fs_bio_set' size='272' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeec8c474'/>
+      <elf-symbol name='fs_kobj' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed5a6d41'/>
+      <elf-symbol name='generic_ro_fops' size='288' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59b7a356'/>
+      <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='hid_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26ad9930'/>
+      <elf-symbol name='hid_debug' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5495392'/>
+      <elf-symbol name='i2c_adapter_type' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeee7089e'/>
+      <elf-symbol name='i2c_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbc3ef63'/>
+      <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='0x69272e82'/>
+      <elf-symbol name='init_task' size='3840' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfa4afa5'/>
+      <elf-symbol name='init_user_ns' size='568' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x179d775a'/>
+      <elf-symbol name='init_uts_ns' size='440' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0d08527'/>
+      <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_64' size='8' type='object-type' binding='global-binding' visibility='default-visibility' 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='0x9377b7ce'/>
+      <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='0x3671acd4'/>
+      <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='0x3ed6b711'/>
+      <elf-symbol name='names_cachep' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3096be16'/>
+      <elf-symbol name='nd_tbl' size='544' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x928466a6'/>
+      <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='0x6bc258fc'/>
+      <elf-symbol name='of_root' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x173f9054'/>
+      <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='0xe4dd2e'/>
+      <elf-symbol name='param_ops_bint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaceb4113'/>
+      <elf-symbol name='param_ops_bool' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa59eca1'/>
+      <elf-symbol name='param_ops_byte' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe9a133a'/>
+      <elf-symbol name='param_ops_charp' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d17ae7f'/>
+      <elf-symbol name='param_ops_int' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56b7dd9f'/>
+      <elf-symbol name='param_ops_long' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x575fe13c'/>
+      <elf-symbol name='param_ops_string' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33b9801c'/>
+      <elf-symbol name='param_ops_uint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2b0a81'/>
+      <elf-symbol name='param_ops_ullong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x455743ef'/>
+      <elf-symbol name='param_ops_ulong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad784088'/>
+      <elf-symbol name='param_ops_ushort' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36844ee7'/>
+      <elf-symbol name='pci_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbda8cb82'/>
+      <elf-symbol name='physvirt_offset' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ba7c500'/>
+      <elf-symbol name='platform_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4f49f0'/>
+      <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='posix_acl_access_xattr_handler' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa03333a3'/>
+      <elf-symbol name='posix_acl_default_xattr_handler' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb540a9a7'/>
+      <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='0x4b8be638'/>
+      <elf-symbol name='simple_dir_operations' size='288' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe08d0da6'/>
+      <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='0x5d1c6d2f'/>
+      <elf-symbol name='softnet_data' size='704' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa38b2f7e'/>
+      <elf-symbol name='spi_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d5c7567'/>
+      <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='0x96499a24'/>
+      <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='0x778c66c4'/>
+      <elf-symbol name='usb_hcd_pci_pm_ops' size='184' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10962860'/>
+      <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='usb_hid_driver' size='88' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43530668'/>
+      <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='0x26978cf2'/>
+      <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='vmemmap' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd145cdda'/>
+    </elf-variable-symbols>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/crypto/aes-cipher-glue.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='567' column='1' id='ac5ab595'>
+        <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>
+      <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>
+    </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' is-declaration-only='yes' id='14f332cc'/>
+      <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='ac0aeb1d'/>
+      <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' is-declaration-only='yes' id='718a7cd9'/>
+      <class-decl name='capture_control' size-in-bits='128' 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='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' is-declaration-only='yes' id='1b9c6d35'/>
+      <class-decl name='css_set' size-in-bits='3072' is-struct='yes' visibility='default' is-declaration-only='yes' id='afbeac63'/>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' is-declaration-only='yes' id='1a0c5572'/>
+      <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' is-declaration-only='yes' id='8a2a988b'/>
+      <class-decl name='fs_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='7dc87302'/>
+      <class-decl name='fscrypt_info' size-in-bits='1088' is-struct='yes' visibility='default' is-declaration-only='yes' id='9441bb37'/>
+      <class-decl name='fscrypt_operations' size-in-bits='704' is-struct='yes' visibility='default' is-declaration-only='yes' id='fa21a7e9'/>
+      <class-decl name='fsnotify_mark_connector' size-in-bits='256' 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' is-struct='yes' visibility='default' is-declaration-only='yes' id='71e87d49'/>
+      <class-decl name='key_user' is-struct='yes' visibility='default' is-declaration-only='yes' id='696d238e'/>
+      <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' is-declaration-only='yes' id='ff1c7c9b'/>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' is-declaration-only='yes' id='47d6e76e'/>
+      <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' is-declaration-only='yes' id='770fc578'/>
+      <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' is-declaration-only='yes' id='96b6b914'/>
+      <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' is-declaration-only='yes' id='b43b0dce'/>
+      <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' is-declaration-only='yes' id='415eecf1'/>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='b440e872'/>
+      <class-decl name='posix_acl' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='605b61bb'/>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='2ba71bf0'/>
+      <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' is-declaration-only='yes' id='b9b792e2'/>
+      <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='1600' is-struct='yes' visibility='default' is-declaration-only='yes' id='74191d27'/>
+      <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='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='3008' is-struct='yes' visibility='default' is-declaration-only='yes' id='2d863538'/>
+      <class-decl name='taskstats' size-in-bits='2752' is-struct='yes' visibility='default' is-declaration-only='yes' id='3a97b64f'/>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='49b910cc'/>
+      <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' is-declaration-only='yes' id='fdf3707c'/>
+      <class-decl name='unicode_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='a24978a1'/>
+      <class-decl name='uprobe' size-in-bits='1856' is-struct='yes' visibility='default' is-declaration-only='yes' id='b7e0fed2'/>
+      <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='19e88833'/>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' is-declaration-only='yes' id='a5159c01'/>
+      <class-decl name='writeback_control' size-in-bits='768' is-struct='yes' visibility='default' is-declaration-only='yes' id='705711f5'/>
+      <class-decl name='xattr_handler' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='2d3dd5e3'/>
+      <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>
+      <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='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' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='6406df84'/>
+      <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>
+      <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_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='ac5ab596' 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='ac5ab596' 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__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='35' column='1' id='ac5ab596'>
+        <data-member access='private'>
+          <var-decl name='phys' type-id='e7f43f72' visibility='default' filepath='include/crypto/internal/skcipher.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='virt' type-id='3ee108df' visibility='default' filepath='include/crypto/internal/skcipher.h' line='44' 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/crypto/internal/skcipher.h' line='36' column='1' id='e7f43f72'>
+        <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='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='f6cbf12c' 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='1411c471' 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='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='687f9679'>
+        <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='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>
+      <class-decl name='address_space' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='451' 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='452' 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='453' 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='454' 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='455' 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='460' 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='461' 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='462' 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='463' 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='464' 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='465' 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='466' 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='467' 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='468' 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='469' 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='470' 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='472' 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='473' 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='474' 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='475' 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='644' 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='645' 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='646' 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='647' 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='648' 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='649' 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='652' 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='653' 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='656' 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='657' 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='658' 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='661' 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='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='0911b320' visibility='default' filepath='include/linux/fs.h' line='673' 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='677' 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='678' 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='679' 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='680' 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='681' 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='682' 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='683' 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='684' 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='685' 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='686' 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='693' 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='694' 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='696' 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='697' 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='699' 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='700' 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='702' 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='705' 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='706' 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='707' 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='709' 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='710' 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='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='' type-id='0a11b4b3' visibility='default' filepath='include/linux/fs.h' line='712' 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='716' 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='717' 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='718' 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='719' 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='720' 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='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='' type-id='0f11bc92' visibility='default' filepath='include/linux/fs.h' line='724' 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='728' 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='729' 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='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='' type-id='1011be25' visibility='default' filepath='include/linux/fs.h' line='731' 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='739' 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='742' 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='743' 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='747' 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='751' 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='754' 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='756' 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='757' 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='1925' 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='1926' 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='1927' 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='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='permission2' type-id='29339961' visibility='default' filepath='include/linux/fs.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_acl' type-id='7f30b822' visibility='default' filepath='include/linux/fs.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='readlink' type-id='a57bd028' visibility='default' filepath='include/linux/fs.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='c9cd0e09' visibility='default' filepath='include/linux/fs.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='link' type-id='4b872e00' visibility='default' filepath='include/linux/fs.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unlink' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='symlink' type-id='234843b5' visibility='default' filepath='include/linux/fs.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkdir' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rmdir' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mknod' type-id='f9e0c0e5' visibility='default' filepath='include/linux/fs.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rename' type-id='7733ef81' visibility='default' filepath='include/linux/fs.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setattr' type-id='c237e829' visibility='default' filepath='include/linux/fs.h' line='1943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='setattr2' type-id='88bb58e1' visibility='default' filepath='include/linux/fs.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <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='1088'>
+          <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='1152'>
+          <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='1216'>
+          <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='1280'>
+          <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='1344'>
+          <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='1408'>
+          <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='1472'>
+          <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='1536'>
+          <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='1600'>
+          <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='1664'>
+          <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='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='0b11b646' 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='0c11b7d9' 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='f9cbf5e5' 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__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='f9cbf5e5'>
+        <data-member access='private'>
+          <var-decl name='' type-id='657f91c0' 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__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='50' column='1' id='657f91c0'>
+        <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='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='f8cbf452' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='f8cbf452'>
+        <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='667f9353' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='30' column='1' id='667f9353'>
+        <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>
+      <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='f3cbec73' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1' id='f3cbec73'>
+        <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='f2cbeae0' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1' id='f2cbeae0'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1' id='dc07530e'>
+            <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>
+        </member-type>
+        <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='6c7f9cc5' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='atomic_t' type-id='9ae05d53' filepath='include/linux/types.h' line='173' column='1' id='49178f86'/>
+      <class-decl name='__anonymous_struct__4' 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='9ae05d53'>
+        <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='__anonymous_struct__5' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='6c7f9cc5'>
+        <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>
+      <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'/>
+      <typedef-decl name='u16' type-id='d315442e' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='1dc6a898'/>
+      <typedef-decl name='__u16' type-id='8efea9e5' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='d315442e'/>
+      <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='155' 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='156' 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='157' 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='158' 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>
+      <typedef-decl name='bool' type-id='c894953d' filepath='include/linux/types.h' line='30' column='1' id='b50a4934'/>
+      <class-decl name='super_block' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1461' 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='1462' 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='1463' 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='1464' 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='1465' 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='1466' 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='1467' 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='1468' 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='1469' 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='1470' 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='1471' 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='1472' 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='1473' 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='1474' 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='1475' 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='1476' 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='1477' 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='1478' 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='1480' 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='1482' 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='1484' 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='1485' 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='1488' 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='1491' 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='1492' 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='1494' 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='1495' 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='1496' 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='1497' 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='1498' 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='1499' 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='1500' 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='1501' 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='1503' 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='1510' 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='1513' 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='1515' 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='1516' 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='1518' 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='1519' 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='1522' 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='1523' 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='1525' 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='1526' 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='1532' 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='1538' 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='1540' 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='1545' 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='1547' 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='1550' 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='1553' 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='1556' 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='1559' 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='1560' 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='1567' 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='1574' 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='1575' 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='1576' 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='1577' 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='1579' 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='1584' 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='1587' 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='1588' 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='1590' 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='1591' 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='1593' 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='1594' 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='1595' 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='1596' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_system_type' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2298' 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='2299' 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='2300' 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='2307' 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='2308' 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='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc_mnt_data' type-id='0cfacb48' visibility='default' filepath='include/linux/fs.h' line='2311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='kill_sb' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='next' type-id='21e53d44' 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='fs_supers' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_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='640'>
+          <var-decl name='s_umount_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='640'>
+          <var-decl name='s_vfs_rename_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='640'>
+          <var-decl name='s_writers_key' type-id='9c02e2a6' visibility='default' filepath='include/linux/fs.h' line='2320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_mutex_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_mutex_dir_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2324' 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/fs.h' line='2326' 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/fs.h' line='2327' 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/fs.h' line='2328' 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/fs.h' line='2329' 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='sig_ok' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2696'>
+          <var-decl name='async_probe_requested' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='405' 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='408' 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='409' 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='410' 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='413' 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='414' 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='417' 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='420' 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='421' 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='424' 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='426' 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='430' 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='431' 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='432' 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='437' 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='438' 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='441' 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='444' 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='449' 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='453' 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='454' 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='458' 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='459' 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='462' 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='463' 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='466' 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='467' 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='470' 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='471' 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='474' 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='475' 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='478' 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='479' 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='480' 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='481' 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='498' 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='500' 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='503' 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='505' 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='515' 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='516' 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='518' 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='519' 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='520' 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='521' 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='6406df84'/>
+        <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>
+      <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='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='955' column='1' id='b4b8adeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='f5cbef99' visibility='default' filepath='include/linux/fs.h' line='959' 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='960' 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='961' 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='962' 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='968' 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='969' 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='970' 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='971' 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='972' 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='973' 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='974' 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='975' 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='976' 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='977' 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='979' 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='981' 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='984' 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='988' 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='989' 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='991' 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='992' column='1'/>
+        </data-member>
+      </class-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='file_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1878' 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='1879' 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='1880' 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='1881' 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='1882' 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='1883' 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='1884' 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='1885' 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='1886' 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='1887' 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='1888' 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='1889' 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='1890' 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='1891' 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='1892' 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='1893' 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='1894' 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='1895' 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='1896' 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='1897' 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='1898' 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='1899' 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='1900' 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='1901' 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='1902' 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='1903' 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='1904' 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='1905' 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='1906' 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='1908' 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='1912' 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='1914' 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='1917' 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='1919' 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='1920' 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='1921' 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='1922' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kiocb' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='319' 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='320' 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='325' 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='326' 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='327' 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='328' 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='329' 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='330' 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='331' 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='f4cbee06' 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='fecbfdc4' visibility='default' filepath='include/linux/uio.h' line='45' 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='f4cbee06'>
+        <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>
+      <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='06e2f141' filepath='include/linux/types.h' line='178' column='1' id='28ee064c'/>
+      <class-decl name='__anonymous_struct__6' 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='06e2f141'>
+        <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='s64' type-id='49659421' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='9b7c55ef'/>
+      <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>
+      <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='1361' 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='1362' 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='1363' 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='1364' 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='1365' 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='1366' 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='1367' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rwlock_t' type-id='70043592' filepath='include/linux/rwlock_types.h' line='20' column='1' id='ac16795b'/>
+      <class-decl name='__anonymous_struct__7' 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='70043592'>
+        <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='ffcbff57' 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__8' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='ffcbff57'>
+        <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='6f7fa17e' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='6f7fa17e'>
+        <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>
+      <typedef-decl name='refcount_t' type-id='637cfeaf' filepath='include/linux/refcount.h' line='21' column='1' id='64615833'/>
+      <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>
+      <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='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>
+      <typedef-decl name='raw_spinlock_t' type-id='f106d0e5' filepath='include/linux/spinlock_types.h' line='29' column='1' id='f5c90b3f'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='47' column='1' id='707fa311'>
+        <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>
+      <class-decl name='dir_context' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1824' 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='1825' 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='1826' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='filldir_t' type-id='78efe913' filepath='include/linux/fs.h' line='1821' column='1' id='262124ef'/>
+      <typedef-decl name='__poll_t' type-id='f0981eeb' filepath='include/uapi/linux/types.h' line='52' column='1' id='8f254b08'/>
+      <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='0d13f803' 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='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='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='c9d994eb' 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__10' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='c9d994eb'>
+        <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='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>
+      <typedef-decl name='pgd_t' type-id='1e778b57' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='12aa8ce4'/>
+      <class-decl name='__anonymous_struct__11' 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='1e778b57'>
+        <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'/>
+      <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='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='64ba6708' filepath='arch/arm64/include/asm/mmu.h' line='23' column='1' id='0eb9c3fd'/>
+      <class-decl name='__anonymous_struct__12' 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='64ba6708'>
+        <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='30720' 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='697' 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='699' 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='704' 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='711' 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='712' 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='713' 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='714' 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='717' 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='718' 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='719' 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='720' 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='724' 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='725' 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='726' 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='727' 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='728' 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='731' 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='733' 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='735' 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='736' 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='739' 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='740' 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='743' 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='746' 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='748' 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='749' 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='750' 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='752' 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='754' 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='757' 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='760' 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='761' 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='762' 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='763' 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='765' 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='774' 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='775' 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='780' 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='787' 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='789' 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='793' 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='796' 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='798' 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='800' 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='801' 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='805' 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='814' 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='817' 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='822' 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='823' 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='824' 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='832' 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='833' 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='836' 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='837' 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='838' 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='839' 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='841' 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='844' 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='847' 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='849' 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='850' 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='855' 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='857' 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='858' 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='860' 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='869' 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='870' 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='873' 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='876' 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='879' 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='880' 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='883' 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='888' 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='891' 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='894' 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='898' 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='908' 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='910' 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='921' 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='924' 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='927' 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='930' 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='931' 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='932' 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='933' 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='935' 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='936' 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='937' 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='938' 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='939' 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='941' 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='945' 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='947' 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='948' 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='950' 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='953' 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='954' 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='957' 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='960' 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='962' 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='966' 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='968' 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='970' 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='1011' 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='1014' 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='1018' 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='1022' 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='1024' 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='1026' 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='1029' 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='1032' 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='1033' 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='1035' 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='1038' 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='1042' 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='1044' 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='1046' 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='1050' 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='1052' 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='1053' 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='1054' 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='1058' 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='1060' 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='1067' 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='1069' 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='1071' 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='1072' 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='1073' 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='1074' 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='1077' 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='1078' 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='1079' 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='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='' type-id='13140175' visibility='default' filepath='include/linux/sched.h' line='1152' 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='1158' 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='1160' 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='1174' 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='1175' 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='1177' 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='1187' 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='1188' 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='1217' 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='1220' 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='1246' 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='1247' 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='1248' 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='1251' 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='1254' 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='1258' 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='1262' 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='1271' 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='1273' 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='1276' 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='1280' 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='1287' 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='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21440'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21696'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21760'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='thread' type-id='0c8a83c7' visibility='default' filepath='include/linux/sched.h' line='1313' 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='9f0c8f14' 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__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1' id='9f0c8f14'>
+        <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='cad9967e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='42' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__13' 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='cad9967e'>
+        <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='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>
+      <typedef-decl name='ktime_t' type-id='9b7c55ef' filepath='include/linux/ktime.h' line='28' column='1' id='fbc017ef'/>
+      <enum-decl name='hrtimer_restart' filepath='include/linux/hrtimer.h' line='65' column='1' id='7313b0ab'>
+        <underlying-type type-id='6406df84'/>
+        <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='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='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='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>
+      <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__14' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='616' column='1' id='cdd99b37'>
+        <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='a00c90a7' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='a00c90a7'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='ccd999a4' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='cfd99e5d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='ced99cca' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='ccd999a4'>
+        <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__16' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='cfd99e5d'>
+        <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='a10c923a' 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='6406df84'/>
+        <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__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='a10c923a'>
+        <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__17' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='ced99cca'>
+        <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='549da823' 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='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='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='970c827c' 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='a20c93cd' 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='9b0c88c8' 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='9c0c8a5b' 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='9e0c8d81' 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__13' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='175' column='1' id='a20c93cd'>
+        <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__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='182' column='1' id='9b0c88c8'>
+        <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__15' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='219' column='1' id='9c0c8a5b'>
+        <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='c0d986c0' 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='9d0c8bee' 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__16' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='9d0c8bee'>
+        <data-member access='private'>
+          <var-decl name='' type-id='c1d98853' 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__18' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='95' column='1' id='c1d98853'>
+        <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__19' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='221' column='1' id='c0d986c0'>
+        <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__17' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='234' column='1' id='9e0c8d81'>
+        <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='b7d2bcd0' visibility='default' filepath='include/linux/key.h' line='236' column='1'/>
+        </data-member>
+      </union-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='__anonymous_struct__20' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='236' column='1' id='b7d2bcd0'>
+        <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>
+      <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='8320' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='81' 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='82' 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='83' 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='84' 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='85' 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='87' 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='90' 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='93' 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='96' 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='99' 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='105' 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='106' 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='109' 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='110' 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='121' 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='122' 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='127' 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='128' 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='131' 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='132' 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='139' 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='145' 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='149' 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='152' 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='158' 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='161' 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='163' 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='174' 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='175' 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='175' 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='175' 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='175' 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='176' 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='177' 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='178' 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='179' 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='179' 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='179' 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='179' 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='180' 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='180' 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='180' 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='180' 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='181' 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='181' 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='181' 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='181' 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='182' 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='182' 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='183' 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='191' 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='202' 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='208' 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='211' 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='212' 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='219' 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='220' 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='221' 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='223' 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='226' 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/sched/signal.h' line='229' 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/sched/signal.h' line='230' 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/sched/signal.h' line='231' 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/sched/signal.h' line='232' 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='488443d1' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='daf33c64'/>
+      <class-decl name='__anonymous_struct__21' 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='488443d1'>
+        <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='37' 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='38' 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='39' 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='65' 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='66' 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='46' 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='47' 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='48' 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='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqlock_t' type-id='072e23d8' filepath='include/linux/seqlock.h' line='407' column='1' id='e6cd5ecf'/>
+      <class-decl name='__anonymous_struct__22' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='e6cd5ecf' visibility='default' filepath='include/linux/seqlock.h' line='404' column='1' id='072e23d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='3a74ff0b' visibility='default' filepath='include/linux/seqlock.h' line='405' 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='406' 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='19' 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='20' 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='21' 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='22' 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='23' 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='29' 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='30' 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='31' 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='980c840f' 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='1113fe4f' 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>
+      <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='bad2c189' visibility='default' filepath='include/linux/signal_types.h' line='13' 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/linux/signal_types.h' line='13' column='1' id='bad2c189'>
+        <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='bbd2c31c' 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='bcd2c4af' 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='bdd2c642' 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='bed2c7d5' 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='bfd2c968' 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='bcd50346' 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='bbd501b3' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='34' column='1' id='bbd2c31c'>
+        <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__25' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='40' column='1' id='bcd2c4af'>
+        <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__26' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='48' column='1' id='bdd2c642'>
+        <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__27' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='55' column='1' id='bed2c7d5'>
+        <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__28' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1' id='bfd2c968'>
+        <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='1013fcbc' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1' id='1013fcbc'>
+        <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='c0d2cafb' 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='bdd504d9' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='93' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__29' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1' id='c0d2cafb'>
+        <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__30' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='90' column='1' id='bdd504d9'>
+        <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__31' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='98' column='1' id='bcd50346'>
+        <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__32' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='104' column='1' id='bbd501b3'>
+        <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='340f61c2' filepath='include/linux/nodemask.h' line='98' column='1' id='6a7d16bb'/>
+      <class-decl name='__anonymous_struct__33' 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='340f61c2'>
+        <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'/>
+      <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='1213ffe2' 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='6406df84'/>
+        <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>
+      <class-decl name='__anonymous_struct__34' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1' id='c1d50b25'>
+        <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='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='8448' 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='c0d50992' 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>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='keys_user' type-id='91841748' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='149' 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__35' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1' id='c0d50992'>
+        <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='ptrauth_keys' size-in-bits='640' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='24' column='1' id='91841748'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='apia' type-id='490938eb' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='apib' type-id='490938eb' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='apda' type-id='490938eb' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='apdb' type-id='490938eb' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='apga' type-id='490938eb' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ptrauth_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='16' column='1' id='490938eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lo' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hi' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/pointer_auth.h' line='17' 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>
+      <typedef-decl name='pgprot_t' type-id='39fa4936' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='2e2dcbd3'/>
+      <class-decl name='__anonymous_struct__36' 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='39fa4936'>
+        <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'/>
+      <class-decl name='__anonymous_struct__37' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='329' column='1' id='bed5066c'>
+        <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='1088' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='473' 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='474' 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='475' 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='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='6e731d78' visibility='default' filepath='include/linux/mm.h' line='477' 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='478' 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='479' 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='481' 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='483' 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='487' 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='490' 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='495' 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='501' 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='531' 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='534' 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='535' 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='536' 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='537' 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='419' 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='420' 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='421' 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='422' 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='423' 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='424' 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='425' 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='427' 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='430' 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='432' 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='433' 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='434' 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='440' 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='444' 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='448' 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='455' 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='456' 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='457' 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='458' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmd_t' type-id='7d993d45' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1' id='9ecf9226'/>
+      <class-decl name='__anonymous_struct__38' 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='7d993d45'>
+        <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='8c06b85d' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='ac9f3c7e'/>
+      <class-decl name='__anonymous_struct__39' 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='8c06b85d'>
+        <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='pte_t' type-id='2c3c163f' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1' id='4b2795fc'/>
+      <class-decl name='__anonymous_struct__40' 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='2c3c163f'>
+        <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>
+      <typedef-decl name='pgtable_t' type-id='02f11ed4' filepath='arch/arm64/include/asm/page.h' line='31' column='1' id='c28b9700'/>
+      <enum-decl name='page_entry_size' filepath='include/linux/mm.h' line='462' column='1' id='5555b4b4'>
+        <underlying-type type-id='6406df84'/>
+        <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'/>
+      <typedef-decl name='fl_owner_t' type-id='eaa32e2f' filepath='include/linux/fs.h' line='1045' column='1' id='bc5666d5'/>
+      <class-decl name='file_lock' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1105' 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='1106' 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='1107' 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='1108' 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='1109' 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='1112' 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='1115' 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='1116' 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='1117' 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='1118' 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='1119' 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='1120' 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='1121' 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='1122' 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='1123' 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='1125' 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='1127' 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='1128' 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='1130' 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='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='fl_u' type-id='0c13f670' visibility='default' filepath='include/linux/fs.h' line='1140' 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='1142' 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='1143' 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='1144' 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='1049' 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='1050' 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='1051' 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='1053' 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='1054' 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='1057' 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='1058' 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='1059' 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='1060' 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='1061' 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='1062' 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='1063' 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='1064' 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='1066' 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='1067' column='1'/>
+        </data-member>
+      </class-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>
+      <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='cdd99b37' 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='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__41' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1135' column='1' id='3ce105b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1136' 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='1137' 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='1138' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='301' column='1' id='0d20c3dd'>
+        <underlying-type type-id='6406df84'/>
+        <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>
+      <typedef-decl name='fmode_t' type-id='f0981eeb' filepath='include/linux/types.h' line='155' column='1' id='2665334e'/>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='924' 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='925' 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='926' 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='927' 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='928' 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='928' 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='929' 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='6406df84'/>
+        <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='935' 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='936' 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='937' 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='938' 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='941' 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='942' 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='943' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='errseq_t' type-id='19c2251e' filepath='include/linux/errseq.h' line='8' column='1' id='1da55f79'/>
+      <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='6406df84'/>
+        <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='0f13fb29' 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__26' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1' id='0f13fb29'>
+        <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='39e10100' 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__42' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1' id='39e10100'>
+        <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='0e13f996' 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'/>
+      <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='19140ae7' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1' id='19140ae7'>
+        <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>
+      <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='2176' 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='clone_mnt_data' type-id='5ad9edb6' 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='copy_mnt_data' type-id='debb4ee8' visibility='default' filepath='include/linux/fs.h' line='2029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='update_mnt_data' type-id='62bda903' visibility='default' filepath='include/linux/fs.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='umount_begin' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_options' 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='show_options2' type-id='8d5d9e9b' visibility='default' filepath='include/linux/fs.h' line='2034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='show_devname' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='show_path' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='show_stats' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='quota_read' type-id='e295c77c' visibility='default' filepath='include/linux/fs.h' line='2039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='quota_write' type-id='a9b95107' visibility='default' filepath='include/linux/fs.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_dquots' type-id='ae02292a' visibility='default' filepath='include/linux/fs.h' line='2041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='bdev_try_to_free_page' type-id='ea44f8d2' visibility='default' filepath='include/linux/fs.h' line='2043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='nr_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='free_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2046' 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/fs.h' line='2049' 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/fs.h' line='2050' 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/fs.h' line='2051' 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/fs.h' line='2052' 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='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='18140954' 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__29' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/quota.h' line='69' column='1' id='18140954'>
+        <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='1cfeab47' filepath='include/linux/projid.h' line='24' column='1' id='b7cdd2f8'/>
+      <class-decl name='__anonymous_struct__43' 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='1cfeab47'>
+        <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='6406df84'/>
+        <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='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='484' 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='485' 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='486' 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='487' 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='488' 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='489' 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='490' 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='491' 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='492' 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='493' 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='495' 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='497' 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='498' 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='499' 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='500' 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='502' 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='503' 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='504' 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='505' 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='506' 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='507' 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='514' 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='517' 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='519' 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='521' 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='522' 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='523' 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='524' 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='1455' 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='1456' 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='1457' 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='1458' 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='fe66db71' filepath='include/linux/uuid.h' line='18' column='1' id='ec55eb74'/>
+      <class-decl name='__anonymous_struct__44' 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='fe66db71'>
+        <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='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>
+      <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>
+      <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>
+      <class-decl name='fiemap_extent_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1803' 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='1804' 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='1805' 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='1806' 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='1807' 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='file_lock_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1147' 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='1148' 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='1149' 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='1150' 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='1151' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='1011be25'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='address_space_operations' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='363' 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='364' 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='365' 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='368' 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='371' 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='377' 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='380' 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='383' 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='388' 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='389' 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='390' 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='391' 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='392' 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='397' 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='399' 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='400' 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='401' 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='402' 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='404' 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='405' 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='408' 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='410' 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='412' 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='413' 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='414' 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='415' 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'/>
+      <enum-decl name='migrate_mode' filepath='include/linux/migrate_mode.h' line='15' column='1' id='157252dd'>
+        <underlying-type type-id='6406df84'/>
+        <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='dma_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='148' column='1' id='cf29c9b3'/>
+      <class-decl name='__anonymous_struct__45' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='40e10c05'>
+        <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__46' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='3de1074c'>
+        <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='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='6406df84'/>
+        <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>
+      <class-decl name='__anonymous_struct__47' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='41' column='1' id='3ee108df'>
+        <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>
+      <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>
+      <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>
+      <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>
+      <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='0d04ed79' 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='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>
+      <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='0702a570' 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>
+      <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='686' column='1' id='ae8bfcdd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='0c04ebe6' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='0a04e8c0' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='1104f3c5' visibility='default' filepath='include/linux/skbuff.h' line='711' 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='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='1004f232' visibility='default' filepath='include/linux/skbuff.h' line='723' 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='732' 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='734' 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='735' 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='736' 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='737' 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='742' 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='752' 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='753' 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='754' 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='755' 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='756' 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='757' 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='758' 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='760' 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='766' 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='777' 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='778' 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='779' 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='780' 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='781' 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='782' 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='784' 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='785' 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='786' 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='787' 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='788' 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='790' 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='791' 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='792' 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='800' 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='801' 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='802' 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='803' 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='804' 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='805' 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='807' 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='810' 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='811' 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='812' 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='818' 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='819' 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='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='' type-id='0f04f09f' visibility='default' filepath='include/linux/skbuff.h' line='833' 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='840' 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='841' 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='842' 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='843' 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='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='' type-id='0e04ef0c' visibility='default' filepath='include/linux/skbuff.h' line='846' 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='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='' type-id='1504fa11' visibility='default' filepath='include/linux/skbuff.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='' type-id='1404f87e' visibility='default' filepath='include/linux/skbuff.h' line='860' 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='865' 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='866' 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='867' 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='869' 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='870' 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='871' 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='872' 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='875' 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='878' 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='879' 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='882' 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='883' 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='884' 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='885' 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='886' 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='887' 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='891' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1' id='0c04ebe6'>
+        <data-member access='private'>
+          <var-decl name='' type-id='43e110be' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='703' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__48' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1' id='43e110be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='690' 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='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='0b04ea53' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1' id='0b04ea53'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/skbuff.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='699' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__49' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='724' column='1' id='44e11251'>
+        <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='725' 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='726' column='1'/>
+        </data-member>
+      </class-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__50' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1' id='c1e415af'>
+        <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='836' 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='837' 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'/>
+      <typedef-decl name='sk_buff_data_t' type-id='f0981eeb' filepath='include/linux/skbuff.h' line='603' column='1' id='5c1abc34'/>
+      <class-decl name='skb_ext' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='4111' 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='4112' 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='4113' 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='4114' 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='4115' 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='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_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>
+      <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='ac0aeb1d' size-in-bits='64' id='f885ca7d'/>
+      <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='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='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='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='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='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='d10f08e3' size-in-bits='64' id='2108b777'/>
+      <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='4f548e3d' size-in-bits='64' id='88bb58e1'/>
+      <pointer-type-def type-id='d79c1b4d' size-in-bits='64' id='29339961'/>
+      <pointer-type-def type-id='eeeccb4f' size-in-bits='64' id='8d5d9e9b'/>
+      <pointer-type-def type-id='80d02f4e' size-in-bits='64' id='6e731d78'/>
+      <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='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='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='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='ae8bfcdd' size-in-bits='64' id='0fbf3cfd'/>
+      <pointer-type-def type-id='a8c69bdf' size-in-bits='64' id='374692c7'/>
+      <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='19e88833' size-in-bits='64' id='549da823'/>
+      <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='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='57c897f7' size-in-bits='64' id='62bda903'/>
+      <pointer-type-def type-id='c039af2e' size-in-bits='64' id='debb4ee8'/>
+      <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='cd5d79f4' size-in-bits='64' id='5ad9edb6'/>
+      <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='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_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>
+      <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='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='d10f08e3'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='67f526b5'/>
+        <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='4f548e3d'>
+        <parameter type-id='549da823'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d79c1b4d'>
+        <parameter type-id='549da823'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeeccb4f'>
+        <parameter type-id='549da823'/>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80d02f4e'>
+        <parameter type-id='2ae08426'/>
+        <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='549da823'/>
+      </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='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='57c897f7'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5760dcb0'/>
+        <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='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>
+      <function-type size-in-bits='64' id='cd5d79f4'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <union-decl name='__anonymous_union__49' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1' id='1404f87e'>
+        <data-member access='private'>
+          <var-decl name='inner_protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='inner_ipproto' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__48' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='855' column='1' id='1504fa11'>
+        <data-member access='private'>
+          <var-decl name='mark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved_tailroom' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__46' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='833' column='1' id='0f04f09f'>
+        <data-member access='private'>
+          <var-decl name='csum' type-id='fbd88bba' visibility='default' filepath='include/linux/skbuff.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='c1e415af' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__50' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='567' column='1' id='0702a570'>
+        <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>
+      <union-decl name='__anonymous_union__40' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='765' column='1' id='0d04ed79'>
+        <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__39' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='1411c471'>
+        <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__34' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='724' column='1' id='0f11bc92'>
+        <data-member access='private'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='673' column='1' id='0911b320'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='675' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='712' column='1' id='0a11b4b3'>
+        <data-member access='private'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='714' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='0c11b7d9'>
+        <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__20' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='1113fe4f'>
+        <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__18' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='970c827c'>
+        <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__44' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1' id='1104f3c5'>
+        <data-member access='private'>
+          <var-decl name='tstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='712' 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='713' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='0b11b646'>
+        <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/iocontext.h' line='83' column='1' id='980c840f'>
+        <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__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='956' column='1' id='f5cbef99'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='958' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1132' column='1' id='0c13f670'>
+        <data-member access='private'>
+          <var-decl name='nfs_fl' type-id='17bacae5' visibility='default' filepath='include/linux/fs.h' line='1133' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nfs4_fl' type-id='b811a3f5' visibility='default' filepath='include/linux/fs.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='afs' type-id='3ce105b9' visibility='default' filepath='include/linux/fs.h' line='1139' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1152' column='1' id='13140175'>
+        <data-member access='private'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1154' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='0a04e8c0'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='1213ffe2'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1' id='e225be82'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='c1d50b25' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+      </union-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='f6cbf12c'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='70494aaa'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='5e607201'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='0d11b96c' 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='0e11baff' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1' id='5b606d48'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1' id='5c606edb'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='616076ba'>
+            <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='1311c2de' 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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__5' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='6260784d'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f9679' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <union-decl name='__anonymous_union__24' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='0d13f803'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='bed5066c' 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__45' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='723' column='1' id='1004f232'>
+        <data-member access='private'>
+          <var-decl name='' type-id='44e11251' visibility='default' filepath='include/linux/skbuff.h' line='724' 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='728' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__47' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1' id='0e04ef0c'>
+        <data-member access='private'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sender_cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='45' column='1' id='fecbfdc4'>
+        <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='707fa311' visibility='default' filepath='include/linux/uio.h' line='47' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='0e13f996'>
+        <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>
+      <union-decl name='__anonymous_union__36' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='0d11b96c'>
+        <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='40e10c05' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__38' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='1311c2de'>
+        <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__37' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='0e11baff'>
+        <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='3de1074c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+    </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='2021' 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>
+    </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'/>
+      <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>
+    </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='645' 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>
+    </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='1000' 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>
+    </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/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='2483' 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='2360' 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'>
+      <pointer-type-def type-id='e57536d9' size-in-bits='64' id='20862e61'/>
+      <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_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>
+      <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>
+    </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>
+      <class-decl name='trace_print_flags' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='14' column='1' id='69f06cc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='7359adad' visibility='default' filepath='include/linux/tracepoint-defs.h' line='15' 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/tracepoint-defs.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='488443d1' size-in-bits='64' id='ab306973'/>
+      <qualified-type-def type-id='69f06cc6' const='yes' id='99fda9f5'/>
+      <pointer-type-def type-id='99fda9f5' size-in-bits='64' id='49526a0d'/>
+      <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='1547' 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='ab306973'/>
+        <parameter type-id='ab306973'/>
+        <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='62' 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='1624' 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='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_parkme'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_print_symbols_seq' mangled-name='trace_print_symbols_seq' filepath='include/linux/trace_events.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_symbols_seq'>
+        <parameter type-id='fc932690'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='49526a0d'/>
+        <return type-id='80f4b756'/>
+      </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='3601' 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>
+    </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='8b7a2cd1'>
+        <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='ca6248b1' 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='6406df84'/>
+        <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='f1ac64d0' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='578' 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='579' 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='580' 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='ac5ab597' 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='ac5ab597'>
+        <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='563' column='1' id='0d6f83ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/iommu.h' line='564' 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='565' 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='566' 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='567' 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='568' 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='569' 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='8b7a2cd1' const='yes' id='9ce849da'/>
+      <pointer-type-def type-id='9ce849da' size-in-bits='64' id='f1ac64d0'/>
+      <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='fb8ec21d' size-in-bits='64' id='ca6248b1'/>
+      <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='0d6f83ff' size-in-bits='64' id='1979c577'/>
+      <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='f1ac64d0' 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='fb8ec21d'>
+        <parameter type-id='bff05edb'/>
+        <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='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>
+    </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'/>
+      <var-decl name='physvirt_offset' type-id='9b7c55ef' mangled-name='physvirt_offset' visibility='default' filepath='arch/arm64/mm/init.c' line='53' column='1' elf-symbol-id='physvirt_offset'/>
+      <var-decl name='vmemmap' type-id='02f11ed4' mangled-name='vmemmap' visibility='default' filepath='arch/arm64/mm/init.c' line='56' column='1' elf-symbol-id='vmemmap'/>
+      <function-decl name='pfn_valid' mangled-name='pfn_valid' filepath='arch/arm64/mm/init.c' line='241' 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='241' 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='6406df84'/>
+        <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='vabits_actual' type-id='91ce1af9' mangled-name='vabits_actual' visibility='default' filepath='arch/arm64/mm/mmu.c' line='44' column='1' elf-symbol-id='vabits_actual'/>
+      <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='5760652c' 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='5760652c' 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='5760652c' 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='5760652c' name='bb' filepath='block/badblocks.c' line='593' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-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'>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='f6cbf12d'>
+        <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>
+      <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='582' 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='582' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-core.c' line='582' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-core.c' line='583' 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='598' 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='598' 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='1443' 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='1443' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-core.c' line='1443' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_bytes' filepath='block/blk-core.c' line='1444' 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='1535' 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='1535' 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'>
+      <union-decl name='__anonymous_union__4' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='f3cbec74'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='e7f43f73' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='cbd99811' visibility='default' filepath='include/linux/blkdev.h' line='193' 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/blkdev.h' line='184' column='1' id='e7f43f73'>
+        <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>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1' id='f2cbeae1'>
+        <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__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='f5cbef9a'>
+        <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>
+      <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>
+    </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>
+    </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='cc26d15f' 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='cc26d15f' 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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq-virtio.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>
+      <class-decl name='irq_affinity' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='bf33c00a'/>
+      <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_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_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_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='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'/>
+      <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='d70a473a' const='yes' id='17c0f561'/>
+      <pointer-type-def type-id='17c0f561' size-in-bits='64' id='afc22511'/>
+      <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='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='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='d7c60ba9' size-in-bits='64' id='91d0de51'/>
+      <pointer-type-def type-id='91d0de51' size-in-bits='64' id='06ce3ba1'/>
+      <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='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>
+      <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='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='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='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='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='3066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_tag_set'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3066' 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='1521' 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='1521' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1521' 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='1564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_stop_hw_queue'>
+        <parameter type-id='a47d3467' name='hctx' filepath='block/blk-mq.c' line='1564' 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='1619' 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='1619' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1619' 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='2717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_queue'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='2717' 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='3152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_tag_set'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3152' 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='3349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_update_nr_hw_queues'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3349' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_hw_queues' filepath='block/blk-mq.c' line='3349' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-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='e0a68fea'>
+        <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='c3a28778' 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='6406df84'/>
+        <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='e0a68fea' size-in-bits='64' id='c3a28778'/>
+      <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='c3a28778'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d86a6269'>
+        <parameter type-id='c3a28778'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='836381ca'>
+        <parameter type-id='c3a28778'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b4e7d36'>
+        <parameter type-id='c3a28778'/>
+        <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='1464' 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='1464' column='1'/>
+        <parameter type-id='95e97e5e' name='node_id' filepath='block/genhd.c' line='1464' column='1'/>
+        <return type-id='33c599db'/>
+      </function-decl>
+      <function-decl name='register_blkdev' mangled-name='register_blkdev' filepath='block/genhd.c' line='354' 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='354' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_blkdev' mangled-name='unregister_blkdev' filepath='block/genhd.c' line='418' 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='418' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='418' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_register_region' mangled-name='blk_register_region' filepath='block/genhd.c' line='564' 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='564' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='564' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='block/genhd.c' line='564' column='1'/>
+        <parameter type-id='aaaf3990' name='probe' filepath='block/genhd.c' line='565' column='1'/>
+        <parameter type-id='a8735e7c' name='lock' filepath='block/genhd.c' line='566' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='block/genhd.c' line='566' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_unregister_region' mangled-name='blk_unregister_region' filepath='block/genhd.c' line='573' 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='573' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='573' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_disk_ro' mangled-name='set_disk_ro' filepath='block/genhd.c' line='1577' 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='1577' column='1'/>
+        <parameter type-id='95e97e5e' name='flag' filepath='block/genhd.c' line='1577' 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='a47d3467' 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='9467b853'/>
+      <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='e063028f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e7f43f74' 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='e118aff9' 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='9a335021' 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='e7f43f74'>
+        <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='1d120221'>
+        <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='cde99b39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='687f967a' 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='687f967a'>
+        <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='9a335021' 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='6406df84'/>
+        <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='651086d7'>
+        <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'/>
+      <union-decl name='__anonymous_union__4' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='f3cbec75'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='657f91c1' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='cbd99811' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1' id='657f91c1'>
+        <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='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='6406df84'/>
+        <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='1d120221' size-in-bits='64' id='e118aff9'/>
+      <pointer-type-def type-id='cde99b39' size-in-bits='64' id='9a335021'/>
+      <pointer-type-def type-id='9a335021' size-in-bits='64' id='c9c70151'/>
+      <pointer-type-def type-id='70bf757e' size-in-bits='64' id='ceead144'/>
+      <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='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='9467b853' size-in-bits='64' id='1146dea3'/>
+      <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'/>
+      <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='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='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='a47d3467'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02e8b0a1'>
+        <parameter type-id='a47d3467'/>
+        <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='cc26d15f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='722249f6'>
+        <parameter type-id='cc26d15f'/>
+        <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='a47d3467'/>
+        <parameter type-id='298d0a77'/>
+        <return type-id='f4e2facd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2be64d1'>
+        <parameter type-id='a47d3467'/>
+        <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='a47d3467'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f1e6b9a'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d05a3e9'>
+        <parameter type-id='cc26d15f'/>
+        <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>
+    </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>
+    </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='447' 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='449' 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='450' 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='451' 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='452' 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='453' 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='456' 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='457' 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='458' 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='352' 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='353' 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='354' 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='357' 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='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52378ac1' size-in-bits='64' id='a462f2f9'/>
+      <function-decl name='sg_init_one' mangled-name='sg_init_one' filepath='include/linux/scatterlist.h' line='259' 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='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='254' 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='461' 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='464' 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='465' 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-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>
+    </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='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>
+      <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='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'/>
+      <pointer-type-def type-id='41207a16' size-in-bits='64' id='6f3c82ac'/>
+      <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_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>
+      <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/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' is-declaration-only='yes' id='e09a048e'/>
+      <class-decl name='device_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='6661a698'/>
+      <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' is-declaration-only='yes' id='9218f3f6'/>
+      <class-decl name='iw_public_data' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='44b3a0ac'/>
+      <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' is-declaration-only='yes' id='88ef330b'/>
+      <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' is-declaration-only='yes' id='45092453'/>
+      <class-decl name='phy_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='7c1f8187'/>
+      <class-decl name='rtnl_link_ops' size-in-bits='1600' 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' is-struct='yes' visibility='default' is-declaration-only='yes' id='8ae2fb1d'/>
+      <class-decl name='xdp_umem' size-in-bits='1472' is-struct='yes' visibility='default' is-declaration-only='yes' id='bbbd8970'/>
+      <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='e7f43f75' 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='9e0c8d82' 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='e7f43f75'>
+        <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='6406df84'/>
+        <enumerator name='__NETDEV_TX_MIN' value='-2147483648'/>
+        <enumerator name='NETDEV_TX_OK' value='0'/>
+        <enumerator name='NETDEV_TX_BUSY' value='16'/>
+      </enum-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='688' column='1' id='687f967b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='690' 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='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f6cbf12e' visibility='default' filepath='include/linux/skbuff.h' line='693' 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='693' column='1' id='f6cbf12e'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/skbuff.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='699' 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='fecbfdc5' 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='9f0c8f15' 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='fecbfdc5'>
+        <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='9f0c8f15'>
+        <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='a00c90a8' 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='a00c90a8'>
+        <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='1688f756' 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='1688f756'>
+        <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='48d26361' 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='48d26361'>
+        <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='2cf36ec8' 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='2cf36ec8'>
+        <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='de77e0f8' 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='de77e0f8'>
+        <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='2a537f25' 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='2a537f25'>
+        <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='41557d51' 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='41557d51'>
+        <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='163ddcdf' 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='163ddcdf'>
+        <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='6406df84'/>
+        <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='a10c923b' 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>
+      <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='a20c93ce' 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='6406df84'/>
+        <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='a20c93ce'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='909' column='1' id='46b0b75d'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='915' column='1' id='b430bf04'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='707fa312' visibility='default' filepath='include/linux/netdevice.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='xsk' type-id='cfd99e5e' 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='707fa312'>
+        <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='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__10' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1' id='c9d994ec'>
+        <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>
+      <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='9b0c88c9'>
+        <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__11' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='438' column='1' id='c8d99358'>
+        <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>
+      <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='9c0c8a5c'>
+        <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__12' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='470' column='1' id='cbd99812'>
+        <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__13' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='476' column='1' id='cad9967f'>
+        <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__14' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='485' column='1' id='cdd99b38'>
+        <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__15' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='498' column='1' id='ccd999a5'>
+        <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='6406df84'/>
+        <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__16' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='919' column='1' id='cfd99e5e'>
+        <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='6406df84'/>
+        <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='9d0c8bef' 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='9d0c8bef'>
+        <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'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1' id='f5e1d320'>
+            <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='9b0c88c9' 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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='896' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1' id='237f43c3'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='425' column='1' id='247f4556'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='431' column='1' id='257f46e9'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='459' column='1' id='267f487c'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='9c0c8a5c' 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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__5' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='490' column='1' id='277f4a0f'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='c9d994ec' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='test' type-id='c8d99358' visibility='default' filepath='include/uapi/linux/bpf.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='info' type-id='cbd99812' visibility='default' filepath='include/uapi/linux/bpf.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='query' type-id='cad9967f' 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='cdd99b38' visibility='default' filepath='include/uapi/linux/bpf.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='task_fd_query' type-id='ccd999a5' 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='ced99ccb' 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__17' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ethtool.h' line='111' column='1' id='ced99ccb'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <typedef-decl name='possible_net_t' type-id='35ac36a1' filepath='include/net/net_namespace.h' line='308' column='1' id='c9df1e6c'/>
+      <class-decl name='__anonymous_struct__18' 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='35ac36a1'>
+        <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>
+      <class-decl name='pcpu_lstats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2444' 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='2445' 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='2446' 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='2447' 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='2436' 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='2437' 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='2438' 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='2439' 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='2440' 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='2441' 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='6661a698' 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='632' 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='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='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='634' 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='1709' 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>
+      <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>
+      <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='a10c923b'>
+        <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>
+      <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='9e0c8d82'>
+        <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>
+    </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='print_hex_dump' mangled-name='print_hex_dump' filepath='include/linux/printk.h' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='print_hex_dump'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='c894953d'/>
+        <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/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>
+    </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='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_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='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_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='299' 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='297' 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='255' 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>
+      <pointer-type-def type-id='472efbee' size-in-bits='64' id='a585cbc4'/>
+      <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='sg_init_table' mangled-name='sg_init_table' filepath='include/linux/scatterlist.h' line='258' 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='sg_next' mangled-name='sg_next' filepath='include/linux/scatterlist.h' line='256' 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/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'/>
+    </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>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='765' column='1' id='ac5ab598'>
+        <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>
+      <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='LZ4_decompress_safe' mangled-name='LZ4_decompress_safe' filepath='include/linux/lz4.h' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='LZ4_decompress_safe'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </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/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_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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/skcipher.c' language='LANG_C89'>
+      <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>
+      <pointer-type-def type-id='c0d42424' size-in-bits='64' id='b298c88e'/>
+      <pointer-type-def type-id='dd37d315' size-in-bits='64' id='613dff15'/>
+      <pointer-type-def type-id='0ae96173' size-in-bits='64' id='7997266f'/>
+      <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>
+      <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='0ae96173'>
+        <parameter type-id='72bb8c36'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </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='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='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_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='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>
+    </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>
+    </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='devres_open_group' mangled-name='devres_open_group' filepath='include/linux/device.h' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_open_group'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devres_release_group' mangled-name='devres_release_group' filepath='include/linux/device.h' line='940' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_release_group'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </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='devres_close_group' mangled-name='devres_close_group' filepath='include/linux/device.h' line='938' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_close_group'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </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>
+      <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>
+    </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='d066d157'>
+        <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='4a19d21e'>
+        <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='e44b8083'>
+        <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='d066d157' size-in-bits='64' id='0d3b0dcf'/>
+      <pointer-type-def type-id='e44b8083' size-in-bits='64' id='52abf1d3'/>
+      <pointer-type-def type-id='3d045a53' size-in-bits='64' id='4b4b90b3'/>
+      <pointer-type-def type-id='4a19d21e' size-in-bits='64' id='5da77304'/>
+      <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='2962' 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='2962' 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='806' 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='806' 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='1684' 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='1684' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1685' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1686' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1686' 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='1704' 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='1704' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1705' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1706' 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='1714' 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='1714' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1714' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1715' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1715' 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='1726' 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='1726' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1726' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1727' 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='1992' 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='1992' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/core.c' line='1993' 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='2308' 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='2308' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2309' 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='2323' 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='2323' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2324' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_rename' mangled-name='device_rename' filepath='drivers/base/core.c' line='3724' 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='3724' column='1'/>
+        <parameter type-id='80f4b756' name='new_name' filepath='drivers/base/core.c' line='3724' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_dev_emerg' mangled-name='_dev_emerg' filepath='drivers/base/core.c' line='4071' 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='4071' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4071' 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='4150' 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='4150' column='1'/>
+        <parameter type-id='eaa32e2f' name='name' filepath='drivers/base/core.c' line='4150' 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='4162' 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='4162' column='1'/>
+        <parameter type-id='eaa32e2f' name='fwnode' filepath='drivers/base/core.c' line='4162' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b3fff074'>
+        <parameter type-id='4b4b90b3'/>
+        <return type-id='48b5725f'/>
+      </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='1112' 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='1112' 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>
+    </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='819' 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='819' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='819' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='820' 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='846' 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='846' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='846' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='847' 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='871' 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='871' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='872' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='872' 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='925' 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='925' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='925' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='926' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/base/firmware_loader/main.c' line='926' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/firmware_loader/main.c' line='926' 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='1007' 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='1008' column='1'/>
+        <parameter type-id='b50a4934' name='uevent' filepath='drivers/base/firmware_loader/main.c' line='1008' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='1009' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='1009' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/firmware_loader/main.c' line='1009' column='1'/>
+        <parameter type-id='eaa32e2f' name='context' filepath='drivers/base/firmware_loader/main.c' line='1009' column='1'/>
+        <parameter type-id='c8e4e392' name='cont' filepath='drivers/base/firmware_loader/main.c' line='1010' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b4dce158'>
+        <parameter type-id='fce0537d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </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_device_add_resources' mangled-name='platform_device_add_resources' filepath='drivers/base/platform.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_resources'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='407' column='1'/>
+        <parameter type-id='e153f6de' name='res' filepath='drivers/base/platform.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_add_data' mangled-name='platform_device_add_data' filepath='drivers/base/platform.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_data'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='435' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/platform.c' line='435' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/platform.c' line='436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_add_properties' mangled-name='platform_device_add_properties' filepath='drivers/base/platform.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_properties'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='461' column='1'/>
+        <parameter type-id='9e1d140c' name='properties' filepath='drivers/base/platform.c' line='462' 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>
+    </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'>
+      <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='ac5ab599'>
+        <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='e7f43f76' visibility='default' filepath='include/linux/pm_domain.h' line='140' column='1'/>
+        </data-member>
+      </union-decl>
+      <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'/>
+      <pointer-type-def type-id='514d8c48' size-in-bits='64' id='58cfaa0e'/>
+      <pointer-type-def type-id='4f4445b6' size-in-bits='64' id='cccdf8f0'/>
+      <pointer-type-def type-id='7ebd7dab' size-in-bits='64' id='795e6e5f'/>
+      <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_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_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_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-type size-in-bits='64' id='4f4445b6'>
+        <parameter type-id='855e3679'/>
+        <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>
+    </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='1003' 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='1003' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1003' 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='1035' 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='1035' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1035' 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='1066' 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='1066' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1066' 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='1095' 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='1095' 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='1133' 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='1133' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/base/power/runtime.c' line='1133' 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='1330' 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='1330' column='1'/>
+        <parameter type-id='b50a4934' name='check_resume' filepath='drivers/base/power/runtime.c' line='1330' 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='1472' 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='1472' 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='1549' 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='1549' column='1'/>
+        <parameter type-id='b50a4934' name='use' filepath='drivers/base/power/runtime.c' line='1549' 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='1740' 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='1740' 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='1786' 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='1786' 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='6406df84'/>
+        <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regcache.c' language='LANG_C89'>
+      <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='ac5ab59a'>
+        <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='e7f43f77' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <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>
+    </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='29af9a72'/>
+      </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>
+    </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='7544e824' 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='7544e824'/>
+      </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' is-declaration-only='yes' id='40c992e3'/>
+      <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='811' 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='817' 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='818' 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='819' 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='821' 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='822' 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='823' 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='824' 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='826' 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='827' 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='828' 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='832' 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='833' 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='834' 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='835' 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='836' 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='840' 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='841' 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='843' 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='845' 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='878' 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='879' 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='881' 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='883' 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='897' 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='898' 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='899' 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='900' 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='901' 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='907' 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='908' 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='911' 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='1098' 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>
+      <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>
+    </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' is-declaration-only='yes' id='38db93a7'/>
+      <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='ac5ab59b' 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>
+      <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='e7f43f77'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='3014' 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='3014' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='3014' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='3015' 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='1899' 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='1899' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='1899' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='1900' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='1900' 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='1999' 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='1999' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='drivers/base/regmap/regmap.c' line='2000' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/base/regmap/regmap.c' line='2000' column='1'/>
+        <parameter type-id='d8e6b335' name='change' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='drivers/base/regmap/regmap.c' line='2001' 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='2056' 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='2056' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2056' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2056' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2057' 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='2355' 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='2355' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2355' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2356' 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='2388' 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='2388' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2389' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2390' 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='2432' 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='2432' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2432' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2433' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2433' 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='2585' 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='2585' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2585' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2585' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2586' 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='2732' 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='2732' column='1'/>
+        <parameter type-id='807869d3' name='val' filepath='drivers/base/regmap/regmap.c' line='2732' 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='2792' 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='2792' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2792' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2792' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2793' 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='2973' 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='2973' 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='3064' 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='3064' 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='3095' 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='3095' 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>
+      <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='ac5ab59b'>
+        <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='e7f43f77' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+    </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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/topology.c' language='LANG_C89'>
+      <class-decl name='fwnode_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5ace205'/>
+      <pointer-type-def type-id='d5ace205' size-in-bits='64' id='4a935626'/>
+      <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='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>
+      <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='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>
+    </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' is-declaration-only='yes' id='424ad5b6'/>
+      <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='2016' 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='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='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='14272' 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='14112'>
+          <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='14144'>
+          <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='14208'>
+          <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='288' 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='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <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='64'>
+          <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='224'>
+          <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='256'>
+          <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='2051' 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='2000' 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_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_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>
+    </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' is-declaration-only='yes' id='78c7ad97'/>
+      <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>
+    </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' is-declaration-only='yes' id='830e3b1b'/>
+      <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__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f8cbf453'>
+        <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='687f967c' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='ffcbff58'>
+        <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='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='9b0c88ca'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' 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='3411' 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>
+    </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>
+      <function-decl name='clk_bulk_put_all' mangled-name='clk_bulk_put_all' filepath='drivers/clk/clk-bulk.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_put_all'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='128' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-bulk.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-devres.c' language='LANG_C89'>
+      <pointer-type-def type-id='2942e355' size-in-bits='64' id='734c20ed'/>
+      <function-decl name='devm_clk_get_optional' mangled-name='devm_clk_get_optional' filepath='drivers/clk/clk-devres.c' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='32' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/clk/clk-devres.c' line='32' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <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='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='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>
+    </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' is-declaration-only='yes' id='636cc9ab'/>
+      <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_count' mangled-name='of_clk_get_parent_count' filepath='drivers/clk/clk.c' line='4752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_parent_count'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4752' column='1'/>
+        <return type-id='f0981eeb'/>
+      </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>
+    </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>
+    </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>
+    </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='6406df84'/>
+        <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'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clocksource/timer-of.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='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='ebdc8782' size-in-bits='64' id='b2168730'/>
+      <function-decl name='timer_of_init' mangled-name='timer_of_init' filepath='drivers/clocksource/timer-of.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timer_of_init'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clocksource/timer-of.c' line='168' column='1'/>
+        <parameter type-id='b2168730' name='to' filepath='drivers/clocksource/timer-of.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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>
+    </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='3ae87f87'/>
+      <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='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>
+      <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='6406df84'/>
+        <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='3ae87f87' size-in-bits='64' id='2feec21f'/>
+      <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>
+    </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='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>
+      <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>
+    </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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/devfreq/governor_passive.c' language='LANG_C89'>
+      <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='939' 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='939' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='940' 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='961' 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='961' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='962' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='963' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='963' 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='997' 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='997' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='998' 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='1011' 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='1011' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1012' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='1013' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='1013' 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='1036' 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='1036' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1036' 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='1054' 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='1054' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1054' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/dma-buf/dma-buf.c' line='1055' 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='1079' 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='1079' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/dma-buf/dma-buf.c' line='1079' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='drivers/dma-buf/dma-buf.c' line='1080' 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='1192' 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='1192' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/dma-buf/dma-buf.c' line='1192' 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='1206' 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='1206' column='1'/>
+        <parameter type-id='f1397309' name='uuid' filepath='drivers/dma-buf/dma-buf.c' line='1206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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='459' 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='459' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/dma-buf/dma-fence.c' line='459' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/dma-buf/dma-fence.c' line='459' 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='383' 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='383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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>
+    </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>
+    </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_extcon_dev' mangled-name='extcon_get_extcon_dev' filepath='drivers/extcon/extcon.c' line='867' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_extcon_dev'>
+        <parameter type-id='80f4b756' name='extcon_name' filepath='drivers/extcon/extcon.c' line='867' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <function-decl name='extcon_register_notifier' mangled-name='extcon_register_notifier' filepath='drivers/extcon/extcon.c' line='899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_register_notifier'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='899' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='899' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/extcon.c' line='900' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_unregister_notifier' mangled-name='extcon_unregister_notifier' filepath='drivers/extcon/extcon.c' line='928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_unregister_notifier'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='928' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='928' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/extcon.c' line='929' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_find_edev_by_node' mangled-name='extcon_find_edev_by_node' filepath='drivers/extcon/extcon.c' line='1336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_find_edev_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/extcon/extcon.c' line='1336' column='1'/>
+        <return type-id='c0d6fada'/>
+      </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='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='335c1d7b' 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='335c1d7b'>
+        <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='235c2fdc' 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='235c2fdc'>
+        <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='158fdf90' 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='158fdf90'>
+        <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='41c6dfb0' 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='41c6dfb0'>
+        <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='dc7bd57f' 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='dc7bd57f'>
+        <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='1a593494' 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='1a593494'>
+        <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='9ddb9e94' 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='9ddb9e94'>
+        <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='9720df34' 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='9720df34'>
+        <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>
+    </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='96ee24a5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <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='6406df84'/>
+        <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='ac5ab59c' 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='ac5ab59c'>
+        <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>
+      <pointer-type-def type-id='e84913bd' size-in-bits='64' id='4209d6b5'/>
+      <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>
+      <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>
+    </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>
+    </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='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>
+      <function-type size-in-bits='64' id='eacd3fb9'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </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>
+      <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>
+    </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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='6c3b3f8e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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='71f18ea5'>
+        <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='71f18ea5' size-in-bits='64' id='7b4ee155'/>
+      <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='e3dd029e'/>
+        <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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='6301fad2'/>
+        <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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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_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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e' 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='e3dd029e'/>
+      </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='e3dd029e'/>
+        <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='e3dd029e'/>
+        <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='e3dd029e'/>
+        <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='e3dd029e'/>
+      </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='e3dd029e'/>
+      </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='e3dd029e' 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='e3dd029e' 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='6301fad2' 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>
+    </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>
+    </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>
+    </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='9e99ecc1'/>
+        <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>
+    </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='c201baab'/>
+      <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' is-declaration-only='yes' id='833c0b8c'/>
+      <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' is-declaration-only='yes' id='1b04dce5'/>
+      <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='71f18ea6'/>
+      <class-decl name='pci_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c93f9a7'/>
+      <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='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>
+      <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='73303b8d'>
+        <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='cc4a63b9'>
+        <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='6c3b3f8e' 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='d5cb77a8'>
+        <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='6406df84'/>
+        <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-r383902/lib64/clang/11.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='e5ebb0e4'>
+        <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='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_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='ffcbff59' 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='ffcbff59'>
+        <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='8bb9a8e8'>
+        <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='3f40b771' 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='64249e24'>
+        <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='fecbfdc6' 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='9e99ecc1' 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>
+      <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='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='3f40b771' 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='e3dd029e' 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='09d6e909'>
+        <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>
+      <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='6406df84'/>
+        <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='3f40b771' 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='e3dd029e' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='3f40b771' 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='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='7b4ee156' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='e3dd029e' 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='6406df84'/>
+        <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='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_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>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='482' column='1' id='9f0c8f16'>
+        <data-member access='private'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='drm_connector_registration_state' filepath='include/drm/drm_connector.h' line='95' column='1' id='0b8fe6b9'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <typedef-decl name='uint8_t' type-id='f9b06939' filepath='include/linux/types.h' line='107' column='1' id='b96825af'/>
+      <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='6406df84'/>
+        <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='a00c90a9' 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='a00c90a9'>
+        <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='c201baab' 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='8bb9a8e8' size-in-bits='64' id='e3dd029e'/>
+      <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='09d6e909' size-in-bits='64' id='3f40b771'/>
+      <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='73303b8d' size-in-bits='64' id='1d52bc4d'/>
+      <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='cc4a63b9' size-in-bits='64' id='9e99ecc1'/>
+      <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='d5cb77a8' size-in-bits='64' id='6c3b3f8e'/>
+      <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='64249e24' size-in-bits='64' id='6301fad2'/>
+      <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='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'/>
+      <pointer-type-def type-id='f14fc18e' size-in-bits='64' id='2944961e'/>
+      <pointer-type-def type-id='71f18ea6' size-in-bits='64' id='7b4ee156'/>
+      <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='5c93f9a7' 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>
+      <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='e3dd029e'/>
+      </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='9e99ecc1'/>
+        <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='e3dd029e'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='6301fad2'/>
+        <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='6301fad2'/>
+        <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='e3dd029e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d75b067'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e3dd029e'/>
+        <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='9e99ecc1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a54e634'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='9e99ecc1'/>
+        <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='6c3b3f8e'/>
+        <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='7b4ee156'/>
+        <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='e3dd029e'/>
+        <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='e3dd029e'/>
+        <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='9e99ecc1'/>
+        <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='e3dd029e'/>
+        <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='9e99ecc1'/>
+        <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='7b4ee156'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee780377'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <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='fecbfdc6'>
+        <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>
+    </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='9e99ecc2' 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='e3dd029e'/>
+        <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>
+    </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='8bb9a8e9'/>
+      <class-decl name='drm_crtc_commit' is-struct='yes' visibility='default' is-declaration-only='yes' id='09d6e90a'/>
+      <class-decl name='drm_driver' is-struct='yes' visibility='default' is-declaration-only='yes' id='73303b8e'/>
+      <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='8bb9a8e9' size-in-bits='64' id='e3dd029f'/>
+      <pointer-type-def type-id='09d6e90a' size-in-bits='64' id='3f40b772'/>
+      <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='73303b8e' size-in-bits='64' id='1d52bc4e'/>
+      <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='e3dd029e' 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='e3dd029e'/>
+        <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='e3dd029e' 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>
+      <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>
+    </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='1d52bc4d' 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>
+    </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>
+    </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='6406df84'/>
+        <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='9e99ecc1' 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='496' 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>
+    </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='518' 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='9e99ecc1' 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='517' 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>
+    </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='9e99ecc2' 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='9e99ecc2'/>
+        <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='9e99ecc2'/>
+        <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='9e99ecc2' 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>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='ac5ab59d'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f78' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+    </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='9e99ecc1' 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='6406df84'/>
+        <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' is-declaration-only='yes' id='37c0f586'/>
+      <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'>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='724' column='1' id='f9cbf5e6'>
+        <data-member access='private'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+      </union-decl>
+      <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='452' 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='453' 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='454' 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='455' 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='456' 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='457' 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='458' 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='459' column='1'/>
+        </data-member>
+      </class-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='f6cbf12f'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='70494aab'>
+            <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='f9cbf5e7' 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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f9679' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='f9cbf5e7'>
+        <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>
+      <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='492' 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='9e99ecc1' 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='495' 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='9e99ecc1' 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='494' 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='487' 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='498' 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='500' 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='489' 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>
+    </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='cc4a63ba'/>
+      <class-decl name='drm_minor' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5cb77a9'/>
+      <class-decl name='drm_pending_vblank_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='64249e25'/>
+      <class-decl name='drm_vblank_crtc' is-struct='yes' visibility='default' is-declaration-only='yes' id='e5ebb0e5'/>
+      <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='f3cbec76' 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='f3cbec76'>
+        <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='f2cbeae2' 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='f2cbeae2'>
+        <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='f5cbef9b' 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='f5cbef9b'>
+        <data-member access='private'>
+          <var-decl name='gtf2' type-id='e7f43f79' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='687f967d' 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='e7f43f79'>
+        <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='687f967d'>
+        <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='cc4a63ba' size-in-bits='64' id='9e99ecc2'/>
+      <pointer-type-def type-id='d5cb77a9' size-in-bits='64' id='6c3b3f8f'/>
+      <pointer-type-def type-id='64249e25' size-in-bits='64' id='6301fad3'/>
+      <pointer-type-def type-id='e5ebb0e5' size-in-bits='64' id='04d2f8d3'/>
+      <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>
+    </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'>
+      <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='ac5ab59e'>
+        <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>
+      <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='6301fad2' 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>
+    </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='08f5ca18' 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='08f5ca18'>
+        <underlying-type type-id='6406df84'/>
+        <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='429' 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='429' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='429' column='1'/>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='430' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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/hid/hid-core.c' language='LANG_C89'>
+      <var-decl name='hid_debug' type-id='95e97e5e' mangled-name='hid_debug' visibility='default' filepath='drivers/hid/hid-core.c' line='44' column='1' elf-symbol-id='hid_debug'/>
+      <var-decl name='hid_bus_type' type-id='b31bfc8a' mangled-name='hid_bus_type' visibility='default' filepath='drivers/hid/hid-core.c' line='2357' column='1' elf-symbol-id='hid_bus_type'/>
+      <function-decl name='hid_snto32' mangled-name='hid_snto32' filepath='drivers/hid/hid-core.c' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_snto32'>
+        <parameter type-id='3f1a6b60' name='value' filepath='drivers/hid/hid-core.c' line='1311' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/hid/hid-core.c' line='1311' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='hid_set_field' mangled-name='hid_set_field' filepath='drivers/hid/hid-core.c' line='1640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_set_field'>
+        <parameter type-id='bd70a631' name='field' filepath='drivers/hid/hid-core.c' line='1640' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/hid/hid-core.c' line='1640' column='1'/>
+        <parameter type-id='3158a266' name='value' filepath='drivers/hid/hid-core.c' line='1640' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hid_request' mangled-name='__hid_request' filepath='drivers/hid/hid-core.c' line='1688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hid_request'>
+        <parameter type-id='37175e4d' name='hid' filepath='drivers/hid/hid-core.c' line='1688' column='1'/>
+        <parameter type-id='5b4284d1' name='report' filepath='drivers/hid/hid-core.c' line='1688' column='1'/>
+        <parameter type-id='95e97e5e' name='reqtype' filepath='drivers/hid/hid-core.c' line='1689' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_compare_device_paths' mangled-name='hid_compare_device_paths' filepath='drivers/hid/hid-core.c' line='2207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_compare_device_paths'>
+        <parameter type-id='37175e4d' name='hdev_a' filepath='drivers/hid/hid-core.c' line='2207' column='1'/>
+        <parameter type-id='37175e4d' name='hdev_b' filepath='drivers/hid/hid-core.c' line='2208' column='1'/>
+        <parameter type-id='a84c031d' name='separator' filepath='drivers/hid/hid-core.c' line='2208' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__hid_register_driver' mangled-name='__hid_register_driver' filepath='drivers/hid/hid-core.c' line='2522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hid_register_driver'>
+        <parameter type-id='cbd2074d' name='hdrv' filepath='drivers/hid/hid-core.c' line='2522' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/hid/hid-core.c' line='2522' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/hid/hid-core.c' line='2523' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-generic.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bd70a631' size-in-bits='16384' id='b5f2d796'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='5b4284d1' size-in-bits='16384' id='042b23b6'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0b9e92f3' size-in-bits='49728' id='e8e17bcc'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='hid_driver' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='736' column='1' id='2185483d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/hid.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='f499bd02' visibility='default' filepath='include/linux/hid.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dyn_list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dyn_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/hid.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='match' type-id='5b9f5da4' visibility='default' filepath='include/linux/hid.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='probe' type-id='078f3b94' visibility='default' filepath='include/linux/hid.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='remove' type-id='5befc19c' visibility='default' filepath='include/linux/hid.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='report_table' type-id='2c4d0ce6' visibility='default' filepath='include/linux/hid.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='raw_event' type-id='fe3a6ee7' visibility='default' filepath='include/linux/hid.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='usage_table' type-id='b473f54b' visibility='default' filepath='include/linux/hid.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='8181b8c5' visibility='default' filepath='include/linux/hid.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='report' type-id='e23057dc' visibility='default' filepath='include/linux/hid.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='report_fixup' type-id='a4f4a514' visibility='default' filepath='include/linux/hid.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='input_mapping' type-id='d77ebcbf' visibility='default' filepath='include/linux/hid.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='input_mapped' type-id='d77ebcbf' visibility='default' filepath='include/linux/hid.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='input_configured' type-id='3e9b5e67' visibility='default' filepath='include/linux/hid.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='feature_mapping' type-id='2064eae9' visibility='default' filepath='include/linux/hid.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='suspend' type-id='a4c53922' visibility='default' filepath='include/linux/hid.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='reset_resume' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/hid.h' line='775' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_device_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='166' column='1' id='4a0784fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='group' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='168' 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='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='170' 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='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_device' size-in-bits='62272' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='545' column='1' id='6703ad9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_rdesc' type-id='474e5dcc' visibility='default' filepath='include/linux/hid.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_rsize' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rdesc' type-id='474e5dcc' visibility='default' filepath='include/linux/hid.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rsize' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collection' type-id='f2428caf' visibility='default' filepath='include/linux/hid.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='collection_size' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxcollection' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='maxapplication' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bus' type-id='d315442e' visibility='default' filepath='include/linux/hid.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='group' type-id='d315442e' visibility='default' filepath='include/linux/hid.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='product' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='fa954a4e' visibility='default' filepath='include/linux/hid.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='country' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='report_enum' type-id='e8e17bcc' visibility='default' filepath='include/linux/hid.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50368'>
+          <var-decl name='led_work' type-id='ef9025d0' visibility='default' filepath='include/linux/hid.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50752'>
+          <var-decl name='driver_input_lock' type-id='011244e5' visibility='default' filepath='include/linux/hid.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50944'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/hid.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58304'>
+          <var-decl name='driver' type-id='cbd2074d' visibility='default' filepath='include/linux/hid.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58368'>
+          <var-decl name='ll_driver' type-id='7073b1dc' visibility='default' filepath='include/linux/hid.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58432'>
+          <var-decl name='ll_open_lock' type-id='925167dc' visibility='default' filepath='include/linux/hid.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58688'>
+          <var-decl name='ll_open_count' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58752'>
+          <var-decl name='status' type-id='7359adad' visibility='default' filepath='include/linux/hid.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58816'>
+          <var-decl name='claimed' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58848'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58880'>
+          <var-decl name='io_started' type-id='b50a4934' visibility='default' filepath='include/linux/hid.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58944'>
+          <var-decl name='inputs' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59072'>
+          <var-decl name='hiddev' type-id='eaa32e2f' visibility='default' filepath='include/linux/hid.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59136'>
+          <var-decl name='hidraw' type-id='eaa32e2f' visibility='default' filepath='include/linux/hid.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59200'>
+          <var-decl name='name' type-id='e3204322' visibility='default' filepath='include/linux/hid.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60224'>
+          <var-decl name='phys' type-id='59daf3ef' visibility='default' filepath='include/linux/hid.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60736'>
+          <var-decl name='uniq' type-id='59daf3ef' visibility='default' filepath='include/linux/hid.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61248'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/hid.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61312'>
+          <var-decl name='ff_init' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61376'>
+          <var-decl name='hiddev_connect' type-id='fde001a9' visibility='default' filepath='include/linux/hid.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61440'>
+          <var-decl name='hiddev_disconnect' type-id='5befc19c' visibility='default' filepath='include/linux/hid.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61504'>
+          <var-decl name='hiddev_hid_event' type-id='190eee1c' visibility='default' filepath='include/linux/hid.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61568'>
+          <var-decl name='hiddev_report_event' type-id='e23057dc' visibility='default' filepath='include/linux/hid.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61632'>
+          <var-decl name='debug' type-id='8efea9e5' visibility='default' filepath='include/linux/hid.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61696'>
+          <var-decl name='debug_dir' type-id='27675065' visibility='default' filepath='include/linux/hid.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61760'>
+          <var-decl name='debug_rdesc' type-id='27675065' visibility='default' filepath='include/linux/hid.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61824'>
+          <var-decl name='debug_events' type-id='27675065' visibility='default' filepath='include/linux/hid.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61888'>
+          <var-decl name='debug_list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62016'>
+          <var-decl name='debug_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/hid.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62080'>
+          <var-decl name='debug_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/hid.h' line='620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_collection' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='422' column='1' id='19bef197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/hid.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hid_type' filepath='include/linux/hid.h' line='530' column='1' id='fa954a4e'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='HID_TYPE_OTHER' value='0'/>
+        <enumerator name='HID_TYPE_USBMOUSE' value='1'/>
+        <enumerator name='HID_TYPE_USBNONE' value='2'/>
+      </enum-decl>
+      <class-decl name='hid_report_enum' size-in-bits='16576' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='488' column='1' id='0b9e92f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numbered' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='report_list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='report_id_hash' type-id='042b23b6' visibility='default' filepath='include/linux/hid.h' line='491' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_report' size-in-bits='16896' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='474' column='1' id='9ea68709'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidinput_list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='application' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='field' type-id='b5f2d796' visibility='default' filepath='include/linux/hid.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16768'>
+          <var-decl name='maxfield' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16800'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='device' type-id='37175e4d' visibility='default' filepath='include/linux/hid.h' line='483' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_field' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='447' column='1' id='3ede3949'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='physical' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='logical' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='application' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage' type-id='d586c6cc' visibility='default' filepath='include/linux/hid.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maxusage' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='452' 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/hid.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='report_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='report_size' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report_count' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='report_type' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='value' type-id='a5f29c61' visibility='default' filepath='include/linux/hid.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='logical_minimum' type-id='3158a266' visibility='default' filepath='include/linux/hid.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='logical_maximum' type-id='3158a266' visibility='default' filepath='include/linux/hid.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='physical_minimum' type-id='3158a266' visibility='default' filepath='include/linux/hid.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='physical_maximum' type-id='3158a266' visibility='default' filepath='include/linux/hid.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unit_exponent' type-id='3158a266' visibility='default' filepath='include/linux/hid.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='unit' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='report' type-id='5b4284d1' visibility='default' filepath='include/linux/hid.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hidinput' type-id='b548c585' visibility='default' filepath='include/linux/hid.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dpad' type-id='d315442e' visibility='default' filepath='include/linux/hid.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_usage' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='429' column='1' id='dc1e3176'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hid' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='collection_index' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage_index' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='resolution_multiplier' type-id='8af57d41' visibility='default' filepath='include/linux/hid.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='wheel_factor' type-id='8af57d41' visibility='default' filepath='include/linux/hid.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='code' type-id='d315442e' visibility='default' filepath='include/linux/hid.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/linux/hid.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='hat_min' type-id='8af57d41' visibility='default' filepath='include/linux/hid.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='hat_max' type-id='8af57d41' visibility='default' filepath='include/linux/hid.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='hat_dir' type-id='8af57d41' visibility='default' filepath='include/linux/hid.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wheel_accumulated' type-id='b55def60' visibility='default' filepath='include/linux/hid.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_input' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='520' column='1' id='60cc85f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='report' type-id='5b4284d1' visibility='default' filepath='include/linux/hid.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='input' type-id='74b427eb' visibility='default' filepath='include/linux/hid.h' line='523' 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/hid.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/linux/hid.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reports' type-id='72f469ec' visibility='default' filepath='include/linux/hid.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='application' type-id='f0981eeb' visibility='default' filepath='include/linux/hid.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <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>
+      <class-decl name='hid_ll_driver' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='796' column='1' id='0e5e2ca6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='5befc19c' visibility='default' filepath='include/linux/hid.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='close' type-id='5befc19c' visibility='default' filepath='include/linux/hid.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='power' type-id='8cefa062' visibility='default' filepath='include/linux/hid.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parse' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='request' type-id='8f2ea2db' visibility='default' filepath='include/linux/hid.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wait' type-id='7e01f3db' visibility='default' filepath='include/linux/hid.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_request' type-id='94b60312' visibility='default' filepath='include/linux/hid.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='output_report' type-id='587d2ba7' visibility='default' filepath='include/linux/hid.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='idle' type-id='6fed6bf0' visibility='default' filepath='include/linux/hid.h' line='818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_report_id' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='686' column='1' id='4fd7026f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='report_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='687' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hid_usage_id' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/hid.h' line='689' column='1' id='78e57306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage_hid' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='usage_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage_code' type-id='3f1a6b60' visibility='default' filepath='include/linux/hid.h' line='692' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3158a266' size-in-bits='64' id='a5f29c61'/>
+      <pointer-type-def type-id='c9a29512' size-in-bits='64' id='a4f4a514'/>
+      <qualified-type-def type-id='4a0784fb' const='yes' id='8681f81c'/>
+      <pointer-type-def type-id='8681f81c' size-in-bits='64' id='f499bd02'/>
+      <qualified-type-def type-id='4fd7026f' const='yes' id='c43be768'/>
+      <pointer-type-def type-id='c43be768' size-in-bits='64' id='2c4d0ce6'/>
+      <qualified-type-def type-id='78e57306' const='yes' id='10117043'/>
+      <pointer-type-def type-id='10117043' size-in-bits='64' id='b473f54b'/>
+      <pointer-type-def type-id='19bef197' size-in-bits='64' id='f2428caf'/>
+      <pointer-type-def type-id='6703ad9d' size-in-bits='64' id='37175e4d'/>
+      <pointer-type-def type-id='2185483d' size-in-bits='64' id='cbd2074d'/>
+      <pointer-type-def type-id='3ede3949' size-in-bits='64' id='bd70a631'/>
+      <pointer-type-def type-id='60cc85f5' size-in-bits='64' id='b548c585'/>
+      <pointer-type-def type-id='0e5e2ca6' size-in-bits='64' id='7073b1dc'/>
+      <pointer-type-def type-id='9ea68709' size-in-bits='64' id='5b4284d1'/>
+      <pointer-type-def type-id='dc1e3176' size-in-bits='64' id='d586c6cc'/>
+      <pointer-type-def type-id='ef276be8' size-in-bits='64' id='24a62f42'/>
+      <pointer-type-def type-id='bb068c9f' size-in-bits='64' id='7e01f3db'/>
+      <pointer-type-def type-id='3b22df33' size-in-bits='64' id='587d2ba7'/>
+      <pointer-type-def type-id='91f7d512' size-in-bits='64' id='078f3b94'/>
+      <pointer-type-def type-id='3802a069' size-in-bits='64' id='8181b8c5'/>
+      <pointer-type-def type-id='3bdb8693' size-in-bits='64' id='3e9b5e67'/>
+      <pointer-type-def type-id='b7da17bb' size-in-bits='64' id='d77ebcbf'/>
+      <pointer-type-def type-id='0337a003' size-in-bits='64' id='fe3a6ee7'/>
+      <pointer-type-def type-id='599afbc8' size-in-bits='64' id='8cefa062'/>
+      <pointer-type-def type-id='47b43ff6' size-in-bits='64' id='6fed6bf0'/>
+      <pointer-type-def type-id='433beb58' size-in-bits='64' id='a4c53922'/>
+      <pointer-type-def type-id='65e1dee8' size-in-bits='64' id='94b60312'/>
+      <pointer-type-def type-id='04ddf8cd' size-in-bits='64' id='fde001a9'/>
+      <pointer-type-def type-id='febb5b52' size-in-bits='64' id='5b9f5da4'/>
+      <pointer-type-def type-id='1d2c2b85' size-in-bits='64' id='9b88c47d'/>
+      <pointer-type-def type-id='7680214a' size-in-bits='64' id='5befc19c'/>
+      <pointer-type-def type-id='47ebc9bd' size-in-bits='64' id='2064eae9'/>
+      <pointer-type-def type-id='d20525ea' size-in-bits='64' id='190eee1c'/>
+      <pointer-type-def type-id='fc224242' size-in-bits='64' id='e23057dc'/>
+      <pointer-type-def type-id='73627a37' size-in-bits='64' id='8f2ea2db'/>
+      <function-decl name='hid_unregister_driver' mangled-name='hid_unregister_driver' filepath='include/linux/hid.h' line='860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_unregister_driver'>
+        <parameter type-id='cbd2074d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bus_for_each_drv' mangled-name='bus_for_each_drv' filepath='include/linux/device.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_for_each_drv'>
+        <parameter type-id='5e2671f8'/>
+        <parameter type-id='00c7b870'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='24a62f42'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_open_report' mangled-name='hid_open_report' filepath='include/linux/hid.h' line='899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_open_report'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_hw_start' mangled-name='hid_hw_start' filepath='include/linux/hid.h' line='1020' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_hw_start'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_match_device' mangled-name='hid_match_device' filepath='include/linux/hid.h' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_match_device'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='cbd2074d'/>
+        <return type-id='f499bd02'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c9a29512'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='474e5dcc'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='474e5dcc'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef276be8'>
+        <parameter type-id='00c7b870'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bb068c9f'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b22df33'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='474e5dcc'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91f7d512'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='f499bd02'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3802a069'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='bd70a631'/>
+        <parameter type-id='d586c6cc'/>
+        <parameter type-id='3158a266'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bdb8693'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='b548c585'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7da17bb'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='b548c585'/>
+        <parameter type-id='bd70a631'/>
+        <parameter type-id='d586c6cc'/>
+        <parameter type-id='9b88c47d'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0337a003'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='5b4284d1'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='599afbc8'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47b43ff6'>
+        <parameter type-id='37175e4d'/>
+        <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='433beb58'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='65e1dee8'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='474e5dcc'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='04ddf8cd'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='febb5b52'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7680214a'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47ebc9bd'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='bd70a631'/>
+        <parameter type-id='d586c6cc'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d20525ea'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='bd70a631'/>
+        <parameter type-id='d586c6cc'/>
+        <parameter type-id='3158a266'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc224242'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='5b4284d1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73627a37'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='5b4284d1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-magicmouse.c' language='LANG_C89'>
+      <function-decl name='hid_hw_stop' mangled-name='hid_hw_stop' filepath='include/linux/hid.h' line='1022' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_hw_stop'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='48b5725f'/>
+      </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='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>
+      <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>
+    </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'>
+      <qualified-type-def type-id='3ede3949' const='yes' id='395280fe'/>
+      <pointer-type-def type-id='395280fe' size-in-bits='64' id='10e0cdbc'/>
+      <function-decl name='hidinput_calc_abs_res' mangled-name='hidinput_calc_abs_res' filepath='include/linux/hid.h' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hidinput_calc_abs_res'>
+        <parameter type-id='10e0cdbc'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_alloc_report_buf' mangled-name='hid_alloc_report_buf' filepath='include/linux/hid.h' line='887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_alloc_report_buf'>
+        <parameter type-id='5b4284d1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='cf536864'/>
+      </function-decl>
+      <function-decl name='hid_report_raw_event' mangled-name='hid_report_raw_event' filepath='include/linux/hid.h' line='1143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_report_raw_event'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-nintendo.c' language='LANG_C89'>
+      <qualified-type-def type-id='6703ad9d' const='yes' id='68cbaebc'/>
+      <pointer-type-def type-id='68cbaebc' size-in-bits='64' id='8ea3d622'/>
+      <pointer-type-def type-id='011244e5' size-in-bits='64' id='a965a5b5'/>
+      <function-decl name='hid_hw_open' mangled-name='hid_hw_open' filepath='include/linux/hid.h' line='1023' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_hw_open'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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>
+      <function-decl name='hid_field_extract' mangled-name='hid_field_extract' filepath='include/linux/hid.h' line='912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_field_extract'>
+        <parameter type-id='8ea3d622'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='hid_hw_close' mangled-name='hid_hw_close' filepath='include/linux/hid.h' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_hw_close'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='48b5725f'/>
+      </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='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-sony.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='272' 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='273' 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='275' 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='276' 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='278' 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='279' 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='280' 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='283' 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='286' 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='287' 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='288' 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='289' 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='290' 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='291' 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='292' 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='293' 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='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='tcd' type-id='2feec21f' visibility='default' filepath='include/linux/power_supply.h' line='296' 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='300' 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='301' 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='302' 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='303' 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='304' 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='305' 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='306' 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='307' 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='308' 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='309' 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='232' 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='233' 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='234' 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='235' 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='236' 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='237' 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='238' 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='246' 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='249' 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='257' 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='259' 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='260' 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='267' 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='269' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='power_supply_type' filepath='include/linux/power_supply.h' line='175' column='1' id='c61c3172'>
+        <underlying-type type-id='6406df84'/>
+        <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='191' column='1' id='1f7f0095'>
+        <underlying-type type-id='6406df84'/>
+        <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='95' column='1' id='5f78aa17'>
+        <underlying-type type-id='6406df84'/>
+        <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>
+      <class-decl name='power_supply_config' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='217' 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='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935626' visibility='default' filepath='include/linux/power_supply.h' line='219' 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='222' 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='225' 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='227' 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='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='power_supply_propval' size-in-bits='64' visibility='default' filepath='include/linux/power_supply.h' line='208' column='1' id='08942f16'>
+        <data-member access='private'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='strval' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='210' column='1'/>
+        </data-member>
+      </union-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='46ce60fb' size-in-bits='64' id='a9e764bb'/>
+      <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='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>
+      <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='434' 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='442' 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='446' 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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-steam.c' language='LANG_C89'>
+      <function-decl name='hid_allocate_device' mangled-name='hid_allocate_device' filepath='include/linux/hid.h' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_allocate_device'>
+        <return type-id='37175e4d'/>
+      </function-decl>
+      <function-decl name='hid_add_device' mangled-name='hid_add_device' filepath='include/linux/hid.h' line='848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_add_device'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hid_destroy_device' mangled-name='hid_destroy_device' filepath='include/linux/hid.h' line='849' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_destroy_device'>
+        <parameter type-id='37175e4d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hid_input_report' mangled-name='hid_input_report' filepath='include/linux/hid.h' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_input_report'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_changed' mangled-name='power_supply_changed' filepath='include/linux/power_supply.h' line='403' 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='power_supply_unregister' mangled-name='power_supply_unregister' filepath='include/linux/power_supply.h' line='441' 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='426' 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='hid_parse_report' mangled-name='hid_parse_report' filepath='include/linux/hid.h' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hid_parse_report'>
+        <parameter type-id='37175e4d'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </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/hid/usbhid/hid-core.c' language='LANG_C89'>
+      <var-decl name='usb_hid_driver' type-id='0e5e2ca6' mangled-name='usb_hid_driver' visibility='default' filepath='drivers/hid/usbhid/hid-core.c' line='1305' column='1' elf-symbol-id='usb_hid_driver'/>
+    </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' 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>
+      <function-type size-in-bits='64' id='db4c9bf7'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </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'>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f8cbf454'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <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>
+    </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' is-declaration-only='yes' id='5cec8edf'/>
+      <class-decl name='iio_trigger' size-in-bits='10688' is-struct='yes' visibility='default' is-declaration-only='yes' id='f060e03b'/>
+      <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='e7f43f7a' 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='6406df84'/>
+        <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='e7f43f7a'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <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>
+    </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='7dffcde3' const='yes' id='b8ae588e'/>
+      <pointer-type-def type-id='b8ae588e' size-in-bits='64' id='61758ee6'/>
+      <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>
+    </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='6406df84'/>
+        <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>
+      <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='1380' 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='3239' 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='1373' 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' is-declaration-only='yes' id='d995db0d'/>
+      <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='ac5ab59f' 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='ac5ab59f'>
+        <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='6406df84'/>
+        <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_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>
+    </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_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='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='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>
+      <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>
+    </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='strndup_user' mangled-name='strndup_user' filepath='include/linux/string.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strndup_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='26a90f95'/>
+      </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='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='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>
+    </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='6406df84'/>
+        <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='ac5ab5a0' 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='ac5ab5a0'>
+        <data-member access='private'>
+          <var-decl name='arm_lpae_s1_cfg' type-id='e7f43f7b' 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='687f967e' 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='657f91c2' 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='667f9354' 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='e7f43f7b'>
+        <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='687f967e'>
+        <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='657f91c2'>
+        <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='667f9354'>
+        <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/iommu.c' language='LANG_C89'>
+      <class-decl name='__anonymous_struct__' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='e7f43f7c'>
+        <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='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='f1ac64d0' 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_alloc_resv_region' mangled-name='iommu_alloc_resv_region' filepath='drivers/iommu/iommu.c' line='2199' 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='2199' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/iommu/iommu.c' line='2200' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2200' column='1'/>
+        <parameter type-id='256c2037' name='type' filepath='drivers/iommu/iommu.c' line='2201' column='1'/>
+        <return type-id='24b0cc5e'/>
+      </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_map' mangled-name='iommu_map' filepath='drivers/iommu/iommu.c' line='1885' 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='1885' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='1885' column='1'/>
+        <parameter type-id='2522883d' name='paddr' filepath='drivers/iommu/iommu.c' line='1886' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='1886' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='1886' 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='2166' 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='2166' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2167' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2167' 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='f1ac64d0' 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_unmap' mangled-name='iommu_unmap' filepath='drivers/iommu/iommu.c' line='2000' 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='2000' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2001' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='2001' 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='2022' 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='2022' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2022' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/iommu/iommu.c' line='2023' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='drivers/iommu/iommu.c' line='2023' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2023' 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='2108' 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='2108' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2108' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2109' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/iommu/iommu.c' line='2109' 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='2138' 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='2138' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2139' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2139' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_fwspec_free' mangled-name='iommu_fwspec_free' filepath='drivers/iommu/iommu.c' line='2340' 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='2340' 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='2352' 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='2352' column='1'/>
+        <parameter type-id='f9409001' name='ids' filepath='drivers/iommu/iommu.c' line='2352' column='1'/>
+        <parameter type-id='95e97e5e' name='num_ids' filepath='drivers/iommu/iommu.c' line='2352' 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='f9cbf5e8' size-in-bits='128' id='c0ce8f00'>
+        <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' is-declaration-only='yes' id='2dfcfaf9'/>
+      <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' is-declaration-only='yes' id='2b7bb54d'/>
+      <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='286' 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='287' 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='288' 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='289' 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='290' 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='291' 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='292' 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='293' 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='294' 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='252' 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='253' 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='255' 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='259' 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='262' 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='265' 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='268' 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='269' 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='271' 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='c0ce8f00' 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='ac5ab5a1'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f7d' 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='e7f43f7d'>
+        <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='687f967f' 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='f6cbf130' 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='687f967f'>
+        <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='f6cbf130'>
+        <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='f9cbf5e8'>
+        <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='576' 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='577' 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='578' 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='579' 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='580' 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='581' 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='582' 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='584' 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='585' 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='586' 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='588' 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='589' 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='590' 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='591' 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='593' 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='594' 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='595' 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='596' 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='598' 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='601' 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='603' 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='604' 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='605' 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='606' 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='607' 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='608' 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='609' 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='611' 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='612' 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='613' 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='614' 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='5c93f9a8'>
+        <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='17264'>
+          <var-decl name='dev_flags' type-id='0f4efb07' visibility='default' filepath='include/linux/pci.h' line='427' 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='428' 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='430' 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='431' 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='432' 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='433' 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='434' 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='435' 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='446' 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='448' 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='467' 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='468' 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='469' 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='471' 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='473' 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='474' 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='475' 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='476' 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='836' 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='837' 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='838' 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='839' 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='840' 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='841' 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='842' 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='843' 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='844' 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='845' 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='846' 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='847' 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='848' 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='849' 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='850' 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='851' 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='853' 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='854' 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='855' 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='856' 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='771' 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='773' 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='777' 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='780' 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='783' 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='784' 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='787' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_ers_result_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='748' 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='6406df84'/>
+        <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='735' 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='736' 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='737' 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='707' 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='708' 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='709' 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='710' 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='711' 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='712' 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='209' 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='210' 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='211' 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='212' 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='213' 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='215' 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='217' 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='219' 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='5c93f9a8' 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='369' 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='7544e824'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='pci_msi_mask_irq' mangled-name='pci_msi_mask_irq' filepath='include/linux/msi.h' line='192' 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='193' 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-type size-in-bits='64' id='a1aadc50'>
+        <parameter type-id='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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>
+    </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='7544e824'/>
+      </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='7544e824'/>
+        <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='394' 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='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_get_irq_data'>
+        <parameter type-id='7544e824'/>
+        <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='450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_info'>
+        <parameter type-id='7544e824'/>
+        <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-mbigen.c' language='LANG_C89'>
+      <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='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='490' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_hwirq_and_chip'>
+        <parameter type-id='7544e824'/>
+        <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='msi_desc' size-in-bits='832' is-struct='yes' visibility='default' is-declaration-only='yes' id='d2b46ce8'/>
+      <class-decl name='msi_msg' size-in-bits='96' is-struct='yes' visibility='default' is-declaration-only='yes' id='03ba410a'/>
+      <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='7544e824' 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='a667f60e'>
+        <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='7544e824' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='7544e824' 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='6406df84'/>
+        <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='f6cbf131'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='70494aac'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='f9cbf5e9' 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='f8cbf455' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='5e607202'>
+            <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='f3cbec77' 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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f7e' visibility='default' filepath='include/linux/mm_types.h' line='80' 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='e7f43f7e'>
+        <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>
+      <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f9cbf5e9'>
+        <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='687f967c' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='f3cbec77'>
+        <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='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='6406df84'/>
+        <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='a667f60e' size-in-bits='64' id='7544e824'/>
+      <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='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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <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='7544e824'/>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb940a3b'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='267816c1'>
+        <parameter type-id='7544e824'/>
+        <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>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='f8cbf455'>
+        <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='3de1074c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+    </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='7544e824'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_find_mapping' mangled-name='irq_find_mapping' filepath='include/linux/irqdomain.h' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_find_mapping'>
+        <parameter type-id='7544e824'/>
+        <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-triggers.c' language='LANG_C89'>
+      <function-decl name='devm_led_trigger_register' mangled-name='devm_led_trigger_register' filepath='drivers/leds/led-triggers.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_led_trigger_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/leds/led-triggers.c' line='292' column='1'/>
+        <parameter type-id='db6d90a1' name='trig' filepath='drivers/leds/led-triggers.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/leds/trigger/ledtrig-timer.c' language='LANG_C89'>
+      <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>
+    </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_controller_register' mangled-name='mbox_controller_register' filepath='drivers/mailbox/mailbox.c' line='476' 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='476' 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='527' 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='527' 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'>
+      <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>
+      <pointer-type-def type-id='d80b6ab0' size-in-bits='64' id='72bb8c36'/>
+      <pointer-type-def type-id='3e497762' size-in-bits='64' id='9e5416b4'/>
+      <pointer-type-def type-id='031a4ff0' size-in-bits='64' id='1507ee2a'/>
+      <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='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='55' 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='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='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='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='56' 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>
+      <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='031a4ff0'>
+        <parameter type-id='c249b570'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </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>
+    </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='986a13e4'/>
+      <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='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='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='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='6406df84'/>
+        <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>
+      <enum-decl name='rc_driver_type' filepath='include/media/rc-core.h' line='27' column='1' id='d4dbe3db'>
+        <underlying-type type-id='6406df84'/>
+        <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='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='ac5ab5a2' 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='ac5ab5a2'>
+        <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='f9cbf5ea' 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='f9cbf5ea'>
+        <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='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'/>
+      <pointer-type-def type-id='7a35a8fe' size-in-bits='64' id='75ae4804'/>
+      <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='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'/>
+      <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='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='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='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>
+      <function-type size-in-bits='64' id='25048781'>
+        <parameter type-id='75ae4804'/>
+        <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/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'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='181' column='1' id='f6cbf132'>
+        <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>
+      <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>
+    </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>
+    </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='e7f43f7f' 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='e7f43f7f'>
+        <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='f9cbf5eb' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='ac5ab5a3' 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='f6cbf133' 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='ac5ab5a3'>
+        <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='f6cbf133'>
+        <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>
+      <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='687f9680'>
+        <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='6406df84'/>
+        <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='702' 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='702' 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='583' 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='583' column='1'/>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-device.c' line='584' 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='679' 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='679' 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='720' 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='720' 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='730' 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='730' column='1'/>
+        <parameter type-id='2730d016' name='owner' filepath='drivers/media/mc/mc-device.c' line='731' 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='799' 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='799' 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>
+      <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='f9cbf5eb'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='687f9680' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/mc/mc-entity.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='135' column='1' id='f6cbf134'>
+        <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>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='140' column='1' id='f9cbf5ec'>
+        <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_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-main.c' language='LANG_C89'>
+      <pointer-type-def type-id='db6d90a1' size-in-bits='64' id='f87a8ad1'/>
+      <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='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>
+    </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>
+    </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='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='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='d6130048'/>
+      <class-decl name='v4l2_m2m_ctx' size-in-bits='14336' is-struct='yes' visibility='default' is-declaration-only='yes' id='e1b58b0e'/>
+      <class-decl name='vb2_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='6b30321d'/>
+      <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='405' column='1' id='8b60a0b9'>
+        <underlying-type type-id='6406df84'/>
+        <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='2352' 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='2353' 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='2354' 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='2355' 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='2356' 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='1862' 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='1863' 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='1864' 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='1865' 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='1866' 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='1873' 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='1874' 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='1875' 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='1876' 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='1877' 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='1878' 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='1879' 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='1880' 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='1881' 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='1805' 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='1806' 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='1807' 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='1808' 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='1809' 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='1810' 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='1811' 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='1812' 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='1813' 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='1814' 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='1815' 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='1816' 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='1819' 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='1820' 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='1821' 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='1822' 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='1823' 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='1824' 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='1825' 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='1826' 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='1827' 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='1220' 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='420' 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='421' 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='422' 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='1519' 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='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='f6cbf135' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1521' 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='1521' column='1' id='f6cbf135'>
+        <data-member access='private'>
+          <var-decl name='bt' type-id='ecc13ba0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1523' 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='1396' 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='1397' 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='1398' 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='1399' 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='1400' 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='1401' 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='1402' 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='1403' 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='1404' 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='1405' 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='1406' 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='1407' 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='1408' 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='1409' 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='1410' 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='1411' 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='1412' 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='1413' 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='1414' 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='1415' 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='1416' 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='97' 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='98' 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='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_mbus_type' filepath='include/media/v4l2-mediabus.h' line='82' column='1' id='e34ed0c3'>
+        <underlying-type type-id='6406df84'/>
+        <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'/>
+      </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='2108' 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='2109' 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='2110' 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='2111' 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='2112' 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='2113' 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='2097' 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='2098' 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='2103' 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='2104' 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='2105' 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='2045' 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='2046' 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='2047' 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='2048' 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='2049' 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='2050' 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='2051' 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='2052' 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='2053' 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='2073' 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='2074' 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='2079' 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='2080' 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='2081' 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='6406df84'/>
+        <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='413' 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='414' 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='415' 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='416' 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='417' 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='1583' 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='1584' 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='1585' 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='1586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f9cbf5ed' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1587' 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='1587' column='1' id='f9cbf5ed'>
+        <data-member access='private'>
+          <var-decl name='bt' type-id='e5bfe593' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1588' 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='1589' 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='1556' 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='1557' 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='1558' 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='1559' 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='1560' 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='1561' 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='1562' 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='1563' 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='1564' 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='1565' 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='1538' 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='1539' 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='1540' 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='1541' 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='1542' 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='6406df84'/>
+        <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='f8cbf456' 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='6406df84'/>
+        <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='f8cbf456'>
+        <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='e7f43f80' visibility='default' filepath='include/media/v4l2-async.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='custom' type-id='687f9681' 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='e7f43f80'>
+        <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='687f9681'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='441' 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='442' 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='443' 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='444' 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='445' 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='446' 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='447' 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='448' 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='773' 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='774' 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='775' 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='776' 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='777' 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='778' 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='779' 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='2244' 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='2245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='f3cbec78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2255' 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='2246' column='1' id='f3cbec78'>
+        <data-member access='private'>
+          <var-decl name='pix' type-id='e8f6102b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2247' 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='2248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='win' type-id='3a0ab346' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbi' type-id='ae01ca89' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sliced' type-id='a2be7826' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2251' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sdr' type-id='a37aff65' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='meta' type-id='1db7c88b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2253' 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='2254' 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='495' 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='496' 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='497' 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='498' 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='499' 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='500' 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='501' 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='502' 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='503' 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='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='f2cbeae3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='505' 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='511' 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='512' 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='505' column='1' id='f2cbeae3'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='507' 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='509' 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='2194' 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='2195' 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='2196' 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='2197' 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='2198' 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='2199' 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='2201' 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='2202' 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='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='' type-id='f5cbef9c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2204' 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='2208' 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='2209' 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='2210' 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='2174' 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='2175' 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='2176' 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='2177' 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='2204' column='1' id='f5cbef9c'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2205' 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='2206' 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='1144' 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='1145' 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='1146' 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='1147' 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='1148' 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='1149' 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='1150' 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='1151' 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='1139' 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='1140' 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='1141' 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='2218' 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='2219' 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='2220' 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='2221' 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='2229' 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='2230' 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='2231' 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='914' 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='915' 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='916' 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='917' 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='918' 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='919' 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='996' 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='997' 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='998' 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='999' 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='1000' 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='1001' 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='1002' 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='1003' 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='1004' 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='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='m' type-id='f4cbee07' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1013' 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='1014' 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='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='fecbfdc7' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1016' 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='857' 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='858' 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='859' 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='860' 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='861' 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='862' 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='863' 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='864' 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='1008' column='1' id='f4cbee07'>
+        <data-member access='private'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='planes' type-id='00e8fe5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1012' 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='952' 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='953' 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='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='m' type-id='ffcbff5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='959' 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='960' 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='962' 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='955' column='1' id='ffcbff5a'>
+        <data-member access='private'>
+          <var-decl name='mem_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='958' 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='1016' column='1' id='fecbfdc7'>
+        <data-member access='private'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1018' 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='1092' 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='1093' 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='1094' 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='1095' 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='1096' 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='1097' 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='1098' 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='2413' 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='2414' 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='2415' 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='2416' 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='2417' 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='2418' 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='2419' 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='1104' 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='1105' 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='1106' 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='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fmt' type-id='657f91c3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1119' 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='1110' column='1' id='657f91c3'>
+        <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='1111' 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='1112' 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='1113' 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='1114' 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='1115' 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='1116' 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='1117' 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='1118' 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='6406df84'/>
+        <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='1597' 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='1598' 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='1599' 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='1600' 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='1601' 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='1602' 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='1603' 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='1604' 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='1605' 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='1606' 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='1649' 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='1650' 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='1651' 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='1652' 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='1653' 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='1654' 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='1655' 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='1656' 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='1657' 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='1739' 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='1740' 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='1741' 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='1742' 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='1743' 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='1744' 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='1745' 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='1746' 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='1747' 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='1748' 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='1752' 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='1753' 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='1754' 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='1755' 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='1756' 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='1757' 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='1758' 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='1759' 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='1760' 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='1761' 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='1762' 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='1763' 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='1764' 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='1765' 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='1673' 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='1674' 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='1675' 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='1694' column='1' id='1a041cb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='9f0c8f17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1695' 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='1701' 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='1702' 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='1703' 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='1704' 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='1705' 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='1695' column='1' id='9f0c8f17'>
+        <data-member access='private'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1699' 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='1678' 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='1679' 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='1680' 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='1681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='a00c90aa' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1682' 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='1682' column='1' id='a00c90aa'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1683' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1684' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1685' 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='1686' 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='1687' 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='1688' 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='1689' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1690' 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='425' 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='426' 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='427' 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='1769' 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='1770' 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='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='a10c923c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1772' 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='1776' 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='1772' column='1' id='a10c923c'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1774' 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='1919' 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='1920' 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='1921' 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='1922' 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='1923' 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='1924' 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='1934' 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='1935' 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='1936' 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='1937' 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='1938' 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='1939' 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='1207' 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='1208' 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='1209' 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='1210' 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='1211' 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='1212' 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='882' 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='883' 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='885' 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='887' 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='888' 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='890' 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='891' 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='893' 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='1960' 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='1961' 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='1962' 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='1963' 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='1964' 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='1951' 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='1952' 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='1953' 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='1954' 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='1955' 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='1956' 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='1976' 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='1977' 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='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='a20c93cf' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1979' 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='1979' column='1' id='a20c93cf'>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='667f9355' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1982' 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='1980' column='1' id='667f9355'>
+        <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='1981' 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='2012' 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='2013' 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='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='9b0c88cb' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2015' 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='2015' column='1' id='9b0c88cb'>
+        <data-member access='private'>
+          <var-decl name='stop' type-id='6b7f9b32' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='start' type-id='6c7f9cc6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='697f980c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2032' 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='2016' column='1' id='6b7f9b32'>
+        <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='2017' 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='2020' column='1' id='6c7f9cc6'>
+        <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='2026' 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='2027' 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='2030' column='1' id='697f980c'>
+        <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='2031' 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='2260' 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='2261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='parm' type-id='9c0c8a5d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2266' 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='2262' column='1' id='9c0c8a5d'>
+        <data-member access='private'>
+          <var-decl name='capture' type-id='f88a5c22' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2263' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='output' type-id='b573e9f1' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2264' 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='2265' 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='1157' 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='1158' 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='1159' 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='1160' 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='1161' 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='1162' 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='1163' 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='1170' 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='1171' 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='1172' 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='1173' 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='1174' 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='1175' 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='1176' 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='1884' 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='1885' 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='1886' 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='1887' 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='1888' 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='1889' 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='1890' 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='1891' 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='1892' 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='811' 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='812' 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='813' 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='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='9d0c8bf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='816' 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='821' 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='816' column='1' id='9d0c8bf0'>
+        <data-member access='private'>
+          <var-decl name='discrete' type-id='10186cf6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='stepwise' type-id='5a62dd2b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='818' 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='797' 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='798' 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='799' 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='802' 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='803' 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='804' 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='805' 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='806' 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='807' 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='808' 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='839' 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='840' 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='841' 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='842' 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='843' 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='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='' type-id='9e0c8d83' visibility='default' filepath='include/uapi/linux/videodev2.h' line='846' 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='851' 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='846' column='1' id='9e0c8d83'>
+        <data-member access='private'>
+          <var-decl name='discrete' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='stepwise' type-id='99cd0646' visibility='default' filepath='include/uapi/linux/videodev2.h' line='848' 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='833' 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='834' 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='835' 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='836' 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='d6130048' 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='6b30321d' 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>
+      <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='52e7eff9'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b7db9582'/>
+        <parameter type-id='8edac644'/>
+        <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' is-declaration-only='yes' id='c1670ffd'/>
+      <class-decl name='vb2_threadio_data' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='cca707fb'/>
+      <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='d6130049'>
+        <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='f6cbf136' 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='f9cbf5ee' 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='e7f43f81' 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='1719' column='1' id='cf13dc99'>
+        <underlying-type type-id='6406df84'/>
+        <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='f6cbf136'>
+        <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='f9cbf5ee'>
+        <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='e7f43f81'>
+        <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='6b30321e'>
+        <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='6406df84'/>
+        <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='f8cbf457' 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_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='6b30321e' 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='2332' 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='2333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='f2cbeae4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2341' 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='2342' 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='2343' 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='2344' 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='2345' 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='2346' 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='2334' column='1' id='f2cbeae4'>
+        <data-member access='private'>
+          <var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2335' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ctrl' type-id='ecd6d55a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2336' 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='2337' 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='2338' 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='2339' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='73b95420' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2340' 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='2283' 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='2285' 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='2293' 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='2294' 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='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='f5cbef9d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2296' 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='2300' 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='2301' 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='2302' 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='2303' 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='2304' 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='2296' column='1' id='f5cbef9d'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2297' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2298' 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='2307' 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='2308' 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='2313' 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='2314' 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='2326' 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='2327' 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='2328' 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='2329' 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='d6130049' 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='6b30321e' 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'/>
+      <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>
+      <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='f8cbf457'>
+        <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>
+    </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='1300' 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='1309' 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='1310' 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='1311' 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='1312' 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='1313' 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='1316' 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='1325' 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='1326' 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='1331' 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='7544e824' 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='6406df84'/>
+        <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='7544e824'/>
+        <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='282' 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='282' column='1'/>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/mfd/mfd-core.c' line='282' column='1'/>
+        <parameter type-id='1447e860' name='cells' filepath='drivers/mfd/mfd-core.c' line='283' column='1'/>
+        <parameter type-id='95e97e5e' name='n_devs' filepath='drivers/mfd/mfd-core.c' line='283' column='1'/>
+        <parameter type-id='c9d64c0d' name='mem_base' filepath='drivers/mfd/mfd-core.c' line='284' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/mfd/mfd-core.c' line='285' column='1'/>
+        <parameter type-id='7544e824' name='domain' filepath='drivers/mfd/mfd-core.c' line='285' 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='338' 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='338' 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'>
+      <pointer-type-def type-id='cf536864' size-in-bits='64' id='ae4d32ca'/>
+      <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>
+    </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_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'>
+      <union-decl name='__anonymous_union__2' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='f9cbf5ef'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='62a75ba3'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='f8cbf453' 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='f3cbec79' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='df7526d6'>
+            <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='f2cbeae5' 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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f78' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='f3cbec79'>
+        <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='3de1074c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='f2cbeae5'>
+        <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='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>
+    </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='4416' 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='4416' 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='1714' 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='1714' column='1'/>
+        <parameter type-id='1dc6a898' name='clk' filepath='drivers/mmc/host/sdhci.c' line='1714' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_request' mangled-name='sdhci_request' filepath='drivers/mmc/host/sdhci.c' line='1885' 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='1885' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/host/sdhci.c' line='1885' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_set_bus_width' mangled-name='sdhci_set_bus_width' filepath='drivers/mmc/host/sdhci.c' line='1963' 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='1963' column='1'/>
+        <parameter type-id='95e97e5e' name='width' filepath='drivers/mmc/host/sdhci.c' line='1963' 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='3466' 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='3466' 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='3488' 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='3488' column='1'/>
+        <parameter type-id='95e97e5e' name='soft_reset' filepath='drivers/mmc/host/sdhci.c' line='3488' 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='3546' 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='3546' 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='3590' 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='3590' column='1'/>
+        <parameter type-id='b50a4934' name='recovery' filepath='drivers/mmc/host/sdhci.c' line='3590' 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='3614' 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='3614' column='1'/>
+        <parameter type-id='19c2251e' name='intmask' filepath='drivers/mmc/host/sdhci.c' line='3614' column='1'/>
+        <parameter type-id='7292109c' name='cmd_error' filepath='drivers/mmc/host/sdhci.c' line='3614' column='1'/>
+        <parameter type-id='7292109c' name='data_error' filepath='drivers/mmc/host/sdhci.c' line='3615' 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='3861' 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='3861' 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='4400' 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='4400' 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='4478' 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='4478' 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='4499' 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='4499' column='1'/>
+        <parameter type-id='95e97e5e' name='dead' filepath='drivers/mmc/host/sdhci.c' line='4499' 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'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='2055' column='1' id='ac5ab5a4'>
+        <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='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='f6cbf137' 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='f6cbf137'>
+        <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='e7f43f82' 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='e7f43f82'>
+        <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'/>
+      <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='6696ef79' 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='4134' 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='3816' 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='1029' 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='3830' 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='3832' 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='4137' 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='2687' 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='2696' 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>
+    </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>
+    </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='08f5ca1a' 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='08f5ca1a'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+    </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='2005' 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='2005' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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>
+    </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='ccf6c819'/>
+      <class-decl name='xfrm_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='cb961c68'/>
+      <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='f2cbeae6'>
+        <data-member access='private'>
+          <var-decl name='s' type-id='687f9682' 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='687f9682'>
+        <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='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='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'/>
+      <pointer-type-def type-id='5f8f2c58' size-in-bits='64' id='a198549e'/>
+      <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='e61c85d0' size-in-bits='64' id='03c386c6'/>
+      <pointer-type-def type-id='ccf6c819' size-in-bits='64' id='ae4d1761'/>
+      <pointer-type-def type-id='cb961c68' size-in-bits='64' id='328dda6e'/>
+      <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='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='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='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='2259' 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='skb_queue_purge' mangled-name='skb_queue_purge' filepath='include/linux/skbuff.h' line='2762' 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='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='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='267284e7'/>
+        <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='267284e7'/>
+        <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='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='skb_realloc_headroom' mangled-name='skb_realloc_headroom' filepath='include/linux/skbuff.h' line='1123' 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='2251' 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>
+    </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='2766' 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='3680' 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='3060' 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='4477' 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='3595' 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='3598' 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='3189' 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' is-declaration-only='yes' id='7dda8bf2'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='ffcbff5b'>
+        <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>
+      <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='5ad6e0ef' size-in-bits='64' id='1a7ee447'/>
+      <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='netdev_err' mangled-name='netdev_err' filepath='include/linux/netdevice.h' line='4768' 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='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='register_netdev' mangled-name='register_netdev' filepath='include/linux/netdevice.h' line='4151' 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_info' mangled-name='netdev_info' filepath='include/linux/netdevice.h' line='4774' 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='4152' 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='3728' 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='3148' 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='3899' 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='250' 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='4770' 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='3901' 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='2148' 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='2017' 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='1122' 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='4391' 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='3112' 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='58725ef3'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </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>
+    </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' is-declaration-only='yes' id='44644afc'/>
+      <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' is-struct='yes' visibility='default' is-declaration-only='yes' id='51ee3086'/>
+      <class-decl name='sock_reuseport' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='ff751355'/>
+      <class-decl name='tcf_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='9a9d8c1d'/>
+      <class-decl name='udp_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='9a516b13'/>
+      <class-decl name='uncached_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='6b1203e5'/>
+      <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='ae4d1762' 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='4352' 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='allow_add' type-id='6ade418d' 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='id' type-id='26a90f95' visibility='default' filepath='include/net/neighbour.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='parms' type-id='1429eee5' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parms_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='gc_thresh1' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gc_thresh2' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='gc_thresh3' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='last_flush' type-id='7359adad' 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='gc_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='proxy_timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='proxy_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='gc_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='3904'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='lock' type-id='ac16795b' 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='last_rand' type-id='7359adad' 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='stats' type-id='3a0389d8' 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='nht' type-id='0d378d14' 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='phash_buckets' type-id='62c51a1d' visibility='default' filepath='include/net/neighbour.h' line='227' 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='6f7fa17f' 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='0f11bc93' 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='1311c2df' 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='ac5ab5a5' 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='f6cbf138' 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='f9cbf5f0' 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='f8cbf458' 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='19140ae8' 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='18140955' 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='0b11b647' 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='0c11b7da' visibility='default' filepath='include/net/sock.h' line='227' column='1'/>
+        </data-member>
+      </class-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='687f9683'>
+        <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>
+      <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='657f91c4'>
+        <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='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='0e13f997' 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__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='f3cbec7a'>
+        <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='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='667f9356'>
+        <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__4' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='6b7f9b33'>
+        <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>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='a10c923d'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='a20c93d0'>
+        <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='6c7f9cc7' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='6c7f9cc7'>
+        <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__15' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='9c0c8a5e'>
+        <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='__anonymous_struct__6' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1' id='697f980d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='690' 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='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='980c8410' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1' id='980c8410'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/skbuff.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='699' 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>
+      <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='19140ae8'>
+        <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>
+      <typedef-decl name='socket_lock_t' type-id='fd72bfd5' filepath='include/net/sock.h' line='109' column='1' id='40d8a3da'/>
+      <class-decl name='__anonymous_struct__7' 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='fd72bfd5'>
+        <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__8' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='379' column='1' id='6f7fa17f'>
+        <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='facd5338'>
+        <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='0a11b4b4' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='0911b321' 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='3578' 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='3579' 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='3580' 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='3586' 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='3587' 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='3588' 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='3589' 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='3590' 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>
+      <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>
+      <class-decl name='socket_wq' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='95' 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='97' 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='98' 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='99' 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='100' 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='ccf6c81a'>
+        <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='1011be26' 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='1011be26'>
+        <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='328dda6f' 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='cb961c69'>
+        <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='0d11b96d' 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='707fa313' 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='328dda6f' 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>
+      <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__9' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='171' column='1' id='707fa313'>
+        <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='173' column='1' id='2117397c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='0e11bb00' visibility='default' filepath='include/net/flow.h' line='179' 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='174' column='1' id='0e11bb00'>
+        <data-member access='private'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip4' type-id='5f8f2c58' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='618f2f7e' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dn' type-id='83eba552' visibility='default' filepath='include/net/flow.h' line='178' 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='c9d994ed' visibility='default' filepath='include/net/flow.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmpt' type-id='c8d99359' visibility='default' filepath='include/net/flow.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dnports' type-id='cbd99813' 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='cad99680' visibility='default' filepath='include/net/flow.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='47' column='1' id='c9d994ed'>
+        <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__11' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='52' column='1' id='c8d99359'>
+        <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__12' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='57' column='1' id='cbd99813'>
+        <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='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='65' column='1' id='cad99680'>
+        <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='132' 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='133' 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='143' 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='144' 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='146' 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='147' 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='155' 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='158' 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='159' 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='166' 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='167' 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='168' 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>
+      <class-decl name='socket' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='113' 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='114' 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='116' 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='118' 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='120' 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='121' 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='122' 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='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_state' type-id='08f5ca1b' 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='08f5ca1b'>
+        <underlying-type type-id='6406df84'/>
+        <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='136' 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='137' 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='138' 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='139' 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='140' 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='143' 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='146' 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='148' 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='150' 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='153' 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='155' 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='158' 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='161' 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='163' 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='164' 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='165' 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='167' 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='170' 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='172' 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='175' 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='185' 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='187' 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='189' 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='191' 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='193' 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='194' 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='199' 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='201' 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='203' 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='205' 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='207' 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='208' 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='209' 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='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='read_descriptor_t' type-id='2890e7d8' filepath='include/linux/fs.h' line='358' column='1' id='2d58d013'/>
+      <class-decl name='__anonymous_struct__14' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='2d58d013' visibility='default' filepath='include/linux/fs.h' line='350' column='1' id='2890e7d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='written' type-id='b59d7dce' visibility='default' filepath='include/linux/fs.h' line='351' 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='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='1411c472' visibility='default' filepath='include/linux/fs.h' line='356' 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='357' 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='353' column='1' id='1411c472'>
+        <data-member access='private'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='355' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_read_actor_t' type-id='0c197ddf' filepath='include/linux/net.h' line='133' 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='0d04ed7a' 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='0d04ed7a'>
+        <data-member access='private'>
+          <var-decl name='' type-id='ccd999a6' 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__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='799' column='1' id='ccd999a6'>
+        <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='4816a146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='00c4cbac' 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='0c04ebe7' 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='0c04ebe7'>
+        <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='e079fe29'>
+        <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='ef45f062'>
+        <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='faaac7a5'>
+        <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='fe454a75' 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='0b04ea54' 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='fe454a75' 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='fe454a75' 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='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='0a04e8c1' 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='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='1104f3c6' 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>
+      <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='384b6d84'>
+        <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='fe454a75' 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='fe454a75' 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='1004f233' 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='1004f233'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='281' column='1' id='c162e61e'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='cfd99e5f' 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>
+      </union-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='274' column='1' id='cfd99e5f'>
+        <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='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='ced99ccc' 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__17' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='421' column='1' id='ced99ccc'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='facd5338' 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='facd5338' 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='faaac7a5' size-in-bits='64' id='fe454a75'/>
+      <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='ef45f062' size-in-bits='64' id='74f101b0'/>
+      <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='e079fe29' size-in-bits='64' id='a68064b1'/>
+      <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='4816a146' size-in-bits='64' id='00c4cbac'/>
+      <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='384b6d84' size-in-bits='64' id='6ceb7782'/>
+      <pointer-type-def type-id='6ceb7782' 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='d0d57cc5'/>
+      <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='ccf6c81a' size-in-bits='64' id='ae4d1762'/>
+      <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='cb961c69' size-in-bits='64' id='328dda6f'/>
+      <function-decl name='unregister_netdevice_queue' mangled-name='unregister_netdevice_queue' filepath='include/linux/netdevice.h' line='2688' 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='netif_rx' mangled-name='netif_rx' filepath='include/linux/netdevice.h' line='3678' 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='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='kfree_skb' mangled-name='kfree_skb' filepath='include/linux/skbuff.h' line='1025' 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='2698' 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='3683' 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='1041' 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='2195' 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='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='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='skb_copy_bits' mangled-name='skb_copy_bits' filepath='include/linux/skbuff.h' line='3513' 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='328dda6f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='389d1e82'>
+        <parameter type-id='328dda6f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0286989c'>
+        <parameter type-id='328dda6f'/>
+        <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='328dda6f'/>
+        <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='328dda6f'/>
+        <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='328dda6f'/>
+        <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='a68064b1'/>
+        <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='328dda6f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='751b0878'>
+        <parameter type-id='328dda6f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf7aaec7'>
+        <parameter type-id='328dda6f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f85fb8c6'>
+        <parameter type-id='328dda6f'/>
+        <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>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='152' column='1' id='ac5ab5a5'>
+        <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='687f9683' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+      </union-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='0a04e8c1'>
+        <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>
+      <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='1104f3c6'>
+        <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>
+      <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='f9cbf5f0'>
+        <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='657f91c4' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+      </union-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='0d11b96d'>
+        <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>
+      <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='f8cbf458'>
+        <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__29' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='210' column='1' id='18140955'>
+        <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__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1185' column='1' id='0e13f997'>
+        <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>
+      <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='0b11b647'>
+        <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__42' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1' id='0b04ea54'>
+        <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>
+      <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='1311c2df'>
+        <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__33' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='547' column='1' id='0a11b4b4'>
+        <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='0f11bc93'>
+        <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>
+      <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='0c11b7da'>
+        <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='f6cbf138'>
+        <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__32' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='420' column='1' id='0911b321'>
+        <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>
+    </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='6737d13f' filepath='include/uapi/linux/uuid.h' line='25' column='1' id='7ae02c0a'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='7ae02c0a' visibility='default' filepath='include/uapi/linux/uuid.h' line='23' column='1' id='6737d13f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/uuid.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='cacf0f56'>
+        <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='f4cbee08'>
+        <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='cacf0f56' size-in-bits='64' id='5760652c'/>
+      <pointer-type-def type-id='9a335022' 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='2804' 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='543' 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='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='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='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='5760652c'/>
+        <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='676' 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='676' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='676' 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='766' 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='766' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='766' 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='846' 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='846' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='846' 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='899' 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='899' 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='1055' 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='1055' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/nvmem/core.c' line='1055' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/nvmem/core.c' line='1055' 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='1129' 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='1129' column='1'/>
+        <parameter type-id='80f4b756' name='cell_id' filepath='drivers/nvmem/core.c' line='1129' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/nvmem/core.c' line='1129' 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'>
+      <function-decl name='of_machine_is_compatible' mangled-name='of_machine_is_compatible' filepath='drivers/of/base.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_machine_is_compatible'>
+        <parameter type-id='80f4b756' name='compat' filepath='drivers/of/base.c' line='605' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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_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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/of_reserved_mem.c' language='LANG_C89'>
+      <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='312' 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='312' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_reserved_mem.c' line='313' column='1'/>
+        <parameter type-id='95e97e5e' name='idx' filepath='drivers/of/of_reserved_mem.c' line='313' 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='367' 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='367' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/platform.c' language='LANG_C89'>
+      <function-decl name='of_platform_depopulate' mangled-name='of_platform_depopulate' filepath='drivers/of/platform.c' line='590' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_depopulate'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/of/platform.c' line='590' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </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='1336' column='1' elf-symbol-id='of_fwnode_ops'/>
+      <function-decl name='of_property_read_variable_u8_array' mangled-name='of_property_read_variable_u8_array' filepath='drivers/of/property.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u8_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='184' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='185' column='1'/>
+        <parameter type-id='8bff8096' name='out_values' filepath='drivers/of/property.c' line='185' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='186' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='6406df84'/>
+        <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_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='1033' 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='1033' 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='1442' 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='1442' column='1'/>
+        <parameter type-id='aded214c' name='versions' filepath='drivers/opp/core.c' line='1443' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1443' 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='1591' 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='1591' column='1'/>
+        <parameter type-id='13956559' name='names' filepath='drivers/opp/core.c' line='1592' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1593' 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='1661' 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='1661' 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='2140' 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='2140' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='2140' 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='2153' 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='2153' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2153' 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='2177' 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='2177' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2178' 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_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>
+    </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-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='6406df84'/>
+        <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' is-declaration-only='yes' id='63b74212'/>
+      <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' is-declaration-only='yes' id='cdc9541e'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='7544e824' 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='7544e824' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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_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>
+      <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='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='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'>
+      <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_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>
+    </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='pci_dev_get' mangled-name='pci_dev_get' filepath='drivers/pci/pci-driver.c' line='1533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_dev_get'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci-driver.c' line='1533' column='1'/>
+        <return type-id='85196e3f'/>
+      </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>
+    </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_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='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_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>
+    </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='e7f43f83'>
+        <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'>
+      <pointer-type-def type-id='ec180093' size-in-bits='64' id='887112a7'/>
+      <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>
+      <function-type size-in-bits='64' id='ec180093'>
+        <parameter type-id='8a876638'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </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='498' 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='499' 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='500' 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='501' 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='502' 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='503' 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='504' 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='505' 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='506' 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='507' 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='508' 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='509' 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='510' 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='511' 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='512' 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='513' 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='514' 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='515' 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='516' 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='517' 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='518' 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='521' 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='526' 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='1033' 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='1072' 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='1038' 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='1061' 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='1217' 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='6406df84'/>
+        <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/pinconf-generic.c' language='LANG_C89'>
+      <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' is-declaration-only='yes' id='e32a05ed'/>
+      <class-decl name='pinmux_ops' size-in-bits='640' is-struct='yes' visibility='default' is-declaration-only='yes' id='c20dd28d'/>
+      <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='038d05bd'>
+        <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='ac5ab5a6' 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='6406df84'/>
+        <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='ac5ab5a6'>
+        <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='6406df84'/>
+        <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='7544e824' 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='7544e824' 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='20f5f452' size-in-bits='64' id='5b2fd8e8'/>
+      <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='038d05bd' size-in-bits='64' id='fa43ef1d'/>
+      <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='47479831' size-in-bits='64' id='a57283f9'/>
+      <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='353' 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='354' 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='355' 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='356' 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='357' 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='358' 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='359' 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='360' 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='361' 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='362' 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='363' 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='364' 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='365' 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='366' 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='367' 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='332' 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='333' 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='334' 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='337' 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='338' 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='339' 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='451' 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='451' 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='473' 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='473' 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='541' 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='541' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/power/supply/power_supply_core.c' line='542' 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='565' 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='565' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='566' 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='708' 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='708' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='709' 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='737' 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='737' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='738' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='738' 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='775' 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='775' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='776' column='1'/>
+        <parameter type-id='95e97e5e' name='ocv' filepath='drivers/power/supply/power_supply_core.c' line='776' 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='800' 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='800' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='801' column='1'/>
+        <parameter type-id='7292109c' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='801' 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='837' 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='837' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='838' column='1'/>
+        <parameter type-id='2e53d20f' name='val' filepath='drivers/power/supply/power_supply_core.c' line='839' 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='851' 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='851' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='852' column='1'/>
+        <parameter type-id='f3abafd4' name='val' filepath='drivers/power/supply/power_supply_core.c' line='853' 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='896' 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='896' 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='902' 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='902' 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='2feec220'/>
+        <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>
+    </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='6406df84'/>
+        <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='6406df84'/>
+        <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='4991' 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='4991' column='1'/>
+        <parameter type-id='661ccd0c' name='cfg' filepath='drivers/regulator/core.c' line='4992' 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='1977' 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='1977' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='1977' 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='2030' 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='2030' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='2030' column='1'/>
+        <return type-id='850c13f7'/>
+      </function-decl>
+      <function-decl name='regulator_put' mangled-name='regulator_put' filepath='drivers/regulator/core.c' line='2083' 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='2083' 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='2707' 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='2707' 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='2788' 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='2788' column='1'/>
+        <parameter type-id='95e97e5e' name='ms' filepath='drivers/regulator/core.c' line='2788' 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='2864' 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='2864' 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='2887' 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='2887' 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='2911' 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='2911' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/core.c' line='2911' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_is_supported_voltage' mangled-name='regulator_is_supported_voltage' filepath='drivers/regulator/core.c' line='3012' 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='3012' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3013' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3013' 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='3762' 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='3762' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3762' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3762' 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='3923' 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='3923' column='1'/>
+        <parameter type-id='f0981eeb' name='old_selector' filepath='drivers/regulator/core.c' line='3924' column='1'/>
+        <parameter type-id='f0981eeb' name='new_selector' filepath='drivers/regulator/core.c' line='3925' 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='4074' 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='4074' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uA' filepath='drivers/regulator/core.c' line='4075' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uA' filepath='drivers/regulator/core.c' line='4075' 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='4129' 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='4129' 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='4146' 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='4146' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='drivers/regulator/core.c' line='4146' 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='4207' 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='4207' 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='4280' 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='4280' column='1'/>
+        <parameter type-id='95e97e5e' name='uA_load' filepath='drivers/regulator/core.c' line='4280' 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='4359' 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='4359' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4360' 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='4374' 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='4374' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4375' 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='4601' 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='4601' column='1'/>
+        <parameter type-id='7359adad' name='event' filepath='drivers/regulator/core.c' line='4602' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/regulator/core.c' line='4602' 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='5232' 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='5232' 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='5360' 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='5360' 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='5381' 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='5381' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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>
+    </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/dummy.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' 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>
+      <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>
+    </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' is-declaration-only='yes' id='4ceb5ab5'/>
+      <class-decl name='regulator_enable_gpio' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='616cdd90'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='reset_control_reset' mangled-name='reset_control_reset' filepath='drivers/reset/core.c' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_reset'>
+        <parameter type-id='9f9b8114' name='rstc' filepath='drivers/reset/core.c' line='289' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='ac5ab5a7' 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='ac5ab5a7'>
+        <data-member access='private'>
+          <var-decl name='list' type-id='e7f43f84' visibility='default' filepath='include/linux/scmi_protocol.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='range' type-id='687f9684' 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='e7f43f84'>
+        <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='687f9684'>
+        <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'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='ac5ab5a8'>
+        <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='rpmsg_endpoint' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='87' 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='88' 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='89' 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='90' 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='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='addr' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/rpmsg.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ops' type-id='50233074' visibility='default' filepath='include/linux/rpmsg.h' line='95' 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='50' 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='51' 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='52' 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='53' 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='54' 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='55' 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='56' 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='57' 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='59' 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='31' 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='32' 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='36' 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='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rpmsg_rx_cb_t' type-id='2a873f51' filepath='include/linux/rpmsg.h' line='62' 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='34' 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='35' 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='36' 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='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_endpoint_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='55' 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='56' 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='58' 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='59' 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='60' 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='63' 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='64' 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='65' 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='67' 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='1664' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='106' 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='107' 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='108' 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='109' 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='110' 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='111' 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='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='2759' 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='2766' 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='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>
+      <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='125' 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='130' 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='119' 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='e6c6c6cd'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <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='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='516' 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='516' 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='540' 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='540' column='1'/>
+        <parameter type-id='cc769659' name='chinfo' filepath='drivers/rpmsg/rpmsg_core.c' line='541' 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='564' 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='564' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rpmsg/rpmsg_core.c' line='564' 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>
+    </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>
+    </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' is-declaration-only='yes' id='77aad2d1'/>
+      <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='6406df84'/>
+        <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>
+      <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/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>
+    </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='43' 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='44' 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='45' 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='46' 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='47' 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='48' 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='49' 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='50' 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='51' 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='0e15337c'>
+        <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='4e8a6f85'>
+        <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'/>
+      <union-decl name='__anonymous_union__' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='ac5ab5a9'/>
+      <union-decl name='__anonymous_union__3' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='f8cbf459'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='e7f43f73' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='cbd99811' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </union-decl>
+      <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='4e8a6f85' size-in-bits='64' id='0a0775b5'/>
+      <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='0e15337c' size-in-bits='64' id='498f47da'/>
+      <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='62' 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='68' 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>
+    </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='83cec606'/>
+      <pointer-type-def type-id='83cec606' 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>
+    </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='1895' 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='1895' 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>
+    </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' is-declaration-only='yes' id='6d54709d'/>
+      <class-decl name='scsi_device_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='4e8a6f86'/>
+      <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='0e15337d'/>
+      <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>
+      <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>
+      <class-decl name='ufs_hba_variant_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='333' 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='334' 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='335' 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='336' 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='337' 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='338' 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='340' 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='342' 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='343' 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='345' 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='347' 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='351' 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='352' 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='353' 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='355' 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='356' 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='357' 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='358' 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='359' 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='360' 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='361' 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='362' 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='365' 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='drivers/scsi/ufs/ufshcd.h' line='368' 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='drivers/scsi/ufs/ufshcd.h' line='369' 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='drivers/scsi/ufs/ufshcd.h' line='370' 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='drivers/scsi/ufs/ufshcd.h' line='371' 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='579' 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='580' 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='583' 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='584' 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='585' 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='588' 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='589' 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='590' 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='592' 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='593' 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='598' 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='600' 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='601' 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='603' 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='605' 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='606' 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='607' 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='608' 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='611' 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='613' 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='614' 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='616' 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='617' 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='619' 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='620' 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='621' 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='622' 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='623' 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='624' 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='625' 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='626' 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='627' 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='628' 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='629' 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='700' 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='703' 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='705' 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='706' 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='707' 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='708' 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='710' 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='711' 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='712' 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='714' 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='715' 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='716' 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='717' 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='718' 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='721' 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='722' 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='723' 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='726' 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='727' 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='728' 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='729' 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='730' 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='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='silence_err_logs' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='732' 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='735' 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='736' 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='739' 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='740' 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='741' 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='742' 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='744' 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='747' 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='750' 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='751' 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='752' 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='754' 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='756' 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='797' 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='798' 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='799' 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='801' 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='802' 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='804' 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='805' 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='806' 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='808' 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='809' 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='811' 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='812' 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='813' 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='816' 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='817' 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='818' 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='819' 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='822' 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='823' 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='824' 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='825' 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='458' 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='459' 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='460' 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='461' 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='491' 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='494' 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='497' 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='498' 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='501' 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='502' 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='505' 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='506' 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='474' 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='475' 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='476' 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='477' 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='478' 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='512' 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='514' 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='517' 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='518' 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='519' 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='520' 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='521' 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='524' 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='525' 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='526' 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='527' 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='83cec607'>
+        <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='498f47db' 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='651086d7' 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='41' 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='42' 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='45' 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='48' 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>
+      <union-decl name='ufs_crypto_capabilities' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='326' 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='327' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f85' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='328' column='1'/>
+        </data-member>
+      </union-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='0a0775b6' 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_cap_entry' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='352' 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='353' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f9685' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='354' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='f8cbf45a' 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='f8cbf45a'>
+        <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='f3cbec7b' 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='f3cbec7b'>
+        <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='440' 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='441' 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='442' 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='443' 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='444' 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='511' 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='512' 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='513' 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='514' 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='515' 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='6406df84'/>
+        <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='484' 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='485' 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='486' 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='488' 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='489' 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='492' 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='493' 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='494' 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='495' 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='496' 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='499' 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='500' 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='501' 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='502' 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='503' 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='506' 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='507' 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='508' 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='456' 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='457' 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='458' 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='459' 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='6406df84'/>
+        <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='398' 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='399' 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='400' 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='401' 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='402' 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='403' 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='404' 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='405' 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='406' 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='407' 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='408' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='clk_gating_state' filepath='drivers/scsi/ufs/ufshcd.h' line='375' column='1' id='8bfed557'>
+        <underlying-type type-id='6406df84'/>
+        <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='434' 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='435' 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='436' 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='437' 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='438' 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='439' 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='440' 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='441' 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='442' 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='443' 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='444' 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='445' 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='446' 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='411' 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='412' 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='413' 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='6406df84'/>
+        <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='328' column='1' id='e7f43f85'>
+        <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='329' 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='330' 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='331' 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='332' 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='354' column='1' id='687f9685'>
+        <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='355' 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='356' 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='357' 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='358' 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='6406df84'/>
+        <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='275' column='1' id='47e46889'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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='365' 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='366' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='657f91c5' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='367' 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='367' column='1' id='657f91c5'>
+        <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='368' 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='369' 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='370' 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='371' 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='372' 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='373' 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='374' 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='375' 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='376' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='83cec607' 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='59aa7dba' size-in-bits='64' id='e15aece4'/>
+      <pointer-type-def type-id='3b5e43e5' size-in-bits='64' id='47e17209'/>
+      <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='4e8a6f86' size-in-bits='64' id='0a0775b6'/>
+      <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='0e15337d' size-in-bits='64' id='498f47db'/>
+      <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='907' 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='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='4bbe36cb'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='89a2612a'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50bd3cc7'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='89a2612a'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </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='1154' 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='1179' 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='964' 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='962' 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='943' 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='943' 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='4071' 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='4071' 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='4095' 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='4095' 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/cmd-db.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='cmd_db_ready' mangled-name='cmd_db_ready' filepath='drivers/soc/qcom/cmd-db.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cmd_db_ready'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_reserved_mem_lookup' mangled-name='of_reserved_mem_lookup' filepath='include/linux/of_reserved_mem.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_lookup'>
+        <parameter type-id='9a537bbe'/>
+        <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/soc/qcom/rpmh-rsc.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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/soc/qcom/rpmh.c' language='LANG_C89'>
+      <function-decl name='rpmh_write_batch' mangled-name='rpmh_write_batch' filepath='drivers/soc/qcom/rpmh.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmh_write_batch'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/soc/qcom/rpmh.c' line='337' column='1'/>
+        <parameter type-id='c21ee1d5' name='state' filepath='drivers/soc/qcom/rpmh.c' line='337' column='1'/>
+        <parameter type-id='f058e8c1' name='cmd' filepath='drivers/soc/qcom/rpmh.c' line='338' column='1'/>
+        <parameter type-id='f9409001' name='n' filepath='drivers/soc/qcom/rpmh.c' line='338' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmh_flush' mangled-name='rpmh_flush' filepath='drivers/soc/qcom/rpmh.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmh_flush'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/soc/qcom/rpmh.c' line='448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmh_invalidate' mangled-name='rpmh_invalidate' filepath='drivers/soc/qcom/rpmh.c' line='503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmh_invalidate'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/soc/qcom/rpmh.c' line='503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/soc/qcom/rpmhpd.c' language='LANG_C89'>
+      <class-decl name='dev_pm_opp' size-in-bits='768' is-struct='yes' visibility='default' is-declaration-only='yes' id='3ba81dd0'/>
+      <class-decl name='genpd_lock_ops' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='4c993ea6'/>
+      <class-decl name='opp_table' size-in-bits='4544' is-struct='yes' visibility='default' is-declaration-only='yes' id='08aeec0d'/>
+      <enum-decl name='cmd_db_hw_type' filepath='include/soc/qcom/cmd-db.h' line='8' column='1' id='c08c1e72'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='CMD_DB_HW_INVALID' value='0'/>
+        <enumerator name='CMD_DB_HW_MIN' value='3'/>
+        <enumerator name='CMD_DB_HW_ARC' value='3'/>
+        <enumerator name='CMD_DB_HW_VRM' value='4'/>
+        <enumerator name='CMD_DB_HW_BCM' value='5'/>
+        <enumerator name='CMD_DB_HW_MAX' value='5'/>
+        <enumerator name='CMD_DB_HW_ALL' value='255'/>
+      </enum-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='ac5ab5aa' 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='6406df84'/>
+        <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='__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='e7f43f76'>
+        <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'/>
+      <enum-decl name='rpmh_state' filepath='include/soc/qcom/tcs.h' line='22' column='1' id='c21ee1d5'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='RPMH_SLEEP_STATE' value='0'/>
+        <enumerator name='RPMH_WAKE_ONLY_STATE' value='1'/>
+        <enumerator name='RPMH_ACTIVE_ONLY_STATE' value='2'/>
+      </enum-decl>
+      <class-decl name='tcs_cmd' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/soc/qcom/tcs.h' line='35' column='1' id='0ac1cf32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='19c2251e' visibility='default' filepath='include/soc/qcom/tcs.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/soc/qcom/tcs.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='19c2251e' visibility='default' filepath='include/soc/qcom/tcs.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4c993ea6' const='yes' id='3cc19423'/>
+      <pointer-type-def type-id='3cc19423' size-in-bits='64' id='adbc0a2b'/>
+      <qualified-type-def type-id='0ac1cf32' const='yes' id='ee4430f1'/>
+      <pointer-type-def type-id='ee4430f1' size-in-bits='64' id='f058e8c1'/>
+      <pointer-type-def type-id='3ba81dd0' size-in-bits='64' id='02e48bc6'/>
+      <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='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='35210e5c' size-in-bits='64' id='c24523fe'/>
+      <pointer-type-def type-id='a017baf8' size-in-bits='64' id='28773d52'/>
+      <function-decl name='cmd_db_read_addr' mangled-name='cmd_db_read_addr' filepath='include/soc/qcom/cmd-db.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cmd_db_read_addr'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cmd_db_read_slave_id' mangled-name='cmd_db_read_slave_id' filepath='include/soc/qcom/cmd-db.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cmd_db_read_slave_id'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c08c1e72'/>
+      </function-decl>
+      <function-decl name='cmd_db_read_aux_data' mangled-name='cmd_db_read_aux_data' filepath='include/soc/qcom/cmd-db.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cmd_db_read_aux_data'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pm_genpd_init' mangled-name='pm_genpd_init' filepath='include/linux/pm_domain.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_init'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='5db9bd89'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_add_subdomain' mangled-name='pm_genpd_add_subdomain' filepath='include/linux/pm_domain.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_add_subdomain'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='855e3679'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_provider_onecell' mangled-name='of_genpd_add_provider_onecell' filepath='include/linux/pm_domain.h' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_provider_onecell'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='29f0ac2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_level' mangled-name='dev_pm_opp_get_level' filepath='include/linux/pm_opp.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_level'>
+        <parameter type-id='02e48bc6'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='rpmh_write' mangled-name='rpmh_write' filepath='include/soc/qcom/rpmh.h' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmh_write'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='c21ee1d5'/>
+        <parameter type-id='f058e8c1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmh_write_async' mangled-name='rpmh_write_async' filepath='include/soc/qcom/rpmh.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmh_write_async'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='c21ee1d5'/>
+        <parameter type-id='f058e8c1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-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='35210e5c'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='fa0b179b'/>
+        <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>
+      <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='ac5ab5aa'>
+        <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='e7f43f76' visibility='default' filepath='include/linux/pm_domain.h' line='140' column='1'/>
+        </data-member>
+      </union-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'>
+      <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>
+      <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_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='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='e7f43f86' 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='687f9686' 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='657f91c6' 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='667f9357' 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='e7f43f86'>
+        <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='687f9686'>
+        <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='657f91c6'>
+        <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='667f9357'>
+        <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='ac5ab5ab' 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='6406df84'/>
+        <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='ac5ab5ab'>
+        <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='2394' 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='2394' 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='441' 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='441' column='1'/>
+        <parameter type-id='d9c194a6' name='sdrv' filepath='drivers/spi/spi.c' line='441' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_setup' mangled-name='spi_setup' filepath='drivers/spi/spi.c' line='3054' 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='3054' 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='701' 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='701' 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='1259' 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='1259' 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='1494' 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='1494' 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='1516' 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='1516' 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='2226' 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='2226' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/spi/spi.c' line='2227' column='1'/>
+        <parameter type-id='b50a4934' name='slave' filepath='drivers/spi/spi.c' line='2227' 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='2552' 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='2552' column='1'/>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2553' 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='2592' 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='2592' 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='2627' 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='2627' 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='2643' 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='2643' 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='2679' 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='2679' 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='3535' 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='3535' column='1'/>
+        <parameter type-id='bb7889ed' name='message' filepath='drivers/spi/spi.c' line='3535' 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='3556' 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='3556' 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='3585' 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='3585' 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='3110' 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='3237' 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='6406df84'/>
+        <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='2048' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='382' column='1' id='c201baac'>
+        <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='383' 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='384' 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='385' 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='386' 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='387' 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='388' 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='389' 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='390' 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='391' 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='392' 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='393' 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='394' 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='395' 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='396' 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='399' 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='406' 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='406' 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='401' 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='402' 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='403' 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='405' 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='ac5ab5ac' 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='ac5ab5ac'>
+        <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_attachment' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='429' 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='430' 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='431' 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='432' 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='433' 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='434' 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='435' 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='436' 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='c201baac' size-in-bits='64' id='5e4f599b'/>
+      <pointer-type-def type-id='f01bc09a' size-in-bits='64' id='e68e04c2'/>
+      <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='274' 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='271' 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>
+    </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='2feec220'/>
+      </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='2feec220'/>
+      </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='2feec220' 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>
+      <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>
+    </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>
+    </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='3ae87f88'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='2feec220' 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='6406df84'/>
+        <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='3ae87f88' size-in-bits='64' id='2feec220'/>
+      <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='2feec220'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='51dca1f7'>
+        <parameter type-id='2feec220'/>
+        <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='2feec220'/>
+        <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='2feec220'/>
+        <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='2feec220'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fd43619'>
+        <parameter type-id='2feec220'/>
+        <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='2feec220'/>
+        <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>
+      <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/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='2feec220'/>
+      </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='2feec220'/>
+      </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='2feec220'/>
+      </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>
+      <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>
+    </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='6406df84'/>
+        <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>
+    </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='6406df84'/>
+        <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_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='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_core.c' language='LANG_C89'>
+      <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>
+    </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>
+    </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='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='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='fb7c6451' size-in-bits='152' id='8f04ba62'>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </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='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='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>
+      <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='ac5ab5ad' 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='ac5ab5ad'>
+        <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_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='309' 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='310' 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='311' 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='312' 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='313' 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='314' 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='315' 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='316' 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='317' 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='318' 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='319' 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='320' 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='321' 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='323' 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='324' 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='325' 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='326' 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='327' 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='328' 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='329' 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='330' 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='331' 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='335' 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='336' 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='337' 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='339' 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='340' 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='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='serial_icounter_struct' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='102' column='1' id='8816ddc1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='e415235d' visibility='default' filepath='include/uapi/linux/serial.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='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>
+      <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_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>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='274' column='1' id='4e1a3570'>
+        <underlying-type type-id='6406df84'/>
+        <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='2f320200' filepath='include/linux/dmaengine.h' line='214' column='1' id='3fb29acd'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='3fb29acd' visibility='default' filepath='include/linux/dmaengine.h' line='214' column='1' id='2f320200'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/dmaengine.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dmaengine_alignment' filepath='include/linux/dmaengine.h' line='625' column='1' id='ec506a0a'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='22f86352' size-in-bits='64' id='3e6eb93a'/>
+      <pointer-type-def type-id='3e6eb93a' size-in-bits='64' id='5b4d58e9'/>
+      <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='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'/>
+      <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='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='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='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='31bf052e' size-in-bits='64' id='967c9384'/>
+      <pointer-type-def type-id='8816ddc1' size-in-bits='64' id='f1c1e0f9'/>
+      <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='cc72711f' size-in-bits='64' id='a72a4e27'/>
+      <pointer-type-def type-id='a46c8018' size-in-bits='64' id='b0e7dbd3'/>
+      <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='c0f05602' size-in-bits='64' id='3805964c'/>
+      <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='ccee3154' size-in-bits='64' id='aa8ac136'/>
+      <pointer-type-def type-id='d9866c79' size-in-bits='64' id='fb8c75c5'/>
+      <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='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='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='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'/>
+      <pointer-type-def type-id='a818b7a0' size-in-bits='64' id='7fa79446'/>
+      <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='395' 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='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='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='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='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='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='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='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='c0f05602'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='c2b4b27b'/>
+      </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='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='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='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='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='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='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='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>
+      <function-type size-in-bits='64' id='3f9037c9'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f0981eeb'/>
+        <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='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='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='504' 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='519' 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='686' 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='406' 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='2600' 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='2600' column='1'/>
+        <parameter type-id='7292109c' name='index' filepath='drivers/tty/serial/serial_core.c' line='2600' column='1'/>
+        <return type-id='c2b4b27b'/>
+      </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='_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='517' 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='543' 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='__tty_alloc_driver' mangled-name='__tty_alloc_driver' filepath='drivers/tty/tty_io.c' line='3205' 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='3205' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/tty/tty_io.c' line='3205' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/tty/tty_io.c' line='3206' 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>
+    </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='480' 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='tty_port_init' mangled-name='tty_port_init' filepath='include/linux/tty.h' line='576' 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_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='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='598' 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='579' 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='501' 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='487' 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='692' 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='693' 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='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='479' 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='569' 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='703' 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='699' 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='691' 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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/common/common.c' language='LANG_C89'>
+      <enum-decl name='usb_dr_mode' filepath='include/linux/usb/otg.h' line='116' column='1' id='d291aaf1'>
+        <underlying-type type-id='6406df84'/>
+        <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>
+      <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='usb_get_dr_mode' mangled-name='usb_get_dr_mode' filepath='drivers/usb/common/common.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dr_mode'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/common/common.c' line='131' column='1'/>
+        <return type-id='d291aaf1'/>
+      </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>
+      <function-decl name='of_usb_host_tpl_support' mangled-name='of_usb_host_tpl_support' filepath='drivers/usb/common/common.c' line='208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_usb_host_tpl_support'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/usb/common/common.c' line='208' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-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>
+      <function-decl name='__usb_create_hcd' mangled-name='__usb_create_hcd' filepath='drivers/usb/core/hcd.c' line='2412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__usb_create_hcd'>
+        <parameter type-id='5aa12c86' name='driver' filepath='drivers/usb/core/hcd.c' line='2412' column='1'/>
+        <parameter type-id='fa0b179b' name='sysdev' filepath='drivers/usb/core/hcd.c' line='2413' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/core/hcd.c' line='2413' column='1'/>
+        <parameter type-id='80f4b756' name='bus_name' filepath='drivers/usb/core/hcd.c' line='2413' column='1'/>
+        <parameter type-id='fc4f83c1' name='primary_hcd' filepath='drivers/usb/core/hcd.c' line='2414' column='1'/>
+        <return type-id='fc4f83c1'/>
+      </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_poll_rh_status' mangled-name='usb_hcd_poll_rh_status' filepath='drivers/usb/core/hcd.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_poll_rh_status'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='752' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_giveback_urb' mangled-name='usb_hcd_giveback_urb' filepath='drivers/usb/core/hcd.c' line='1709' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_giveback_urb'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1709' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1709' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='drivers/usb/core/hcd.c' line='1709' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_unlink_urb_from_ep' mangled-name='usb_hcd_unlink_urb_from_ep' filepath='drivers/usb/core/hcd.c' line='1235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unlink_urb_from_ep'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1235' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1235' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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_link_urb_to_ep' mangled-name='usb_hcd_link_urb_to_ep' filepath='drivers/usb/core/hcd.c' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_link_urb_to_ep'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1144' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_hcd_check_unlink_urb' mangled-name='usb_hcd_check_unlink_urb' filepath='drivers/usb/core/hcd.c' line='1202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_check_unlink_urb'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1202' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1202' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='drivers/usb/core/hcd.c' line='1203' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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_resume_root_hub' mangled-name='usb_hcd_resume_root_hub' filepath='drivers/usb/core/hcd.c' line='2250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_resume_root_hub'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_irq' mangled-name='usb_hcd_irq' filepath='drivers/usb/core/hcd.c' line='2319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_irq'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/usb/core/hcd.c' line='2319' column='1'/>
+        <parameter type-id='eaa32e2f' name='__hcd' filepath='drivers/usb/core/hcd.c' line='2319' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='usb_hcd_is_primary_hcd' mangled-name='usb_hcd_is_primary_hcd' filepath='drivers/usb/core/hcd.c' line='2560' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_is_primary_hcd'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2560' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_create_shared_hcd' mangled-name='usb_create_shared_hcd' filepath='drivers/usb/core/hcd.c' line='2489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_create_shared_hcd'>
+        <parameter type-id='5aa12c86' name='driver' filepath='drivers/usb/core/hcd.c' line='2489' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/core/hcd.c' line='2490' column='1'/>
+        <parameter type-id='80f4b756' name='bus_name' filepath='drivers/usb/core/hcd.c' line='2490' column='1'/>
+        <parameter type-id='fc4f83c1' name='primary_hcd' filepath='drivers/usb/core/hcd.c' line='2491' column='1'/>
+        <return type-id='fc4f83c1'/>
+      </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>
+    </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='1525' 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='1525' 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_dev' mangled-name='usb_get_dev' filepath='drivers/usb/core/usb.c' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dev'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='707' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_put_dev' mangled-name='usb_put_dev' filepath='drivers/usb/core/usb.c' line='722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_dev'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='722' column='1'/>
+        <return type-id='48b5725f'/>
+      </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-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/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='49a58c0c'/>
+        <parameter type-id='f0981eeb'/>
+        <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='49a58c0c'/>
+        <parameter type-id='901a91cb'/>
+        <return type-id='48b5725f'/>
+      </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='2447' 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='2447' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </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='1888' 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='1888' 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'/>
+      <class-decl name='usb_otg_caps' size-in-bits='48' is-struct='yes' visibility='default' is-declaration-only='yes' id='e994232a'/>
+      <class-decl name='usb_udc' size-in-bits='7680' is-struct='yes' visibility='default' is-declaration-only='yes' id='1ee0d0f0'/>
+      <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>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f8cbf45b'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-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_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>
+      <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='49a58c0c' 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_gadget' size-in-bits='8768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='397' column='1' id='54f638e6'>
+        <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_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_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='fd7e7994' const='yes' id='946203ef'/>
+      <pointer-type-def type-id='946203ef' size-in-bits='64' id='5b4bef1f'/>
+      <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='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='364ef168' const='yes' id='1a56399f'/>
+      <pointer-type-def type-id='1a56399f' size-in-bits='64' id='2abcd7ef'/>
+      <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='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='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='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='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='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='5c44a483' size-in-bits='64' id='c23646a3'/>
+      <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='8005701f' size-in-bits='64' id='63a08bf7'/>
+      <pointer-type-def type-id='8684c7e6' size-in-bits='64' id='9f35b348'/>
+      <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='54f638e6' size-in-bits='64' id='49a58c0c'/>
+      <pointer-type-def type-id='b718d3f9' size-in-bits='64' id='9762ede1'/>
+      <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='e994232a' size-in-bits='64' id='451a0588'/>
+      <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='2bc124cb' size-in-bits='64' id='3b7e997b'/>
+      <pointer-type-def type-id='1ee0d0f0' size-in-bits='64' id='d872b366'/>
+      <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='e72900f8' size-in-bits='64' id='b1c1788a'/>
+      <pointer-type-def type-id='192c003a' size-in-bits='64' id='2dfafd2c'/>
+      <pointer-type-def type-id='d7b840f9' size-in-bits='64' id='0da78fa5'/>
+      <pointer-type-def type-id='b297b72f' size-in-bits='64' id='f16bd93b'/>
+      <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_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='49a58c0c'/>
+        <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='49a58c0c'/>
+        <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='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='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='90e882dc'>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c70cf626'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b845c559'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f4720b2'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ba00442'>
+        <parameter type-id='49a58c0c'/>
+        <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='49a58c0c'/>
+        <parameter type-id='9762ede1'/>
+        <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='8684c7e6'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='a07d0491'/>
+        <parameter type-id='dd810384'/>
+        <return type-id='63a08bf7'/>
+      </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='cd4cfe6f'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='1a494567'/>
+      </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='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='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>
+      <function-type size-in-bits='64' id='d6bdcb4d'>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f089a11b'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='4e532009'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5213d9b'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='c23646a3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </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' is-declaration-only='yes' id='8755a6ff'/>
+      <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='002ac4a6' size-in-bits='512' id='b1888bf8'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </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>
+    </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_seq_port_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='95c62fcb'/>
+      <class-decl name='snd_shutdown_f_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='30b9286d'/>
+      <array-type-def dimensions='1' type-id='c2f49f48' size-in-bits='384' id='dafc964c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <enumerator name='SNDRV_DEV_BUILD' value='0'/>
+        <enumerator name='SNDRV_DEV_REGISTERED' value='1'/>
+        <enumerator name='SNDRV_DEV_DISCONNECTED' value='2'/>
+      </enum-decl>
+      <class-decl name='snd_rawmidi' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='107' column='1' id='13b5af00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/rawmidi.h' line='108' 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/rawmidi.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/sound/rawmidi.h' line='110' 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/rawmidi.h' line='111' 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/rawmidi.h' line='112' 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/rawmidi.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ops' type-id='7cc7d64a' visibility='default' filepath='include/sound/rawmidi.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='streams' type-id='dafc964c' visibility='default' filepath='include/sound/rawmidi.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/rawmidi.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='private_free' type-id='c4e53453' visibility='default' filepath='include/sound/rawmidi.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='open_mutex' type-id='925167dc' visibility='default' filepath='include/sound/rawmidi.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/sound/rawmidi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/rawmidi.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='proc_entry' type-id='b9608bfc' visibility='default' filepath='include/sound/rawmidi.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_rawmidi_global_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='45' column='1' id='e286d3b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_register' type-id='1516d706' visibility='default' filepath='include/sound/rawmidi.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_unregister' type-id='1516d706' visibility='default' filepath='include/sound/rawmidi.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_port_info' type-id='fa290098' visibility='default' filepath='include/sound/rawmidi.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_rawmidi_str' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='101' column='1' id='c2f49f48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='substream_count' type-id='f0981eeb' visibility='default' filepath='include/sound/rawmidi.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='substream_opened' type-id='f0981eeb' visibility='default' filepath='include/sound/rawmidi.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='substreams' type-id='72f469ec' visibility='default' filepath='include/sound/rawmidi.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_rawmidi_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='38' column='1' id='caff9663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='115443a5' visibility='default' filepath='include/sound/rawmidi.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='115443a5' visibility='default' filepath='include/sound/rawmidi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trigger' type-id='f393c8ab' visibility='default' filepath='include/sound/rawmidi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='drain' type-id='ef423cac' visibility='default' filepath='include/sound/rawmidi.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_rawmidi_substream' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='77' column='1' id='f8a3cd7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/rawmidi.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/rawmidi.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/rawmidi.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='opened' type-id='b50a4934' visibility='default' filepath='include/sound/rawmidi.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='append' type-id='b50a4934' visibility='default' filepath='include/sound/rawmidi.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='active_sensing' type-id='b50a4934' visibility='default' filepath='include/sound/rawmidi.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/sound/rawmidi.h' line='84' 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/rawmidi.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rmidi' type-id='561a8b76' visibility='default' filepath='include/sound/rawmidi.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pstr' type-id='803a988e' visibility='default' filepath='include/sound/rawmidi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/sound/rawmidi.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='runtime' type-id='859f6853' visibility='default' filepath='include/sound/rawmidi.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/rawmidi.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='9c56e4a2' visibility='default' filepath='include/sound/rawmidi.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_rawmidi_runtime' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/sound/rawmidi.h' line='52' column='1' id='9f973313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='substream' type-id='725cebed' visibility='default' filepath='include/sound/rawmidi.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='drain' type-id='f0981eeb' visibility='default' filepath='include/sound/rawmidi.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='oss' type-id='f0981eeb' visibility='default' filepath='include/sound/rawmidi.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='cf536864' visibility='default' filepath='include/sound/rawmidi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffer_size' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='appl_ptr' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hw_ptr' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='avail_min' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='avail' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='xruns' type-id='b59d7dce' visibility='default' filepath='include/sound/rawmidi.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buffer_ref' type-id='95e97e5e' visibility='default' filepath='include/sound/rawmidi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/rawmidi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/rawmidi.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event' type-id='ef423cac' visibility='default' filepath='include/sound/rawmidi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='include/sound/rawmidi.h' line='71' 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/sound/rawmidi.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='private_free' type-id='ef423cac' visibility='default' filepath='include/sound/rawmidi.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e286d3b5' const='yes' id='890266e4'/>
+      <pointer-type-def type-id='890266e4' size-in-bits='64' id='7cc7d64a'/>
+      <qualified-type-def type-id='caff9663' const='yes' id='9a0f763c'/>
+      <pointer-type-def type-id='9a0f763c' size-in-bits='64' id='9c56e4a2'/>
+      <pointer-type-def type-id='4b6b0e29' size-in-bits='64' id='e23829bd'/>
+      <pointer-type-def type-id='fca8808c' size-in-bits='64' id='1516d706'/>
+      <pointer-type-def type-id='d4535129' size-in-bits='64' id='115443a5'/>
+      <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='13b5af00' size-in-bits='64' id='561a8b76'/>
+      <pointer-type-def type-id='561a8b76' size-in-bits='64' id='e7c961d4'/>
+      <pointer-type-def type-id='9f973313' size-in-bits='64' id='859f6853'/>
+      <pointer-type-def type-id='c2f49f48' size-in-bits='64' id='803a988e'/>
+      <pointer-type-def type-id='f8a3cd7d' size-in-bits='64' id='725cebed'/>
+      <pointer-type-def type-id='95c62fcb' size-in-bits='64' id='b016109b'/>
+      <pointer-type-def type-id='30b9286d' size-in-bits='64' id='df5f3f5d'/>
+      <pointer-type-def type-id='593d8168' size-in-bits='64' id='fde42bf2'/>
+      <pointer-type-def type-id='1cad3e8f' size-in-bits='64' id='c4e53453'/>
+      <pointer-type-def type-id='cf366586' size-in-bits='64' id='fa290098'/>
+      <pointer-type-def type-id='a893941a' size-in-bits='64' id='ef423cac'/>
+      <pointer-type-def type-id='b40530cf' size-in-bits='64' id='f393c8ab'/>
+      <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_rawmidi_new' mangled-name='snd_rawmidi_new' filepath='include/sound/rawmidi.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_rawmidi_new'>
+        <parameter type-id='52704eb7'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e7c961d4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_rawmidi_set_ops' mangled-name='snd_rawmidi_set_ops' filepath='include/sound/rawmidi.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_rawmidi_set_ops'>
+        <parameter type-id='561a8b76'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9c56e4a2'/>
+        <return type-id='48b5725f'/>
+      </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='snd_card_free_when_closed' mangled-name='snd_card_free_when_closed' filepath='include/sound/core.h' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_free_when_closed'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_rawmidi_receive' mangled-name='snd_rawmidi_receive' filepath='include/sound/rawmidi.h' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_rawmidi_receive'>
+        <parameter type-id='725cebed'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <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='fca8808c'>
+        <parameter type-id='561a8b76'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4535129'>
+        <parameter type-id='725cebed'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='593d8168'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1cad3e8f'>
+        <parameter type-id='561a8b76'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf366586'>
+        <parameter type-id='561a8b76'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b016109b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a893941a'>
+        <parameter type-id='725cebed'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b40530cf'>
+        <parameter type-id='725cebed'/>
+        <parameter type-id='95e97e5e'/>
+        <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='6406df84'/>
+        <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='4284' 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_set_maxpacket_limit' mangled-name='usb_ep_set_maxpacket_limit' filepath='drivers/usb/gadget/udc/core.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_maxpacket_limit'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='62' column='1'/>
+        <parameter type-id='f0981eeb' name='maxpacket_limit' filepath='drivers/usb/gadget/udc/core.c' line='63' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='49a58c0c' 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='49a58c0c' 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='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='638' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_map_request_by_dev' mangled-name='usb_gadget_map_request_by_dev' filepath='drivers/usb/gadget/udc/core.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_map_request_by_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/gadget/udc/core.c' line='814' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='815' column='1'/>
+        <parameter type-id='95e97e5e' name='is_in' filepath='drivers/usb/gadget/udc/core.c' line='815' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_unmap_request_by_dev' mangled-name='usb_gadget_unmap_request_by_dev' filepath='drivers/usb/gadget/udc/core.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_unmap_request_by_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/gadget/udc/core.c' line='862' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='863' column='1'/>
+        <parameter type-id='95e97e5e' name='is_in' filepath='drivers/usb/gadget/udc/core.c' line='863' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_giveback_request' mangled-name='usb_gadget_giveback_request' filepath='drivers/usb/gadget/udc/core.c' line='899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_giveback_request'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='899' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='900' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_udc_reset' mangled-name='usb_gadget_udc_reset' filepath='drivers/usb/gadget/udc/core.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_udc_reset'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1059' column='1'/>
+        <parameter type-id='9762ede1' name='driver' filepath='drivers/usb/gadget/udc/core.c' line='1060' column='1'/>
+        <return type-id='48b5725f'/>
+      </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>
+      <function-decl name='usb_add_gadget_udc' mangled-name='usb_add_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_gadget_udc'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1'/>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_del_gadget_udc' mangled-name='usb_del_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_del_gadget_udc'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1317' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </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='5c93f9a8' 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='1188' 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='1185' 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='1102' 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='1105' 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='1059' 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='1104' 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='1103' 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>
+    </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' is-declaration-only='yes' id='2bf33030'/>
+      <class-decl name='extcon_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='87a2d33d'/>
+      <class-decl name='gen_pool' size-in-bits='448' is-struct='yes' visibility='default' is-declaration-only='yes' id='171b0f6c'/>
+      <class-decl name='usb_gadget' is-struct='yes' visibility='default' is-declaration-only='yes' id='54f638e7'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='49a58c0d' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='87a2d33d' size-in-bits='64' id='c0d6fadb'/>
+      <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='54f638e7' size-in-bits='64' id='49a58c0d'/>
+      <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='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='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='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='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='49a58c0d'/>
+        <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/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='6406df84'/>
+        <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='devm_usb_get_phy_by_phandle' mangled-name='devm_usb_get_phy_by_phandle' filepath='drivers/usb/phy/phy.c' line='545' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_usb_get_phy_by_phandle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/phy/phy.c' line='545' column='1'/>
+        <parameter type-id='80f4b756' name='phandle' filepath='drivers/usb/phy/phy.c' line='546' column='1'/>
+        <parameter type-id='f9b06939' name='index' filepath='drivers/usb/phy/phy.c' line='546' column='1'/>
+        <return type-id='ca9354d1'/>
+      </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='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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/roles/class.c' language='LANG_C89'>
+      <typedef-decl name='usb_role_switch_set_t' type-id='91d6713d' filepath='include/linux/usb/role.h' line='16' column='1' id='265b58a4'/>
+      <typedef-decl name='usb_role_switch_get_t' type-id='be8d9c5e' filepath='include/linux/usb/role.h' line='17' column='1' id='3341a400'/>
+      <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>
+      <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'/>
+      <function-decl name='usb_role_switch_register' mangled-name='usb_role_switch_register' filepath='drivers/usb/roles/class.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_register'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/roles/class.c' line='285' column='1'/>
+        <parameter type-id='143d32b2' name='desc' filepath='drivers/usb/roles/class.c' line='286' column='1'/>
+        <return type-id='3e3cd44f'/>
+      </function-decl>
+      <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>
+      <function-decl name='usb_role_switch_unregister' mangled-name='usb_role_switch_unregister' filepath='drivers/usb/roles/class.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_unregister'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='331' column='1'/>
+        <return type-id='48b5725f'/>
+      </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/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='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='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='31' 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>
+    </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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='1f31ad12'>
+        <parameter type-id='02913b69'/>
+        <parameter type-id='51bb592e'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='95e97e5e'/>
+        <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='42a0ecc7'>
+        <parameter type-id='02913b69'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <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>
+      <function-type size-in-bits='64' id='345f1a5f'>
+        <parameter type-id='02913b69'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </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>
+      <class-decl name='usb_role_switch' size-in-bits='8064' is-struct='yes' visibility='default' is-declaration-only='yes' id='3b2a0df7'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='ac5ab5ae' 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='ac5ab5ae'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <enum-decl name='usb_role' filepath='include/linux/usb/role.h' line='10' column='1' id='c675b073'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='USB_ROLE_NONE' value='0'/>
+        <enumerator name='USB_ROLE_HOST' value='1'/>
+        <enumerator name='USB_ROLE_DEVICE' value='2'/>
+      </enum-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'/>
+      <pointer-type-def type-id='3b2a0df7' size-in-bits='64' id='3e3cd44f'/>
+      <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='_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>
+      <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='428b7011'>
+        <return type-id='19c2251e'/>
+      </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>
+    </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='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='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='6406df84'/>
+        <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='6406df84'/>
+        <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='439' 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='440' 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='441' 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='442' 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='447' 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='448' 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='449' 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='450' 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='451' 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='452' 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='453' 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='454' 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='455' 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='456' 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='457' 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='458' 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='475' 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='476' 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='477' 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='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='' type-id='f6cbf139' visibility='default' filepath='include/linux/fb.h' line='482' 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='486' 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='487' 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='490' 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='491' 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='493' 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='503' 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='505' 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='767' 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='768' 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='769' 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='770' 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='771' 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='772' 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='773' 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='774' 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='775' 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='776' 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='777' 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='778' 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='779' 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='780' 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='781' 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>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='497' 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='498' 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='502' 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='499' 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='500' 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='501' 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>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='482' column='1' id='f6cbf139'>
+        <data-member access='private'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+      </union-decl>
+    </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='687f9687' size-in-bits='96' id='69bcaf1e'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='e7f43f87' 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='e7f43f87'>
+        <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='6406df84'/>
+        <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='69bcaf1e' 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='657f91c7' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='687f9687'>
+        <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>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='201' column='1' id='657f91c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='202' 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='202' 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'>
+      <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>
+      <qualified-type-def type-id='a23921c9' const='yes' id='e98a103e'/>
+      <pointer-type-def type-id='e98a103e' size-in-bits='64' id='b8574f7c'/>
+      <qualified-type-def type-id='7462f12f' const='yes' id='106d717e'/>
+      <pointer-type-def type-id='106d717e' size-in-bits='64' id='3049673c'/>
+      <pointer-type-def type-id='f8d99df1' size-in-bits='64' id='f350dc99'/>
+      <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_driver' mangled-name='register_virtio_driver' filepath='drivers/virtio/virtio.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_virtio_driver'>
+        <parameter type-id='f350dc99' name='driver' filepath='drivers/virtio/virtio.c' line='294' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_virtio_driver' mangled-name='unregister_virtio_driver' filepath='drivers/virtio/virtio.c' line='303' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_virtio_driver'>
+        <parameter type-id='f350dc99' name='driver' filepath='drivers/virtio/virtio.c' line='303' 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='bf3ef905' size-in-bits='64' id='3f2244fd'/>
+      <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_add_sgs' mangled-name='virtqueue_add_sgs' filepath='drivers/virtio/virtio_ring.c' line='1724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_sgs'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1724' column='1'/>
+        <parameter type-id='3f2244fd' name='sgs' filepath='drivers/virtio/virtio_ring.c' line='1725' column='1'/>
+        <parameter type-id='f0981eeb' name='out_sgs' filepath='drivers/virtio/virtio_ring.c' line='1726' column='1'/>
+        <parameter type-id='f0981eeb' name='in_sgs' filepath='drivers/virtio/virtio_ring.c' line='1727' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1728' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1729' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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_kick_prepare' mangled-name='virtqueue_kick_prepare' filepath='drivers/virtio/virtio_ring.c' line='1824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_kick_prepare'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1824' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_notify' mangled-name='virtqueue_notify' filepath='drivers/virtio/virtio_ring.c' line='1841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_notify'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1841' column='1'/>
+        <return type-id='b50a4934'/>
+      </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_get_buf' mangled-name='virtqueue_get_buf' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_buf'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1'/>
+        <parameter type-id='807869d3' name='len' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_disable_cb' mangled-name='virtqueue_disable_cb' filepath='drivers/virtio/virtio_ring.c' line='1918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_disable_cb'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1918' column='1'/>
+        <return type-id='48b5725f'/>
+      </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' mangled-name='virtqueue_enable_cb' filepath='drivers/virtio/virtio_ring.c' line='1983' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1983' 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='virtqueue_is_broken' mangled-name='virtqueue_is_broken' filepath='drivers/virtio/virtio_ring.c' line='2261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_is_broken'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2261' column='1'/>
+        <return type-id='b50a4934'/>
+      </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>
+    </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='293' 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='293' 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='339' 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='339' 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='365' 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='365' column='1'/>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='366' 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='562' 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='562' column='1'/>
+        <parameter type-id='09896a23' name='cancel' filepath='fs/aio.c' line='562' 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/attr.c' language='LANG_C89'>
+      <function-decl name='simple_setattr' mangled-name='simple_setattr' filepath='include/linux/fs.h' line='3388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_setattr'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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>
+      <function-decl name='iget_failed' mangled-name='iget_failed' filepath='fs/bad_inode.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget_failed'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='237' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='2399' 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='678' 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='707' 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='3103' 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='ac5ab5af' 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='6406df84'/>
+        <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='ac5ab5af'>
+        <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='2604' 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='2605' 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='2606' 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='2607' 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='2608' 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='2609' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vfsmount' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='69' column='1' id='19e88834'>
+        <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>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mount.h' line='77' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='3421' 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='3421' 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='3421' 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='3421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='e7f43f88'>
+        <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>
+      <pointer-type-def type-id='70043592' size-in-bits='64' id='267284e7'/>
+      <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='19e88834' size-in-bits='64' id='549da824'/>
+      <pointer-type-def type-id='549da824' 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='118' 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='unregister_filesystem' mangled-name='unregister_filesystem' filepath='include/linux/fs.h' line='2396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_filesystem'>
+        <parameter type-id='21e53d44'/>
+        <return type-id='95e97e5e'/>
+      </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='3423' 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='filp_close' mangled-name='filp_close' filepath='include/linux/fs.h' line='2633' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filp_close'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clear_inode' mangled-name='clear_inode' filepath='include/linux/fs.h' line='3156' 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='140' 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='63' 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='381' 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='156' 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='new_inode' mangled-name='new_inode' filepath='include/linux/fs.h' line='3159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='new_inode'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='get_next_ino' mangled-name='get_next_ino' filepath='include/linux/fs.h' line='3151' 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='1625' 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='3425' 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='2420' 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='3097' 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='235' 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='267284e7'/>
+        <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='267284e7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='simple_release_fs' mangled-name='simple_release_fs' filepath='include/linux/fs.h' line='3426' 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='2262' 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='240' 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='267284e7'/>
+        <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='267284e7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remove_arg_zero' mangled-name='remove_arg_zero' filepath='include/linux/binfmts.h' line='121' 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='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='126' 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='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='copy_strings_kernel' mangled-name='copy_strings_kernel' filepath='include/linux/binfmts.h' line='141' 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='140' 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='2626' 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='120' 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='kernel_read' mangled-name='kernel_read' filepath='include/linux/fs.h' line='3094' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_read'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8b97c2dc'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='search_binary_handler' mangled-name='search_binary_handler' filepath='include/linux/binfmts.h' line='122' 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-decl name='register_filesystem' mangled-name='register_filesystem' filepath='include/linux/fs.h' line='2395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_filesystem'>
+        <parameter type-id='21e53d44'/>
+        <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>
+    </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='sb_min_blocksize' mangled-name='sb_min_blocksize' filepath='fs/block_dev.c' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb_min_blocksize'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/block_dev.c' line='157' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='fs/block_dev.c' line='157' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='2787' 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>
+    </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='6406df84'/>
+        <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='3122' 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='3122' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3122' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='fs/buffer.c' line='3122' column='1'/>
+        <parameter type-id='64906f72' name='bhs' filepath='fs/buffer.c' line='3122' 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='3371' 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='3371' 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='3090' 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='3090' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3090' column='1'/>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3090' 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='2931' 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='2931' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2931' column='1'/>
+        <parameter type-id='c2c60445' name='wbc' filepath='fs/buffer.c' line='2932' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_block_bmap' mangled-name='generic_block_bmap' filepath='fs/buffer.c' line='2970' 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='2970' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='2970' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2971' column='1'/>
+        <return type-id='a42536cd'/>
+      </function-decl>
+      <function-decl name='__sync_dirty_buffer' mangled-name='__sync_dirty_buffer' filepath='fs/buffer.c' line='3169' 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='3169' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3169' 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/item.c' language='LANG_C89'>
+      <function-decl name='config_item_init_type_name' mangled-name='config_item_init_type_name' filepath='fs/configfs/item.c' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_item_init_type_name'>
+        <parameter type-id='7a29ff27' name='item' filepath='fs/configfs/item.c' line='84' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/configfs/item.c' line='85' column='1'/>
+        <parameter type-id='596e8e55' name='type' filepath='fs/configfs/item.c' line='86' column='1'/>
+        <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>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f4cbee09'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fscrypt_prepared_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='179' 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='180' 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='182' 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='584' 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='585' 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='586' 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='587' 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='588' 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='589' 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='590' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='fscrypt_policy' size-in-bits='192' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='103' column='1' id='61227238'>
+        <data-member access='private'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v1' type-id='74e2c23b' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v2' type-id='75e2c3ce' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='106' 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='41' 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='42' 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='43' 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='44' 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='45' 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='46' 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='68' 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='69' 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='70' 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='71' 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='72' 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='73' 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='74' 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='fscrypt_register_key_removal_notifier' mangled-name='fscrypt_register_key_removal_notifier' filepath='fs/crypto/keyring.c' line='885' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fscrypt_register_key_removal_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='fs/crypto/keyring.c' line='885' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fscrypt_unregister_key_removal_notifier' mangled-name='fscrypt_unregister_key_removal_notifier' filepath='fs/crypto/keyring.c' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fscrypt_unregister_key_removal_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='fs/crypto/keyring.c' line='892' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/dcache.c' language='LANG_C89'>
+      <var-decl name='names_cachep' type-id='f3b4aca8' mangled-name='names_cachep' visibility='default' filepath='fs/dcache.c' line='3190' column='1' elf-symbol-id='names_cachep'/>
+      <function-decl name='d_alloc_name' mangled-name='d_alloc_name' filepath='fs/dcache.c' line='1823' 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='1823' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/dcache.c' line='1823' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_obtain_alias' mangled-name='d_obtain_alias' filepath='fs/dcache.c' line='2088' 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='2088' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_add_ci' mangled-name='d_add_ci' filepath='fs/dcache.c' line='2131' 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='2131' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2131' column='1'/>
+        <parameter type-id='b316d9a3' name='name' filepath='fs/dcache.c' line='2132' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_add' mangled-name='d_add' filepath='fs/dcache.c' line='2674' 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='2674' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2674' 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'>
+      <class-decl name='debugfs_regset32' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/debugfs.h' line='34' column='1' id='f01e85cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='ec73f122' visibility='default' filepath='include/linux/debugfs.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nregs' type-id='95e97e5e' visibility='default' filepath='include/linux/debugfs.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/debugfs.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='debugfs_reg32' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/debugfs.h' line='29' column='1' id='8b6b6ef7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/debugfs.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/linux/debugfs.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8b6b6ef7' const='yes' id='f0f807bc'/>
+      <pointer-type-def type-id='f0f807bc' size-in-bits='64' id='ec73f122'/>
+      <pointer-type-def type-id='f01e85cf' size-in-bits='64' id='62fa2ea7'/>
+      <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>
+      <function-decl name='debugfs_create_regset32' mangled-name='debugfs_create_regset32' filepath='fs/debugfs/file.c' line='1142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_regset32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='1142' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='1142' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='1143' column='1'/>
+        <parameter type-id='62fa2ea7' name='regset' filepath='fs/debugfs/file.c' line='1144' column='1'/>
+        <return type-id='27675065'/>
+      </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'>
+      <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='8567d8b0'/>
+        <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='8567d8b0'/>
+        <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='3242' 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'>
+      <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='__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='1229' 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='1229' column='1'/>
+        <parameter type-id='b59d7dce' name='buf_size' filepath='fs/exec.c' line='1229' column='1'/>
+        <parameter type-id='f23e2572' name='tsk' filepath='fs/exec.c' line='1229' 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/node.c' language='LANG_C89'>
+      <function-decl name='radix_tree_gang_lookup' mangled-name='radix_tree_gang_lookup' filepath='include/linux/radix-tree.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_gang_lookup'>
+        <parameter type-id='bb0f13d1'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </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>
+    </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='6406df84'/>
+        <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='eca62f39' size-in-bits='64' id='e18b930d'/>
+      <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='mount_bdev' mangled-name='mount_bdev' filepath='include/linux/fs.h' line='2335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mount_bdev'>
+        <parameter type-id='21e53d44'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e18b930d'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <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_splice_alias' mangled-name='d_splice_alias' filepath='include/linux/dcache.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_splice_alias'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_find_alias' mangled-name='d_find_alias' filepath='include/linux/dcache.h' line='268' 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='282' 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='clear_nlink' mangled-name='clear_nlink' filepath='include/linux/fs.h' line='2263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clear_nlink'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inc_nlink' mangled-name='inc_nlink' filepath='include/linux/fs.h' line='2261' 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='set_nlink' mangled-name='set_nlink' filepath='include/linux/fs.h' line='2264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_nlink'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='f0981eeb'/>
+        <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='eca62f39'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/file_table.c' language='LANG_C89'>
+      <function-decl name='d_set_d_op' mangled-name='d_set_d_op' filepath='include/linux/dcache.h' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_set_d_op'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='1ee57353'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </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='2245' 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='2245' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/fs-writeback.c' line='2245' 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/fs_types.c' language='LANG_C89'>
+      <function-decl name='fs_ftype_to_dtype' mangled-name='fs_ftype_to_dtype' filepath='fs/fs_types.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fs_ftype_to_dtype'>
+        <parameter type-id='f0981eeb' name='filetype' filepath='fs/fs_types.c' line='37' column='1'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fuse/dev.c' language='LANG_C89'>
+      <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>
+      <class-decl name='fuse_arg' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='228' 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='229' 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='230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_iqueue' size-in-bits='1088' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='401' 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='403' 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='406' 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='409' 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='412' 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='415' 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='418' 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='421' 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='422' 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='425' 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='428' 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='431' 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='434' 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='507' 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='508' 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='509' 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='373' 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='377' 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='383' 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='389' 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='395' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_conn' size-in-bits='3968' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='499' 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='501' 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='504' 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='507' 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='509' 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='512' 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='515' 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='518' 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='521' 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='524' 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='527' 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='530' 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='533' 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='536' 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='539' 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='542' 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='545' 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='548' 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='551' 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='554' 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='558' 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='562' 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='567' 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='570' 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='574' 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='577' 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='582' 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='585' 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='588' 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='591' 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='594' 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='597' 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='600' 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='603' 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='606' 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='609' 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='617' 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='620' 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='623' 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='626' 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='629' 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='632' 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='635' 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='638' 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='641' 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='644' 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='647' 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='650' 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='653' 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='656' 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='659' 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='662' 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='665' 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='668' 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='671' 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='674' 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='677' 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='680' 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='683' 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='686' 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='689' 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='692' 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='695' 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='698' 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='701' 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='704' 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='707' 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='710' 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='713' 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='716' 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='719' 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='722' 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='725' 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='728' 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='731' 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='734' 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='737' 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='740' 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='743' 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='746' 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='749' 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='752' 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='755' 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='329' 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='332' 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='335' 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='338' 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='341' 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='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='in' type-id='e7f43f89' visibility='default' filepath='fs/fuse/fuse_i.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='out' type-id='687f9688' visibility='default' filepath='fs/fuse/fuse_i.h' line='354' 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='357' 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='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_args' size-in-bits='896' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='239' 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='240' 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='241' 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='242' 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='243' 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='244' 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='245' 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='246' 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='247' 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='248' 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='249' 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='250' 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='251' 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='252' 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='253' 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='254' 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='255' 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='222' 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='223' 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='224' 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='347' column='1' id='e7f43f89'>
+        <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='348' 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='786' 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='787' 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='788' 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='789' 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='790' 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='791' 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='792' 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='793' 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='794' 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='352' column='1' id='687f9688'>
+        <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='353' 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='797' 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='798' 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='799' 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='800' 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='457' 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='459' 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='462' 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='465' 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='440' 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='442' 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='445' 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='448' 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='451' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='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='118eb0ab' size-in-bits='64' id='f4792d9b'/>
+      <pointer-type-def type-id='46948733' size-in-bits='64' id='73c6d043'/>
+      <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'/>
+      <function-decl name='fuse_len_args' mangled-name='fuse_len_args' filepath='fs/fuse/dev.c' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_len_args'>
+        <parameter type-id='f0981eeb' name='numargs' filepath='fs/fuse/dev.c' line='179' column='1'/>
+        <parameter type-id='fb28cf3f' name='args' filepath='fs/fuse/dev.c' line='179' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='fuse_get_unique' mangled-name='fuse_get_unique' filepath='fs/fuse/dev.c' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_get_unique'>
+        <parameter type-id='f4792d9b' name='fiq' filepath='fs/fuse/dev.c' line='191' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='fuse_request_end' mangled-name='fuse_request_end' filepath='fs/fuse/dev.c' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_request_end'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/dev.c' line='276' column='1'/>
+        <parameter type-id='73c6d043' name='req' filepath='fs/fuse/dev.c' line='276' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_dequeue_forget' mangled-name='fuse_dequeue_forget' filepath='fs/fuse/dev.c' line='1052' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dequeue_forget'>
+        <parameter type-id='f4792d9b' name='fiq' filepath='fs/fuse/dev.c' line='1052' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='fs/fuse/dev.c' line='1053' column='1'/>
+        <parameter type-id='807869d3' name='countp' filepath='fs/fuse/dev.c' line='1054' column='1'/>
+        <return type-id='69f5e8dd'/>
+      </function-decl>
+      <function-decl name='fuse_dev_free' mangled-name='fuse_dev_free' filepath='fs/fuse/fuse_i.h' line='961' 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-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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fuse/inode.c' language='LANG_C89'>
+      <class-decl name='fuse_fs_context' size-in-bits='384' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='468' 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='469' 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='470' 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='471' 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='472' 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='473' 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='474' 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='475' 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='476' 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='477' 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='478' 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='479' 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='480' 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='481' 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='482' 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='483' 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='484' 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='485' 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='486' 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='489' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='002fb2fa' size-in-bits='64' id='d9e5bb28'/>
+      <function-decl name='fuse_conn_init' mangled-name='fuse_conn_init' filepath='fs/fuse/inode.c' line='612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_init'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='612' column='1'/>
+        <parameter type-id='c0ced321' name='user_ns' filepath='fs/fuse/inode.c' line='612' column='1'/>
+        <parameter type-id='c2954caf' name='fiq_ops' filepath='fs/fuse/inode.c' line='613' column='1'/>
+        <parameter type-id='eaa32e2f' name='fiq_priv' filepath='fs/fuse/inode.c' line='613' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_conn_put' mangled-name='fuse_conn_put' filepath='fs/fuse/inode.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_put'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_conn_get' mangled-name='fuse_conn_get' filepath='fs/fuse/inode.c' line='656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_get'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='656' column='1'/>
+        <return type-id='03e54357'/>
+      </function-decl>
+      <function-decl name='fuse_send_init' mangled-name='fuse_send_init' filepath='fs/fuse/inode.c' line='981' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_send_init'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='981' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_free_conn' mangled-name='fuse_free_conn' filepath='fs/fuse/inode.c' line='1020' 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='1020' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_dev_alloc' mangled-name='fuse_dev_alloc' filepath='fs/fuse/inode.c' line='1067' 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_dev_install' mangled-name='fuse_dev_install' filepath='fs/fuse/inode.c' line='1089' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dev_install'>
+        <parameter type-id='f925394a' name='fud' filepath='fs/fuse/inode.c' line='1089' column='1'/>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='1089' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_fill_super_common' mangled-name='fuse_fill_super_common' filepath='fs/fuse/inode.c' line='1127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_fill_super_common'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/fuse/inode.c' line='1127' column='1'/>
+        <parameter type-id='d9e5bb28' name='ctx' filepath='fs/fuse/inode.c' line='1127' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fuse_kill_sb_anon' mangled-name='fuse_kill_sb_anon' filepath='fs/fuse/inode.c' line='1347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_kill_sb_anon'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/fuse/inode.c' line='1347' column='1'/>
+        <return type-id='48b5725f'/>
+      </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'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='181' column='1' id='f6cbf13a'>
+        <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>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f3cbec7c'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='9ae05d53' size-in-bits='64' id='7c754ae0'/>
+      <pointer-type-def type-id='805f2c4a' size-in-bits='64' id='1b7a05dc'/>
+      <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='unlock_new_inode' mangled-name='unlock_new_inode' filepath='fs/inode.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_new_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='992' 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='7c754ae0'/>
+        <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='2821' 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='iget5_locked' mangled-name='iget5_locked' filepath='fs/inode.c' line='1141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget5_locked'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1141' column='1'/>
+        <parameter type-id='7359adad' name='hashval' filepath='fs/inode.c' line='1141' column='1'/>
+        <parameter type-id='1b7a05dc' name='test' filepath='fs/inode.c' line='1142' column='1'/>
+        <parameter type-id='1b7a05dc' name='set' filepath='fs/inode.c' line='1143' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/inode.c' line='1143' column='1'/>
+        <return type-id='7e666abe'/>
+      </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='igrab' mangled-name='igrab' filepath='fs/inode.c' line='1296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='igrab'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='1296' 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>
+      <function-decl name='inode_nohighmem' mangled-name='inode_nohighmem' filepath='fs/inode.c' line='2151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_nohighmem'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='2151' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='805f2c4a'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/io_uring.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='f5cbef9e'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='9b0c88cc'>
+        <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>
+      <function-decl name='sock_release' mangled-name='sock_release' filepath='include/linux/net.h' line='243' 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'>
+      <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_getattr' mangled-name='simple_getattr' filepath='fs/libfs.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_getattr'>
+        <parameter type-id='a77efac3' name='path' filepath='fs/libfs.c' line='29' column='1'/>
+        <parameter type-id='0e87f9be' name='stat' filepath='fs/libfs.c' line='29' column='1'/>
+        <parameter type-id='19c2251e' name='request_mask' filepath='fs/libfs.c' line='30' column='1'/>
+        <parameter type-id='f0981eeb' name='query_flags' filepath='fs/libfs.c' line='30' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='generic_read_dir' mangled-name='generic_read_dir' filepath='fs/libfs.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_read_dir'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='b59d7dce' name='siz' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='223' column='1'/>
+        <return type-id='79a0948f'/>
+      </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='932' 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='932' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='932' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='933' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='933' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='933' 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='965' 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='965' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='965' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='966' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='966' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='966' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='__generic_file_fsync' mangled-name='__generic_file_fsync' filepath='fs/libfs.c' line='997' 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='997' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='fs/libfs.c' line='997' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='fs/libfs.c' line='997' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/libfs.c' line='998' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='1039' 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='1039' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='fs/libfs.c' line='1039' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='fs/libfs.c' line='1039' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/libfs.c' line='1040' 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>
+      <function-decl name='simple_get_link' mangled-name='simple_get_link' filepath='fs/libfs.c' line='1211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_get_link'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/libfs.c' line='1211' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='1211' column='1'/>
+        <parameter type-id='26cad514' name='done' filepath='fs/libfs.c' line='1212' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/locks.c' language='LANG_C89'>
+      <function-decl name='__break_lease' mangled-name='__break_lease' filepath='fs/locks.c' line='1603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__break_lease'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/locks.c' line='1603' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='fs/locks.c' line='1603' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='fs/locks.c' line='1603' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-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'>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f8cbf45c'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='generic_permission' mangled-name='generic_permission' filepath='fs/namei.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_permission'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/namei.c' line='335' column='1'/>
+        <parameter type-id='95e97e5e' name='mask' filepath='fs/namei.c' line='335' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_path_lookup' mangled-name='vfs_path_lookup' filepath='fs/namei.c' line='2532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_path_lookup'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='2532' column='1'/>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='2532' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2533' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/namei.c' line='2533' column='1'/>
+        <parameter type-id='bcfe6314' name='path' filepath='fs/namei.c' line='2534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='lookup_one_len_unlocked' mangled-name='lookup_one_len_unlocked' filepath='fs/namei.c' line='2650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lookup_one_len_unlocked'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2650' column='1'/>
+        <parameter type-id='27675065' name='base' filepath='fs/namei.c' line='2651' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='fs/namei.c' line='2651' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='user_path_at_empty' mangled-name='user_path_at_empty' filepath='fs/namei.c' line='2696' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_path_at_empty'>
+        <parameter type-id='95e97e5e' name='dfd' filepath='fs/namei.c' line='2696' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2696' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/namei.c' line='2696' column='1'/>
+        <parameter type-id='bcfe6314' name='path' filepath='fs/namei.c' line='2697' column='1'/>
+        <parameter type-id='7292109c' name='empty' filepath='fs/namei.c' line='2697' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_create2' mangled-name='vfs_create2' filepath='fs/namei.c' line='2989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_create2'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='2989' column='1'/>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='2989' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='2989' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/namei.c' line='2990' column='1'/>
+        <parameter type-id='b50a4934' name='want_excl' filepath='fs/namei.c' line='2990' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_create' mangled-name='vfs_create' filepath='fs/namei.c' line='3010' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_create'>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='3010' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='3010' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/namei.c' line='3010' column='1'/>
+        <parameter type-id='b50a4934' name='want_excl' filepath='fs/namei.c' line='3011' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_mkdir2' mangled-name='vfs_mkdir2' filepath='fs/namei.c' line='3915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_mkdir2'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='3915' column='1'/>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='3915' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='3915' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/namei.c' line='3915' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_mkdir' mangled-name='vfs_mkdir' filepath='fs/namei.c' line='3941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_mkdir'>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='3941' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='3941' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/namei.c' line='3941' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_rmdir2' mangled-name='vfs_rmdir2' filepath='fs/namei.c' line='3982' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_rmdir2'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='3982' column='1'/>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='3982' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='3982' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='d_delete' mangled-name='d_delete' filepath='include/linux/dcache.h' line='241' 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>
+      <function-decl name='vfs_rmdir' mangled-name='vfs_rmdir' filepath='fs/namei.c' line='4022' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_rmdir'>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='4022' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='4022' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_unlink2' mangled-name='vfs_unlink2' filepath='fs/namei.c' line='4110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_unlink2'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='4110' column='1'/>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='4110' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='4110' column='1'/>
+        <parameter type-id='8f39c6fc' name='delegated_inode' filepath='fs/namei.c' line='4110' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_unlink' mangled-name='vfs_unlink' filepath='fs/namei.c' line='4151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_unlink'>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='4151' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='4151' column='1'/>
+        <parameter type-id='8f39c6fc' name='delegated_inode' filepath='fs/namei.c' line='4151' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_link' mangled-name='vfs_link' filepath='fs/namei.c' line='4399' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_link'>
+        <parameter type-id='27675065' name='old_dentry' filepath='fs/namei.c' line='4399' column='1'/>
+        <parameter type-id='7e666abe' name='dir' filepath='fs/namei.c' line='4399' column='1'/>
+        <parameter type-id='27675065' name='new_dentry' filepath='fs/namei.c' line='4399' column='1'/>
+        <parameter type-id='8f39c6fc' name='delegated_inode' filepath='fs/namei.c' line='4399' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_rename2' mangled-name='vfs_rename2' filepath='fs/namei.c' line='4540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_rename2'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namei.c' line='4540' column='1'/>
+        <parameter type-id='7e666abe' name='old_dir' filepath='fs/namei.c' line='4541' column='1'/>
+        <parameter type-id='27675065' name='old_dentry' filepath='fs/namei.c' line='4541' column='1'/>
+        <parameter type-id='7e666abe' name='new_dir' filepath='fs/namei.c' line='4542' column='1'/>
+        <parameter type-id='27675065' name='new_dentry' filepath='fs/namei.c' line='4542' column='1'/>
+        <parameter type-id='8f39c6fc' name='delegated_inode' filepath='fs/namei.c' line='4543' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/namei.c' line='4543' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_rename' mangled-name='vfs_rename' filepath='fs/namei.c' line='4666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_rename'>
+        <parameter type-id='7e666abe' name='old_dir' filepath='fs/namei.c' line='4666' column='1'/>
+        <parameter type-id='27675065' name='old_dentry' filepath='fs/namei.c' line='4666' column='1'/>
+        <parameter type-id='7e666abe' name='new_dir' filepath='fs/namei.c' line='4667' column='1'/>
+        <parameter type-id='27675065' name='new_dentry' filepath='fs/namei.c' line='4667' column='1'/>
+        <parameter type-id='8f39c6fc' name='delegated_inode' filepath='fs/namei.c' line='4668' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/namei.c' line='4668' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='page_get_link' mangled-name='page_get_link' filepath='fs/namei.c' line='4930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_get_link'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='4930' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/namei.c' line='4930' column='1'/>
+        <parameter type-id='26cad514' name='callback' filepath='fs/namei.c' line='4931' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/namespace.c' language='LANG_C89'>
+      <var-decl name='fs_kobj' type-id='d30bdc51' mangled-name='fs_kobj' visibility='default' filepath='fs/namespace.c' line='77' column='1' elf-symbol-id='fs_kobj'/>
+      <function-decl name='kern_unmount' mangled-name='kern_unmount' filepath='fs/namespace.c' line='3833' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_unmount'>
+        <parameter type-id='549da824' name='mnt' filepath='fs/namespace.c' line='3833' 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>
+    </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'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1' id='ac5ab5b0'>
+        <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='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='dc5fa7f0'/>
+      <pointer-type-def type-id='dc5fa7f0' size-in-bits='64' id='c66f5ec5'/>
+      <function-decl name='notify_change2' mangled-name='notify_change2' filepath='include/linux/fs.h' line='2965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='notify_change2'>
+        <parameter type-id='549da824'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <parameter type-id='8f39c6fc'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='set_fs_pwd' mangled-name='set_fs_pwd' filepath='include/linux/fs_struct.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_fs_pwd'>
+        <parameter type-id='08890291'/>
+        <parameter type-id='a77efac3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='filp_open' mangled-name='filp_open' filepath='fs/open.c' line='1067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filp_open'>
+        <parameter type-id='80f4b756' name='filename' filepath='fs/open.c' line='1067' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/open.c' line='1067' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/open.c' line='1067' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='nonseekable_open' mangled-name='nonseekable_open' filepath='fs/open.c' line='1248' 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='1248' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1248' 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='bd54fe1a' size-in-bits='256' id='5d4602e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </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>
+      <class-decl name='match_token' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/parser.h' line='14' column='1' id='4fb0e160'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='95e97e5e' visibility='default' filepath='include/linux/parser.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='80f4b756' visibility='default' filepath='include/linux/parser.h' line='16' 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/parser.h' line='25' column='1' id='e7f43f8a'>
+        <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>
+      <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='ac5ab5b1' 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='ac5ab5b1'>
+        <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__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f3cbec7d'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' 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='f2cbeae7' 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='f2cbeae7'>
+        <data-member access='private'>
+          <var-decl name='i32' type-id='687f9689' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udf' type-id='657f91c8' 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='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='115' column='1' id='687f9689'>
+        <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__2' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='121' column='1' id='657f91c8'>
+        <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>
+      <typedef-decl name='__kernel_fsid_t' type-id='39d018c6' filepath='include/uapi/asm-generic/posix_types.h' line='81' column='1' id='ac895711'/>
+      <class-decl name='__anonymous_struct__3' 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='39d018c6'>
+        <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='e7f43f8a' size-in-bits='64' id='8567d8b0'/>
+      <pointer-type-def type-id='3f1a6b60' size-in-bits='64' id='cd1b45ab'/>
+      <qualified-type-def type-id='e7f43f8a' const='yes' id='a585bdd7'/>
+      <pointer-type-def type-id='a585bdd7' size-in-bits='64' id='8e8a1547'/>
+      <qualified-type-def type-id='4fb0e160' const='yes' id='ff7ec25b'/>
+      <pointer-type-def type-id='ff7ec25b' size-in-bits='64' id='a58c17e3'/>
+      <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='7e666abe' size-in-bits='64' id='8f39c6fc'/>
+      <pointer-type-def type-id='e2da4ade' size-in-bits='64' id='d5f76b20'/>
+      <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'/>
+      <pointer-type-def type-id='637cfeaf' size-in-bits='64' id='74c91557'/>
+      <pointer-type-def type-id='916c4095' size-in-bits='64' id='439be051'/>
+      <function-decl name='rcu_barrier' mangled-name='rcu_barrier' filepath='include/linux/rcutree.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rcu_barrier'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='prepare_creds' mangled-name='prepare_creds' filepath='include/linux/cred.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_creds'>
+        <return type-id='10cfb911'/>
+      </function-decl>
+      <function-decl name='match_token' mangled-name='match_token' filepath='include/linux/parser.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_token'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='a58c17e3'/>
+        <parameter type-id='8567d8b0'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='match_strdup' mangled-name='match_strdup' filepath='include/linux/parser.h' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_strdup'>
+        <parameter type-id='8e8a1547'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='path_put' mangled-name='path_put' filepath='include/linux/path.h' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='path_put'>
+        <parameter type-id='a77efac3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vfs_statfs' mangled-name='vfs_statfs' filepath='include/linux/fs.h' line='2407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_statfs'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='087d687b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_anon_bdev' mangled-name='get_anon_bdev' filepath='include/linux/fs.h' line='2368' 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='lock_rename' mangled-name='lock_rename' filepath='include/linux/namei.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lock_rename'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='unlock_rename' mangled-name='unlock_rename' filepath='include/linux/namei.h' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_rename'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vfs_setxattr' mangled-name='vfs_setxattr' filepath='include/linux/xattr.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_setxattr'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='d_make_root' mangled-name='d_make_root' filepath='include/linux/dcache.h' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_make_root'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='notify_change' mangled-name='notify_change' filepath='include/linux/fs.h' line='2964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='notify_change'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <parameter type-id='8f39c6fc'/>
+        <return type-id='95e97e5e'/>
+      </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='dget_parent' mangled-name='dget_parent' filepath='include/linux/dcache.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dget_parent'>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='posix_acl_from_xattr' mangled-name='posix_acl_from_xattr' filepath='include/linux/posix_acl_xattr.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='posix_acl_from_xattr'>
+        <parameter type-id='c0ced320'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='2871909b'/>
+      </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='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='9a93b9b9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='d_invalidate' mangled-name='d_invalidate' filepath='include/linux/dcache.h' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_invalidate'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sync_filesystem' mangled-name='sync_filesystem' filepath='include/linux/fs.h' line='2712' 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-decl name='inode_init_once' mangled-name='inode_init_once' filepath='include/linux/fs.h' line='3113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_init_once'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </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='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='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>
+      <function-type size-in-bits='64' id='916c4095'>
+        <parameter type-id='27675065'/>
+        <return type-id='b50a4934'/>
+      </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/posix_acl.c' language='LANG_C89'>
+      <var-decl name='posix_acl_access_xattr_handler' type-id='e4f938dc' mangled-name='posix_acl_access_xattr_handler' visibility='default' filepath='fs/posix_acl.c' line='904' column='1' elf-symbol-id='posix_acl_access_xattr_handler'/>
+      <var-decl name='posix_acl_default_xattr_handler' type-id='e4f938dc' mangled-name='posix_acl_default_xattr_handler' visibility='default' filepath='fs/posix_acl.c' line='913' column='1' elf-symbol-id='posix_acl_default_xattr_handler'/>
+    </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>
+    </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'/>
+      <union-decl name='__anonymous_union__3' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='f8cbf45d'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='1ca43828'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='f3cbec7e' 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='f2cbeae8' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='2f844f5b'>
+            <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='f5cbef9f' 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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='308450ee'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f78' visibility='default' filepath='include/linux/mm_types.h' line='80' 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='e7f43f78'>
+        <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>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f3cbec7e'>
+        <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='687f967c' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='687f967c'>
+        <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>
+      <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='38' 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>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='f5cbef9f'>
+        <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__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='f2cbeae8'>
+        <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='3de1074c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-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='ac5ab5b2'>
+        <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='462' 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='462' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='462' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='463' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='463' 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>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='f6cbf13b'>
+        <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>
+      <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='2238' 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='2237' 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='194' 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='194' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/proc_net.c' line='194' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/proc_net.c' line='195' column='1'/>
+        <parameter type-id='0131eb61' name='show' filepath='fs/proc/proc_net.c' line='196' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/proc_net.c' line='196' 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='6406df84'/>
+        <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='136' 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' is-declaration-only='yes' id='54cc740b'/>
+      <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='ac5ab5b3' 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='6406df84'/>
+        <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='ac5ab5b3'>
+        <data-member access='private'>
+          <var-decl name='pointer' type-id='f6cbf13c' visibility='default' filepath='include/linux/property.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='f9cbf5f1' 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='f6cbf13c'>
+        <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='f9cbf5f1'>
+        <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='6661a699' 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='151' 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'>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='f6cbf13d'>
+        <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='15d29710' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1132' column='1' id='f3cbec7f'>
+        <data-member access='private'>
+          <var-decl name='nfs_fl' type-id='17bacae5' visibility='default' filepath='include/linux/fs.h' line='1133' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nfs4_fl' type-id='b811a3f5' visibility='default' filepath='include/linux/fs.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='afs' type-id='3ce105b9' visibility='default' filepath='include/linux/fs.h' line='1139' column='1'/>
+        </data-member>
+      </union-decl>
+      <var-decl name='generic_ro_fops' type-id='b8ae588d' mangled-name='generic_ro_fops' visibility='default' filepath='fs/read_write.c' line='28' column='1' elf-symbol-id='generic_ro_fops'/>
+      <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>
+      <function-decl name='vfs_read' mangled-name='vfs_read' filepath='fs/read_write.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='446' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/read_write.c' line='446' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/read_write.c' line='446' column='1'/>
+        <parameter type-id='b53e8dbb' name='pos' filepath='fs/read_write.c' line='446' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='vfs_write' mangled-name='vfs_write' filepath='fs/read_write.c' line='544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_write'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='544' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='fs/read_write.c' line='544' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/read_write.c' line='544' column='1'/>
+        <parameter type-id='b53e8dbb' name='pos' filepath='fs/read_write.c' line='544' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/readdir.c' language='LANG_C89'>
+      <function-decl name='iterate_dir' mangled-name='iterate_dir' filepath='fs/readdir.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iterate_dir'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/readdir.c' line='40' column='1'/>
+        <parameter type-id='b80a6036' name='ctx' filepath='fs/readdir.c' line='40' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='ac5ab5b4' 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='ac5ab5b4'>
+        <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/stack.c' language='LANG_C89'>
+      <function-decl name='fsstack_copy_inode_size' mangled-name='fsstack_copy_inode_size' filepath='fs/stack.c' line='11' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsstack_copy_inode_size'>
+        <parameter type-id='7e666abe' name='dst' filepath='fs/stack.c' line='11' column='1'/>
+        <parameter type-id='7e666abe' name='src' filepath='fs/stack.c' line='11' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fsstack_copy_attr_all' mangled-name='fsstack_copy_attr_all' filepath='fs/stack.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsstack_copy_attr_all'>
+        <parameter type-id='7e666abe' name='dest' filepath='fs/stack.c' line='63' column='1'/>
+        <parameter type-id='c5a4eb7f' name='src' filepath='fs/stack.c' line='63' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/stat.c' language='LANG_C89'>
+      <function-decl name='vfs_getattr' mangled-name='vfs_getattr' filepath='fs/stat.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_getattr'>
+        <parameter type-id='a77efac3' name='path' filepath='fs/stat.c' line='110' column='1'/>
+        <parameter type-id='0e87f9be' name='stat' filepath='fs/stat.c' line='110' column='1'/>
+        <parameter type-id='19c2251e' name='request_mask' filepath='fs/stat.c' line='111' column='1'/>
+        <parameter type-id='f0981eeb' name='query_flags' filepath='fs/stat.c' line='111' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/super.c' language='LANG_C89'>
+      <union-decl name='fscrypt_context' visibility='default' is-declaration-only='yes' id='1c949861'/>
+      <enum-decl name='vfs_get_super_keying' filepath='include/linux/fs_context.h' line='141' column='1' id='3bb460da'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='vfs_get_single_super' value='0'/>
+        <enumerator name='vfs_get_single_reconf_super' value='1'/>
+        <enumerator name='vfs_get_keyed_super' value='2'/>
+        <enumerator name='vfs_get_independent_super' value='3'/>
+      </enum-decl>
+      <qualified-type-def type-id='1c949861' const='yes' id='477c7881'/>
+      <pointer-type-def type-id='477c7881' size-in-bits='64' id='33f1f531'/>
+      <pointer-type-def type-id='e3a9597f' size-in-bits='64' id='e5cc228b'/>
+      <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='3f13f9bc' size-in-bits='64' id='088c2f26'/>
+      <pointer-type-def type-id='e7d2a5fd' 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='generic_shutdown_super' mangled-name='generic_shutdown_super' filepath='fs/super.c' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_shutdown_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='442' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sget_fc' mangled-name='sget_fc' filepath='fs/super.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sget_fc'>
+        <parameter type-id='5760dcb1' name='fc' filepath='fs/super.c' line='511' column='1'/>
+        <parameter type-id='30341fa1' name='test' filepath='fs/super.c' line='512' column='1'/>
+        <parameter type-id='30341fa1' name='set' filepath='fs/super.c' line='513' column='1'/>
+        <return type-id='42c8f564'/>
+      </function-decl>
+      <function-decl name='sget' mangled-name='sget' filepath='fs/super.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sget'>
+        <parameter type-id='21e53d44' name='type' filepath='fs/super.c' line='576' column='1'/>
+        <parameter type-id='088c2f26' name='test' filepath='fs/super.c' line='577' column='1'/>
+        <parameter type-id='088c2f26' name='set' filepath='fs/super.c' line='578' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/super.c' line='579' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/super.c' line='580' column='1'/>
+        <return type-id='42c8f564'/>
+      </function-decl>
+      <function-decl name='bdev_read_only' mangled-name='bdev_read_only' filepath='include/linux/fs.h' line='3180' 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='shrink_dcache_sb' mangled-name='shrink_dcache_sb' filepath='include/linux/dcache.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shrink_dcache_sb'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='invalidate_bdev' mangled-name='invalidate_bdev' filepath='include/linux/fs.h' line='2666' 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='set_anon_super' mangled-name='set_anon_super' filepath='fs/super.c' line='1099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_anon_super'>
+        <parameter type-id='42c8f564' name='s' filepath='fs/super.c' line='1099' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/super.c' line='1099' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='vfs_get_super' mangled-name='vfs_get_super' filepath='fs/super.c' line='1162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_get_super'>
+        <parameter type-id='5760dcb1' name='fc' filepath='fs/super.c' line='1162' column='1'/>
+        <parameter type-id='3bb460da' name='keying' filepath='fs/super.c' line='1163' column='1'/>
+        <parameter type-id='30341fa1' name='fill_super' filepath='fs/super.c' line='1164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='2720' 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='sb_set_blocksize' mangled-name='sb_set_blocksize' filepath='include/linux/fs.h' line='3183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb_set_blocksize'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kill_block_super' mangled-name='kill_block_super' filepath='fs/super.c' line='1438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_block_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1438' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sync_blockdev' mangled-name='sync_blockdev' filepath='include/linux/fs.h' line='2668' 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='e3a9597f'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='33f1f531'/>
+      </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='3f13f9bc'>
+        <parameter type-id='42c8f564'/>
+        <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='209' 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='209' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/sync.c' line='209' 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='fs/xattr.c' language='LANG_C89'>
+      <function-decl name='vfs_getxattr' mangled-name='vfs_getxattr' filepath='fs/xattr.c' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_getxattr'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/xattr.c' line='377' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/xattr.c' line='377' column='1'/>
+        <parameter type-id='eaa32e2f' name='value' filepath='fs/xattr.c' line='377' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='fs/xattr.c' line='377' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='vfs_listxattr' mangled-name='vfs_listxattr' filepath='fs/xattr.c' line='384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_listxattr'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/xattr.c' line='384' column='1'/>
+        <parameter type-id='26a90f95' name='list' filepath='fs/xattr.c' line='384' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='fs/xattr.c' line='384' column='1'/>
+        <return type-id='79a0948f'/>
+      </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='57' 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' is-declaration-only='yes' id='a3119fea'/>
+      <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'/>
+      <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+      <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+      <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='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'/>
+      <typedef-decl name='umode_t' type-id='8efea9e5' filepath='include/linux/types.h' line='19' column='1' id='2594b00f'/>
+      <typedef-decl name='uint32_t' type-id='19c2251e' filepath='include/linux/types.h' line='109' column='1' id='8f92235e'/>
+      <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'/>
+      <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'/>
+      <typedef-decl name='kuid_t' type-id='481a8ccb' filepath='include/linux/uidgid.h' line='23' column='1' id='d80b72e6'/>
+      <class-decl name='__anonymous_struct__' 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='481a8ccb'>
+        <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='9a93b9b9' filepath='include/linux/uidgid.h' line='28' column='1' id='094d8048'/>
+      <class-decl name='__anonymous_struct__1' 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='9a93b9b9'>
+        <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'/>
+      <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'/>
+      <typedef-decl name='__s64' type-id='1eb56b1e' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='49659421'/>
+      <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/>
+      <pointer-type-def type-id='a3119fea' size-in-bits='64' id='f3b4aca8'/>
+      <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/>
+      <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='vfs_statx' mangled-name='vfs_statx' filepath='include/linux/fs.h' line='3335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_statx'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0e87f9be'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </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' is-struct='yes' visibility='default' is-declaration-only='yes' id='10143522'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='ffcbff5c'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' 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='223' 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='121' 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='161' 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>
+      <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>
+    </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'/>
+    </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='d_path' mangled-name='d_path' filepath='include/linux/dcache.h' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_path'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/auditsc.c' language='LANG_C89'>
+      <function-decl name='path_get' mangled-name='path_get' filepath='include/linux/path.h' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='path_get'>
+        <parameter type-id='a77efac3'/>
+        <return type-id='48b5725f'/>
+      </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='2117' 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='2701' 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/inode.c' language='LANG_C89'>
+      <function-decl name='touch_atime' mangled-name='touch_atime' filepath='include/linux/fs.h' line='2286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='touch_atime'>
+        <parameter type-id='a77efac3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inode_init_owner' mangled-name='inode_init_owner' filepath='include/linux/fs.h' line='1797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_init_owner'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='c5a4eb7f'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='48b5725f'/>
+      </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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/stackmap.c' language='LANG_C89'>
+      <function-decl name='pagecache_get_page' mangled-name='pagecache_get_page' filepath='include/linux/pagemap.h' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pagecache_get_page'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='02f11ed4'/>
+      </function-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='286' 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='286' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='kernel/cfi.c' line='286' column='1'/>
+        <parameter type-id='eaa32e2f' name='diag' filepath='kernel/cfi.c' line='286' 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'>
+      <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'>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f3cbec80'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='a00c90ab'>
+        <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>
+      <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='6406df84'/>
+        <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>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs_context.h' line='67' column='1' id='970c827d'>
+        <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='fs_parse_result' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='73' column='1' id='9c08a09a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='negated' type-id='b50a4934' visibility='default' filepath='include/linux/fs_parser.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='has_value' type-id='b50a4934' visibility='default' filepath='include/linux/fs_parser.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='980c8411' visibility='default' filepath='include/linux/fs_parser.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs_parser.h' line='76' column='1' id='980c8411'>
+        <data-member access='private'>
+          <var-decl name='boolean' type-id='b50a4934' visibility='default' filepath='include/linux/fs_parser.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='int_32' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_parser.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uint_32' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_parser.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uint_64' type-id='91ce1af9' visibility='default' filepath='include/linux/fs_parser.h' line='80' column='1'/>
+        </data-member>
+      </union-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'/>
+      <pointer-type-def type-id='9c08a09a' size-in-bits='64' id='59cc1ae8'/>
+      <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='deactivate_locked_super' mangled-name='deactivate_locked_super' filepath='include/linux/fs.h' line='2365' 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='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>
+      <function-decl name='fs_parse' mangled-name='fs_parse' filepath='include/linux/fs_parser.h' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fs_parse'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='a2fb6348'/>
+        <parameter type-id='75615bf0'/>
+        <parameter type-id='59cc1ae8'/>
+        <return type-id='95e97e5e'/>
+      </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='55' 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='49' 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='3428' 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='6406df84'/>
+        <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='2306' 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='2317' 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='2324' 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='2328' 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='2331' 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='2334' 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='2337' 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='63' 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='1070' 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='1070' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpu_up' mangled-name='cpu_up' filepath='kernel/cpu.c' line='1222' 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='1222' 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='1742' 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='1742' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1742' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1743' 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='1771' 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='1771' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1772' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1772' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1773' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1774' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1775' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_setup_state' mangled-name='__cpuhp_setup_state' filepath='kernel/cpu.c' line='1830' 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='1830' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1831' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1831' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1832' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1833' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1834' 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='1846' 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='1846' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1847' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1847' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_remove_state' mangled-name='__cpuhp_remove_state' filepath='kernel/cpu.c' line='1932' 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='1932' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1932' 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>
+      <function-decl name='override_creds' mangled-name='override_creds' filepath='kernel/cred.c' line='541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='override_creds'>
+        <parameter type-id='bc33861a' name='new' filepath='kernel/cred.c' line='541' column='1'/>
+        <return type-id='bc33861a'/>
+      </function-decl>
+      <function-decl name='revert_creds' mangled-name='revert_creds' filepath='kernel/cred.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='revert_creds'>
+        <parameter type-id='bc33861a' name='old' filepath='kernel/cred.c' line='582' 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'/>
+      <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='2565' 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='39fa4936'/>
+        <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='778' 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='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>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='f2cbeae9'>
+        <data-member access='private'>
+          <var-decl name='' type-id='c1d50b25' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+      </union-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='6406df84'/>
+        <enumerator name='UPROBE_FILTER_REGISTER' value='0'/>
+        <enumerator name='UPROBE_FILTER_UNREGISTER' value='1'/>
+        <enumerator name='UPROBE_FILTER_MMAP' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='fecbfdc8'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-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='9f0c8f18' 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='9f0c8f18'>
+        <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='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='1543' 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='1669' 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>
+      <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>
+    </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='864' 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='864' column='1'/>
+        <parameter type-id='bd54fe1a' name='code' filepath='kernel/exit.c' line='864' 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'>
+      <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='7dc87303'>
+        <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>
+      <pointer-type-def type-id='7dc87303' size-in-bits='64' id='08890291'/>
+      <function-decl name='__mmdrop' mangled-name='__mmdrop' filepath='kernel/fork.c' line='690' 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='690' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__put_task_struct' mangled-name='__put_task_struct' filepath='kernel/fork.c' line='739' 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='739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmput' mangled-name='mmput' filepath='kernel/fork.c' line='1106' 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='1106' 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='1188' 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='1188' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='get_task_mm' mangled-name='get_task_mm' filepath='kernel/fork.c' line='1213' 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='1213' 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='copy_fs_struct' mangled-name='copy_fs_struct' filepath='include/linux/fs_struct.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='copy_fs_struct'>
+        <parameter type-id='08890291'/>
+        <return type-id='08890291'/>
+      </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='267284e7'/>
+        <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='267284e7'/>
+        <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>
+      <function-decl name='free_fs_struct' mangled-name='free_fs_struct' filepath='include/linux/fs_struct.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_fs_struct'>
+        <parameter type-id='08890291'/>
+        <return type-id='48b5725f'/>
+      </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='1555' 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='462' 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='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_create_mapping' mangled-name='irq_create_mapping' filepath='kernel/irq/irqdomain.c' line='651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_mapping'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='651' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq' filepath='kernel/irq/irqdomain.c' line='652' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_create_of_mapping' mangled-name='irq_create_of_mapping' filepath='kernel/irq/irqdomain.c' line='853' 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='853' 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='928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onecell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='928' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='928' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='929' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='929' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='930' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='930' 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='947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_twocell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='947' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='947' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='948' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='948' column='1'/>
+        <parameter type-id='ebc26324' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='949' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='949' 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='969' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onetwocell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='969' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='970' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='971' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='971' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='972' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='972' 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='1050' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_create_hierarchy'>
+        <parameter type-id='7544e824' name='parent' filepath='kernel/irq/irqdomain.c' line='1050' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/irq/irqdomain.c' line='1051' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='kernel/irq/irqdomain.c' line='1052' column='1'/>
+        <parameter type-id='4a935625' name='fwnode' filepath='kernel/irq/irqdomain.c' line='1053' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='1054' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='1055' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_domain_free_irqs_common' mangled-name='irq_domain_free_irqs_common' filepath='kernel/irq/irqdomain.c' line='1252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_common'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1252' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1252' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1253' 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='1599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_parent'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1599' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1600' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1600' 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='1579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_alloc_irqs_parent'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1579' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1580' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1580' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='kernel/irq/irqdomain.c' line='1581' 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='54' 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='430' 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='430' column='1'/>
+        <parameter type-id='7359adad' name='address' filepath='kernel/kallsyms.c' line='430' 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'/>
+      <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>
+    </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>
+      <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'/>
+      <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='1643' 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='619' 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='619' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/kthread.c' line='620' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/kthread.c' line='621' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_worker_fn' mangled-name='kthread_worker_fn' filepath='kernel/kthread.c' line='646' 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='646' 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='739' 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='739' column='1'/>
+        <parameter type-id='80f4b756' name='namefmt' filepath='kernel/kthread.c' line='739' 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='831' 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='831' column='1'/>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='832' 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='855' 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='855' 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='926' 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='926' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='927' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='928' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_flush_work' mangled-name='kthread_flush_work' filepath='kernel/kthread.c' line='964' 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='964' 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='1063' 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='1063' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='1064' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='1065' 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='1143' 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='1143' 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='1158' 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='1158' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_flush_worker' mangled-name='kthread_flush_worker' filepath='kernel/kthread.c' line='1171' 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='1171' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_destroy_worker' mangled-name='kthread_destroy_worker' filepath='kernel/kthread.c' line='1191' 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='1191' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </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='6406df84'/>
+        <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='1617' 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='1617' 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' mangled-name='down' filepath='kernel/locking/semaphore.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='53' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='1509' 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='1510' 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='1511' 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='1114' 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='1114' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='module_layout' mangled-name='module_layout' filepath='kernel/module.c' line='4595' 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='4595' column='1'/>
+        <parameter type-id='3a498c74' name='ver' filepath='kernel/module.c' line='4596' column='1'/>
+        <parameter type-id='a7c6e908' name='kp' filepath='kernel/module.c' line='4597' column='1'/>
+        <parameter type-id='eefd7061' name='ks' filepath='kernel/module.c' line='4598' column='1'/>
+        <parameter type-id='e525e121' name='tp' filepath='kernel/module.c' line='4599' 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='525' 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='525' 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='349' 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='349' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='350' 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='366' 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='366' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='367' 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='392' 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='392' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='393' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='393' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_to_call' filepath='kernel/notifier.c' line='394' column='1'/>
+        <parameter type-id='7292109c' name='nr_calls' filepath='kernel/notifier.c' line='394' 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='400' 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='400' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='401' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='401' 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='423' 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='423' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='424' 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='453' 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='453' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='454' 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='506' 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='506' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='507' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='507' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_die_notifier' mangled-name='register_die_notifier' filepath='kernel/notifier.c' line='555' 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='555' 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'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='ac5ab5b5'>
+        <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>
+      <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='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='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='425' 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='425' column='1'/>
+        <parameter type-id='ce78cf46' name='type' filepath='kernel/pid.c' line='425' column='1'/>
+        <parameter type-id='b816e1d0' name='ns' filepath='kernel/pid.c' line='426' 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='2248' 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='2333' 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='2347' 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='2629' 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='2629' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_console' mangled-name='unregister_console' filepath='kernel/printk/printk.c' line='2842' 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='2842' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__printk_ratelimit' mangled-name='__printk_ratelimit' filepath='kernel/printk/printk.c' line='3049' 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='3049' 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='3064' 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='3064' column='1'/>
+        <parameter type-id='f0981eeb' name='interval_msecs' filepath='kernel/printk/printk.c' line='3065' 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='327' 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>
+      <function-decl name='int_sqrt' mangled-name='int_sqrt' filepath='include/linux/kernel.h' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='int_sqrt'>
+        <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='6406df84'/>
+        <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>
+    </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='3544' 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='1718' 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='1718' column='1'/>
+        <parameter type-id='5f8a1ac4' name='new_mask' filepath='kernel/sched/core.c' line='1718' 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='4367' 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='4367' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/core.c' line='4367' column='1'/>
+        <parameter type-id='95e97e5e' name='wake_flags' filepath='kernel/sched/core.c' line='4367' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/core.c' line='4368' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler' mangled-name='sched_setscheduler' filepath='kernel/sched/core.c' line='5072' 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='5072' column='1'/>
+        <parameter type-id='95e97e5e' name='policy' filepath='kernel/sched/core.c' line='5072' column='1'/>
+        <parameter type-id='36fca399' name='param' filepath='kernel/sched/core.c' line='5073' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setattr' mangled-name='sched_setattr' filepath='kernel/sched/core.c' line='5079' 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='5079' column='1'/>
+        <parameter type-id='8abbb6c3' name='attr' filepath='kernel/sched/core.c' line='5079' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='io_schedule' mangled-name='io_schedule' filepath='kernel/sched/core.c' line='5806' 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='5941' 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='5941' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_print_flags_seq' mangled-name='trace_print_flags_seq' filepath='include/linux/trace_events.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_flags_seq'>
+        <parameter type-id='fc932690'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='49526a0d'/>
+        <return type-id='80f4b756'/>
+      </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_schedutil.c' language='LANG_C89'>
+      <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>
+    </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>
+    </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='288' id='7e5ede41'>
+        <subrange length='36' type-id='7ff19f0f' id='ae666bde'/>
+      </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='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='cacf0f57'/>
+      <class-decl name='bio_crypt_ctx' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='b545ce08'/>
+      <class-decl name='blk_flush_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='1d120222'/>
+      <class-decl name='blk_keyslot_manager' size-in-bits='1472' is-struct='yes' visibility='default' is-declaration-only='yes' id='13fcfe64'/>
+      <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='cde99b3a'/>
+      <class-decl name='blk_mq_debugfs_attr' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='d53ee986'/>
+      <class-decl name='blk_mq_hw_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='e0630290'/>
+      <class-decl name='blk_mq_ops' size-in-bits='1024' is-struct='yes' visibility='default' is-declaration-only='yes' id='b785b938'/>
+      <class-decl name='blk_mq_tag_set' is-struct='yes' visibility='default' is-declaration-only='yes' id='651086d8'/>
+      <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' is-declaration-only='yes' id='be8f4983'/>
+      <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='facd5339'/>
+      <class-decl name='bucket_table' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='984972f4'/>
+      <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' is-declaration-only='yes' id='6110442c'/>
+      <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='038d05be'/>
+      <class-decl name='device_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='d066d158'/>
+      <class-decl name='disk_events' is-struct='yes' visibility='default' is-declaration-only='yes' id='ec1aac50'/>
+      <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='e44b8084'/>
+      <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' is-declaration-only='yes' id='5ff1273a'/>
+      <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='faaac7a6'/>
+      <class-decl name='fib6_table' size-in-bits='960' is-struct='yes' visibility='default' is-declaration-only='yes' id='7147e7ff'/>
+      <class-decl name='fib_notifier_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='ef45f063'/>
+      <class-decl name='fib_rules_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='e079fe2a'/>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='a2b406b5'/>
+      <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' is-declaration-only='yes' id='3482ac54'/>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='27ebfa24'/>
+      <class-decl name='iommu_fwspec' is-struct='yes' visibility='default' is-declaration-only='yes' id='0d6f8400'/>
+      <class-decl name='iommu_group' size-in-bits='2048' is-struct='yes' visibility='default' is-declaration-only='yes' id='2352f3ae'/>
+      <class-decl name='iommu_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='8b7a2cd2'/>
+      <class-decl name='iommu_param' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='6c784694'/>
+      <class-decl name='ip_ra_chain' is-struct='yes' visibility='default' is-declaration-only='yes' id='4816a147'/>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' is-declaration-only='yes' id='c2c09950'/>
+      <class-decl name='ipv6_devconf' size-in-bits='2048' is-struct='yes' visibility='default' is-declaration-only='yes' id='55e8af82'/>
+      <class-decl name='irq_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='a667f60f'/>
+      <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' is-declaration-only='yes' id='8e5f5512'/>
+      <class-decl name='nf_ct_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='a27aef61'/>
+      <class-decl name='nf_exp_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='602fd1a9'/>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='85c08b52'/>
+      <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' is-declaration-only='yes' id='b77325d2'/>
+      <class-decl name='pm_domain_data' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='3bf19710'/>
+      <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' is-declaration-only='yes' id='fe4ffa7a'/>
+      <class-decl name='prot_inuse' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac763c5d'/>
+      <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='e0a68feb'/>
+      <class-decl name='rt6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='384b6d85'/>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' is-declaration-only='yes' id='aa112583'/>
+      <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='4a19d21f'/>
+      <class-decl name='tcp_congestion_ops' size-in-bits='1216' 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' is-declaration-only='yes' id='f77d4717'/>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='f308a7ce'/>
+      <class-decl name='trace_array' is-struct='yes' visibility='default' is-declaration-only='yes' id='e27b4e90'/>
+      <class-decl name='trace_buffer' is-struct='yes' visibility='default' is-declaration-only='yes' id='72093c11'/>
+      <class-decl name='tracer' is-struct='yes' visibility='default' is-declaration-only='yes' id='fd1f8b7c'/>
+      <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' is-declaration-only='yes' id='4657336c'/>
+      <class-decl name='xt_table' size-in-bits='704' 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='002ac4a6' size-in-bits='32768' id='0622cd17'>
+        <subrange length='4096' type-id='7ff19f0f' id='bc1b5ddc'/>
+      </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='ac0aeb1e'>
+        <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='0e13f998' 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='ac0aeb1e' 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='0d3b0dd0' 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='7544e825' 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='fa43ef1e' 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='1979c578' 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='f1ac64d1' 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='5da77305' 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='52abf1d4' 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='f9cbf5f2' 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='6406df84'/>
+        <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>
+      <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='6406df84'/>
+        <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='0622cd17' 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='f8cbf45e' 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='f8cbf45e'>
+        <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='24064' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='863' 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='865' 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='871' 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='879' 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='880' 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='881' 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='883' 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='884' 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='887' 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='888' 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='892' 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='893' 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='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='rt' type-id='e648d771' visibility='default' filepath='kernel/sched/sched.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='dl' type-id='53d038df' visibility='default' filepath='kernel/sched/sched.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='nr_uninterruptible' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='curr' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='idle' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='stop' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='next_balance' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='prev_mm' type-id='df4b7819' visibility='default' filepath='kernel/sched/sched.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='clock_task' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='clock_pelt' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='lost_idle_time' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='nr_iowait' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19168'>
+          <var-decl name='membarrier_state' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='rd' type-id='c13bca88' visibility='default' filepath='kernel/sched/sched.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='sd' type-id='e9d32201' visibility='default' filepath='kernel/sched/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='cpu_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='cpu_capacity_orig' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='balance_callback' type-id='69c138b1' visibility='default' filepath='kernel/sched/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='idle_balance' type-id='002ac4a6' visibility='default' filepath='kernel/sched/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='misfit_task_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='active_balance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19680'>
+          <var-decl name='push_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='19712'>
+          <var-decl name='active_balance_work' type-id='8eb07132' visibility='default' filepath='kernel/sched/sched.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20064'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='cfs_tasks' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='avg_rt' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='avg_dl' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_irq' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='idle_stamp' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22080'>
+          <var-decl name='avg_idle' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='max_idle_balance_cost' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22208'>
+          <var-decl name='prev_irq_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22272'>
+          <var-decl name='prev_steal_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22336'>
+          <var-decl name='calc_load_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22400'>
+          <var-decl name='calc_load_active' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22464'>
+          <var-decl name='hrtick_csd_pending' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='hrtick_csd' type-id='223a68bd' visibility='default' filepath='kernel/sched/sched.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22784'>
+          <var-decl name='hrtick_timer' type-id='b6993efc' visibility='default' filepath='kernel/sched/sched.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23360'>
+          <var-decl name='rq_sched_info' type-id='59ddd03d' visibility='default' filepath='kernel/sched/sched.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23616'>
+          <var-decl name='rq_cpu_time' type-id='3a47d82b' visibility='default' filepath='kernel/sched/sched.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23680'>
+          <var-decl name='yld_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23712'>
+          <var-decl name='sched_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='23744'>
+          <var-decl name='sched_goidle' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23776'>
+          <var-decl name='ttwu_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='ttwu_local' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23872'>
+          <var-decl name='wake_list' type-id='77df194e' visibility='default' filepath='kernel/sched/sched.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23936'>
+          <var-decl name='idle_state' type-id='2e3e746d' visibility='default' filepath='kernel/sched/sched.h' line='1016' 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='850' 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='851' 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='852' 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='823' 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='824' 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='825' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfs_rq' size-in-bits='2048' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='498' 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='499' 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='500' 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='501' 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='502' 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='503' 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='505' 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='506' 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='511' 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='517' 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='518' 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='519' 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='520' 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='523' 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='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='removed' type-id='e7f43f8b' visibility='default' filepath='kernel/sched/sched.h' line='540' 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='534' column='1' id='e7f43f8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='535' 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='536' 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='537' 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='538' 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='539' 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='599' 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='600' 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='601' 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='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='highest_prio' type-id='687f968a' visibility='default' filepath='kernel/sched/sched.h' line='609' 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='612' 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='613' 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='614' 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='615' 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='618' 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='620' 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='621' 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='622' 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='624' 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='604' column='1' id='687f968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='605' 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='607' 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='640' 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='642' 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='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='657f91c9' visibility='default' filepath='kernel/sched/sched.h' line='656' 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='658' 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='659' 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='666' 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='675' 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='686' 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='687' 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='693' 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='653' column='1' id='657f91c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='654' 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='655' 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='667f9358'>
+        <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='352'>
+          <var-decl name='recursion_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='51' 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='52' 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='53' 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='54' 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='55' 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='56' 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='56' 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='57' 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='58' 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='61' 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='62' 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='63' 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='63' 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='65' 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='67' 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='f3cbec81' 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='f3cbec81'>
+        <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='6b7f9b34' 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='6b7f9b34'>
+        <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='f2cbeaea' 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='f2cbeaea'>
+        <data-member access='private'>
+          <var-decl name='' type-id='6c7f9cc8' 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='6c7f9cc8'>
+        <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='82' 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='83' 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='84' 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='85' 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='86' 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='87' 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='88' 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='89' 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='f4cbee0a' 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='f4cbee0a'>
+        <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='697f980e' 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='697f980e'>
+        <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='746' 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='747' 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='748' 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='749' 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='750' 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='751' 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='758' 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='761' 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='767' 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='768' 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='769' 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='770' 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='776' 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='777' 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='779' 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='780' 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='782' 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='783' 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='789' 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='790' 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='793' 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='799' 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='285' 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='286' 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='287' 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='288' 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='728' 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='729' 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='730' 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='731' 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='722' 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='723' 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='724' 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='725' 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='ffcbff5d' 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='1418' 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='1419' 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='1420' 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='1422' 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='1423' 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='1424' 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='1433' 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='1399' 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='1400' 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='1405' 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='1406' 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='1407' 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='1408' 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='1409' 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='1412' 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='1415' 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='ffcbff5d'>
+        <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='1142' 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='1143' 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='1144' 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='1151' 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='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='18752' 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='12480'>
+          <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='18560'>
+          <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='18592'>
+          <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='18720'>
+          <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='52608' 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='18880'>
+          <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='18912'>
+          <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='18944'>
+          <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='19072'>
+          <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='19136'>
+          <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='19328'>
+          <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='52096'>
+          <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='5440' 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_scheduled' type-id='49178f86' 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_kworker' type-id='c41f4539' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='poll_work' type-id='8fb867c9' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='trigger_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/psi_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='nr_triggers' type-id='586ea944' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='poll_states' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='poll_min_period' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='polling_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='polling_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='polling_until' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='164' 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='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='86' 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='87' 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='88' 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='89' 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='90' 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='91' 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='92' 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='95' 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='96' 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='97' 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='98' 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='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='2a5d0ea1' filepath='include/linux/kthread.h' line='79' 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='103' 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='104' 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='105' 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='337' column='1' id='68e4a3af'/>
+      <union-decl name='__anonymous_union__9' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='fecbfdc9'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='ccd999a4' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='cfd99e5d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='6a7f999f' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='6a7f999f'>
+        <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='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='00c4cbad' 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='a68064b2' 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='d0d57cc6' 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='d0d57cc6' 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='74f101b1' 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='74f101b1' 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='9f0c8f19' 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='9f0c8f19'>
+        <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='a00c90ac' 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='a00c90ac'>
+        <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='7ea1fd78' 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='7ea1fd78'>
+        <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='fe454a76' 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='6ceb7783' 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='6ceb7783' 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='6ceb7783' 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='a68064b2' 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='d0d57cc6' 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='74f101b1' 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='74f101b1' 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='707fa314' 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='707fa314'>
+        <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='1146dea4' 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='970c827e' 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='5760652d' 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='e204529b' 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='e204529b'>
+        <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='c3a28779' 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='9a335022' 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='3e195538' 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='1146dea4' 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='e118affa' 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='cc26d160' 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='9a335022' 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='a47d3468' 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='a10c923e' 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='a20c93d1' 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='9b0c88cd' 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='9e0c8d84' 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'/>
+      <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='c8d9935a'>
+        <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='cbd99811'>
+        <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='6406df84'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-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='6406df84'/>
+        <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='9467b854'>
+        <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='1146dea4' 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='1146dea4' 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='1146dea4' 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='6406df84'/>
+        <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='94' 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='95' 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='96' 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='97' 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='98' 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='99' 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='100' 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='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='7e5ede41' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='102' 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>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='c9812a89' 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='c9812a89'>
+        <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='1113fe50' 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='1013fcbd' 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='13140176' 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='1213ffe3' 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='1113fe50'>
+        <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='1013fcbd'>
+        <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='13140176'>
+        <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='1213ffe3'>
+        <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='0d13f804' 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='0d13f804'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1' id='7bed326f'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1' id='746649fa'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1' id='73664867'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1' id='726646d4'>
+            <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>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1' id='71664541'>
+            <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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='cdd99b39' visibility='default' filepath='include/linux/perf_event.h' line='125' 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='cdd99b39'>
+        <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='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='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='cfd99e60' 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='ced99ccd' 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='0c13f671' 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='0c13f671'>
+        <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='ccd999a7' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1' id='ccd999a7'>
+        <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__16' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='955' column='1' id='cfd99e60'>
+        <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__17' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='962' column='1' id='ced99ccd'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='7359adad' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='0f13fb2a' 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='6406df84'/>
+        <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='0f13fb2a'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6661a699'>
+        <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='d5ace206' 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='d5ace206'>
+        <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='5da77305' 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='6406df84'/>
+        <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__30' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='0b11b648'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='c0badb3c' size-in-bits='64' id='ef4fae1c'/>
+      <pointer-type-def type-id='cacf0f57' size-in-bits='64' id='5760652d'/>
+      <pointer-type-def type-id='ac0aeb1e' size-in-bits='64' id='f885ca7e'/>
+      <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='1d120222' size-in-bits='64' id='e118affa'/>
+      <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='cde99b3a' size-in-bits='64' id='9a335022'/>
+      <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='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='9467b854' size-in-bits='64' id='1146dea4'/>
+      <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='facd5339' 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='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='d5ace206' 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='8b7a2cd2' const='yes' id='9ce849db'/>
+      <pointer-type-def type-id='9ce849db' size-in-bits='64' id='f1ac64d1'/>
+      <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='038d05be' size-in-bits='64' id='fa43ef1e'/>
+      <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='6661a699' size-in-bits='64' id='9a537bbe'/>
+      <pointer-type-def type-id='d066d158' size-in-bits='64' id='0d3b0dd0'/>
+      <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='e44b8084' size-in-bits='64' id='52abf1d4'/>
+      <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='faaac7a6' size-in-bits='64' id='fe454a76'/>
+      <pointer-type-def type-id='7147e7ff' size-in-bits='64' id='7156b317'/>
+      <pointer-type-def type-id='ef45f063' size-in-bits='64' id='74f101b1'/>
+      <pointer-type-def type-id='e079fe2a' size-in-bits='64' id='a68064b2'/>
+      <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='d5ace206' 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='0d6f8400' size-in-bits='64' id='1979c578'/>
+      <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='4816a147' size-in-bits='64' id='00c4cbad'/>
+      <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='a667f60f' size-in-bits='64' id='7544e825'/>
+      <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='ac165296' size-in-bits='64' id='401eb95c'/>
+      <pointer-type-def type-id='62968721' size-in-bits='64' id='c41f4539'/>
+      <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='e0a68feb' size-in-bits='64' id='c3a28779'/>
+      <pointer-type-def type-id='384b6d85' size-in-bits='64' id='6ceb7783'/>
+      <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='2561fcb2' size-in-bits='64' id='ff2b3d10'/>
+      <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='d0d57cc6'/>
+      <pointer-type-def type-id='4a19d21f' size-in-bits='64' id='5da77305'/>
+      <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='38d1cb6d' size-in-bits='64' id='2a5d0ea1'/>
+      <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='31' 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='a47d3468'/>
+        <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='a47d3468'/>
+        <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='a47d3468'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da68c5d7'>
+        <parameter type-id='a47d3468'/>
+        <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='a47d3468'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='607834f2'>
+        <parameter type-id='a47d3468'/>
+        <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='a47d3468'/>
+        <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='38d1cb6d'>
+        <parameter type-id='401eb95c'/>
+        <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='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>
+      <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='9e0c8d84'>
+        <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__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='f9cbf5f2'>
+        <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>
+      <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='a10c923e'>
+        <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='a20c93d1'>
+        <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='9b0c88cd'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='c8d9935a' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='cbd99811' visibility='default' filepath='include/linux/blkdev.h' line='193' 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='0e13f998'>
+        <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>
+      <union-decl name='__anonymous_union__18' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='970c827e'/>
+    </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='__wake_up_locked' mangled-name='__wake_up_locked' filepath='kernel/sched/wait.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wake_up_locked'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='149' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='149' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='kernel/sched/wait.c' line='149' 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/sched/wait_bit.c' language='LANG_C89'>
+      <typedef-decl name='wait_bit_action_f' type-id='7f43b3fb' filepath='include/linux/wait_bit.h' line='24' column='1' id='d04e3bd9'/>
+      <class-decl name='wait_bit_key' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/wait_bit.h' line='10' column='1' id='2aa6fa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='eaa32e2f' visibility='default' filepath='include/linux/wait_bit.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/wait_bit.h' line='12' 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/wait_bit.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d04e3bd9' size-in-bits='64' id='50c74428'/>
+      <pointer-type-def type-id='2aa6fa74' size-in-bits='64' id='307d4a12'/>
+      <function-decl name='out_of_line_wait_on_bit_lock' mangled-name='out_of_line_wait_on_bit_lock' filepath='kernel/sched/wait_bit.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='out_of_line_wait_on_bit_lock'>
+        <parameter type-id='eaa32e2f' name='word' filepath='kernel/sched/wait_bit.c' line='111' column='1'/>
+        <parameter type-id='95e97e5e' name='bit' filepath='kernel/sched/wait_bit.c' line='111' column='1'/>
+        <parameter type-id='50c74428' name='action' filepath='kernel/sched/wait_bit.c' line='112' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait_bit.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bit_wait' mangled-name='bit_wait' filepath='kernel/sched/wait_bit.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bit_wait'>
+        <parameter type-id='307d4a12' name='word' filepath='kernel/sched/wait_bit.c' line='196' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='kernel/sched/wait_bit.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7f43b3fb'>
+        <parameter type-id='307d4a12'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/signal.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='ac5ab5b6'>
+        <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>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f2cbeaeb'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='f4cbee0b'>
+        <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>
+      <pointer-type-def type-id='daf33c64' size-in-bits='64' id='9e80f729'/>
+      <function-decl name='wake_up_bit' mangled-name='wake_up_bit' filepath='include/linux/wait_bit.h' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wake_up_bit'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_signals' mangled-name='flush_signals' filepath='kernel/signal.c' line='475' 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='475' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dequeue_signal' mangled-name='dequeue_signal' filepath='kernel/signal.c' line='628' 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='628' column='1'/>
+        <parameter type-id='9e80f729' name='mask' filepath='kernel/signal.c' line='628' column='1'/>
+        <parameter type-id='3638c201' name='info' filepath='kernel/signal.c' line='628' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kill_pid' mangled-name='kill_pid' filepath='kernel/signal.c' line='1796' 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='1796' column='1'/>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='1796' column='1'/>
+        <parameter type-id='95e97e5e' name='priv' filepath='kernel/signal.c' line='1796' 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='3935' 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='3935' column='1'/>
+        <parameter type-id='8cdd9566' name='action' filepath='kernel/signal.c' line='3935' 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>
+      <union-decl name='__anonymous_union__' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/netlink.h' line='195' column='1' id='ac5ab5b7'>
+        <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='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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <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='kernel/time/clockevents.c' language='LANG_C89'>
+      <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='2730d015' 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='6406df84'/>
+        <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>
+      <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='64588176' size-in-bits='64' id='7106dab8'/>
+      <pointer-type-def type-id='075176f9' size-in-bits='64' id='5858ec15'/>
+      <function-decl name='clockevents_config_and_register' mangled-name='clockevents_config_and_register' filepath='kernel/time/clockevents.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clockevents_config_and_register'>
+        <parameter type-id='aff725d5' name='dev' filepath='kernel/time/clockevents.c' line='505' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='kernel/time/clockevents.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='min_delta' filepath='kernel/time/clockevents.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='max_delta' filepath='kernel/time/clockevents.c' line='507' column='1'/>
+        <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='242d8ed5'>
+        <parameter type-id='7359adad'/>
+        <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>
+    </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>
+    </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='844' 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='844' 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='6406df84'/>
+        <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='get_device_system_crosststamp' mangled-name='get_device_system_crosststamp' filepath='kernel/time/timekeeping.c' line='1117' 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='1117' column='1'/>
+        <parameter type-id='eaa32e2f' name='ctx' filepath='kernel/time/timekeeping.c' line='1121' column='1'/>
+        <parameter type-id='9e33b18d' name='history_begin' filepath='kernel/time/timekeeping.c' line='1122' column='1'/>
+        <parameter type-id='587b4de3' name='xtstamp' filepath='kernel/time/timekeeping.c' line='1123' 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='1419' 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='1419' 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='2076' 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='2076' 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='1376' 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='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1376' 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='1377' 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='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1377' 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='1378' 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='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1378' 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='1379' 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='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1379' 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='1380' 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='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'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1380' 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='1381' 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='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'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1381' 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='1382' 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='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'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg11' filepath='kernel/trace/bpf_trace.c' line='1382' 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='833' 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='833' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='kernel/trace/trace.c' line='833' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/trace/trace.c' line='833' 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='mntget' mangled-name='mntget' filepath='include/linux/mount.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mntget'>
+        <parameter type-id='549da824'/>
+        <return type-id='549da824'/>
+      </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'>
+      <class-decl name='prog_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='da952956'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='ac5ab5b8'>
+        <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='da952956' size-in-bits='64' id='efd0fdec'/>
+      <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='842' 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='842' column='1'/>
+        <parameter type-id='80f4b756' name='event' filepath='kernel/trace/trace_events.c' line='842' column='1'/>
+        <parameter type-id='95e97e5e' name='set' filepath='kernel/trace/trace_events.c' line='842' 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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_output.c' language='LANG_C89'>
+      <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>
+    </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'>
+      <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='kernel_write' mangled-name='kernel_write' filepath='include/linux/fs.h' line='3095' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_write'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8b97c2dc'/>
+        <return type-id='bd54fe1a'/>
+      </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='226' 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='227' 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='228' 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='229' 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='ac5ab5b9' 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='ac5ab5b9'>
+        <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='199' 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='200' 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='201' 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='202' 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='203' 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='204' 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='205' 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='207' 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='208' 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='209' 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='210' 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='211' 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='219' 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='220' 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='147' 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='148' 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='149' 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='150' 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='151' 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='152' 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='154' 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='156' 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='158' 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='159' 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='161' 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='162' 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='163' 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='166' 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='169' 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='170' 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='171' 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='173' 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='175' 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='176' 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='177' 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='184' 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='190' 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='5339' 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='5340' 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='5341' 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='341' 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='343' 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='345' 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='347' 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='349' 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='351' 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='1614' 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='1614' 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='2935' 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='2935' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_delayed_work' mangled-name='flush_delayed_work' filepath='kernel/workqueue.c' line='3190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_delayed_work'>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='3190' column='1'/>
+        <return type-id='b50a4934'/>
+      </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='4463' 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/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/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='393' 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='393' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='393' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='394' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='394' 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='464' 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='464' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='464' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='465' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='465' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gen_pool_avail' mangled-name='gen_pool_avail' filepath='lib/genalloc.c' line='577' 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='577' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='gen_pool_size' mangled-name='gen_pool_size' filepath='lib/genalloc.c' line='596' 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='596' 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='746' 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='746' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/genalloc.c' line='746' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='7359adad' name='start_addr' filepath='lib/genalloc.c' line='748' column='1'/>
+        <return type-id='7359adad'/>
+      </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='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='1596' 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='1596' column='1'/>
+        <parameter type-id='4fa10f9e' name='old' filepath='lib/iov_iter.c' line='1596' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='lib/iov_iter.c' line='1596' 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_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_max_r' mangled-name='__kfifo_max_r' filepath='lib/kfifo.c' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_max_r'>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='382' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='382' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_in_r' mangled-name='__kfifo_in_r' filepath='lib/kfifo.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_in_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='438' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='438' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='439' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='439' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_out_r' mangled-name='__kfifo_out_r' filepath='lib/kfifo.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_out_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='476' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='476' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='477' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='477' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_skip_r' mangled-name='__kfifo_skip_r' filepath='lib/kfifo.c' line='490' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_skip_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='490' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='490' column='1'/>
+        <return type-id='48b5725f'/>
+      </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/lz4/lz4_decompress.c' language='LANG_C89'>
+      <function-decl name='LZ4_decompress_safe_partial' mangled-name='LZ4_decompress_safe_partial' filepath='lib/lz4/lz4_decompress.c' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='LZ4_decompress_safe_partial'>
+        <parameter type-id='80f4b756' name='src' filepath='lib/lz4/lz4_decompress.c' line='458' column='1'/>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/lz4/lz4_decompress.c' line='458' column='1'/>
+        <parameter type-id='95e97e5e' name='compressedSize' filepath='lib/lz4/lz4_decompress.c' line='459' column='1'/>
+        <parameter type-id='95e97e5e' name='targetOutputSize' filepath='lib/lz4/lz4_decompress.c' line='459' column='1'/>
+        <parameter type-id='95e97e5e' name='dstCapacity' filepath='lib/lz4/lz4_decompress.c' line='459' 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>
+    </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_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='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='__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='282' 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='282' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='282' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncat' mangled-name='strncat' filepath='lib/string.c' line='305' 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='305' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='305' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='305' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strlcat' mangled-name='strlcat' filepath='lib/string.c' line='331' 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='331' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='331' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='331' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strcspn' mangled-name='strcspn' filepath='lib/string.c' line='584' 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='584' column='1'/>
+        <parameter type-id='80f4b756' name='reject' filepath='lib/string.c' line='584' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strpbrk' mangled-name='strpbrk' filepath='lib/string.c' line='608' 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='608' column='1'/>
+        <parameter type-id='80f4b756' name='ct' filepath='lib/string.c' line='608' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='__sysfs_match_string' mangled-name='__sysfs_match_string' filepath='lib/string.c' line='714' 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='714' column='1'/>
+        <parameter type-id='b59d7dce' name='n' filepath='lib/string.c' line='714' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='lib/string.c' line='714' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memset64' mangled-name='memset64' filepath='lib/string.c' line='806' 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='806' column='1'/>
+        <parameter type-id='9c313c2d' name='v' filepath='lib/string.c' line='806' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='806' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='bcmp' mangled-name='bcmp' filepath='lib/string.c' line='905' 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='905' column='1'/>
+        <parameter type-id='eaa32e2f' name='b' filepath='lib/string.c' line='905' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='905' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memchr_inv' mangled-name='memchr_inv' filepath='lib/string.c' line='1030' 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='1030' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='lib/string.c' line='1030' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/string.c' line='1030' 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='6406df84'/>
+        <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='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='ac5ab5ba' 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='f6cbf13e' 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='ac5ab5ba'>
+        <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='f6cbf13e'>
+        <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='541' 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='541' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='mm/cma.c' line='541' 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'>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f2cbeaec'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f4cbee0c'>
+        <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='687f967c' 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='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='a10c923f'>
+        <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='89af975c' size-in-bits='64' id='83ac4446'/>
+      <function-decl name='page_mapping' mangled-name='page_mapping' filepath='include/linux/mm.h' line='1399' 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='filemap_write_and_wait' mangled-name='filemap_write_and_wait' filepath='mm/filemap.c' line='635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filemap_write_and_wait'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='635' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='add_to_page_cache_lru' mangled-name='add_to_page_cache_lru' filepath='mm/filemap.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_to_page_cache_lru'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/filemap.c' line='936' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='936' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='mm/filemap.c' line='937' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/filemap.c' line='937' 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='1622' 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='read_cache_page' mangled-name='read_cache_page' filepath='mm/filemap.c' line='2869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='read_cache_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='2869' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='mm/filemap.c' line='2870' column='1'/>
+        <parameter type-id='83ac4446' name='filler' filepath='mm/filemap.c' line='2871' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='mm/filemap.c' line='2872' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='read_cache_page_gfp' mangled-name='read_cache_page_gfp' filepath='mm/filemap.c' line='2892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='read_cache_page_gfp'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='2892' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='mm/filemap.c' line='2893' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/filemap.c' line='2894' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='invalidate_mapping_pages' mangled-name='invalidate_mapping_pages' filepath='include/linux/fs.h' line='2809' 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='3436' 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='3436' column='1'/>
+        <parameter type-id='4fa10f9e' name='from' filepath='mm/filemap.c' line='3436' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='vfs_fsync_range' mangled-name='vfs_fsync_range' filepath='include/linux/fs.h' line='2934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_fsync_range'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='89af975c'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </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='1563' 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='1564' 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='1565' 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='1566' 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='1567' 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='1568' 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/madvise.c' language='LANG_C89'>
+      <function-decl name='vfs_fallocate' mangled-name='vfs_fallocate' filepath='include/linux/fs.h' line='2618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_fallocate'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='95e97e5e'/>
+      </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='293b8884' 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='293b8884'>
+        <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='1503' 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='1503' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1503' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/memory.c' line='1504' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vm_map_pages' mangled-name='vm_map_pages' filepath='mm/memory.c' line='1573' 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='1573' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/memory.c' line='1573' column='1'/>
+        <parameter type-id='7359adad' name='num' filepath='mm/memory.c' line='1574' 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='1671' 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='1671' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1671' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1672' column='1'/>
+        <parameter type-id='2e2dcbd3' name='pgprot' filepath='mm/memory.c' line='1672' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_pfn' mangled-name='vmf_insert_pfn' filepath='mm/memory.c' line='1719' 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='1719' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1719' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1720' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_mixed' mangled-name='vmf_insert_mixed' filepath='mm/memory.c' line='1786' 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='1786' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1786' column='1'/>
+        <parameter type-id='abe59ef3' name='pfn' filepath='mm/memory.c' line='1787' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vm_iomap_memory' mangled-name='vm_iomap_memory' filepath='mm/memory.c' line='1989' 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='1989' column='1'/>
+        <parameter type-id='2522883d' name='start' filepath='mm/memory.c' line='1989' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='mm/memory.c' line='1989' 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'>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f6cbf13f'>
+        <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='687f967c' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='f8cbf45f'>
+        <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>
+      <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='53' 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='53' 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='131' column='1' elf-symbol-id='_totalram_pages'/>
+      <function-decl name='__free_pages' mangled-name='__free_pages' filepath='mm/page_alloc.c' line='4901' 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='4901' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4901' 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='7570' 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='7570' column='1'/>
+        <parameter type-id='bd54fe1a' name='count' filepath='mm/page_alloc.c' line='7570' 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='4805' 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='4805' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4805' column='1'/>
+        <parameter type-id='95e97e5e' name='preferred_nid' filepath='mm/page_alloc.c' line='4805' column='1'/>
+        <parameter type-id='f461c050' name='nodemask' filepath='mm/page_alloc.c' line='4806' 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='4876' 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='4876' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4876' 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='2962' 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='ac5ab5bb'>
+        <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='270' 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/readahead.c' language='LANG_C89'>
+      <function-decl name='put_pages_list' mangled-name='put_pages_list' filepath='include/linux/mm.h' line='776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_pages_list'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/shmem.c' language='LANG_C89'>
+      <pointer-type-def type-id='fe66db71' size-in-bits='64' id='56ef5990'/>
+      <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='2397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_mount'>
+        <parameter type-id='21e53d44'/>
+        <return type-id='549da824'/>
+      </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='56ef5990'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='init_special_inode' mangled-name='init_special_inode' filepath='include/linux/fs.h' line='2795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_special_inode'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='setattr_prepare' mangled-name='setattr_prepare' filepath='include/linux/fs.h' line='3464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setattr_prepare'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='setattr_copy' mangled-name='setattr_copy' filepath='include/linux/fs.h' line='3466' 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='generic_fillattr' mangled-name='generic_fillattr' filepath='include/linux/fs.h' line='3316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fillattr'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='0e87f9be'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inode_newsize_ok' mangled-name='inode_newsize_ok' filepath='include/linux/fs.h' line='3465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_newsize_ok'>
+        <parameter type-id='c5a4eb7f'/>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ihold' mangled-name='ihold' filepath='include/linux/fs.h' line='2419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ihold'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_rehash' mangled-name='d_rehash' filepath='include/linux/dcache.h' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_rehash'>
+        <parameter type-id='27675065'/>
+        <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>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='f6cbf140'>
+        <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='40e10c05' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-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='f2cbeaed' 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='f2cbeaed'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='82' column='1' id='dc07530f'>
+            <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='f5cbefa0' visibility='default' filepath='mm/slab.h' line='89' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f8c' visibility='default' filepath='mm/slab.h' line='76' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='76' column='1' id='e7f43f8c'>
+        <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>
+      <union-decl name='__anonymous_union__6' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='89' column='1' id='f5cbefa0'>
+        <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='1112' column='1' elf-symbol-id='kmalloc_caches'/>
+      <function-decl name='kmalloc_order' mangled-name='kmalloc_order' filepath='mm/slab_common.c' line='1332' 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='1332' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slab_common.c' line='1332' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/slab_common.c' line='1332' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ksize' mangled-name='ksize' filepath='mm/slab_common.c' line='1783' 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='1783' 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='3154' 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='3154' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3154' column='1'/>
+        <parameter type-id='63e171df' name='p' filepath='mm/slub.c' line='3154' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kmalloc' mangled-name='__kmalloc' filepath='mm/slub.c' line='3831' 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='3831' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slub.c' line='3831' 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='2730' 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'>
+      <union-decl name='__anonymous_union__6' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='f5cbefa1'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='433df9b7'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='f4cbee0c' 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='ffcbff5e' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='608fcdf2'>
+            <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='fecbfdca' 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>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f78' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <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' mangled-name='truncate_inode_pages' filepath='mm/truncate.c' line='474' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_inode_pages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='474' column='1'/>
+        <parameter type-id='69bf7bee' name='lstart' filepath='mm/truncate.c' line='474' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1506' 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>
+      <function-decl name='truncate_setsize' mangled-name='truncate_setsize' filepath='mm/truncate.c' line='835' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_setsize'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/truncate.c' line='835' column='1'/>
+        <parameter type-id='69bf7bee' name='newsize' filepath='mm/truncate.c' line='835' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='fecbfdca'>
+        <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__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='ffcbff5e'>
+        <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='3de1074c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-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='1153' 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='1153' 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='1159' 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='1159' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vm_unmap_aliases' mangled-name='vm_unmap_aliases' filepath='mm/vmalloc.c' line='1723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_unmap_aliases'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vm_unmap_ram' mangled-name='vm_unmap_ram' filepath='mm/vmalloc.c' line='1737' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_unmap_ram'>
+        <parameter type-id='eaa32e2f' name='mem' filepath='mm/vmalloc.c' line='1737' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='1737' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vm_map_ram' mangled-name='vm_map_ram' filepath='mm/vmalloc.c' line='1778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_map_ram'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/vmalloc.c' line='1778' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='1778' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='mm/vmalloc.c' line='1778' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='1778' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='radix_tree_preload' mangled-name='radix_tree_preload' filepath='include/linux/radix-tree.h' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_preload'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vmap' mangled-name='vmap' filepath='mm/vmalloc.c' line='2370' 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='2370' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='2370' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='mm/vmalloc.c' line='2371' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2371' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__vmalloc' mangled-name='__vmalloc' filepath='mm/vmalloc.c' line='2556' 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='2556' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/vmalloc.c' line='2556' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2556' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vmalloc_user' mangled-name='vmalloc_user' filepath='mm/vmalloc.c' line='2625' 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='2625' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='remap_vmalloc_range' mangled-name='remap_vmalloc_range' filepath='mm/vmalloc.c' line='3053' 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='3053' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/vmalloc.c' line='3053' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='mm/vmalloc.c' line='3054' 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='6406df84'/>
+        <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' is-declaration-only='yes' id='6b60ef45'/>
+      <enum-decl name='rfkill_type' filepath='include/uapi/linux/rfkill.h' line='43' column='1' id='6bac1cb5'>
+        <underlying-type type-id='6406df84'/>
+        <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='768' 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='768' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/datagram.c' line='768' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='net/core/datagram.c' line='769' 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='687f968b' size-in-bits='infinite' id='660a86d9'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </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>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1' id='ac5ab5bc'>
+        <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>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='96' column='1' id='f6cbf141'>
+        <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>
+      <union-decl name='__anonymous_union__2' size-in-bits='832' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='56' column='1' id='f9cbf5f3'>
+        <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>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip_fib.h' line='89' column='1' id='f8cbf460'>
+        <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='__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='687f968b'>
+        <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='3029' 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='3030' 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='3031' 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='3034' 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='3035' 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='3036' 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='3038' 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='3041' 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='3043' 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='3044' 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='3045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='xmit' type-id='657f91ca' visibility='default' filepath='include/linux/netdevice.h' line='3053' 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='3058' 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='3061' 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='3062' 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='3063' 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='3064' 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='3066' 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='3067' 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='3068' 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='3015' 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='3016' 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='3017' 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='3018' 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='3019' 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='3020' 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='3050' column='1' id='657f91ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recursion' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='3051' 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='3052' 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='2398' 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='2399' 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='2400' 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='2401' 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='2402' 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='2406' 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='2409' 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='2411' 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='2412' 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='2414' 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='2415' 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='2416' 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='2417' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='skb_free_reason' filepath='include/linux/netdevice.h' line='3629' column='1' id='1f17c6b4'>
+        <underlying-type type-id='6406df84'/>
+        <enumerator name='SKB_REASON_CONSUMED' value='0'/>
+        <enumerator name='SKB_REASON_DROPPED' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='3a60b114' size-in-bits='64' id='29242f3e'/>
+      <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='7395' 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='7395' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7396' 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='7628' 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='7628' column='1'/>
+        <parameter type-id='eaa32e2f' name='lower_state_info' filepath='net/core/dev.c' line='7629' 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='710' 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='710' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='710' 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='5353' 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='5353' column='1'/>
+        <parameter type-id='b50a4934' name='flush_old' filepath='net/core/dev.c' line='5353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__napi_schedule' mangled-name='__napi_schedule' filepath='net/core/dev.c' line='5913' 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='5913' 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='7354' 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='7354' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7355' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7356' 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='7377' 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='7377' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7378' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_priv' filepath='net/core/dev.c' line='7379' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_info' filepath='net/core/dev.c' line='7379' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7380' 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='8041' 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='8041' column='1'/>
+        <parameter type-id='95e97e5e' name='new_mtu' filepath='net/core/dev.c' line='8041' 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='8820' 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='8820' 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='8836' 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='8836' column='1'/>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='8837' 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='9164' 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='9164' 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='9912' 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='9912' column='1'/>
+        <parameter type-id='f9f4b16f' name='one' filepath='net/core/dev.c' line='9913' column='1'/>
+        <parameter type-id='f9f4b16f' name='mask' filepath='net/core/dev.c' line='9913' column='1'/>
+        <return type-id='f9f4b16f'/>
+      </function-decl>
+      <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='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>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='ac5ab5bd'>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f9679' visibility='default' filepath='include/linux/mm_types.h' line='80' 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='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>
+      <union-decl name='__anonymous_union__3' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1' id='f8cbf461'>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f967b' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='703' column='1'/>
+        </data-member>
+      </union-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='6406df84'/>
+        <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>
+      <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='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>
+    </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>
+    </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'/>
+    </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'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='f5cbefa2'>
+        <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>
+      <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='497' 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='497' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='497' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='498' 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='554' 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='554' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='net/core/skbuff.c' line='554' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='net/core/skbuff.c' line='554' column='1'/>
+        <parameter type-id='f0981eeb' name='truesize' filepath='net/core/skbuff.c' line='555' 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='897' 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='897' column='1'/>
+        <parameter type-id='95e97e5e' name='budget' filepath='net/core/skbuff.c' line='897' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='___pskb_trim' mangled-name='___pskb_trim' filepath='net/core/skbuff.c' line='1927' 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='1927' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1927' 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='2052' 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='2052' column='1'/>
+        <parameter type-id='95e97e5e' name='delta' filepath='net/core/skbuff.c' line='2052' 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='1550' 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='1550' column='1'/>
+        <parameter type-id='95e97e5e' name='headroom' filepath='net/core/skbuff.c' line='1550' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1551' column='1'/>
+        <parameter type-id='b50a4934' name='fclone' filepath='net/core/skbuff.c' line='1551' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__skb_pad' mangled-name='__skb_pad' filepath='net/core/skbuff.c' line='1794' 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='1794' column='1'/>
+        <parameter type-id='95e97e5e' name='pad' filepath='net/core/skbuff.c' line='1794' column='1'/>
+        <parameter type-id='b50a4934' name='free_on_error' filepath='net/core/skbuff.c' line='1794' 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='2552' 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='2552' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='2552' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='net/core/skbuff.c' line='2552' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='2552' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_unlink' mangled-name='skb_unlink' filepath='net/core/skbuff.c' line='3162' 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='3162' column='1'/>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3162' 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='3590' 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='3590' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='net/core/skbuff.c' line='3590' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='3591' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/core/skbuff.c' line='3591' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec' mangled-name='skb_to_sgvec' filepath='net/core/skbuff.c' line='4247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4247' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='net/core/skbuff.c' line='4247' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='4247' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='4247' 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='6099' 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='6099' 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'>
+      <union-decl name='__anonymous_union__8' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='ffcbff5f'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='bed5066c' 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>
+      <function-decl name='sock_efree' mangled-name='sock_efree' filepath='net/core/sock.c' line='2064' 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='2064' 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='1058' 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='2263' 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='2263' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='net/core/sock.c' line='2263' column='1'/>
+        <parameter type-id='95e97e5e' name='noblock' filepath='net/core/sock.c' line='2264' column='1'/>
+        <parameter type-id='7292109c' name='errcode' filepath='net/core/sock.c' line='2264' 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='2648' 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='2648' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2648' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2648' 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='2654' 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='2654' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2654' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2655' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2655' 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='2661' 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='2661' column='1'/>
+        <parameter type-id='13103032' name='sock2' filepath='net/core/sock.c' line='2661' 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='2667' 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='2667' column='1'/>
+        <parameter type-id='13103032' name='newsock' filepath='net/core/sock.c' line='2667' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2667' column='1'/>
+        <parameter type-id='b50a4934' name='kern' filepath='net/core/sock.c' line='2668' 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='2674' 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='2674' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2674' column='1'/>
+        <parameter type-id='95e97e5e' name='peer' filepath='net/core/sock.c' line='2675' 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='2681' 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='2681' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='net/core/sock.c' line='2681' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='net/core/sock.c' line='2681' 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='2687' 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='2687' column='1'/>
+        <parameter type-id='95e97e5e' name='backlog' filepath='net/core/sock.c' line='2687' 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='2693' 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='2693' column='1'/>
+        <parameter type-id='95e97e5e' name='how' filepath='net/core/sock.c' line='2693' 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='2699' 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='2699' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2699' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2699' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2700' column='1'/>
+        <parameter type-id='f0981eeb' name='optlen' filepath='net/core/sock.c' line='2700' 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='2706' 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='2706' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2706' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2706' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2707' column='1'/>
+        <parameter type-id='7292109c' name='optlen' filepath='net/core/sock.c' line='2707' 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='2732' 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='2732' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2732' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='net/core/sock.c' line='2732' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_gettstamp' mangled-name='sock_gettstamp' filepath='net/core/sock.c' line='3032' 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='3032' column='1'/>
+        <parameter type-id='eaa32e2f' name='userstamp' filepath='net/core/sock.c' line='3032' column='1'/>
+        <parameter type-id='b50a4934' name='timeval' filepath='net/core/sock.c' line='3033' column='1'/>
+        <parameter type-id='b50a4934' name='time32' filepath='net/core/sock.c' line='3033' 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='151' 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/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='3565' 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'>
+      <pointer-type-def type-id='618f2f7e' size-in-bits='64' id='a99cde64'/>
+      <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='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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/ipip.c' language='LANG_C89'>
+      <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='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>
+    </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/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='1026' 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='6ceb7782'/>
+      </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='108' column='1' elf-symbol-id='nd_tbl'/>
+    </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='325' 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/key/af_key.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='149' column='1' id='f6cbf142'>
+        <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='net_proto_family' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='216' 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='217' 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='218' 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='220' 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'/>
+      <function-decl name='sock_unregister' mangled-name='sock_unregister' filepath='include/linux/net.h' line='235' 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='1111' 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='sock_register' mangled-name='sock_register' filepath='include/linux/net.h' line='234' 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='skb_recv_datagram' mangled-name='skb_recv_datagram' filepath='include/linux/skbuff.h' line='3486' 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='3490' 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='3505' 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='1113' 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/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>
+    </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='3051' 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='3051' 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>
+    </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='687f968c' size-in-bits='192' id='69b5f359'>
+        <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='e7f43f8d' 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='6406df84'/>
+        <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>
+      <union-decl name='__anonymous_union__' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='547' column='1' id='ac5ab5be'>
+        <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__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='2055' column='1' id='f6cbf143'>
+        <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>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='673' column='1' id='f9cbf5f4'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='675' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='712' column='1' id='f8cbf462'>
+        <data-member access='private'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='714' 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='724' column='1' id='f3cbec82'>
+        <data-member access='private'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='f2cbeaee'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' 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/net/mac80211.h' line='2493' column='1' id='e7f43f8d'>
+        <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='6406df84'/>
+        <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='69b5f359' 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='687f968c'>
+        <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='6406df84'/>
+        <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='ffcbff60' 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='ffcbff60'>
+        <data-member access='private'>
+          <var-decl name='tkip' type-id='657f91cb' visibility='default' filepath='include/net/mac80211.h' line='1790' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ccmp' type-id='667f9359' visibility='default' filepath='include/net/mac80211.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='aes_cmac' type-id='6b7f9b35' visibility='default' filepath='include/net/mac80211.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='aes_gmac' type-id='6c7f9cc9' visibility='default' filepath='include/net/mac80211.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gcmp' type-id='697f980f' visibility='default' filepath='include/net/mac80211.h' line='1802' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hw' type-id='6a7f99a0' 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='657f91cb'>
+        <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='667f9359'>
+        <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__4' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1794' column='1' id='6b7f9b35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1795' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1797' column='1' id='6c7f9cc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1798' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1800' column='1' id='697f980f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1801' 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='6a7f99a0'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='fecbfdcb' 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='6406df84'/>
+        <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='fecbfdcb'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/mlme.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1' id='f9cbf5f5'>
+        <data-member access='private'>
+          <var-decl name='tstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='712' 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='713' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='723' column='1' id='f8cbf463'>
+        <data-member access='private'>
+          <var-decl name='' type-id='44e11251' visibility='default' filepath='include/linux/skbuff.h' line='724' 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='728' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='833' column='1' id='f3cbec83'>
+        <data-member access='private'>
+          <var-decl name='csum' type-id='fbd88bba' visibility='default' filepath='include/linux/skbuff.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='c1e415af' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1' id='f2cbeaef'>
+        <data-member access='private'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sender_cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='855' column='1' id='f5cbefa3'>
+        <data-member access='private'>
+          <var-decl name='mark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved_tailroom' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1' id='f4cbee0d'>
+        <data-member access='private'>
+          <var-decl name='inner_protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='inner_ipproto' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1'/>
+        </data-member>
+      </union-decl>
+      <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>
+    </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'>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='152' column='1' id='f9cbf5f6'>
+        <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='687f9683' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='159' column='1' id='f8cbf464'>
+        <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__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='164' column='1' id='f3cbec84'>
+        <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='657f91c4' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='179' column='1' id='f2cbeaf0'>
+        <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__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='210' column='1' id='f4cbee0e'>
+        <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__8' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='218' column='1' id='ffcbff61'>
+        <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__9' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='227' column='1' id='fecbfdcc'>
+        <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__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='396' column='1' id='9f0c8f1a'>
+        <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>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='412' column='1' id='a00c90ad'>
+        <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>
+      <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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/rx.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='f6cbf144'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='ieee80211_sta_ps_transition' mangled-name='ieee80211_sta_ps_transition' filepath='net/mac80211/rx.c' line='1625' 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='1625' column='1'/>
+        <parameter type-id='b50a4934' name='start' filepath='net/mac80211/rx.c' line='1625' 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='4672' 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='4672' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rx.c' line='4672' 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>
+    </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='1226' 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='1226' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1227' column='1'/>
+        <parameter type-id='bbaf3419' name='localaddr' filepath='net/mac80211/sta_info.c' line='1228' 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='1251' 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='1251' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1252' 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='ffcbff62' 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='ffcbff62'>
+        <data-member access='private'>
+          <var-decl name='control' type-id='e7f43f8e' visibility='default' filepath='include/net/mac80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ack' type-id='657f91cc' visibility='default' filepath='include/net/mac80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='status' type-id='667f935a' visibility='default' filepath='include/net/mac80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='6b7f9b36' 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='e7f43f8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='fecbfdcd' 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='fecbfdcd'>
+        <data-member access='private'>
+          <var-decl name='' type-id='687f968d' 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='687f968d'>
+        <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='657f91cc'>
+        <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='667f935a'>
+        <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='6b7f9b36'>
+        <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>
+    </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>
+      <union-decl name='__anonymous_union__8' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='ffcbff63'>
+        <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__9' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='fecbfdce'>
+        <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>
+      <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='3551' 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='3551' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3552' 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='3704' 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='3704' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3704' 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='3746' 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='3746' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3747' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='net/mac80211/tx.c' line='3748' 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='3779' 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='3779' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3780' 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='3829' 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='3829' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3829' 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='4354' 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='4354' 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='4405' 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='4405' 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='4645' 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='4645' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4646' column='1'/>
+        <parameter type-id='080a0935' name='offs' filepath='net/mac80211/tx.c' line='4647' 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='4653' 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='4653' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4654' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_offset' filepath='net/mac80211/tx.c' line='4655' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_length' filepath='net/mac80211/tx.c' line='4655' 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='4693' 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='4693' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4694' 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='4727' 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='4727' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4728' 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='4764' 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='4764' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4765' column='1'/>
+        <parameter type-id='b50a4934' name='qos_ok' filepath='net/mac80211/tx.c' line='4766' 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='4823' 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='4823' column='1'/>
+        <parameter type-id='bbaf3419' name='src_addr' filepath='net/mac80211/tx.c' line='4824' column='1'/>
+        <parameter type-id='bbaf3419' name='ssid' filepath='net/mac80211/tx.c' line='4825' column='1'/>
+        <parameter type-id='b59d7dce' name='ssid_len' filepath='net/mac80211/tx.c' line='4825' column='1'/>
+        <parameter type-id='b59d7dce' name='tailroom' filepath='net/mac80211/tx.c' line='4826' 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='3439' 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='3439' 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='4049' 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='4049' column='1'/>
+        <parameter type-id='1d2c2b85' name='frame_cnt' filepath='net/mac80211/util.c' line='4050' column='1'/>
+        <parameter type-id='1d2c2b85' name='byte_cnt' filepath='net/mac80211/util.c' line='4051' 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>
+    </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='697f9810' 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='e7f43f8f' 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='687f968e' 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='657f91cd' 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='667f935b' 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='6b7f9b37' 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='6c7f9cca' 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='e7f43f8f'>
+        <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__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='27' column='1' id='687f968e'>
+        <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='28' 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='657f91cd'>
+        <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__3' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='33' column='1' id='667f935b'>
+        <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='34' 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/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='36' column='1' id='6b7f9b37'>
+        <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='37' 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='6c7f9cca'>
+        <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='697f9810'>
+        <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='ac5ab5bf' 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='ac5ab5bf'>
+        <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='6a7f99a1' 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='6f7fa180' 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='707fa315' 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='c9d994ee' 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='c8d9935b' 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='cbd99814' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='47' column='1' id='6a7f99a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='50' column='1' id='6f7fa180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='51' 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='707fa315'>
+        <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='__anonymous_struct__10' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='56' column='1' id='c9d994ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='59' column='1' id='c8d9935b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='62' column='1' id='cbd99814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='63' 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='cad99681' 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='cad99681'/>
+      <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='96' 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>
+      </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='6406df84'/>
+        <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='cdd99b3a' 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='cdd99b3a'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <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='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='83fbdc47' size-in-bits='64' id='da825f8b'/>
+      <pointer-type-def type-id='1a8ed7df' size-in-bits='64' id='0aa1c7c3'/>
+      <pointer-type-def type-id='00017875' size-in-bits='64' id='c75f0801'/>
+      <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='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='8fc71db3' size-in-bits='64' id='eb7a991f'/>
+      <pointer-type-def type-id='75c2ad3b' size-in-bits='64' id='6c8c82c7'/>
+      <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-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='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='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='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>
+    </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_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>
+      <enum-decl name='tcp_ca_event' filepath='include/net/tcp.h' line='975' column='1' id='5f51e977'>
+        <underlying-type type-id='6406df84'/>
+        <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='1007' 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='1008' 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='1009' 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='1010' 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='1021' 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='1022' 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='1023' 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='1024' 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='1025' 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='1026' 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='1027' 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='1028' 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='1029' 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='1030' 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='1031' 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='1032' 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='1033' 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='1034' 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='f9cbf5f7' 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='f9cbf5f7'>
+        <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='f8cbf465' 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='f8cbf465'>
+        <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>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/route.h' line='62' column='1' id='f2cbeaf1'>
+        <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='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'/>
+      <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='68a72cd7' size-in-bits='64' id='b6316a7f'/>
+      <function-decl name='unregister_netdevice_notifier' mangled-name='unregister_netdevice_notifier' filepath='include/linux/netdevice.h' line='2544' 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='58' 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='267284e7'/>
+        <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='267284e7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='call_rcu' mangled-name='call_rcu' filepath='include/linux/rcupdate.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_rcu'>
+        <parameter type-id='69c138b1'/>
+        <parameter type-id='eb839374'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_copy_expand' mangled-name='skb_copy_expand' filepath='include/linux/skbuff.h' line='1125' 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='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='2543' 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='272e7e29'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='309a5a26'/>
+        <return type-id='f0981eeb'/>
+      </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='fa7c8a73'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='19c2251e'/>
+        <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/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>
+    </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>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='124' column='1' id='f5cbefa4'>
+        <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='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='f4cbee0f' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='f4cbee0f'>
+        <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__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='fecbfdcf'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' 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'/>
+      <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'>
+      <pointer-type-def type-id='9805d802' size-in-bits='64' id='66d2e8f0'/>
+      <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_hashlimit.c' language='LANG_C89'>
+      <function-decl name='proc_mkdir' mangled-name='proc_mkdir' filepath='include/linux/proc_fs.h' line='24' 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='52' 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_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='44' 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/netlink/af_netlink.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__8' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1' id='ffcbff64'>
+        <data-member access='private'>
+          <var-decl name='' type-id='697f980d' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='703' column='1'/>
+        </data-member>
+      </union-decl>
+      <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_u32.c' language='LANG_C89'>
+      <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='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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/sched/sch_htb.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1' id='ac5ab5c0'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f90' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='703' 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/skbuff.h' line='688' column='1' id='e7f43f90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='690' 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='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f6cbf12e' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='2658' 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'>
+      <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='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>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='45' column='1' id='f2cbeaf2'>
+        <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='707fa311' visibility='default' filepath='include/linux/uio.h' line='47' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1' id='f5cbefa5'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f91' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='703' 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/skbuff.h' line='688' column='1' id='e7f43f91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='690' 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='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f4cbee10' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1' id='f4cbee10'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/skbuff.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='699' column='1'/>
+        </data-member>
+      </union-decl>
+      <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='898' column='1' id='ed626d0d'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='essid' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nwid' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='freq' type-id='bc1ac22c' visibility='default' filepath='include/uapi/linux/wireless.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sens' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bitrate' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='txpower' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rts' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='frag' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='retry' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='encoding' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='power' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qual' type-id='aa80c027' visibility='default' filepath='include/uapi/linux/wireless.h' line='920' 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='922' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/wireless.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='param' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='926' 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='687' 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='688' 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='689' 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='690' 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='676' 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='677' 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='678' 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='679' 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='680' 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='702' 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='703' 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='704' 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='705' 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='706' 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='712' 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='713' 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='715' 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='716' 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='717' 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='1059' 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='1060' 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='1061' 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='1062' 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='1063' 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='877' 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='878' 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='881' 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='883' 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='884' 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='727' 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='728' 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='729' 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='730' 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='731' 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='732' 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='739' 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='740' 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'/>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='a00c90ae'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='980c8412'>
+        <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__25' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1152' column='1' id='0c13f672'>
+        <data-member access='private'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1154' column='1'/>
+        </data-member>
+      </union-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='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='cd5915d8' size-in-bits='64' id='9c68341e'/>
+      <pointer-type-def type-id='9c91a761' size-in-bits='64' id='29244949'/>
+      <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>
+      <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='cfdbff8a'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='003642fd'/>
+      </function-type>
+    </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>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='706' column='1' id='f2cbeaf3'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-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='687f968f' size-in-bits='1152' id='69b5f35a'>
+        <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' is-declaration-only='yes' id='43420c6a'/>
+      <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='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='6406df84'/>
+        <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='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>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2933' column='1' id='86505f90'>
+        <underlying-type type-id='6406df84'/>
+        <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='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_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='6406df84'/>
+        <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_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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='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>
+      <class-decl name='cfg80211_cached_keys' size-in-bits='1472' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='272' 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='273' 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='274' 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='275' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='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='6406df84'/>
+        <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='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='289' 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='290' 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='291' 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='292' 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='293' 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='706' column='1' id='f6cbf145'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/skbuff.h' line='707' 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='708' column='1'/>
+        </data-member>
+      </union-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='e7f43f92' visibility='default' filepath='include/net/cfg80211.h' line='4394' 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/net/cfg80211.h' line='4384' column='1' id='e7f43f92'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='69b5f35a' visibility='default' filepath='include/net/cfg80211.h' line='972' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='288' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='967' column='1' id='687f968f'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='63c7e8e1' 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='6406df84'/>
+        <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='ffcbff65' 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='6406df84'/>
+        <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__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2488' column='1' id='ffcbff65'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='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='63c7e8e1' 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='63c7e8e1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02ca2c2d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='db426f5c'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+        <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='63c7e8e1'/>
+      </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='6406df84'/>
+        <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'>
+      <union-decl name='__anonymous_union__2' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='420' column='1' id='f9cbf5f8'>
+        <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>
+      <union-decl name='__anonymous_union__10' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='956' column='1' id='9f0c8f1b'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='958' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1185' column='1' id='a00c90af'>
+        <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>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='a10c9240'>
+        <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>
+      <enum-decl name='nl80211_commands' filepath='include/uapi/linux/nl80211.h' line='1107' column='1' id='187e1e49'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='9712' 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='9712' column='1'/>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/nl80211.c' line='9713' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='9714' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='9715' column='1'/>
+        <parameter type-id='f0981eeb' name='portid' filepath='net/wireless/nl80211.c' line='9716' column='1'/>
+        <parameter type-id='95e97e5e' name='vendor_event_idx' filepath='net/wireless/nl80211.c' line='9717' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='9718' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9718' 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='9745' 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='9745' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9745' 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='13202' 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='13202' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='13203' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='13204' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='13205' 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='13219' 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='13219' 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='15174' 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='15174' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15174' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15175' 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='15637' 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='15637' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15637' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15638' column='1'/>
+        <parameter type-id='f0981eeb' name='duration' filepath='net/wireless/nl80211.c' line='15639' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15639' 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='15651' 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='15651' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15651' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15652' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15653' 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='15677' 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='15677' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15677' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15678' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15678' 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='15701' 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='15701' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15701' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15702' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15702' 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='15885' 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='15885' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15885' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15886' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15886' column='1'/>
+        <parameter type-id='b50a4934' name='ack' filepath='net/wireless/nl80211.c' line='15886' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15886' 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='16044' 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='16044' column='1'/>
+        <parameter type-id='b8189423' name='rssi_event' filepath='net/wireless/nl80211.c' line='16045' column='1'/>
+        <parameter type-id='a7832498' name='rssi_level' filepath='net/wireless/nl80211.c' line='16046' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16046' 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='16115' 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='16115' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16116' column='1'/>
+        <parameter type-id='19c2251e' name='num_packets' filepath='net/wireless/nl80211.c' line='16116' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16116' 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='16199' 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='16199' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16199' column='1'/>
+        <parameter type-id='bbaf3419' name='replay_ctr' filepath='net/wireless/nl80211.c' line='16200' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16200' 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='16256' 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='16256' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='net/wireless/nl80211.c' line='16256' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16257' column='1'/>
+        <parameter type-id='b50a4934' name='preauth' filepath='net/wireless/nl80211.c' line='16257' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16257' 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='16308' 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='16308' column='1'/>
+        <parameter type-id='0953fbfe' name='chandef' filepath='net/wireless/nl80211.c' line='16309' 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='16713' 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='16713' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16713' column='1'/>
+        <parameter type-id='ee1b00fc' name='oper' filepath='net/wireless/nl80211.c' line='16714' column='1'/>
+        <parameter type-id='1dc6a898' name='reason_code' filepath='net/wireless/nl80211.c' line='16715' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16715' 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='16819' 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='16819' column='1'/>
+        <parameter type-id='76db5996' name='ft_event' filepath='net/wireless/nl80211.c' line='16820' 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='6406df84'/>
+        <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='3008' 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='3008' column='1'/>
+        <parameter type-id='80f4b756' name='alpha2' filepath='net/wireless/reg.c' line='3008' 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='3739' 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='3739' column='1'/>
+        <parameter type-id='c24e05b4' name='rd' filepath='net/wireless/reg.c' line='3740' 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='6406df84'/>
+        <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='6406df84'/>
+        <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='ac5ab5c1' 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='ac5ab5c1'>
+        <data-member access='private'>
+          <var-decl name='auth' type-id='e7f43f93' visibility='default' filepath='include/linux/ieee80211.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='deauth' type-id='687f9690' visibility='default' filepath='include/linux/ieee80211.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='assoc_req' type-id='657f91ce' visibility='default' filepath='include/linux/ieee80211.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='assoc_resp' type-id='667f935c' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reassoc_resp' type-id='667f935c' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reassoc_req' type-id='6b7f9b38' visibility='default' filepath='include/linux/ieee80211.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='disassoc' type-id='6c7f9ccb' visibility='default' filepath='include/linux/ieee80211.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='beacon' type-id='697f9811' visibility='default' filepath='include/linux/ieee80211.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_req' type-id='6a7f99a2' visibility='default' filepath='include/linux/ieee80211.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_resp' type-id='6f7fa181' visibility='default' filepath='include/linux/ieee80211.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='action' type-id='707fa316' 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='e7f43f93'>
+        <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='687f9690'>
+        <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='657f91ce'>
+        <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='667f935c'>
+        <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='6b7f9b38'>
+        <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__5' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='939' column='1' id='6c7f9ccb'>
+        <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='940' 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='697f9811'>
+        <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='6a7f99a2'>
+        <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__8' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='954' column='1' id='6f7fa181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='a30e8d1f' visibility='default' filepath='include/linux/ieee80211.h' line='955' 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='956' 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='957' 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='960' 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='707fa316'>
+        <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='f6cbf146' 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='f6cbf146'>
+        <data-member access='private'>
+          <var-decl name='wme_action' type-id='c9d994ef' visibility='default' filepath='include/linux/ieee80211.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='chan_switch' type-id='c8d9935c' 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='cbd99815' visibility='default' filepath='include/linux/ieee80211.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='measurement' type-id='cad99682' visibility='default' filepath='include/linux/ieee80211.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addba_req' type-id='cdd99b3b' visibility='default' filepath='include/linux/ieee80211.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addba_resp' type-id='ccd999a8' visibility='default' filepath='include/linux/ieee80211.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='delba' type-id='cfd99e61' visibility='default' filepath='include/linux/ieee80211.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='self_prot' type-id='ced99cce' visibility='default' filepath='include/linux/ieee80211.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mesh_action' type-id='c1d98854' visibility='default' filepath='include/linux/ieee80211.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sa_query' type-id='c0d986c1' visibility='default' filepath='include/linux/ieee80211.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ht_smps' type-id='b7d2bcd1' 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='b8d2be63' 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='b9d2bff6' 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='bad2c18a' 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='bbd2c31d' visibility='default' filepath='include/linux/ieee80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tpc_report' type-id='bcd2c4b0' visibility='default' filepath='include/linux/ieee80211.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ftm' type-id='bdd2c643' 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='c9d994ef'>
+        <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='c8d9935c'>
+        <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='cbd99815'>
+        <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='cad99682'>
+        <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='cdd99b3b'>
+        <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='ccd999a8'>
+        <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='cfd99e61'>
+        <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__17' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1008' column='1' id='ced99cce'>
+        <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='1009' 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='1010' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1012' column='1' id='c1d98854'>
+        <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='1013' 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='1014' 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='c0d986c1'>
+        <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='b7d2bcd1'>
+        <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='b8d2be63'>
+        <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='b9d2bff6'>
+        <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='bad2c18a'>
+        <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='bbd2c31d'>
+        <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='bcd2c4b0'>
+        <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='bdd2c643'>
+        <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>
+    </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='08f5ca1c'>
+        <underlying-type type-id='6406df84'/>
+        <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='6406df84'/>
+        <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>
+      <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='f6cbf147'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e7f43f78' visibility='default' filepath='include/linux/mm_types.h' line='80' 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>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='f9cbf5f9'>
+        <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__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='160' column='1' id='f8cbf466'>
+        <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__4' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='f3cbec85'>
+        <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__5' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='f2cbeaf4'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='c8d9935a' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='cbd99811' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1' id='f5cbefa6'>
+        <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__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='9f0c8f1c'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='735' 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='736' column='1'/>
+        </data-member>
+      </union-decl>
+      <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'/>
+      <pointer-type-def type-id='3ce3a3ea' size-in-bits='64' id='63c7e8e2'/>
+      <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_interface.c' language='LANG_C89'>
+      <class-decl name='gro_cell' size-in-bits='3584' is-struct='yes' visibility='default' is-declaration-only='yes' id='001ff55a'/>
+      <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'/>
+      <function-decl name='unregister_netdevice_many' mangled-name='unregister_netdevice_many' filepath='include/linux/netdevice.h' line='2689' 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='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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/xfrm/xfrm_user.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='f3cbec86'>
+        <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>
+      <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='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='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='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/proc.c' language='LANG_C89'>
+      <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'/>
+      <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='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>
+    </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='2096' 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='2096' column='1'/>
+        <parameter type-id='13103033' name='parent' filepath='security/security.c' line='2096' 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'>
+      <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='63d6992a' const='yes' id='af1e6651'/>
+      <pointer-type-def type-id='af1e6651' size-in-bits='64' id='27db53a1'/>
+      <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='6406df84'/>
+        <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='ac5ab5c2' 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='f6cbf148' 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='ac5ab5c2'>
+        <data-member access='private'>
+          <var-decl name='integer' type-id='e7f43f94' visibility='default' filepath='include/uapi/sound/asound.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='integer64' type-id='687f9691' visibility='default' filepath='include/uapi/sound/asound.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='enumerated' type-id='657f91cf' 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='e7f43f94'>
+        <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='687f9691'>
+        <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='657f91cf'>
+        <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='f6cbf148'>
+        <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='f9cbf5fa' 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='f9cbf5fa'>
+        <data-member access='private'>
+          <var-decl name='integer' type-id='f8cbf467' visibility='default' filepath='include/uapi/sound/asound.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='integer64' type-id='f3cbec87' visibility='default' filepath='include/uapi/sound/asound.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='enumerated' type-id='f2cbeaf5' visibility='default' filepath='include/uapi/sound/asound.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bytes' type-id='f5cbefa7' 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='f8cbf467'>
+        <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='f3cbec87'>
+        <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='f2cbeaf5'>
+        <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='f5cbefa7'>
+        <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='f4cbee11'>
+        <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='ffcbff66' 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>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/sound/control.h' line='42' column='1' id='ffcbff66'>
+        <data-member access='private'>
+          <var-decl name='c' type-id='bf7b4ec3' visibility='default' filepath='include/sound/control.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p' type-id='5b2fd8e8' visibility='default' filepath='include/sound/control.h' line='44' column='1'/>
+        </data-member>
+      </union-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>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/init.c' language='LANG_C89'>
+      <function-decl name='snd_card_disconnect' mangled-name='snd_card_disconnect' filepath='sound/core/init.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_disconnect'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/init.c' line='374' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </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='6406df84'/>
+        <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'/>
+      <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_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='3414' 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='3414' column='1'/>
+        <parameter type-id='2ae08426' name='area' filepath='sound/core/pcm_native.c' line='3415' 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='ac5ab5c3' 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>
+      <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>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='65' column='1' id='ac5ab5c3'>
+        <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>
+    </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'/>
+      <pointer-type-def type-id='c4d4ddeb' size-in-bits='64' id='0f5a7eb9'/>
+      <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>
+    </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>
+    </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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='f8cbf468' 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='6406df84'/>
+        <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='ac5ab5c4' 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='ac5ab5c4'>
+        <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='f6cbf149' 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='f6cbf149'>
+        <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='f9cbf5fb' 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='f9cbf5fb'>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='6406df84'/>
+        <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='f8cbf468'>
+        <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>
+      <pointer-type-def type-id='044208ec' size-in-bits='64' id='acf1578a'/>
+      <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='3176' 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='3176' column='1'/>
+        <parameter type-id='8f3d28b8' name='route' filepath='sound/soc/soc-dapm.c' line='3177' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-dapm.c' line='3177' 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='3277' 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='3277' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3278' 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='3340' 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='3340' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3341' 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='3432' 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='3432' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3433' 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='3473' 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='3473' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3474' 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='3536' 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='3536' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-dapm.c' line='3537' 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='3554' 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='3554' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3555' 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='4684' 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='4684' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4685' 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='3577' 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='3577' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3578' 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='4498' 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='4498' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4498' 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='4609' 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='4609' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4610' 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='3752' 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='3752' column='1'/>
+        <parameter type-id='dae78f89' name='widget' filepath='sound/soc/soc-dapm.c' line='3753' 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='4565' 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='4565' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4566' 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='4707' 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='4707' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4708' 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>
+      <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>
+    </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'>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='65' column='1' id='ac5ab5c5'>
+        <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_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='e7f43f95' 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='e7f43f95'>
+        <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'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='311' column='1' id='ac5ab5c6'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='687f9680' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='snd_usb_enable_audio_stream' mangled-name='snd_usb_enable_audio_stream' filepath='sound/usb/pcm.c' line='662' 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='662' column='1'/>
+        <parameter type-id='95e97e5e' name='datainterval' filepath='sound/usb/pcm.c' line='663' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='sound/usb/pcm.c' line='663' 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: 1.8.0-f6134e12-android
+     built with: clang: Android (6443078 based on r383902) clang version 11.0.1 (https://android.googlesource.com/toolchain/llvm-project b397f81060ce6d701042b782172ed13bee898b79)
+-->
diff --git a/android/abi_gki_aarch64_cuttlefish b/android/abi_gki_aarch64_cuttlefish
new file mode 100644
index 0000000..ac0dc5c
--- /dev/null
+++ b/android/abi_gki_aarch64_cuttlefish
@@ -0,0 +1,1131 @@
+[abi_whitelist]
+# commonly used symbols
+  add_timer
+  __alloc_disk_node
+  alloc_etherdev_mqs
+  __alloc_pages_nodemask
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  bcmp
+  bio_alloc_bioset
+  blk_cleanup_queue
+  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_write_zeroes_sectors
+  blk_queue_physical_block_size
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  __break_lease
+  call_rcu
+  cancel_delayed_work_sync
+  capable
+  cfg80211_inform_bss_data
+  cfg80211_put_bss
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  clear_inode
+  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_destroy_tfm
+  crypto_register_alg
+  crypto_register_scomp
+  crypto_unregister_alg
+  crypto_unregister_scomp
+  d_drop
+  deactivate_locked_super
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_remove_recursive
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  dentry_open
+  destroy_workqueue
+  _dev_err
+  device_add_disk
+  device_register
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_kmalloc
+  dev_queue_xmit
+  dev_set_name
+  _dev_warn
+  dget_parent
+  dma_alloc_attrs
+  dma_free_attrs
+  d_make_root
+  dma_set_coherent_mask
+  dma_set_mask
+  down_read
+  down_write
+  dput
+  d_splice_alias
+  ethtool_op_get_link
+  eth_validate_addr
+  event_triggers_call
+  fd_install
+  find_next_bit
+  finish_wait
+  flush_dcache_page
+  flush_delayed_work
+  flush_work
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  fs_bio_set
+  generic_file_llseek
+  generic_read_dir
+  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
+  iget5_locked
+  __init_rwsem
+  init_special_inode
+  init_timer_key
+  init_user_ns
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  iput
+  iterate_dir
+  jiffies
+  kern_path
+  kfree
+  kill_anon_super
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kstrdup
+  kstrtoull
+  ktime_get
+  kvfree
+  kvmalloc_node
+  __list_add_valid
+  __list_del_entry_valid
+  __local_bh_enable_ip
+  __lock_page
+  lockref_get
+  lock_rename
+  match_token
+  memcpy
+  memmove
+  memparse
+  memset
+  mod_timer
+  module_layout
+  msleep
+  __mutex_init
+  mutex_is_locked
+  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
+  no_llseek
+  noop_llseek
+  nr_cpu_ids
+  __num_online_cpus
+  pagecache_get_page
+  param_ops_bool
+  param_ops_charp
+  param_ops_int
+  param_ops_uint
+  passthru_features_check
+  path_get
+  path_put
+  pci_alloc_irq_vectors_affinity
+  pci_disable_device
+  pci_enable_device
+  pci_free_irq_vectors
+  pci_iomap
+  pci_irq_vector
+  pci_read_config_byte
+  pci_read_config_dword
+  __pci_register_driver
+  pci_request_region
+  pci_set_master
+  pci_unregister_driver
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  platform_device_add
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  pm_runtime_allow
+  pm_runtime_forbid
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  __put_cred
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  put_unused_fd
+  queue_delayed_work_on
+  queue_work_on
+  radix_tree_delete
+  radix_tree_insert
+  radix_tree_lookup
+  ___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_filesystem
+  register_netdev
+  register_netdevice_notifier
+  register_shrinker
+  register_virtio_device
+  register_virtio_driver
+  request_threaded_irq
+  revalidate_disk
+  rtnl_lock
+  rtnl_unlock
+  schedule
+  schedule_timeout
+  schedule_timeout_uninterruptible
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  set_nlink
+  sg_init_one
+  sg_init_table
+  sg_next
+  single_open
+  single_release
+  snd_device_new
+  snd_pcm_alt_chmaps
+  snprintf
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncpy
+  strscpy
+  strsep
+  strstr
+  submit_bio
+  synchronize_irq
+  synchronize_rcu
+  sysfs_create_group
+  __sysfs_match_string
+  sysfs_remove_group
+  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_print_symbols_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  truncate_inode_pages
+  unlock_new_inode
+  unlock_page
+  unlock_rename
+  unregister_blkdev
+  unregister_filesystem
+  unregister_netdev
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_shrinker
+  unregister_virtio_device
+  unregister_virtio_driver
+  up_read
+  up_write
+  usb_add_hcd
+  usb_create_shared_hcd
+  usb_disabled
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hcd_is_primary_hcd
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_unlink_urb_from_ep
+  usb_put_hcd
+  usb_remove_hcd
+  usleep_range
+  vfree
+  vfs_getattr
+  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
+  vmemmap
+  vring_create_virtqueue
+  vring_del_virtqueue
+  vring_interrupt
+  vring_transport_features
+  wait_for_completion
+  wait_for_completion_timeout
+  __wake_up
+  __warn_printk
+
+# required by ac97_bus.ko
+  bus_register
+  bus_unregister
+
+# required by dummy-cpufreq.ko
+  cpufreq_generic_attr
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+
+# required by dummy_hcd.ko
+  device_create_file
+  device_remove_file
+  ktime_get_ts64
+  platform_device_add_data
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  usb_add_gadget_udc
+  usb_create_hcd
+  usb_del_gadget_udc
+  usb_ep_set_maxpacket_limit
+  usb_gadget_giveback_request
+  usb_gadget_udc_reset
+  usb_get_dev
+  usb_put_dev
+
+# required by erofs.ko
+  add_to_page_cache_lru
+  bio_add_page
+  bio_associate_blkg
+  bio_put
+  bit_wait
+  bpf_trace_run4
+  fs_ftype_to_dtype
+  generic_block_bmap
+  generic_fillattr
+  generic_ro_fops
+  iget_failed
+  inode_nohighmem
+  kill_block_super
+  kimage_vaddr
+  LZ4_decompress_safe_partial
+  match_strdup
+  mount_bdev
+  new_inode
+  out_of_line_wait_on_bit_lock
+  page_get_link
+  posix_acl_access_xattr_handler
+  posix_acl_default_xattr_handler
+  posix_acl_from_xattr
+  print_hex_dump
+  put_pages_list
+  radix_tree_gang_lookup
+  radix_tree_preload
+  rcu_barrier
+  read_cache_page
+  read_cache_page_gfp
+  sb_set_blocksize
+  simple_get_link
+  strnlen
+  __sw_hweight64
+  trace_print_flags_seq
+  vm_map_ram
+  vm_unmap_aliases
+  vm_unmap_ram
+  wake_up_bit
+  __wake_up_locked
+
+# 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
+
+# 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_disable
+  pm_runtime_enable
+  __pm_runtime_idle
+  __pm_runtime_resume
+  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 incrementalfs.ko
+  bin2hex
+  __close_fd
+  crc32_le
+  crypto_alloc_shash
+  crypto_shash_digest
+  d_add
+  d_instantiate
+  fget
+  fs_kobj
+  fsstack_copy_attr_all
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_shutdown_super
+  get_zeroed_page
+  ihold
+  inode_init_owner
+  kernel_read
+  kernel_write
+  kobject_create_and_add
+  kobject_put
+  lookup_one_len
+  LZ4_decompress_safe
+  match_int
+  __msecs_to_jiffies
+  notify_change
+  set_anon_super
+  sget
+  simple_getattr
+  simple_setattr
+  simple_statfs
+  strndup_user
+  sync_filesystem
+  user_path_at_empty
+  vfs_create
+  vfs_fallocate
+  vfs_getxattr
+  vfs_link
+  vfs_listxattr
+  vfs_mkdir
+  vfs_rename
+  vfs_rmdir
+  vfs_setxattr
+  vfs_unlink
+
+# 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
+
+# required by rtc-test.ko
+  device_init_wakeup
+  devm_rtc_allocate_device
+  ktime_get_real_seconds
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by sdcardfs.ko
+  clear_nlink
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  config_item_init_type_name
+  copy_fs_struct
+  _ctype
+  d_invalidate
+  d_path
+  d_rehash
+  d_set_d_op
+  filemap_write_and_wait
+  filp_close
+  filp_open
+  free_fs_struct
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  generic_delete_inode
+  __generic_file_fsync
+  generic_permission
+  igrab
+  inode_newsize_ok
+  kstrtouint
+  lookup_one_len_unlocked
+  mntget
+  names_cachep
+  notify_change2
+  override_creds
+  prepare_creds
+  revert_creds
+  setattr_prepare
+  set_fs_pwd
+  shrink_dcache_sb
+  strcasecmp
+  strncasecmp
+  strrchr
+  touch_atime
+  truncate_setsize
+  vfs_create2
+  vfs_fsync_range
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_read
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+  vfs_write
+
+# required by snd-ac97-codec.ko
+  pci_read_config_word
+  simple_strtoul
+  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_remove_id
+  snd_info_create_card_entry
+  snd_info_free_entry
+  snd_interval_refine
+  snd_pcm_hw_rule_add
+  snd_pcm_std_chmaps
+  strcat
+
+# required by snd-intel8x0.ko
+  param_ops_bint
+  pci_release_regions
+  pci_request_regions
+  pci_write_config_dword
+  snd_card_disconnect
+  snd_card_free
+  snd_card_new
+  snd_card_register
+  snd_card_rw_proc_new
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+  snd_pci_quirk_lookup
+  snd_pcm_add_chmap_ctls
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_list
+  snd_pcm_hw_constraint_msbits
+  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
+
+# required by test_meminit.ko
+  kmem_cache_alloc_bulk
+  kmem_cache_free_bulk
+  vmalloc
+
+# required by tpm.ko
+  alloc_chrdev_region
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __compat_only_sysfs_link_entry_to_kobj
+  device_initialize
+  efi
+  efi_tpm_final_log_size
+  hash_digest_size
+  idr_get_next
+  idr_replace
+  jiffies_to_msecs
+  jiffies_to_usecs
+  krealloc
+  memchr_inv
+  memremap
+  memunmap
+  of_find_property
+  of_get_property
+  of_property_match_string
+  physvirt_offset
+  securityfs_create_dir
+  securityfs_create_file
+  securityfs_remove
+  seq_open
+  seq_putc
+  seq_release
+  seq_write
+  sysfs_remove_link
+  unregister_chrdev_region
+  __usecs_to_jiffies
+
+# required by tpm_vtpm_proxy.ko
+  anon_inode_getfile
+  misc_deregister
+  misc_register
+
+# required by virt_wifi.ko
+  cfg80211_connect_done
+  cfg80211_disconnected
+  cfg80211_scan_done
+  __dev_get_by_index
+  dev_printk
+  ether_setup
+  kfree_skb
+  ktime_get_with_offset
+  __module_get
+  module_put
+  netdev_upper_dev_link
+  netif_stacked_transfer_operstate
+  register_netdevice
+  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_direct_map_sg
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_signal_locked
+  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
+  memdup_user
+  __sg_alloc_table_from_pages
+  sg_free_table
+  sync_file_create
+  sync_file_get_fence
+  __tracepoint_dma_fence_emit
+  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_queue_write_cache
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_status_to_errno
+  _dev_notice
+  kobject_uevent_env
+  set_disk_ro
+  string_get_size
+
+# required by virtio_console.ko
+  cancel_work_sync
+  cdev_add
+  cdev_alloc
+  cdev_del
+  debugfs_remove
+  device_create
+  device_destroy
+  fasync_helper
+  freezing_slow_path
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  kill_fasync
+  kobject_uevent
+  nonseekable_open
+  pipe_lock
+  pipe_unlock
+  __refrigerator
+  __register_chrdev
+  __splice_from_pipe
+  system_freezing_cnt
+  __unregister_chrdev
+
+# required by virtio_input.ko
+  input_alloc_absinfo
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_init_slots
+  input_register_device
+  input_set_abs_params
+  input_unregister_device
+
+# required by virtio_mmio.ko
+  device_for_each_child
+  devm_ioremap
+  devm_kfree
+  __devm_request_region
+  iomem_resource
+  platform_device_register_full
+  platform_get_irq
+  platform_get_resource
+  sscanf
+
+# required by virtio_net.ko
+  __alloc_skb
+  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
+  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
+  nf_conntrack_destroy
+  _raw_spin_trylock
+  sched_clock
+  skb_add_rx_frag
+  skb_coalesce_rx_frag
+  __skb_flow_dissect
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_put
+  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_find_capability
+  pci_find_ext_capability
+  pci_find_next_capability
+  pci_iomap_range
+  pci_irq_get_affinity
+  pci_release_region
+  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
+  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
+  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 xhci-hcd.ko
+  cancel_delayed_work
+  complete_all
+  debugfs_create_regset32
+  dev_driver_string
+  dma_direct_map_page
+  dma_direct_unmap_page
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  mod_delayed_work_on
+  param_ops_ullong
+  platform_device_add_properties
+  platform_device_add_resources
+  radix_tree_maybe_preload
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  __sw_hweight32
+  usb_amd_dev_put
+  usb_amd_pt_check_port
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_asmedia_modifyflowcontrol
+  usb_debug_root
+  usb_disable_xhci_ports
+  usb_hcd_end_port_resume
+  usb_hc_died
+  usb_hcd_irq
+  usb_hcd_map_urb_for_dma
+  usb_hcd_start_port_resume
+  usb_hub_clear_tt_buffer
+  usb_root_hub_lost_power
+  usb_wakeup_notification
+  vsnprintf
+
+# required by xhci-pci.ko
+  pci_d3cold_disable
+  pci_set_mwi
+  pci_set_power_state
+  usb_amd_quirk_pll_check
+  usb_enable_intel_xhci_ports
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+
+# required by zram.ko
+  __alloc_percpu
+  bdget_disk
+  bdput
+  bio_endio
+  blk_alloc_queue
+  blk_queue_flag_clear
+  blk_queue_make_request
+  __class_register
+  class_unregister
+  crypto_alloc_base
+  crypto_has_alg
+  free_percpu
+  fsync_bdev
+  generic_end_io_acct
+  generic_start_io_acct
+  idr_find
+  idr_for_each
+  kstrtoint
+  kstrtou16
+  memset64
+  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
+  page_mapping
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_write_lock
+  _raw_write_unlock
+  __SetPageMovable
diff --git a/android/abi_gki_aarch64_db845c b/android/abi_gki_aarch64_db845c
new file mode 100644
index 0000000..1b0909d
--- /dev/null
+++ b/android/abi_gki_aarch64_db845c
@@ -0,0 +1,1615 @@
+[abi_whitelist]
+# commonly used symbols
+  add_uevent_var
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  bcmp
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  __break_lease
+  bus_register
+  bus_unregister
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  __cfi_slowpath
+  __check_object_size
+  clear_inode
+  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_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
+  cmd_db_read_addr
+  cmd_db_read_aux_data
+  complete
+  complete_all
+  __const_udelay
+  consume_skb
+  _copy_from_iter_full
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  crc32_le
+  _ctype
+  d_drop
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_regset32
+  debugfs_create_u32
+  debugfs_create_x32
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  dentry_open
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_get_regmap
+  device_for_each_child
+  device_init_wakeup
+  device_property_present
+  device_property_read_u32_array
+  device_register
+  device_set_wakeup_capable
+  device_unregister
+  device_wakeup_enable
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_get
+  devm_clk_get_optional
+  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_phy_get
+  devm_pinctrl_register
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_register
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_reset_controller_register
+  devm_usb_get_phy_by_phandle
+  devm_watchdog_register_device
+  _dev_notice
+  dev_pm_domain_attach_by_name
+  dev_pm_domain_detach
+  dev_pm_genpd_set_performance_state
+  dev_set_name
+  _dev_warn
+  dget_parent
+  disable_irq
+  disable_irq_nosync
+  divider_get_val
+  divider_recalc_rate
+  divider_round_rate_parent
+  dma_alloc_attrs
+  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
+  d_make_root
+  dmam_alloc_attrs
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  dma_release_channel
+  dma_request_chan
+  dma_set_coherent_mask
+  dma_set_mask
+  do_SAK
+  down_write
+  dput
+  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
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  extcon_register_notifier
+  extcon_unregister_notifier
+  fd_install
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_workqueue
+  fput
+  free_irq
+  free_pages
+  generic_file_llseek
+  generic_handle_irq
+  generic_mii_ioctl
+  generic_read_dir
+  get_device
+  get_random_bytes
+  get_unused_fd_flags
+  get_zeroed_page
+  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
+  iget5_locked
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  iommu_present
+  __ioread32_copy
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  iput
+  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
+  iterate_dir
+  jiffies
+  kern_path
+  kfree
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmemdup
+  kstrdup
+  kstrtouint
+  ktime_get
+  ktime_get_mono_fast_ns
+  __list_add_valid
+  __list_del_entry_valid
+  lockref_get
+  lock_rename
+  mbox_client_txdone
+  mbox_free_channel
+  mbox_request_channel
+  mbox_send_message
+  memcpy
+  __memcpy_fromio
+  memmove
+  memset
+  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_is_locked
+  mutex_lock
+  mutex_lock_interruptible
+  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
+  no_llseek
+  nvmem_cell_read
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_hw_provider
+  of_clk_del_provider
+  of_clk_get
+  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_device_by_node
+  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_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_int
+  param_ops_uint
+  path_get
+  path_put
+  pci_bus_type
+  pci_dev_put
+  pci_read_config_byte
+  pci_read_config_dword
+  __pci_register_driver
+  pci_unregister_driver
+  pci_write_config_dword
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  phy_exit
+  phy_init
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  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_add
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  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_init
+  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
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  pskb_expand_head
+  __put_cred
+  put_device
+  __put_task_struct
+  qcom_smem_state_register
+  qcom_smem_state_unregister
+  queue_delayed_work_on
+  queue_work_on
+  radix_tree_delete
+  radix_tree_insert
+  radix_tree_lookup
+  ___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
+  register_filesystem
+  register_reboot_notifier
+  __register_rpmsg_driver
+  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
+  request_firmware
+  request_firmware_into_buf
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  reset_control_reset
+  rpmh_write
+  rpmh_write_async
+  rpmsg_register_device
+  rpmsg_send
+  rpmsg_unregister_device
+  rproc_add
+  rproc_add_subdev
+  rproc_alloc
+  rproc_del
+  rproc_free
+  rproc_remove_subdev
+  schedule
+  schedule_timeout
+  schedule_timeout_uninterruptible
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  sg_free_table
+  sg_init_table
+  sg_next
+  simple_attr_open
+  simple_attr_release
+  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
+  strncmp
+  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
+  truncate_inode_pages
+  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
+  __udelay
+  unlock_new_inode
+  unlock_rename
+  unregister_filesystem
+  unregister_reboot_notifier
+  unregister_rpmsg_driver
+  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_debug_root
+  usb_deregister
+  usb_disabled
+  usb_get_dr_mode
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_is_primary_hcd
+  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_hcd_unlink_urb_from_ep
+  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_put_hcd
+  usb_register_driver
+  usb_remove_hcd
+  usb_root_hub_lost_power
+  usleep_range
+  vfs_getattr
+  vsnprintf
+  wait_for_completion_timeout
+  __wake_up
+  __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
+  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
+  cfg80211_calculate_bitrate
+  cfg80211_find_elem_match
+  cfg80211_find_vendor_elem
+  cfg80211_get_bss
+  cfg80211_put_bss
+  completion_done
+  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
+  of_get_property
+  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_release_region
+  pci_request_region
+  pci_set_master
+
+# 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_add_subdomain
+  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 dwc3-qcom.ko
+  devm_extcon_register_notifier
+  of_clk_get_parent_count
+
+# required by dwc3.ko
+  dev_fwnode
+  device_property_read_string
+  device_property_read_u8_array
+  devm_usb_get_phy
+  extcon_find_edev_by_node
+  extcon_get_extcon_dev
+  of_usb_get_phy_mode
+  phy_pm_runtime_get_sync
+  phy_pm_runtime_put_sync
+  platform_get_irq_byname_optional
+  system_freezable_wq
+  usb_add_gadget_udc
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_ep_set_maxpacket_limit
+  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_get_maximum_speed
+  usb_role_switch_register
+  usb_role_switch_unregister
+
+# 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_export
+  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 incrementalfs.ko
+  bin2hex
+  __close_fd
+  crypto_alloc_shash
+  crypto_destroy_tfm
+  crypto_shash_digest
+  d_add
+  deactivate_locked_super
+  d_instantiate
+  fget
+  flush_dcache_page
+  flush_delayed_work
+  fs_kobj
+  fsstack_copy_attr_all
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_shutdown_super
+  __get_free_pages
+  ihold
+  inode_init_owner
+  kernel_read
+  kernel_write
+  kobject_create_and_add
+  kobject_put
+  lookup_one_len
+  LZ4_decompress_safe
+  match_int
+  match_token
+  noop_llseek
+  notify_change
+  pagecache_get_page
+  __put_page
+  set_anon_super
+  sget
+  simple_getattr
+  simple_setattr
+  simple_statfs
+  strndup_user
+  strsep
+  sync_filesystem
+  sysfs_create_group
+  sysfs_remove_group
+  unlock_page
+  user_path_at_empty
+  vfs_create
+  vfs_fallocate
+  vfs_getxattr
+  vfs_link
+  vfs_listxattr
+  vfs_mkdir
+  vfs_rename
+  vfs_rmdir
+  vfs_setxattr
+  vfs_unlink
+
+# 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_run5
+  bpf_trace_run6
+  bpf_trace_run8
+  clk_get
+  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
+  debugfs_create_bool
+  debugfs_create_u64
+  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_add
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_exact
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_level
+  dev_pm_opp_get_opp_count
+  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
+  get_pid_task
+  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_create_on_node
+  kthread_destroy_worker
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_worker_fn
+  ktime_get_real_ts64
+  kvfree
+  kvmalloc_node
+  llist_add_batch
+  memparse
+  memremap
+  memunmap
+  mipi_dsi_create_packet
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  mipi_dsi_packet_format_is_long
+  mutex_trylock_recursive
+  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_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_shrinker
+  register_vmap_purge_notifier
+  regulator_get
+  regulator_put
+  request_firmware_direct
+  reservation_ww_class
+  round_jiffies_up
+  sched_setscheduler
+  schedule_timeout_interruptible
+  shmem_truncate_range
+  simple_attr_read
+  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
+  vmap
+  vmemmap
+  vmf_insert_mixed
+  vm_get_page_prot
+  vscnprintf
+  vunmap
+  wake_up_process
+  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
+  flush_work
+  gen_pool_dma_alloc_align
+  gen_pool_dma_zalloc_align
+  gen_pool_free_owner
+  sb800_prefetch
+  usb_calc_bus_time
+  usb_hcds_loaded
+
+# required by ohci-pci.ko
+  pci_get_slot
+  pci_match_id
+  usb_amd_prefetch_quirk
+
+# required by ohci-platform.ko
+  usb_create_hcd
+
+# required by phy-qcom-qmp.ko
+  of_clk_get_by_name
+  __of_reset_control_get
+
+# required by phy-qcom-qusb2.ko
+  devm_nvmem_cell_get
+
+# 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-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
+  devm_platform_ioremap_resource
+  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_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
+  rpmh_invalidate
+  rpmh_write_batch
+
+# required by qrtr-smd.ko
+  __pskb_pull_tail
+
+# required by qrtr-tun.ko
+  _copy_to_iter
+
+# required by qrtr.ko
+  __alloc_skb
+  datagram_poll
+  lock_sock_nested
+  netlink_capable
+  __nla_parse
+  proto_register
+  proto_unregister
+  _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
+
+# 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
+  remap_pfn_range
+  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 sdcardfs.ko
+  call_rcu
+  clear_nlink
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  config_item_init_type_name
+  copy_fs_struct
+  d_invalidate
+  d_path
+  d_rehash
+  d_set_d_op
+  d_splice_alias
+  filemap_write_and_wait
+  filp_close
+  filp_open
+  free_fs_struct
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  generic_delete_inode
+  __generic_file_fsync
+  generic_permission
+  igrab
+  init_special_inode
+  inode_newsize_ok
+  kill_anon_super
+  kmem_cache_alloc
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kstrtoull
+  lookup_one_len_unlocked
+  mntget
+  names_cachep
+  notify_change2
+  override_creds
+  prepare_creds
+  revert_creds
+  setattr_prepare
+  set_fs_pwd
+  set_nlink
+  shrink_dcache_sb
+  strcasecmp
+  strncasecmp
+  strrchr
+  synchronize_rcu
+  touch_atime
+  truncate_setsize
+  vfs_create2
+  vfs_fsync_range
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_read
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+  vfs_write
+
+# 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 ufs-qcom.ko
+  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
+
+# required by xhci-hcd.ko
+  add_timer
+  mod_delayed_work_on
+  __num_online_cpus
+  param_ops_ullong
+  pci_alloc_irq_vectors_affinity
+  pci_free_irq_vectors
+  pci_irq_vector
+  radix_tree_maybe_preload
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  trace_print_symbols_seq
+  usb_amd_pt_check_port
+  usb_asmedia_modifyflowcontrol
+  usb_disable_xhci_ports
+  usb_hcd_end_port_resume
+  usb_hcd_irq
+  usb_hcd_map_urb_for_dma
+  usb_hcd_start_port_resume
+  usb_hub_clear_tt_buffer
+  usb_wakeup_notification
+  wait_for_completion
+
+# required by xhci-pci-renesas.ko
+  debugfs_attr_read
+  debugfs_attr_write
+  device_release_driver
+  pci_dev_get
+  pci_read_config_word
+  pci_write_config_byte
+  request_firmware_nowait
+
+# required by xhci-pci.ko
+  pci_d3cold_disable
+  pci_set_mwi
+  pci_set_power_state
+  usb_create_shared_hcd
+  usb_enable_intel_xhci_ports
+
+# required by xhci-plat-hcd.ko
+  of_usb_host_tpl_support
+  __usb_create_hcd
diff --git a/android/abi_gki_aarch64_exynos b/android/abi_gki_aarch64_exynos
new file mode 100644
index 0000000..919c386
--- /dev/null
+++ b/android/abi_gki_aarch64_exynos
@@ -0,0 +1,1398 @@
+[abi_whitelist]
+  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
+  __break_lease
+  build_skb
+  bus_register
+  bus_register_notifier
+  bus_set_iommu
+  bus_unregister
+  bus_unregister_notifier
+  cache_line_size
+  call_rcu
+  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_inode
+  clear_nlink
+  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
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  config_item_init_type_name
+  console_lock
+  console_trylock
+  console_unlock
+  __const_udelay
+  consume_skb
+  copy_fs_struct
+  __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
+  _ctype
+  dapm_pinctrl_event
+  dapm_regulator_event
+  d_drop
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  dentry_open
+  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
+  dget_parent
+  d_invalidate
+  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
+  d_make_root
+  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
+  d_path
+  dput
+  d_rehash
+  driver_find
+  driver_find_device
+  driver_register
+  driver_unregister
+  d_set_d_op
+  d_splice_alias
+  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
+  filemap_write_and_wait
+  filp_close
+  filp_open
+  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_fs_struct
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  freezing_slow_path
+  freq_qos_add_request
+  freq_qos_update_request
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  fwnode_property_present
+  fwnode_property_read_u16_array
+  generic_delete_inode
+  __generic_file_fsync
+  generic_file_llseek
+  generic_handle_irq
+  generic_permission
+  generic_read_dir
+  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
+  iget5_locked
+  ignore_console_lock_warning
+  igrab
+  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_special_inode
+  init_task
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  inode_newsize_ok
+  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
+  iput
+  __irq_alloc_descs
+  irq_create_mapping
+  __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
+  iterate_dir
+  jiffies
+  jiffies_64
+  jiffies_64_to_clock_t
+  jiffies_to_msecs
+  jiffies_to_usecs
+  kasprintf
+  kernel_kobj
+  kernel_write
+  kern_path
+  __kfifo_alloc
+  __kfifo_free
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_call_rcu
+  kfree_const
+  kill_anon_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
+  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
+  kstrtouint
+  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
+  lockref_get
+  lock_rename
+  lookup_one_len_unlocked
+  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
+  mntget
+  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
+  names_cachep
+  __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
+  notify_change2
+  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
+  override_creds
+  panic
+  panic_notifier_list
+  param_ops_bool
+  param_ops_byte
+  param_ops_int
+  param_ops_long
+  param_ops_uint
+  param_ops_ulong
+  path_get
+  path_put
+  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
+  physvirt_offset
+  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_creds
+  prepare_to_wait_event
+  print_hex_dump
+  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
+  ___ratelimit
+  __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_filesystem
+  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
+  revert_creds
+  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_puts
+  seq_read
+  setattr_prepare
+  set_cpus_allowed_ptr
+  set_fs_pwd
+  set_nlink
+  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
+  shrink_dcache_sb
+  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
+  strcasecmp
+  strcat
+  strchr
+  strchrnul
+  strcmp
+  strcpy
+  strcspn
+  stream_open
+  strlcat
+  strlcpy
+  strlen
+  strncasecmp
+  strncat
+  strncmp
+  strncpy
+  strnlen
+  strpbrk
+  strrchr
+  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_atime
+  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
+  truncate_inode_pages
+  truncate_setsize
+  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_filesystem
+  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
+  vfs_create2
+  vfs_fsync
+  vfs_fsync_range
+  vfs_getattr
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_read
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+  vfs_write
+  video_devdata
+  video_device_alloc
+  video_device_release
+  video_ioctl2
+  __video_register_device
+  video_unregister_device
+  vmalloc
+  vmalloc_to_page
+  vmalloc_user
+  vmap
+  vmemmap
+  vmf_insert_pfn_prot
+  vm_get_page_prot
+  vm_iomap_memory
+  vm_map_pages
+  vm_map_ram
+  vm_unmap_ram
+  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_goldfish b/android/abi_gki_aarch64_goldfish
new file mode 100644
index 0000000..79afa37
--- /dev/null
+++ b/android/abi_gki_aarch64_goldfish
@@ -0,0 +1,1130 @@
+[abi_whitelist]
+# 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_put
+  blk_cleanup_queue
+  blk_queue_flag_set
+  blk_queue_write_cache
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  __break_lease
+  call_rcu
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  clear_inode
+  __close_fd
+  complete
+  __const_udelay
+  consume_skb
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  _ctype
+  d_drop
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_remove_recursive
+  delayed_work_timer_fn
+  del_gendisk
+  dentry_open
+  destroy_workqueue
+  _dev_err
+  device_add_disk
+  device_create
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_ioremap
+  devm_kfree
+  devm_kmalloc
+  devm_request_threaded_irq
+  _dev_warn
+  dget_parent
+  dma_alloc_attrs
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_release
+  dma_fence_signal_locked
+  dma_free_attrs
+  d_make_root
+  dma_set_coherent_mask
+  dma_set_mask
+  down_write
+  dput
+  d_splice_alias
+  ethtool_op_get_link
+  eth_validate_addr
+  event_triggers_call
+  fd_install
+  fget
+  finish_wait
+  flush_dcache_page
+  flush_work
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  fs_bio_set
+  generic_file_llseek
+  generic_read_dir
+  get_device
+  __get_free_pages
+  get_random_bytes
+  get_unused_fd_flags
+  ida_alloc_range
+  ida_free
+  iget5_locked
+  init_special_inode
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  input_allocate_device
+  input_event
+  input_free_device
+  input_register_device
+  input_unregister_device
+  iounmap
+  iput
+  iterate_dir
+  jiffies
+  jiffies_to_msecs
+  kern_path
+  kfree
+  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_add
+  kobject_create_and_add
+  kobject_init
+  kobject_put
+  kobject_uevent
+  kstrdup
+  kstrtouint
+  kstrtoull
+  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
+  lockref_get
+  lock_rename
+  match_token
+  memcpy
+  memmove
+  memset
+  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
+  netif_carrier_off
+  netif_carrier_on
+  netif_device_detach
+  netif_tx_stop_all_queues
+  netif_tx_wake_queue
+  nf_conntrack_destroy
+  noop_llseek
+  nr_cpu_ids
+  pagecache_get_page
+  param_ops_bool
+  param_ops_int
+  param_ops_uint
+  passthru_features_check
+  path_get
+  path_put
+  pci_disable_device
+  pci_enable_device
+  pci_read_config_byte
+  pci_read_config_dword
+  __pci_register_driver
+  pci_release_region
+  pci_request_region
+  pci_set_master
+  pci_unregister_driver
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  physvirt_offset
+  platform_device_add
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  pm_runtime_allow
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  __put_cred
+  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_filesystem
+  register_netdev
+  register_virtio_device
+  register_virtio_driver
+  remap_pfn_range
+  __request_module
+  request_threaded_irq
+  revalidate_disk
+  rtnl_lock
+  rtnl_unlock
+  schedule
+  schedule_timeout
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  set_disk_ro
+  set_nlink
+  sg_init_one
+  sg_init_table
+  skb_add_rx_frag
+  skb_put
+  snd_card_register
+  snd_ctl_enum_info
+  snd_ctl_sync_vmaster
+  snd_device_new
+  snd_pci_quirk_lookup
+  snd_pcm_add_chmap_ctls
+  snd_pcm_period_elapsed
+  snprintf
+  sort
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncmp
+  strncpy
+  strsep
+  submit_bio
+  __sw_hweight64
+  sync_file_create
+  synchronize_irq
+  synchronize_rcu
+  sysfs_create_group
+  sysfs_remove_group
+  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
+  truncate_inode_pages
+  try_module_get
+  unlock_new_inode
+  unlock_page
+  unlock_rename
+  unregister_blkdev
+  unregister_filesystem
+  unregister_netdev
+  unregister_virtio_device
+  unregister_virtio_driver
+  up_write
+  usleep_range
+  vabits_actual
+  vfs_getattr
+  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
+  vmemmap
+  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 dummy_hcd.ko
+  device_create_file
+  device_remove_file
+  platform_device_add_data
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  strstr
+  usb_add_gadget_udc
+  usb_add_hcd
+  usb_create_hcd
+  usb_create_shared_hcd
+  usb_del_gadget_udc
+  usb_disabled
+  usb_ep_set_maxpacket_limit
+  usb_gadget_giveback_request
+  usb_gadget_udc_reset
+  usb_get_dev
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hcd_is_primary_hcd
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_unlink_urb_from_ep
+  usb_put_dev
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by erofs.ko
+  add_to_page_cache_lru
+  bit_wait
+  fs_ftype_to_dtype
+  generic_block_bmap
+  generic_fillattr
+  generic_ro_fops
+  iget_failed
+  init_user_ns
+  inode_nohighmem
+  kill_block_super
+  __lock_page
+  LZ4_decompress_safe_partial
+  match_strdup
+  mount_bdev
+  new_inode
+  out_of_line_wait_on_bit_lock
+  page_get_link
+  posix_acl_access_xattr_handler
+  posix_acl_default_xattr_handler
+  posix_acl_from_xattr
+  print_hex_dump
+  put_pages_list
+  radix_tree_delete
+  radix_tree_gang_lookup
+  radix_tree_insert
+  radix_tree_lookup
+  radix_tree_preload
+  rcu_barrier
+  read_cache_page
+  read_cache_page_gfp
+  register_shrinker
+  sb_set_blocksize
+  simple_get_link
+  strnlen
+  strscpy
+  trace_print_flags_seq
+  trace_print_symbols_seq
+  unregister_shrinker
+  vm_map_ram
+  vm_unmap_aliases
+  vm_unmap_ram
+  wake_up_bit
+  __wake_up_locked
+
+# required by failover.ko
+  netdev_master_upper_dev_link
+  netdev_rx_handler_register
+  netdev_rx_handler_unregister
+  netdev_upper_dev_unlink
+  register_netdevice_notifier
+  rtnl_is_locked
+  unregister_netdevice_notifier
+
+# required by goldfish_address_space.ko
+  __ioremap
+  kzfree
+  memremap
+  memunmap
+
+# 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
+  dma_fence_default_wait
+  dma_fence_free
+
+# required by incrementalfs.ko
+  bin2hex
+  crc32_le
+  crypto_alloc_shash
+  crypto_destroy_tfm
+  crypto_shash_digest
+  d_add
+  deactivate_locked_super
+  d_instantiate
+  flush_delayed_work
+  fs_kobj
+  fsstack_copy_attr_all
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_shutdown_super
+  get_zeroed_page
+  ihold
+  inode_init_owner
+  kernel_read
+  kernel_write
+  ktime_get
+  lookup_one_len
+  LZ4_decompress_safe
+  match_int
+  mutex_is_locked
+  notify_change
+  set_anon_super
+  sget
+  simple_getattr
+  simple_setattr
+  simple_statfs
+  strndup_user
+  sync_filesystem
+  user_path_at_empty
+  vfs_create
+  vfs_fallocate
+  vfs_getxattr
+  vfs_link
+  vfs_listxattr
+  vfs_mkdir
+  vfs_rename
+  vfs_rmdir
+  vfs_setxattr
+  vfs_unlink
+
+# 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
+  device_release_driver
+  dst_release
+  ether_setup
+  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
+  kfree_skb
+  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_netdevice
+  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
+  bio_endio
+  bioset_exit
+  bioset_init
+  blk_alloc_queue
+  blkdev_get_by_dev
+  blkdev_put
+  blk_finish_plug
+  blk_queue_flag_clear
+  blk_queue_make_request
+  blk_queue_split
+  blk_register_region
+  blk_set_stacking_limits
+  blk_start_plug
+  blk_sync_queue
+  blk_unregister_region
+  bmap
+  check_disk_change
+  del_timer_sync
+  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
+  kthread_create_on_node
+  kthread_parkme
+  kthread_should_park
+  kthread_should_stop
+  kthread_stop
+  mempool_create
+  mempool_destroy
+  mempool_kfree
+  mempool_kmalloc
+  __per_cpu_offset
+  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
+  seq_open
+  seq_release
+  simple_strtoul
+  skip_spaces
+  strreplace
+  submit_bh
+  submit_bio_wait
+  sync_blockdev
+  sysfs_create_link
+  sysfs_notify
+  sysfs_remove_link
+  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_queue_xmit
+  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
+  unregister_netdevice_queue
+
+# required by rtc-test.ko
+  add_timer
+  del_timer
+  device_init_wakeup
+  devm_rtc_allocate_device
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by sdcardfs.ko
+  clear_nlink
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  config_item_init_type_name
+  copy_fs_struct
+  d_invalidate
+  d_path
+  d_rehash
+  d_set_d_op
+  filemap_write_and_wait
+  filp_close
+  filp_open
+  free_fs_struct
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  generic_delete_inode
+  __generic_file_fsync
+  generic_permission
+  igrab
+  inode_newsize_ok
+  kill_anon_super
+  lookup_one_len_unlocked
+  mntget
+  names_cachep
+  notify_change2
+  override_creds
+  prepare_creds
+  revert_creds
+  setattr_prepare
+  set_fs_pwd
+  shrink_dcache_sb
+  strcasecmp
+  strncasecmp
+  strrchr
+  touch_atime
+  truncate_setsize
+  vfs_create2
+  vfs_fsync_range
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_read
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+  vfs_write
+
+# 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_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  pm_runtime_set_autosuspend_delay
+  __printk_ratelimit
+  regcache_mark_dirty
+  snd_card_rw_proc_new
+  snd_component_add
+  snd_ctl_add
+  _snd_ctl_add_slave
+  snd_ctl_add_vmaster_hook
+  snd_ctl_apply_vmaster_slaves
+  snd_ctl_boolean_mono_info
+  snd_ctl_find_id
+  snd_ctl_make_virtual_master
+  snd_ctl_new1
+  snd_ctl_remove
+  snd_device_disconnect
+  snd_device_free
+  snd_jack_new
+  snd_jack_report
+  snd_jack_set_key
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_hw_constraint_step
+  snd_pcm_lib_default_mmap
+  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_set_ops
+  snd_pcm_set_sync
+  snd_pcm_std_chmaps
+  strncat
+  timecounter_read
+
+# required by snd-hda-core.ko
+  add_uevent_var
+  bus_register
+  bus_unregister
+  device_add
+  device_del
+  device_initialize
+  dev_set_name
+  kasprintf
+  krealloc
+  kstrtoint
+  pm_runtime_get_if_in_use
+  __pm_runtime_resume
+  __pm_runtime_set_status
+  regcache_cache_only
+  regcache_sync
+  regmap_exit
+  __regmap_init
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+  snd_pcm_format_width
+  timecounter_init
+
+# required by snd-hda-intel.ko
+  complete_all
+  param_array_ops
+  param_get_int
+  param_ops_bint
+  param_ops_charp
+  param_set_int
+  pci_dev_put
+  pci_disable_msi
+  pci_enable_msi
+  pci_get_device
+  pci_intx
+  pci_ioremap_bar
+  pci_match_id
+  pci_read_config_word
+  pci_release_regions
+  pci_request_regions
+  pci_set_power_state
+  pci_write_config_byte
+  pci_write_config_dword
+  pci_write_config_word
+  snd_card_disconnect
+  snd_card_free
+  snd_card_new
+
+# required by test_meminit.ko
+  kmem_cache_alloc_bulk
+  kmem_cache_free_bulk
+  vfree
+  vmalloc
+
+# required by virtio-gpu.ko
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  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_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
+  memdup_user
+  __sg_alloc_table_from_pages
+  sg_free_table
+  sg_next
+  sync_file_get_fence
+  __tracepoint_dma_fence_emit
+  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_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
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+
+# required by virtio-rng.ko
+  hwrng_register
+  hwrng_unregister
+  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_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_rq_map_kern
+  blk_rq_map_sg
+  blk_status_to_errno
+  _dev_notice
+  kobject_uevent_env
+  string_get_size
+  __sysfs_match_string
+
+# 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
+  no_llseek
+  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
+  device_register
+  __devm_request_region
+  iomem_resource
+  memparse
+  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
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  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
+  __num_online_cpus
+  _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
+  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
diff --git a/android/abi_gki_aarch64_hikey960 b/android/abi_gki_aarch64_hikey960
new file mode 100644
index 0000000..1f970a4
--- /dev/null
+++ b/android/abi_gki_aarch64_hikey960
@@ -0,0 +1,1505 @@
+[abi_whitelist]
+# 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
+  __break_lease
+  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
+  clear_inode
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_prepare
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_get
+  clk_get_rate
+  clk_prepare
+  clk_put
+  clk_set_rate
+  clk_unprepare
+  __close_fd
+  complete
+  complete_all
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  __const_udelay
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  _ctype
+  d_add
+  d_drop
+  debugfs_attr_read
+  debugfs_attr_write
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_file_unsafe
+  debugfs_create_regset32
+  debugfs_remove
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  dentry_open
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_fwnode
+  device_add_disk
+  device_create_file
+  device_get_match_data
+  device_initialize
+  device_init_wakeup
+  device_property_present
+  device_property_read_string
+  device_property_read_u32_array
+  device_release_driver
+  device_remove_file
+  device_set_wakeup_capable
+  device_wakeup_enable
+  _dev_info
+  devm_clk_get
+  devm_clk_get_optional
+  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
+  devm_usb_get_phy_by_phandle
+  dev_pm_opp_get_opp_count
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  dev_set_name
+  _dev_warn
+  dget_parent
+  disable_irq
+  disable_irq_nosync
+  dma_alloc_attrs
+  dma_direct_map_page
+  dma_direct_map_sg
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_free_attrs
+  d_make_root
+  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
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  fd_install
+  filp_open
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  fput
+  free_irq
+  __free_pages
+  free_pages
+  generic_delete_inode
+  generic_file_llseek
+  generic_read_dir
+  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
+  iget5_locked
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  inode_init_once
+  __ioremap
+  iounmap
+  iput
+  irq_get_irq_data
+  irq_of_parse_and_map
+  irq_set_irq_wake
+  iterate_dir
+  jiffies
+  kern_path
+  kfree
+  kfree_const
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmemdup
+  kstrdup
+  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
+  lockref_get
+  lock_rename
+  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
+  __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_device_by_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_platform_depopulate
+  of_platform_populate
+  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
+  path_get
+  path_put
+  pci_alloc_irq_vectors_affinity
+  pci_dev_put
+  pci_free_irq_vectors
+  pci_irq_vector
+  pci_match_id
+  pci_read_config_byte
+  pci_read_config_word
+  __pci_register_driver
+  pci_set_master
+  pci_set_mwi
+  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_add
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_resource
+  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_suspend_global_flags
+  pm_wakeup_dev_event
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  __put_cred
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  queue_delayed_work_on
+  queue_work_on
+  radix_tree_delete
+  ___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
+  register_filesystem
+  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
+  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
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  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
+  strcpy
+  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_print_symbols_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  trace_seq_putc
+  truncate_inode_pages
+  try_module_get
+  unlock_new_inode
+  unlock_rename
+  unregister_chrdev_region
+  unregister_filesystem
+  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_debug_root
+  usb_disabled
+  usb_gadget_set_state
+  usb_get_dr_mode
+  usb_hcd_check_unlink_urb
+  usb_hcd_end_port_resume
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_is_primary_hcd
+  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_start_port_resume
+  usb_hcd_unlink_urb_from_ep
+  usb_hub_clear_tt_buffer
+  usb_put_hcd
+  usb_remove_hcd
+  usb_role_switch_register
+  usb_role_switch_unregister
+  usb_root_hub_lost_power
+  __usecs_to_jiffies
+  usleep_range
+  vfree
+  vfs_fallocate
+  vfs_getattr
+  vmalloc
+  vmemmap
+  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 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_read_string_array
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  mmc_can_gpio_cd
+  sdio_signal_irq
+
+# 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
+  irq_modify_status
+  of_clk_get_parent_count
+
+# required by dwc3.ko
+  bpf_trace_run4
+  device_property_read_u8_array
+  devm_clk_bulk_get_all
+  devm_phy_get
+  devm_usb_get_phy
+  extcon_find_edev_by_node
+  extcon_get_extcon_dev
+  extcon_register_notifier
+  extcon_unregister_notifier
+  of_usb_get_phy_mode
+  phy_exit
+  phy_init
+  phy_pm_runtime_get_sync
+  phy_pm_runtime_put_sync
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  platform_get_irq_byname_optional
+  platform_get_resource_byname
+  system_freezable_wq
+  usb_add_gadget_udc
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_ep_set_maxpacket_limit
+  usb_gadget_giveback_request
+  usb_gadget_map_request_by_dev
+  usb_gadget_udc_reset
+  usb_gadget_unmap_request_by_dev
+  usb_get_maximum_speed
+
+# required by ehci-hcd.ko
+  ehci_cf_port_reset_rwsem
+  usb_for_each_dev
+
+# required by ehci-pci.ko
+  pci_clear_mwi
+  pci_find_capability
+  pci_read_config_dword
+  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
+  get_next_ino
+  get_tree_single
+  kill_fasync
+  kill_litter_super
+  kiocb_set_cancel_fn
+  mutex_trylock
+  new_inode
+  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_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
+  usb_role_switch_get
+  usb_role_switch_get_role
+  usb_role_switch_put
+  usb_role_switch_set_role
+
+# required by hisi_powerkey.ko
+  devm_input_allocate_device
+  devm_request_any_context_irq
+  input_event
+  input_register_device
+  input_set_capability
+
+# 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
+  strpbrk
+
+# required by i2c-designware-core.ko
+  i2c_add_numbered_adapter
+  i2c_generic_scl_recovery
+  i2c_recover_bus
+
+# required by i2c-designware-platform.ko
+  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 incrementalfs.ko
+  crc32_le
+  crypto_alloc_shash
+  crypto_destroy_tfm
+  crypto_shash_digest
+  deactivate_locked_super
+  d_instantiate
+  fget
+  flush_dcache_page
+  flush_delayed_work
+  fs_kobj
+  fsstack_copy_attr_all
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_shutdown_super
+  ihold
+  inode_init_owner
+  kernel_read
+  kernel_write
+  kobject_create_and_add
+  kobject_put
+  lookup_one_len
+  LZ4_decompress_safe
+  match_int
+  match_token
+  mutex_is_locked
+  notify_change
+  pagecache_get_page
+  set_anon_super
+  sget
+  simple_getattr
+  simple_setattr
+  strndup_user
+  strsep
+  sync_filesystem
+  unlock_page
+  user_path_at_empty
+  vfs_create
+  vfs_getxattr
+  vfs_link
+  vfs_listxattr
+  vfs_mkdir
+  vfs_rename
+  vfs_rmdir
+  vfs_setxattr
+  vfs_unlink
+
+# required by ion_cma_heap.ko
+  cma_alloc
+  cma_for_each_area
+  cma_get_name
+  cma_release
+  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
+  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
+  msleep_interruptible
+  of_devfreq_cooling_register_power
+  of_get_next_available_child
+  of_property_read_u64
+  physvirt_offset
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  register_shrinker
+  __release_region
+  remap_pfn_range
+  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
+  vmap
+  vmf_insert_pfn
+  vm_mmap
+  vunmap
+  vzalloc
+  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_rwsem
+  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_device_is_present
+  pci_disable_device
+  pcie_aspm_enabled
+  pci_enable_device_mem
+  pci_free_irq
+  pci_load_saved_state
+  pci_release_selected_regions
+  pci_request_irq
+  pci_request_selected_regions
+  pci_restore_state
+  pci_save_state
+  pci_select_bars
+  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
+  cpumask_next
+  fs_bio_set
+  hex_to_bin
+  iov_iter_bvec
+  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_zero_buffer
+  strcspn
+  submit_bio
+  uuid_gen
+  uuid_parse
+  vfs_fsync
+
+# 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
+
+# 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
+  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 sdcardfs.ko
+  call_rcu
+  clear_nlink
+  config_item_init_type_name
+  copy_fs_struct
+  d_invalidate
+  d_path
+  d_rehash
+  d_set_d_op
+  d_splice_alias
+  filemap_write_and_wait
+  filp_close
+  free_fs_struct
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  __generic_file_fsync
+  generic_permission
+  igrab
+  init_special_inode
+  inode_newsize_ok
+  kill_anon_super
+  kmem_cache_alloc
+  kmem_cache_free
+  lookup_one_len_unlocked
+  mntget
+  names_cachep
+  notify_change2
+  override_creds
+  prepare_creds
+  revert_creds
+  setattr_prepare
+  set_fs_pwd
+  set_nlink
+  shrink_dcache_sb
+  strcasecmp
+  strncasecmp
+  strrchr
+  touch_atime
+  truncate_setsize
+  vfs_create2
+  vfs_fsync_range
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_read
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+  vfs_write
+
+# 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
+  __udelay
+
+# required by spidev.ko
+  device_create
+  device_destroy
+  __register_chrdev
+  stream_open
+  __unregister_chrdev
+
+# 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
+  consume_skb
+  device_create_bin_file
+  device_remove_bin_file
+  dev_pm_clear_wake_irq
+  dev_pm_set_dedicated_wake_irq
+  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_data
+  print_hex_dump
+  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 xhci-hcd.ko
+  add_timer
+  devm_add_action
+  __num_online_cpus
+  param_ops_ullong
+  radix_tree_insert
+  radix_tree_lookup
+  radix_tree_maybe_preload
+  usb_amd_pt_check_port
+  usb_asmedia_modifyflowcontrol
+  usb_disable_xhci_ports
+  usb_hcd_irq
+  usb_hcd_map_urb_for_dma
+  usb_wakeup_notification
+  vsnprintf
+
+# required by xhci-pci.ko
+  pci_d3cold_disable
+  pci_set_power_state
+  usb_create_shared_hcd
+  usb_enable_intel_xhci_ports
+
+# required by xhci-plat-hcd.ko
+  of_fwnode_ops
+  of_usb_host_tpl_support
+  pci_bus_type
+  __usb_create_hcd
diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom
new file mode 100644
index 0000000..02e31a4
--- /dev/null
+++ b/android/abi_gki_aarch64_qcom
@@ -0,0 +1,2465 @@
+[abi_whitelist]
+  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
+  call_rcu
+  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
+  cmd_db_read_addr
+  cmd_db_read_aux_data
+  cmd_db_read_slave_id
+  cmd_db_ready
+  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
+  filp_close
+  filp_open
+  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_create_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_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
+  new_inode
+  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
+  physvirt_offset
+  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
+  print_hex_dump
+  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_delete
+  radix_tree_gang_lookup
+  radix_tree_insert
+  radix_tree_iter_delete
+  radix_tree_lookup
+  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_barrier
+  __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_filesystem
+  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
+  rpmh_flush
+  rpmh_invalidate
+  rpmh_write
+  rpmh_write_async
+  rpmh_write_batch
+  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_flags_seq
+  trace_print_hex_seq
+  trace_print_symbols_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_filesystem
+  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_hcd
+  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_create_hcd
+  usb_create_hcd
+  usb_create_shared_hcd
+  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_hcd_check_unlink_urb
+  usb_hcd_end_port_resume
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_irq
+  usb_hcd_is_primary_hcd
+  usb_hcd_link_urb_to_ep
+  usb_hcd_map_urb_for_dma
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_start_port_resume
+  usb_hcd_unlink_urb_from_ep
+  usb_hub_clear_tt_buffer
+  usb_hub_find_child
+  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_hcd
+  usb_put_intf
+  usb_register_driver
+  usb_register_notify
+  usb_remove_hcd
+  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
+  vfs_read
+  vfs_statx
+  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
+  vmemmap
+  vmf_insert_mixed
+  vmf_insert_pfn
+  vm_get_page_prot
+  vm_insert_page
+  vm_iomap_memory
+  vm_map_ram
+  vm_unmap_ram
+  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_locked
+  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..448392e
--- /dev/null
+++ b/android/abi_gki_aarch64_sunxi
@@ -0,0 +1,188 @@
+[abi_whitelist]
+# 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
+  pagecache_get_page
+  read_cache_page
+  truncate_inode_pages_final
+  __vmalloc
+  io_schedule
+  is_bad_inode
+  end_buffer_read_sync
+
+# required by squashfs.ko
+  generic_ro_fops
+  get_tree_bdev
+  iget_failed
+  iget_locked
+  inode_nohighmem
+  ll_rw_block
+  logfc
+  page_get_link
+  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..83e9c08
--- /dev/null
+++ b/android/abi_gki_aarch64_unisoc
@@ -0,0 +1,2100 @@
+[abi_whitelist]
+# commonly used symbols
+  add_timer
+  add_uevent_var
+  add_wait_queue
+  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_unregister
+  call_rcu
+  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
+  compat_alloc_user_space
+  complete
+  complete_all
+  config_ep_by_speed
+  console_lock
+  console_unlock
+  __const_udelay
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  csum_ipv6_magic
+  csum_partial
+  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_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_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_pinctrl_get
+  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_compat_ioctl
+  drm_dbg
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_err
+  drm_ioctl
+  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_get_edev_by_phandle
+  extcon_get_state
+  fb_mode_option
+  __find_get_block
+  find_next_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages_exact
+  free_percpu
+  freezing_slow_path
+  fwnode_property_present
+  fwnode_property_read_string
+  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_random_bytes
+  gpiochip_get_data
+  gpiochip_line_is_irq
+  gpiod_direction_input
+  gpiod_direction_output_raw
+  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
+  hid_compare_device_paths
+  hid_debug
+  hid_field_extract
+  hid_hw_close
+  hid_hw_open
+  hid_hw_stop
+  hid_input_report
+  hid_report_raw_event
+  __hid_request
+  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
+  ignore_console_lock_warning
+  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_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
+  __ioremap
+  iounmap
+  ip_route_output_flow
+  irq_find_mapping
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_irq_type
+  irq_set_irq_wake
+  is_console_locked
+  jiffies
+  jiffies_to_msecs
+  kernel_kobj
+  __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
+  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_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_device_get_match_data
+  of_device_is_available
+  of_device_is_compatible
+  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_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
+  physvirt_offset
+  pinctrl_lookup_state
+  pinctrl_select_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_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
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  proc_create
+  proc_create_data
+  proc_create_seq_private
+  proc_mkdir
+  __pskb_copy_fclone
+  put_device
+  put_tty_driver
+  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
+  __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_push
+  skb_put
+  skb_realloc_headroom
+  skb_trim
+  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
+  strlcpy
+  strlen
+  strncasecmp
+  strncmp
+  strncpy
+  strncpy_from_user
+  strnlen
+  strstr
+  __sw_hweight32
+  __sw_hweight64
+  sync_filesystem
+  syscon_regmap_lookup_by_phandle
+  syscon_regmap_lookup_by_phandle_args
+  sysfs_create_file_ns
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  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_hid_driver
+  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
+  vmemmap
+  vm_iomap_memory
+  vm_map_ram
+  vm_unmap_ram
+  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
+
+# 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
+  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 dwc3.ko
+  device_property_read_string
+  device_property_read_u8_array
+  devm_clk_bulk_get
+  devm_phy_get
+  __devm_reset_control_get
+  extcon_find_edev_by_node
+  extcon_get_extcon_dev
+  extcon_register_notifier
+  extcon_unregister_notifier
+  of_usb_get_phy_mode
+  phy_exit
+  phy_init
+  phy_pm_runtime_get_sync
+  phy_pm_runtime_put_sync
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  platform_get_irq_byname_optional
+  synchronize_irq
+  usb_decode_ctrl
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+  usb_gadget_unmap_request_by_dev
+  usb_get_maximum_speed
+
+# 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_fillattr
+  generic_write_end
+  __getblk_gfp
+  ilookup
+  inc_nlink
+  in_group_p
+  __insert_inode_hash
+  invalidate_inode_buffers
+  iunique
+  kill_block_super
+  kvfree
+  kvmalloc_node
+  load_nls
+  __lock_buffer
+  mark_buffer_dirty
+  __mark_inode_dirty
+  match_int
+  match_octal
+  match_strdup
+  match_token
+  mktime64
+  mount_bdev
+  mpage_readpage
+  mpage_readpages
+  mpage_writepages
+  new_inode
+  __remove_inode_hash
+  sb_min_blocksize
+  sb_set_blocksize
+  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 hid-generic.ko
+  bus_for_each_drv
+  hid_bus_type
+  hid_hw_start
+  hid_match_device
+  hid_open_report
+  __hid_register_driver
+  hid_unregister_driver
+
+# required by hid-logitech-dj.ko
+  hid_add_device
+  hid_allocate_device
+  hid_destroy_device
+  hid_parse_report
+  strlcat
+
+# required by hid-logitech-hidpp.ko
+  hid_snto32
+  input_ff_create
+  strnstr
+
+# required by hid-picolcd.ko
+  hid_set_field
+
+# required by hid-prodikeys.ko
+  snd_card_disconnect
+  snd_card_free_when_closed
+  snd_card_new
+  snd_card_register
+  snd_device_new
+  snd_rawmidi_new
+  snd_rawmidi_receive
+  snd_rawmidi_set_ops
+
+# required by hid-roccat.ko
+  noop_llseek
+
+# required by hid-roccat-lua.ko
+  sysfs_create_bin_file
+  sysfs_remove_bin_file
+
+# required by hid-uclogic.ko
+  usb_string
+
+# required by hid-wiimote.ko
+  kasprintf
+  led_classdev_register_ext
+  led_classdev_unregister
+
+# 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
+  rcu_barrier
+  skb_checksum_help
+  strim
+  xfrm_lookup
+
+# 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
+
+# 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
+  pcie_bus_configure_settings
+  pci_lock_rescan_remove
+  pci_scan_child_bus
+  pci_stop_and_remove_bus_device
+  pci_unlock_rescan_remove
+
+# 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_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
+  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
+  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
+  trace_print_symbols_seq
+  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 sdcardfs.ko
+  __break_lease
+  clear_inode
+  clear_nlink
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  config_item_init_type_name
+  copy_fs_struct
+  d_drop
+  dentry_open
+  dget_parent
+  d_invalidate
+  d_make_root
+  d_path
+  dput
+  d_rehash
+  d_set_d_op
+  d_splice_alias
+  filemap_write_and_wait
+  filp_close
+  filp_open
+  free_fs_struct
+  fscrypt_register_key_removal_notifier
+  fscrypt_unregister_key_removal_notifier
+  fs_parse
+  fsstack_copy_inode_size
+  generic_delete_inode
+  __generic_file_fsync
+  generic_permission
+  generic_read_dir
+  iget5_locked
+  igrab
+  init_special_inode
+  inode_init_once
+  inode_newsize_ok
+  iput
+  iterate_dir
+  kern_path
+  kill_anon_super
+  lockref_get
+  lock_rename
+  lookup_one_len_unlocked
+  mntget
+  names_cachep
+  notify_change2
+  override_creds
+  path_get
+  path_put
+  prepare_creds
+  __put_cred
+  register_filesystem
+  revert_creds
+  setattr_prepare
+  set_fs_pwd
+  set_nlink
+  shrink_dcache_sb
+  strrchr
+  touch_atime
+  truncate_inode_pages
+  truncate_setsize
+  unlock_new_inode
+  unlock_rename
+  unregister_filesystem
+  vfs_create2
+  vfs_fsync_range
+  vfs_get_super
+  vfs_mkdir2
+  vfs_path_lookup
+  vfs_rename2
+  vfs_rmdir2
+  vfs_statfs
+  vfs_unlink2
+
+# 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_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
+  print_hex_dump
+  __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
+  vfs_getattr
+  vfs_statx
+
+# 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_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-dpu.ko
+  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
+  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
+  __platform_register_drivers
+  platform_unregister_drivers
+  regmap_get_reg_stride
+  regmap_get_val_bytes
+  try_wait_for_completion
+  vfs_write
+
+# 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
+
+# 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
+  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
+  vfs_read
+  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
+
+# 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 wacom.ko
+  devm_led_trigger_register
+  devres_close_group
+  devres_open_group
+  devres_release_group
+  hid_alloc_report_buf
+  hidinput_calc_abs_res
+  int_sqrt
+  __kfifo_in_r
+  __kfifo_max_r
+  __kfifo_out_r
+  __kfifo_skip_r
+  led_trigger_event
+  memmove
+  sysfs_create_files
+
+# required by wcn_bsp.ko
+  memdup_user
+  register_chrdev_region
+  request_firmware_direct
+
+# required by xhci-hcd.ko
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  __num_online_cpus
+  param_ops_ullong
+  pci_alloc_irq_vectors_affinity
+  pci_free_irq_vectors
+  pci_irq_vector
+  radix_tree_delete
+  radix_tree_insert
+  radix_tree_lookup
+  radix_tree_maybe_preload
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  usb_amd_dev_put
+  usb_amd_pt_check_port
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_asmedia_modifyflowcontrol
+  usb_disable_xhci_ports
+  usb_hcd_end_port_resume
+  usb_hc_died
+  usb_hcd_irq
+  usb_hcd_start_port_resume
+  usb_hub_clear_tt_buffer
+  usb_root_hub_lost_power
+  usb_wakeup_notification
+
+# required by xhci-plat-hcd.ko
+  devm_clk_get_optional
+  of_usb_host_tpl_support
+  pci_bus_type
+  __usb_create_hcd
+  usb_hcd_platform_shutdown
diff --git a/android/gki_aarch64_modules b/android/gki_aarch64_modules
new file mode 100644
index 0000000..ca69224
--- /dev/null
+++ b/android/gki_aarch64_modules
@@ -0,0 +1 @@
+fs/erofs/erofs.ko
diff --git a/arch/Kconfig b/arch/Kconfig
index 238dccf..e2465e9 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -521,6 +521,110 @@
 	  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
+	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
+	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
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 @@
 	dev_info(dev, "use %scoherent DMA ops\n",
 		 dev->dma_coherent ? "" : "non");
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 05c9bbf..c73b128 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1249,6 +1249,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/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 @@
 
 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/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 @@
 /*
  * 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 @@
 	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 @@
 #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 @@
 	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 @@
 
 #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 @@
 	}
 
 	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 @@
 	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 @@
 	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 @@
 #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/xen/enlighten.c b/arch/arm/xen/enlighten.c
index dd6804a..7728a86 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 @@
 	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)
 {
@@ -405,7 +413,7 @@
 		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..71d23b5 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
@@ -125,7 +128,7 @@
 	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 +152,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 +968,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---
@@ -1612,6 +1619,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 +1643,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 96abe55..d2bc19dd 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..c7f497c
--- /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 751651a..7d8e88c 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,15 +342,177 @@
 
 &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>,
 			   <GCC_QSPI_CNOC_PERIPH_AHB_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";
@@ -382,6 +555,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";
@@ -390,6 +594,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";
@@ -420,6 +657,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 {
@@ -437,6 +688,7 @@
 };
 
 &uart9 {
+	label = "LS-UART1";
 	status = "okay";
 };
 
@@ -522,6 +774,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..0a37fa7
--- /dev/null
+++ b/arch/arm64/configs/db845c_gki.fragment
@@ -0,0 +1,89 @@
+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_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_XHCI_PCI_RENESAS=m
+CONFIG_USB_XHCI_HCD=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+CONFIG_USB_DWC3=m
+# CONFIG_USB_DWC3_HAPS is not set
+# CONFIG_USB_DWC3_OF_SIMPLE is not set
+CONFIG_USB_GADGET_VBUS_DRAW=500
+# CONFIG_USB_DUMMY_HCD is not set
+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_INCREMENTAL_FS=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_SDCARD_FS=m
+CONFIG_QCOM_PDC=m
+CONFIG_QCOM_SCM=m
+CONFIG_ARM_SMMU=m
+CONFIG_SCSI_UFS_QCOM=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..68771bb
--- /dev/null
+++ b/arch/arm64/configs/gki_defconfig
@@ -0,0 +1,583 @@
+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_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_SCHED=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+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_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_ARM_PSCI_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_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_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_QCOM=y
+CONFIG_PCIE_KIRIN=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_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_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_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=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_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_HID_NINTENDO=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_SONY=y
+CONFIG_HID_STEAM=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_OTG=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_GADGET=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_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGERS=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_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_SUN50I_ERRATUM_UNKNOWN1 is not set
+CONFIG_MAILBOX=y
+CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y
+CONFIG_REMOTEPROC=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_RPMH=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_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_OVERLAY_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_EROFS_FS=m
+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_LZ4=y
+CONFIG_CRYPTO_ZSTD=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_DEBUG_INFO=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_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_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..1d65909
--- /dev/null
+++ b/arch/arm64/configs/hikey960_gki.fragment
@@ -0,0 +1,59 @@
+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_XHCI_HCD=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_DWC3=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_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
+CONFIG_SDCARD_FS=m
+CONFIG_INCREMENTAL_FS=m
diff --git a/arch/arm64/configs/rockpi4_defconfig b/arch/arm64/configs/rockpi4_defconfig
new file mode 100644
index 0000000..ed619e0
--- /dev/null
+++ b/arch/arm64/configs/rockpi4_defconfig
@@ -0,0 +1,541 @@
+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_SDCARD_FS=y
+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/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 @@
 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 @@
 
 	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 @@
 	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 @@
 
 	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 @@
 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 @@
 
 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 @@
 
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 					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 @@
 {
 	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 @@
 
 	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 @@
 				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 @@
 	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_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 @@
 	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_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_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 @@
 {
 	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 @@
 	".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 @@
 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 @@
 	.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 @@
 .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 @@
 .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/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..2bbf174 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -56,6 +56,7 @@
 #define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM	46
 #define ARM64_WORKAROUND_1542419		47
 
-#define ARM64_NCAPS				48
+/* kabi: reserve 48 - 62 for future cpu capabilities */
+#define ARM64_NCAPS				62
 
 #endif /* __ASM_CPUCAPS_H */
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 08df42e..c49bf24 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -310,6 +310,24 @@
 #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 @@
  * 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 @@
 		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 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/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 @@
 
 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/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 @@
 
 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/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 @@
 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 @@
 #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 @@
 /* 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/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 @@
 	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 @@
 	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 @@
 	} 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 @@
 #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 f400cb2..da92693 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -1033,7 +1033,7 @@
 }
 
 #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);
@@ -1051,7 +1051,7 @@
 	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));
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 @@
 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 b182442..ce2d19f 100644
--- a/arch/arm64/kernel/module-plts.c
+++ b/arch/arm64/kernel/module-plts.c
@@ -252,6 +252,40 @@
 	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)
 {
@@ -289,7 +323,7 @@
 
 	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)
@@ -299,8 +333,14 @@
 		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/process.c b/arch/arm64/kernel/process.c
index 10190c4..d93436f 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 @@
 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 @@
 		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.
@@ -548,6 +544,7 @@
 	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 43ae4e0..5fadf6b 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -38,7 +38,8 @@
 
 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 102dc3e..cfe1bf2 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);
@@ -357,6 +360,9 @@
 {
 	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();
@@ -895,6 +901,7 @@
 		break;
 
 	case IPI_CPU_STOP:
+		trace_android_vh_ipi_stop(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 @@
 	 * 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..56543ea 100644
--- a/arch/arm64/kernel/vdso32/Makefile
+++ b/arch/arm64/kernel/vdso32/Makefile
@@ -10,7 +10,18 @@
 
 # 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)
 else
 CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
 endif
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_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 4f77de8..048beb1 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -180,6 +180,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/lib/copy_page.S b/arch/arm64/lib/copy_page.S
index bbb8562..290dd3c 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
 ENDPROC(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 @@
 		dev->dma_ops = &xen_swiotlb_dma_ops;
 #endif
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index a1e0592..5c8219c 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
@@ -250,15 +264,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 +295,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 +367,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 +382,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
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index cdc79de..0aa97d63 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -976,3 +976,14 @@
 {
 	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/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 @@
 {
 	dev->dma_coherent = coherent;
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
 #endif
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index f582aa2..5034a59 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -96,7 +96,7 @@
 {
 	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 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 */
 
@@ -179,7 +179,7 @@
  * 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;
@@ -204,8 +204,7 @@
 	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;
 }
 
@@ -444,7 +443,7 @@
 }
 
 /* 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;
@@ -472,8 +471,7 @@
 			 * 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
@@ -2096,12 +2094,12 @@
 
 		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/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 @@
 	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/os-Linux/umid.c b/arch/um/os-Linux/umid.c
index 44def53..4c19df8 100644
--- a/arch/um/os-Linux/umid.c
+++ b/arch/um/os-Linux/umid.c
@@ -135,18 +135,12 @@
  */
 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;
 
-	err = asprintf(&file, "%s/pid", dir);
-	if (err < 0)
-		return 0;
-
-	filelen = strlen(file);
-
-	n = snprintf(file, filelen, "%s/pid", dir);
-	if (n >= filelen) {
+	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;
@@ -191,7 +185,6 @@
 out_close:
 	close(fd);
 out:
-	free(file);
 	return 0;
 }
 
@@ -217,21 +210,18 @@
 
 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());
@@ -241,8 +231,6 @@
 		       errno);
 
 	close(fd);
-out:
-	free(file);
 }
 
 int __init set_umid(char *name)
@@ -397,19 +385,13 @@
 
 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/x86/Kconfig b/arch/x86/Kconfig
index 8ef8513..e3cb534 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
@@ -139,7 +141,7 @@
 	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
@@ -204,7 +206,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 94df086..3bafa7c 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -209,6 +209,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/configs/gki_defconfig b/arch/x86/configs/gki_defconfig
new file mode 100644
index 0000000..5ce6443
--- /dev/null
+++ b/arch/x86/configs/gki_defconfig
@@ -0,0 +1,506 @@
+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_MEMCG_SWAP=y
+CONFIG_CGROUP_SCHED=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+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_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_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_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_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_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_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_GOV_POWER_ALLOCATOR=y
+CONFIG_DEVFREQ_THERMAL=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_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_HID_NINTENDO=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_SONY=y
+CONFIG_HID_STEAM=y
+CONFIG_USB_HIDDEV=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_GADGET=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_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_RTC_CLASS=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_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_OVERLAY_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_EROFS_FS=m
+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_SHA256_SSSE3=y
+CONFIG_CRYPTO_AES_NI_INTEL=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ZSTD=y
+CONFIG_CRYPTO_ANSI_CPRNG=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_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_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_TIMEOUT=5
+CONFIG_SCHEDSTATS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
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 @@
 
 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 @@
 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 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 @@
 
 	.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 @@
 
 	.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 @@
 	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 @@
 	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/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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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 @@
 	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 @@
 }
 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 @@
 }
 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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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/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 @@
 				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 @@
 
 			/* 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 @@
 
 		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 @@
 
 		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 @@
 }
 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 @@
 	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/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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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 @@
 }
 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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	    (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 @@
 }
 
 #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 @@
 #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 @@
 	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 @@
 #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 @@
 	    (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 @@
 }
 
 #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 @@
 #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 @@
 #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 @@
 	    (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 @@
 }
 
 #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 @@
 #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 @@
 	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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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 @@
 	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 @@
 	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 @@
 	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 @@
 }
 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 @@
 }
 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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 @@
 
 	.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 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/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 @@
 	 * 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 0461ab257..711abf0 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -3315,8 +3315,9 @@
 	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 @@
 	 * 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 @@
 			       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 @@
 			       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_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 @@
 
 #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/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 @@
  * 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 @@
  * 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 @@
 #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 @@
  * 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 @@
 #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 @@
 	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/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 @@
 
 #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/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 @@
  *
  * 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/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 @@
 	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 @@
 			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 @@
 	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/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 @@
 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_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 @@
 	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 @@
 	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 @@
 	 */
 	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/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 @@
 	"^(xen_irq_disable_direct_reloc$|"
 	"xen_save_fl_direct_reloc$|"
 	"VDSO|"
+	"__typeid__|"
 	"__crc_)",
 
 /*
@@ -78,6 +79,8 @@
 	"__end_rodata_hpage_align|"
 #endif
 	"__vvar_page|"
+	"_etext|"
+	"__end_of_kernel_reserve|"
 	"_end)$"
 };
 
@@ -808,6 +811,12 @@
 			    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/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_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 87505a9..2de6b63 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 @@
 
 	if (bio_integrity(bio))
 		bio_integrity_free(bio);
+
+	bio_crypt_free_ctx(bio);
 }
 EXPORT_SYMBOL(bio_uninit);
 
@@ -664,6 +667,8 @@
 
 	__bio_clone_fast(b, bio);
 
+	bio_crypt_clone(b, bio, gfp_mask);
+
 	if (bio_integrity(bio)) {
 		int ret;
 
@@ -1046,6 +1051,7 @@
 	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 d5e668e..b2d84ed 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 @@
 	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 @@
 	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),
@@ -614,6 +619,8 @@
 	req->biotail = bio;
 	req->__data_len += bio->bi_iter.bi_size;
 
+	bio_crypt_free_ctx(bio);
+
 	blk_account_io_start(req, false);
 	return true;
 }
@@ -638,6 +645,8 @@
 	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 @@
 	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;
@@ -936,6 +941,9 @@
 			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;
@@ -1061,7 +1069,8 @@
 			/* 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);
 
@@ -1109,7 +1118,7 @@
 {
 	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;
@@ -1123,7 +1132,8 @@
 		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;
 }
@@ -1253,6 +1263,9 @@
 	    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);
 
@@ -1640,6 +1653,9 @@
 
 	__blk_rq_prep_clone(rq, rq_src);
 
+	if (rq->bio)
+		blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask);
+
 	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..d2b0f56
--- /dev/null
+++ b/block/blk-crypto-internal.h
@@ -0,0 +1,201 @@
+/* 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);
+}
+
+void __blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+			      gfp_t gfp_mask);
+static inline void blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+					  gfp_t gfp_mask)
+{
+	if (bio_has_crypt_ctx(bio))
+		__blk_crypto_rq_bio_prep(rq, bio, gfp_mask);
+}
+
+/**
+ * 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..a5f1324
--- /dev/null
+++ b/block/blk-crypto.c
@@ -0,0 +1,430 @@
+// 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 = 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;
+}
+
+void __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);
+	*dst->bi_crypt_context = *src->bi_crypt_context;
+}
+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;
+}
+
+/**
+ * __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: gfp mask
+ */
+void __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);
+	*rq->crypt_ctx = *bio->bi_crypt_context;
+}
+
+/**
+ * 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 @@
 	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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 b748d1e..2ee5ac8 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 @@
 #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 @@
 	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)
@@ -1798,6 +1801,7 @@
 	rq->__sector = bio->bi_iter.bi_sector;
 	rq->write_hint = bio->bi_write_hint;
 	blk_rq_bio_prep(rq, bio, nr_segs);
+	blk_crypto_rq_bio_prep(rq, bio, GFP_NOIO);
 
 	blk_account_io_start(rq, true);
 }
@@ -1970,6 +1974,7 @@
 	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);
@@ -2003,6 +2008,14 @@
 
 	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 1adc1cd..b85234d 100644
--- a/block/blk-pm.c
+++ b/block/blk-pm.c
@@ -164,9 +164,8 @@
  *
  * 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.
@@ -175,19 +174,13 @@
 {
 	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);
 
@@ -204,15 +197,25 @@
  * 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 4bc5f26..d00fcfd 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -70,195 +70,98 @@
 }
 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);
 
-/*
- * Special case of zone reset operation to reset all zones in one command,
- * useful for applications like mkfs.
- */
-static int __blkdev_reset_all_zones(struct block_device *bdev, gfp_t gfp_mask)
-{
-	struct bio *bio = bio_alloc(gfp_mask, 0);
-	int ret;
-
-	/* across the zones operations, don't need any sectors */
-	bio_set_dev(bio, bdev);
-	bio_set_op_attrs(bio, REQ_OP_ZONE_RESET_ALL, 0);
-
-	ret = submit_bio_wait(bio);
-	bio_put(bio);
-
-	return ret;
-}
-
 static inline bool blkdev_allow_reset_all_zones(struct block_device *bdev,
+						sector_t sector,
 						sector_t nr_sectors)
 {
 	if (!blk_queue_zone_resetall(bdev_get_queue(bdev)))
 		return false;
 
-	if (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))
@@ -267,45 +170,62 @@
 	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;
 
-	if (blkdev_allow_reset_all_zones(bdev, nr_sectors))
-		return  __blkdev_reset_all_zones(bdev, gfp_mask);
-
 	/* 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->bi_iter.bi_sector = sector;
 		bio_set_dev(bio, bdev);
-		bio_set_op_attrs(bio, REQ_OP_ZONE_RESET, 0);
 
+		/*
+		 * Special case for the zone reset operation that reset all
+		 * zones, this is useful for applications like mkfs.
+		 */
+		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 = op;
+		bio->bi_iter.bi_sector = sector;
 		sector += zone_sectors;
 
 		/* This may take a while, so be nice to others */
 		cond_resched();
-
 	}
 
 	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.
@@ -315,9 +235,9 @@
 			      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)
@@ -339,44 +259,29 @@
 	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;
+	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;
@@ -397,8 +302,25 @@
 	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,
@@ -408,141 +330,151 @@
 			    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..c3aaed0 100644
--- a/block/bounce.c
+++ b/block/bounce.c
@@ -267,6 +267,8 @@
 		break;
 	}
 
+	bio_crypt_clone(bio, bio_src, gfp_mask);
+
 	if (bio_integrity(bio_src)) {
 		int ret;
 
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 @@
 	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..c83d269
--- /dev/null
+++ b/block/keyslot-manager.c
@@ -0,0 +1,519 @@
+// 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/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);
+	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 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 (WARN_ON(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;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_unregister);
+
+/**
+ * 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);
+		parent->features &= child->features;
+		for (i = 0; i < ARRAY_SIZE(child->crypto_modes_supported);
+		     i++) {
+			parent->crypto_modes_supported[i] &=
+				child->crypto_modes_supported[i];
+		}
+	} else {
+		parent->max_dun_bytes_supported = 0;
+		parent->features = 0;
+		memset(parent->crypto_modes_supported, 0,
+		       sizeof(parent->crypto_modes_supported));
+	}
+}
+EXPORT_SYMBOL_GPL(blk_ksm_intersect_modes);
+
+/**
+ * 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 don't have a small fixed
+ * number of keyslots, and for layered devices.
+ *
+ * See blk_ksm_init() for more details about the parameters.
+ */
+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 @@
 	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 @@
 		}
 		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 @@
 			}
 		}
 
-		/*
-		 * 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 @@
 			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..dd0f53e
--- /dev/null
+++ b/build.config.aarch64
@@ -0,0 +1,18 @@
+ARCH=arm64
+
+CLANG_TRIPLE=aarch64-linux-gnu-
+CROSS_COMPILE=aarch64-linux-androidkernel-
+CROSS_COMPILE_COMPAT=arm-linux-androideabi-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
+LINUX_GCC_CROSS_COMPILE_COMPAT_PREBUILTS_BIN=prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
+
+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..4ce14e5
--- /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 CLANG_TRIPLE=${CLANG_TRIPLE} 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..7f71449
--- /dev/null
+++ b/build.config.arm
@@ -0,0 +1,16 @@
+ARCH=arm
+
+CLANG_TRIPLE=arm-linux-gnueabi-
+CROSS_COMPILE=arm-linux-androidkernel-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
+
+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..9aa17c0
--- /dev/null
+++ b/build.config.common
@@ -0,0 +1,15 @@
+BRANCH=android12-5.4
+KMI_GENERATION=0
+
+CC=clang
+LD=ld.lld
+NM=llvm-nm
+OBJCOPY=llvm-objcopy
+DEPMOD=depmod
+CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r383902/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..be7fbc9
--- /dev/null
+++ b/build.config.db845c
@@ -0,0 +1,20 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+
+BUILD_INITRAMFS=1
+DEFCONFIG=db845c_gki_defconfig
+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}/${KERNEL_DIR}/arch/arm64/configs/db845c_gki.fragment"
+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..766a25e
--- /dev/null
+++ b/build.config.gki.aarch64
@@ -0,0 +1,19 @@
+. ${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_cuttlefish
+android/abi_gki_aarch64_db845c
+android/abi_gki_aarch64_goldfish
+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
+"
+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..e682b0d
--- /dev/null
+++ b/build.config.gki_kasan
@@ -0,0 +1,23 @@
+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_KASAN_PANIC_ON_WARN \
+         -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..4525549
--- /dev/null
+++ b/build.config.x86_64
@@ -0,0 +1,16 @@
+ARCH=x86_64
+
+CLANG_TRIPLE=x86_64-linux-gnu-
+CROSS_COMPILE=x86_64-linux-androidkernel-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin
+
+MAKE_GOALS="
+bzImage
+modules
+"
+
+FILES="
+arch/x86/boot/bzImage
+vmlinux
+System.map
+"
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 @@
 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 @@
 }
 
 /*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 @@
 	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 @@
 	__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/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 @@
 }
 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 @@
 	__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/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 @@
 	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 @@
 		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 @@
 
 #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 @@
 		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 110dd4c..4d8ae84 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 @@
  *                        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 @@
 		/*
 		 * 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 @@
 };
 
 /**
+ * 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 @@
 	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 @@
  * @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_stats stats;
 	atomic_t tmp_ref;
 	bool is_dead;
+	struct task_struct *task;
 };
 
 /**
@@ -583,8 +609,9 @@
 	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 @@
 	 * during thread teardown
 	 */
 	spinlock_t lock;
+	ANDROID_VENDOR_DATA(1);
 };
 
 /**
@@ -1043,22 +1071,146 @@
 	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,
@@ -1111,6 +1263,7 @@
 	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);
 
@@ -1143,8 +1296,12 @@
 	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);
@@ -2755,11 +2912,15 @@
 				    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) {
@@ -2780,12 +2941,15 @@
 	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 */);
@@ -2906,7 +3070,6 @@
 		}
 		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 */
@@ -2984,12 +3147,6 @@
 			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;
@@ -3071,6 +3228,7 @@
 	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) {
@@ -3111,7 +3269,15 @@
 	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;
@@ -3438,6 +3604,8 @@
 		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);
@@ -3548,6 +3716,8 @@
 
 	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);
@@ -3643,17 +3813,10 @@
 				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)
@@ -4221,7 +4384,8 @@
 			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) {
@@ -4443,16 +4607,14 @@
 		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;
@@ -4664,6 +4826,8 @@
 	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);
@@ -4721,6 +4885,7 @@
 	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);
 }
 
@@ -5240,7 +5405,14 @@
 	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;
@@ -5562,13 +5734,14 @@
 	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) {
@@ -5686,8 +5859,9 @@
 	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_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_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..da1c5e3
--- /dev/null
+++ b/drivers/android/vendor_hooks.c
@@ -0,0 +1,56 @@
+// 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>
+
+/*
+ * 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_input_handle_event);
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 1eb81f11..eee4024 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 @@
 
 	scale = (cur_freq << SCHED_CAPACITY_SHIFT) / max_freq;
 
-	for_each_cpu(i, cpus)
+	trace_android_vh_arch_set_freq_scale(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(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 94df2ba..61c6222 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -45,6 +45,13 @@
 #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);
@@ -127,6 +134,9 @@
 		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;
 
@@ -196,8 +206,11 @@
 		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;
 }
@@ -222,9 +235,214 @@
 	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)
@@ -292,6 +510,8 @@
 
 	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)))
@@ -312,11 +532,14 @@
 
 	/*
 	 * 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;
 	}
@@ -343,9 +566,15 @@
 		}
 
 		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;
+			}
 		}
 
 		/*
@@ -367,6 +596,12 @@
 			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;
 	}
 
@@ -376,13 +611,6 @@
 
 	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);
@@ -392,6 +620,25 @@
 	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;
@@ -406,6 +653,17 @@
 	    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.
@@ -415,12 +673,9 @@
 	 */
 	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();
 
@@ -431,22 +686,75 @@
 }
 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);
@@ -459,7 +767,7 @@
 
 	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)
@@ -474,7 +782,7 @@
 
 	list_del(&link->s_node);
 	list_del(&link->c_node);
-	device_link_free(link);
+	device_unregister(&link->link_dev);
 }
 #endif /* !CONFIG_SRCU */
 
@@ -539,9 +847,17 @@
 {
 	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);
+		}
+	}
 }
 
 /**
@@ -565,13 +881,26 @@
 	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;
@@ -585,6 +914,159 @@
 }
 
 /**
+ * __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);
+	mutex_lock(&wfs_lock);
+	val = !list_empty(&dev->links.needs_suppliers)
+	      && dev->links.need_for_probe;
+	mutex_unlock(&wfs_lock);
+	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.
  *
@@ -597,7 +1079,18 @@
  */
 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();
 
@@ -622,24 +1115,47 @@
 			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);
 }
 
 /**
@@ -662,11 +1178,21 @@
 		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;
@@ -744,6 +1270,7 @@
 		WRITE_ONCE(link->status, DL_STATE_DORMANT);
 	}
 
+	list_del_init(&dev->links.defer_hook);
 	__device_links_no_driver(dev);
 
 	device_links_write_unlock();
@@ -813,7 +1340,8 @@
 	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;
@@ -849,6 +1377,13 @@
 {
 	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).
@@ -869,6 +1404,134 @@
 	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;
@@ -1491,8 +2154,14 @@
 			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:
@@ -1510,6 +2179,7 @@
 	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);
 
@@ -1713,6 +2383,8 @@
 #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);
@@ -2199,6 +2871,24 @@
 					     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,
@@ -2343,6 +3033,9 @@
 	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 1d5dd37..7426351 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -489,6 +489,18 @@
 		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;
@@ -562,9 +574,16 @@
 		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)
@@ -594,6 +613,8 @@
 		 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);
@@ -1131,6 +1152,7 @@
 
 		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 bf44c79..1c9f035 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -51,7 +51,7 @@
 	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
@@ -556,7 +556,7 @@
 		 (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;
@@ -1046,7 +1046,7 @@
 }
 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 296546f..111e58e 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -415,6 +415,9 @@
 		       "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 @@
 		       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/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 @@
 	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 @@
 	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 @@
 
 		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 @@
 			}
 			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.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 @@
 
 	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 @@
 			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 @@
 	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 @@
 		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 @@
 		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 @@
 	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 @@
 		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 @@
 		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 @@
 }
 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 @@
 {
 	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 @@
 	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_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 @@
 	.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 @@
 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 @@
 		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 @@
 	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 @@
 /* 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..f3ca20c 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 @@
 	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 @@
 	 * 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 @@
 		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 @@
 		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 @@
 	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 @@
 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 @@
 		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 @@
 	/* 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 @@
 
 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 #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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 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 @@
 	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 @@
 	/* 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 @@
 	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 @@
 		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 @@
 		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 2553e05..557cd55 100644
--- a/drivers/block/null_blk_zoned.c
+++ b/drivers/block/null_blk_zoned.c
@@ -70,22 +70,53 @@
 	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,
@@ -125,8 +156,7 @@
 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 @@
 	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 @@
 		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/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 @@
 		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 @@
 	}
 
 	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 @@
 	 * 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 @@
 }
 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 @@
 	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 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 @@
 		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_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 @@
 		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 @@
 	 * 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 @@
 		   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 @@
 			 "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 @@
 		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..f5795b1 100644
--- a/drivers/bluetooth/btqca.h
+++ b/drivers/bluetooth/btqca.h
@@ -56,24 +56,24 @@
 	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 @@
 	__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 @@
 	QCA_AR3002,
 	QCA_ROME,
 	QCA_WCN3990,
+	QCA_WCN3991,
 	QCA_WCN3998,
 };
 
@@ -134,12 +135,14 @@
 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 @@
 	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 @@
 		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 @@
 
 	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 @@
 	.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 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/random.c b/drivers/char/random.c
index e877c20..249d910 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 @@
 	/* 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 @@
 	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 @@
 				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 @@
 	.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 @@
 		} 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 @@
 
 	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 @@
 		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 @@
 	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 @@
 		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 @@
 	/*
 	 * 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));
 }
@@ -1391,57 +1310,6 @@
  *********************************************************************/
 
 /*
- * 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.
  */
@@ -1466,10 +1334,9 @@
 	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);
@@ -1482,8 +1349,7 @@
 		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);
 	}
@@ -1604,7 +1470,6 @@
 			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);
@@ -1613,60 +1478,11 @@
 	}
 
 	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))
 
@@ -1933,7 +1749,6 @@
 	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) &&
@@ -1957,7 +1772,6 @@
 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) {
@@ -1985,40 +1799,15 @@
 #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
@@ -2026,22 +1815,29 @@
 {
 	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
@@ -2049,10 +1845,10 @@
 {
 	__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;
@@ -2143,7 +1939,6 @@
 		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))
@@ -2185,23 +1980,27 @@
 {
 	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);
 }
 
 /********************************************************************
@@ -2214,8 +2013,7 @@
 
 #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];
@@ -2291,15 +2089,6 @@
 		.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 @@
 		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 @@
 	}
 
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 }
 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 @@
 	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 @@
 			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 @@
 	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 @@
 			__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 @@
 		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 @@
 		}
 	}
 
+	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 @@
 	.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 @@
 	.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 @@
 	.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 @@
 	.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 @@
 	.driver		= {
 		.name	= "sdm845-videocc",
 		.of_match_table = video_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index f35a53c..8b39f38 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -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 4be83b4d..981e22f 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@
 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 @@
  *
  * 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 @@
  *
  * 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 @@
  *
  * 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 @@
 	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 @@
 	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 @@
 		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 @@
  * 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 @@
 	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 int __init sprd_timer_init(struct device_node *np)
+static int sprd_timer_init(struct device_node *np)
 {
 	int ret;
 
@@ -190,7 +192,7 @@
 	.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 @@
 	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 @@
 			       -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 @@
 }
 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 @@
 }
 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 @@
 					 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 @@
 			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 @@
 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 @@
 	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 @@
 }
 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 @@
 	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 @@
 	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_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 @@
 	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 @@
 	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 @@
 {
 	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/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/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index eba7e3f..92f04a3 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -958,6 +958,30 @@
 }
 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
@@ -984,6 +1008,22 @@
 }
 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.
@@ -1149,6 +1189,32 @@
 }
 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)
 {
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 @@
 	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 @@
 	 */
 	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_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 @@
 	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 @@
 		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 @@
 
 		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 @@
 {
 	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 @@
 	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 @@
 	} 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 @@
 
 	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 @@
 	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 @@
 	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 @@
 #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 @@
 		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 @@
 }
 
 /**
+ * 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 @@
 	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 @@
 	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..52726f6 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -344,6 +344,12 @@
 }
 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,89 @@
 }
 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 standard defines a standard way to do this, but it doesn't work on
+ * these SoCs; only this SCM call does.
+ *
+ * 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 I/O requests inline.
+ *
+ * The UFSHCI standard defines a standard way to do this, but it doesn't work on
+ * these SoCs; only this SCM call does.
+ *
+ * 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 +701,7 @@
 	{ .compatible = "qcom,scm" },
 	{}
 };
+MODULE_DEVICE_TABLE(of, qcom_scm_dt_match);
 
 static struct platform_driver qcom_scm_driver = {
 	.driver = {
@@ -627,3 +717,6 @@
 	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_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 @@
 				      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/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c
index bb287f3..8c97577 100644
--- a/drivers/gpio/gpio-eic-sprd.c
+++ b/drivers/gpio/gpio-eic-sprd.c
@@ -569,6 +569,7 @@
 	const struct sprd_eic_variant_data *pdata;
 	struct gpio_irq_chip *irq;
 	struct sprd_eic *sprd_eic;
+	struct resource *res;
 	int ret, i;
 
 	pdata = of_device_get_match_data(&pdev->dev);
@@ -595,9 +596,13 @@
 		 * have one bank EIC, thus base[1] and base[2] can be
 		 * optional.
 		 */
-		sprd_eic->base[i] = devm_platform_ioremap_resource(pdev, i);
-		if (IS_ERR(sprd_eic->base[i]))
+		res = platform_get_resource(pdev, IORESOURCE_MEM, i);
+		if (!res)
 			continue;
+
+		sprd_eic->base[i] = devm_ioremap_resource(&pdev->dev, res);
+		if (IS_ERR(sprd_eic->base[i]))
+			return PTR_ERR(sprd_eic->base[i]);
 	}
 
 	sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type];
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 @@
 	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 @@
 	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 @@
 	{ 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 @@
  * 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 @@
  *      - 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 @@
 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 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 @@
 	}
 
 	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 @@
 			       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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 
 	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 @@
 
 	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 @@
 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 @@
 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 @@
 }
 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 @@
 	.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 @@
 			      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_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/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
similarity index 74%
rename from drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
rename to drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
index 5bf8138..100f502 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
@@ -9,6 +9,7 @@
  *	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>
@@ -25,97 +26,10 @@
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
 
-#include "dw_dsi_reg.h"
+#include "../kirin_drm_dsi.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)
 {
@@ -567,24 +481,7 @@
 			 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)
+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;
@@ -600,8 +497,6 @@
 	}
 
 	dsi_mipi_init(dsi);
-
-	dsi->enable = true;
 }
 
 static enum drm_mode_status dsi_encoder_phy_mode_valid(
@@ -670,60 +565,6 @@
 	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)
 {
@@ -769,54 +610,6 @@
 	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;
@@ -848,54 +641,13 @@
 	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"},
-	{ }
+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_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>");
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 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 @@
 	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 @@
 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 bc14e9c..ca373b8 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -1868,7 +1868,7 @@
 
 	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/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 9ea7486..7ec8981 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>
@@ -887,21 +888,10 @@
 
 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);
 }
 
@@ -909,94 +899,23 @@
 		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 */
@@ -1254,10 +1173,6 @@
 
 	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);
 
@@ -1278,7 +1193,10 @@
 
 	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;
@@ -1290,11 +1208,6 @@
 	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))
@@ -1340,11 +1253,6 @@
 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 @@
 	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 58d5acb..d19ae0b 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 @@
 					  pdpu->pipe_sblk->maxupscale << 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 @@
 		(!(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 @@
 		   (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/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 @@
 	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 @@
 	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 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 @@
 	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 09df5ec..346f240 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -876,6 +876,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 42ffd2e..283423a 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -437,7 +437,7 @@
 		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 @@
 
 	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 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 @@
  * @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/input/input.c b/drivers/input/input.c
index e2eb9b9..d73b76c2 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -26,6 +26,8 @@
 #include "input-compat.h"
 #include "input-poller.h"
 
+#include <trace/hooks/debug.h>
+
 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
 MODULE_DESCRIPTION("Input core");
 MODULE_LICENSE("GPL");
@@ -438,6 +440,7 @@
 	if (is_event_supported(type, dev->evbit, EV_MAX)) {
 
 		spin_lock_irqsave(&dev->event_lock, flags);
+		trace_android_vh_input_handle_event(dev, type, code, value);
 		input_handle_event(dev, type, code, value);
 		spin_unlock_irqrestore(&dev->event_lock, flags);
 	}
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 c498796..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 @@
 
 	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 @@
 
 		/* 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 @@
 
 	mutex_unlock(&icc_lock);
 
+	trace_icc_set_bw_end(path, ret);
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(icc_set_bw);
@@ -507,9 +501,16 @@
 		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 @@
 	}
 	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 390568a..9b35d4b 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/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 @@
 #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 @@
 				  "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..2802ca2 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,
@@ -3572,6 +3567,43 @@
 		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 @@
 		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..3c32958 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_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 @@
 	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 @@
 	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 @@
 	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 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 @@
 		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_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 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 @@
 		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;
 
@@ -1878,6 +1919,7 @@
 	{ .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 @@
 
 	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 @@
 	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 @@
 	 * 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 @@
 		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 @@
 		.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 @@
 	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 @@
 	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..7e6a5cd 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -352,6 +352,52 @@
 	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.
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 @@
 	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 @@
 	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 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(iommu_device_link);
 
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link)
 {
@@ -128,3 +132,4 @@
 	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..04b3fb5 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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,
@@ -887,6 +904,7 @@
 	kobject_get(group->devices_kobj);
 	return group;
 }
+EXPORT_SYMBOL_GPL(iommu_group_ref_get);
 
 /**
  * iommu_group_put - Decrement group reference
@@ -1260,6 +1278,7 @@
 {
 	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 @@
 	/* 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 @@
 		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 @@
 
 	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 err;
 
+	if (ops == NULL) {
+		bus->iommu_ops = NULL;
+		return 0;
+	}
+
 	if (bus->iommu_ops != NULL)
 		return -EBUSY;
 
@@ -2186,6 +2213,7 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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/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 @@
 {
 	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 @@
 	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 @@
 			.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/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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 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 @@
 
 	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 @@
 	.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 @@
 			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 @@
 
 	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 @@
 	.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 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 @@
 		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 aa98953..c962bf1 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
@@ -597,4 +629,16 @@
 
 	  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.
+
 endif # MD
diff --git a/drivers/md/Makefile b/drivers/md/Makefile
index d91a7edc..bfc808c 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,7 @@
 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
 
 ifeq ($(CONFIG_DM_INIT),y)
 dm-mod-objs			+= dm-init.o
@@ -80,6 +82,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..62a1203
--- /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;
+	ti->may_passthrough_inline_crypto = 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},
+	.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..4542050 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>
 
@@ -49,6 +50,9 @@
 
 	int numa_node_id;
 	struct request_queue *queue;
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct blk_keyslot_manager ksm;
+#endif
 
 	atomic_t holders;
 	atomic_t open_count;
diff --git a/drivers/md/dm-default-key.c b/drivers/md/dm-default-key.c
new file mode 100644
index 0000000..07c7250
--- /dev/null
+++ b/drivers/md/dm-default-key.c
@@ -0,0 +1,427 @@
+// 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;
+
+	ti->may_passthrough_inline_crypto = true;
+
+	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},
+	.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..c07a054 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -460,21 +460,15 @@
 }
 
 #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
 
diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index ecefe67..dfed096 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -62,6 +62,7 @@
 	ti->num_secure_erase_bios = 1;
 	ti->num_write_same_bios = 1;
 	ti->num_write_zeroes_bios = 1;
+	ti->may_passthrough_inline_crypto = true;
 	ti->private = lc;
 	return 0;
 
@@ -136,21 +137,15 @@
 }
 
 #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
 
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 52e0495..570d95e 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -21,6 +21,8 @@
 #include <linux/blk-mq.h>
 #include <linux/mount.h>
 #include <linux/dax.h>
+#include <linux/bio.h>
+#include <linux/keyslot-manager.h>
 
 #define DM_MSG_PREFIX "table"
 
@@ -1628,6 +1630,54 @@
 	}
 }
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+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;
+}
+
+/*
+ * Update the inline crypto modes supported by 'q->ksm' to be the intersection
+ * of the modes supported by all targets in the table.
+ *
+ * For any mode to be supported at all, all targets must have explicitly
+ * declared that they can pass through inline crypto support.  For a particular
+ * mode to be supported, all underlying devices must also support it.
+ *
+ * Assume that 'q->ksm' initially declares all modes to be supported.
+ */
+static void dm_calculate_supported_crypto_modes(struct dm_table *t,
+						struct request_queue *q)
+{
+	struct dm_target *ti;
+	unsigned int i;
+
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+
+		if (!ti->may_passthrough_inline_crypto) {
+			blk_ksm_intersect_modes(q->ksm, NULL);
+			return;
+		}
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, device_intersect_crypto_modes,
+					  q->ksm);
+	}
+}
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+static inline void dm_calculate_supported_crypto_modes(struct dm_table *t,
+						       struct request_queue *q)
+{
+}
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 static int device_flush_capable(struct dm_target *ti, struct dm_dev *dev,
 				sector_t start, sector_t len, void *data)
 {
@@ -1944,6 +1994,8 @@
 
 	dm_table_verify_integrity(t);
 
+	dm_calculate_supported_crypto_modes(t, q);
+
 	/*
 	 * Some devices don't use blk_integrity but still want stable pages
 	 * because they do their own checksumming.
@@ -1965,12 +2017,14 @@
 	/*
 	 * 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
 
 	/* Allow reads to exceed readahead limits */
 	q->backing_dev_info->io_pages = limits->max_sectors >> (PAGE_SHIFT - 9);
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 4fb33e7..99cee512 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -251,8 +251,12 @@
 	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_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 e6b0039..61b7d7b 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -1089,9 +1089,10 @@
 /*
  * 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 @@
 	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 @@
 }
 
 /*
- * 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 @@
 	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_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 @@
 	 * 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 @@
 	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 @@
 	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 67da442..8455e59 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 @@
 	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;
@@ -458,38 +494,30 @@
 	if (!map)
 		return -EIO;
 
-	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)
@@ -1214,54 +1242,6 @@
 }
 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;
@@ -1327,6 +1307,8 @@
 
 	__bio_clone_fast(clone, bio);
 
+	bio_crypt_clone(clone, bio, GFP_NOIO);
+
 	if (bio_integrity(bio)) {
 		int r;
 
@@ -1878,6 +1860,8 @@
 
 static void dm_wq_work(struct work_struct *work);
 
+static void dm_destroy_inline_encryption(struct request_queue *q);
+
 static void cleanup_mapped_device(struct mapped_device *md)
 {
 	if (md->wq)
@@ -1899,8 +1883,10 @@
 		put_disk(md->disk);
 	}
 
-	if (md->queue)
+	if (md->queue) {
+		dm_destroy_inline_encryption(md->queue);
 		blk_cleanup_queue(md->queue);
+	}
 
 	cleanup_srcu_struct(&md->io_barrier);
 
@@ -2264,6 +2250,161 @@
 }
 EXPORT_SYMBOL_GPL(dm_get_queue_limits);
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+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 mapped_device *md = container_of(ksm, struct mapped_device, ksm);
+	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 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 mapped_device *md = container_of(ksm, struct mapped_device, ksm);
+	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 void dm_init_inline_encryption(struct mapped_device *md)
+{
+	blk_ksm_init_passthrough(&md->ksm);
+	md->ksm.ksm_ll_ops = dm_ksm_ll_ops;
+
+	/*
+	 * Initially declare support for all crypto settings. Anything
+	 * unsupported by a child device will be removed later when calculating
+	 * the device restrictions.
+	 */
+	md->ksm.max_dun_bytes_supported = UINT_MAX;
+	md->ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS |
+			   BLK_CRYPTO_FEATURE_WRAPPED_KEYS;
+	memset(md->ksm.crypto_modes_supported, 0xFF,
+	       sizeof(md->ksm.crypto_modes_supported));
+
+	blk_ksm_register(&md->ksm, md->queue);
+}
+
+static void dm_destroy_inline_encryption(struct request_queue *q)
+{
+	blk_ksm_destroy(q->ksm);
+	blk_ksm_unregister(q);
+}
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+static inline void dm_init_inline_encryption(struct mapped_device *md)
+{
+}
+
+static inline void dm_destroy_inline_encryption(struct request_queue *q)
+{
+}
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 static void dm_init_congested_fn(struct mapped_device *md)
 {
 	md->queue->backing_dev_info->congested_data = md;
@@ -2303,6 +2444,9 @@
 		DMERR("Cannot calculate initial queue limits");
 		return r;
 	}
+
+	dm_init_inline_encryption(md);
+
 	dm_table_set_restrictions(t, md->queue, &limits);
 	blk_register_queue(md->disk);
 
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 @@
 				 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 @@
 	}
 	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 @@
 		 */
 		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 @@
 		*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/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 @@
 	}
 
 	/* 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 @@
 {
 	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 @@
 		__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 @@
 
 	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 @@
 
 	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 @@
 		"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 @@
 		"Scalable High Intra",
 		"Stereo High",
 		"Multiview High",
+		"Constrained High",
 		NULL,
 	};
 	static const char * const vui_sar_idc[] = {
@@ -566,6 +573,16 @@
 		"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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 {
 	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 @@
 		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 @@
 	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 @@
 {
 	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 @@
 			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 @@
 	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 @@
 		 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 @@
 		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 @@
 			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 @@
 	}
 	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 @@
 	}
 	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 @@
 	}
 	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 @@
 	}
 	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 @@
 }
 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 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 @@
 		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 @@
 	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 @@
 			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 @@
 			       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 @@
 		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 @@
 			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 @@
 		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 @@
 	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 @@
 	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_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 @@
 			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 @@
 		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 @@
 /* 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_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 @@
 		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 @@
 	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 @@
 	}
 }
 
-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 @@
 }
 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 @@
 			__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 @@
 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 c0529a1..ebdf2f1 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 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 @@
 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 @@
 	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 @@
 }
 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 c70b382..dd4c936 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 @@
 	/* 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 @@
 		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 @@
 	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 @@
 	}
 	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 @@
 		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 @@
 
 	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 @@
 	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_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 @@
 		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..1f49abe
--- /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_ms(total_utime), ktime_to_ms(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 @@
 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 @@
 }
 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 @@
 
 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 @@
 		  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 @@
 	     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 @@
 	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/block.c b/drivers/mmc/core/block.c
index 7f480c6b..2c03cd3 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -168,6 +168,11 @@
 
 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)
 {
@@ -1533,9 +1538,30 @@
 	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 +1947,41 @@
 		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/host.c b/drivers/mmc/core/host.c
index b3484de..f6244ae 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -477,7 +477,8 @@
 #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 +495,8 @@
  */
 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 b7159e2..1dd9c31 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -648,6 +648,9 @@
 				 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;
@@ -787,6 +790,8 @@
 		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);
@@ -844,6 +849,7 @@
 	&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,
@@ -1852,15 +1858,19 @@
 	 */
 	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 9c0ccb3..4b1eb89 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -62,7 +62,7 @@
 {
 	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 +123,13 @@
 {
 	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 +140,13 @@
 	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 +157,9 @@
 	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 +279,14 @@
 		}
 		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:
 		/*
@@ -424,7 +438,7 @@
 	 * 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 @@
 		}
 	}
 
+	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..4fe55d7 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -489,6 +489,7 @@
 	depends on ARCH_QCOM || (ARM && COMPILE_TEST)
 	depends on MMC_SDHCI_PLTFM
 	select MMC_SDHCI_IO_ACCESSORS
+	select MMC_CQHCI
 	help
 	  This selects the Secure Digital Host Controller Interface (SDHCI)
 	  support present in Qualcomm SOCs. The controller supports
@@ -632,6 +633,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 +938,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..c14b439 100644
--- a/drivers/mmc/host/Makefile
+++ b/drivers/mmc/host/Makefile
@@ -98,6 +98,7 @@
 obj-$(CONFIG_MMC_SDHCI_OMAP)		+= sdhci-omap.o
 obj-$(CONFIG_MMC_SDHCI_SPRD)		+= sdhci-sprd.o
 obj-$(CONFIG_MMC_CQHCI)			+= cqhci.o
+obj-$(CONFIG_MMC_HSQ)			+= mmc_hsq.o
 
 ifeq ($(CONFIG_CB710_DEBUG),y)
 	CFLAGS-cb710-mmc	+= -DDEBUG
diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
index c19f4c3..266cb15 100644
--- a/drivers/mmc/host/cqhci.c
+++ b/drivers/mmc/host/cqhci.c
@@ -299,16 +299,16 @@
 	cq_host->activated = false;
 }
 
-int cqhci_suspend(struct mmc_host *mmc)
+int cqhci_deactivate(struct mmc_host *mmc)
 {
 	struct cqhci_host *cq_host = mmc->cqe_private;
 
-	if (cq_host->enabled)
+	if (cq_host->enabled && cq_host->activated)
 		__cqhci_disable(cq_host);
 
 	return 0;
 }
-EXPORT_SYMBOL(cqhci_suspend);
+EXPORT_SYMBOL(cqhci_deactivate);
 
 int cqhci_resume(struct mmc_host *mmc)
 {
@@ -322,14 +322,20 @@
 	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)
+	if (err) {
+		pr_err("%s: Failed to enable CQE, error %d\n",
+		       mmc_hostname(mmc), err);
 		return err;
+	}
 
 	__cqhci_enable(cq_host);
 
diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index def76e9..4377001 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -230,7 +230,11 @@
 		      int data_error);
 int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc, bool dma64);
 struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev);
-int cqhci_suspend(struct mmc_host *mmc);
+int cqhci_deactivate(struct mmc_host *mmc);
+static inline int cqhci_suspend(struct mmc_host *mmc)
+{
+	return cqhci_deactivate(mmc);
+}
 int cqhci_resume(struct mmc_host *mmc);
 
 #endif
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 84cffde..1b75a44 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -15,6 +15,7 @@
 #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 +123,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;
@@ -1573,6 +1578,127 @@
 	__sdhci_msm_set_clock(host, clock);
 }
 
+/*****************************************************************************\
+ *                                                                           *
+ * 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;
+}
+
+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_cqe_enable,
+	.disable	= sdhci_msm_cqe_disable,
+};
+
+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 = 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,
@@ -1691,6 +1817,13 @@
 	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,
@@ -1729,7 +1862,7 @@
 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,
@@ -1737,6 +1870,7 @@
 	.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 = {
@@ -1762,6 +1896,7 @@
 	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))
@@ -1962,7 +2097,10 @@
 	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);
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 @@
 	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 @@
 	.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 @@
 	    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 @@
 {
 	struct sdhci_host *host;
 	struct sdhci_sprd_host *sprd_host;
+	struct mmc_hsq *hsq;
 	struct clk *clk;
 	int ret = 0;
 
@@ -543,11 +570,17 @@
 		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 @@
 
 	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 @@
 	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 @@
 		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 136f973..b466fbd 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 @@
 		}
 	}
 
+	if (host->ops->dump_vendor_regs)
+		host->ops->dump_vendor_regs(host);
+
 	SDHCI_DUMP("============================================\n");
 }
 EXPORT_SYMBOL_GPL(sdhci_dumpregs);
@@ -1150,13 +1153,25 @@
 	       !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;
 
 	/*
@@ -1216,7 +1231,7 @@
 	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);
 	}
 
@@ -1247,6 +1262,9 @@
 	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;
 
@@ -1282,7 +1300,7 @@
 	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;
@@ -1334,14 +1352,31 @@
 		} 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;
@@ -1356,9 +1391,6 @@
 	    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;
@@ -1368,18 +1400,8 @@
 	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)) {
@@ -1394,11 +1416,13 @@
 	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))
@@ -1430,8 +1454,61 @@
 	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)
 {
@@ -1492,7 +1569,10 @@
 
 	/* 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. */
@@ -1804,11 +1884,10 @@
 
 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);
@@ -1828,20 +1907,59 @@
 		}
 	}
 
-	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;
@@ -2378,7 +2496,11 @@
 	 */
 	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;
 
@@ -2730,7 +2852,10 @@
 
 	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;
 }
@@ -2782,7 +2907,7 @@
 
 		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;
@@ -3033,7 +3158,7 @@
 {
 	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);
 }
@@ -3154,11 +3279,19 @@
 		}
 	}
 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]);
 	}
 
@@ -3174,6 +3307,7 @@
 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;
 
@@ -3181,8 +3315,14 @@
 		;
 
 	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)) {
@@ -3814,15 +3954,13 @@
 		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;
 		/*
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 @@
 	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 @@
 	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 @@
 	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 @@
 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_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/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_tasklet(unsigned long data)
+{
+	struct timer_list *t = (struct timer_list *)data;
+
+	usbnet_bh(t);
+}
+
 
 /*-------------------------------------------------------------------------
  *
@@ -1700,7 +1707,7 @@
 	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 030d306..1568d2b 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2565,6 +2565,9 @@
 	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/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 @@
 	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/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index c48c680..bd6e622 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -62,6 +62,10 @@
 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
  *
@@ -2788,6 +2792,8 @@
 	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);
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 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 @@
 
 	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 @@
 					   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 @@
 	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 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 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_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 @@
 	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..925feb2
--- /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 (!efuse->base)
+		return -ENOMEM;
+
+	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 8f74c46..e6af6ae 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 @@
 	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 @@
 	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 @@
 
 		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 @@
 	 *
 	 * 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 @@
 	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 @@
 	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 @@
 	 * 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 @@
 
 	return ret;
 }
-EXPORT_SYMBOL_GPL(of_dma_get_range);
 
 /**
  * of_dma_is_coherent - Check if device is coherent
@@ -1013,7 +1029,7 @@
 			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 @@
 	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 @@
 	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 @@
 #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 6bd610e..1a84bc0 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..c616c4d9 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -480,6 +480,7 @@
 	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 @@
 			break;
 		}
 	}
+	device_links_supplier_sync_state_resume();
+
 	of_node_set_flag(root, OF_POPULATED_BUS);
 
 	of_node_put(root);
@@ -518,6 +521,7 @@
 	if (!of_have_populated_dt())
 		return -ENODEV;
 
+	device_links_supplier_sync_state_pause();
 	/*
 	 * Handle certain compatibles explicitly, since we don't want to create
 	 * platform_devices for every node in /reserved-memory with a
@@ -533,11 +537,21 @@
 	}
 
 	/* 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)
+{
+	if (of_have_populated_dt())
+		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..277d2d854 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,353 @@
 	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 && !of_find_property(sup_np, "compatible", NULL))
+		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_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 +1349,6 @@
 	.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-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 374db5d..d5373e04 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 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;
@@ -1145,6 +1156,136 @@
 	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);
@@ -1244,6 +1385,16 @@
 	.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,
 };
@@ -1359,6 +1510,7 @@
 	{ .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 b1b2c8d..35c720c 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -123,6 +123,7 @@
 {
 	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 @@
 	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 27dd20a..29982ef 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -160,6 +160,18 @@
 	[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,
@@ -475,6 +487,229 @@
 	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),
@@ -896,6 +1131,8 @@
 	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;
@@ -1034,6 +1271,10 @@
 	"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",
 };
@@ -1047,6 +1288,10 @@
 	"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",
@@ -1142,6 +1387,64 @@
 	.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,
@@ -1447,6 +1750,7 @@
 	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;
@@ -1517,6 +1821,9 @@
 	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.
@@ -1851,7 +2158,7 @@
 	.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,
@@ -1951,8 +2258,8 @@
 		}
 	}
 
-	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)) {
@@ -1987,6 +2294,12 @@
 		.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 @@
 
 	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 @@
 	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 @@
 
 	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 @@
 	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 @@
 	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_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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 
 	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 @@
 		}
 	}
 
+	/*
+	 * 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_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 @@
  * @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 @@
 	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 @@
 	PUBCP_SLEEP = BIT(1),
 	TGLDSP_SLEEP = BIT(2),
 	AGDSP_SLEEP = BIT(3),
+	CM4_SLEEP = BIT(4),
 };
 
 enum pin_func_sel {
@@ -462,9 +464,15 @@
 		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 @@
 			       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 @@
 					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 @@
 					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 @@
 					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 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_core_probe);
 
 int sprd_pinctrl_remove(struct platform_device *pdev)
 {
@@ -1077,6 +1115,7 @@
 	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 @@
 		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 @@
 
 	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 const struct of_device_id hisi_reboot_of_match[] = {
 	{ .compatible = "hisilicon,sysctrl" },
+	{ .compatible = "hisilicon,hi3660-reboot" },
 	{}
 };
 
@@ -77,3 +125,6 @@
 	},
 };
 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 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 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 @@
 		.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 @@
 
 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 @@
 }
 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 @@
 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 @@
 	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 @@
 	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 @@
 		}
 	}
 
+	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 @@
 		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..51a1383 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -18,68 +18,215 @@
 
 #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",
 };
 
-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 +235,16 @@
 	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 +264,8 @@
 					  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 +285,15 @@
 		}
 	}
 
+	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 +310,14 @@
 					   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 +343,6 @@
 	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 +352,9 @@
 	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 +383,69 @@
 	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 +453,6 @@
 	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 +467,13 @@
 	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..a7c8a84 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 @@
 	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_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 @@
 	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 @@
 		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 @@
 	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 @@
 	 */
 	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 @@
 	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 @@
 		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 @@
 		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 @@
 		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 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..53bf364 100644
--- a/drivers/pwm/pwm-imx-tpm.c
+++ b/drivers/pwm/pwm-imx-tpm.c
@@ -126,7 +126,7 @@
 		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 @@
 	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 @@
 
 		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 @@
 	 * 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 @@
 		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 @@
 	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 @@
 		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 @@
 
 	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 @@
 	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 @@
 
 	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 @@
 	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(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 @@
 	&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 a17aebe..229ad8b 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1846,6 +1846,7 @@
 	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) {
@@ -1953,7 +1954,9 @@
 			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;
 }
@@ -2048,7 +2051,8 @@
 	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 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 @@
 	{ .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 @@
 	},
 };
 
-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..d6c3275 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -81,7 +81,7 @@
  */
 void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
 {
-	if (ept)
+	if (ept && ept->ops)
 		ept->ops->destroy_ept(ept);
 }
 EXPORT_SYMBOL(rpmsg_destroy_ept);
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 @@
 	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 @@
 
 	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 @@
 	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 e6944e1..040b75e 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2121,6 +2121,8 @@
 
 	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 @@
 	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 @@
 		 */
 		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 @@
 	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 6a2f8ba..350dbd2 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -122,8 +122,6 @@
 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);
 
@@ -1291,9 +1289,17 @@
 	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;
@@ -1971,6 +1977,9 @@
 	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);
@@ -3383,6 +3392,10 @@
 	}
 
 	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);
@@ -3715,15 +3728,13 @@
 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);
@@ -3738,4 +3749,3 @@
 			  "%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 @@
 	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 @@
 
 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 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 @@
 
 #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..e0bd4cf 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -19,34 +19,27 @@
 
 #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.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 +80,11 @@
 				  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 +99,6 @@
 	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 +128,24 @@
 	 * 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 +157,65 @@
 	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 +236,7 @@
 	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 +265,14 @@
 	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 +337,18 @@
  * 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 +363,27 @@
 		}
 	}
 
-	/*
-	 * 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 +409,11 @@
 	 * 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 @@
 	 * 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 @@
 	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..b1fbe89 100644
--- a/drivers/scsi/ufs/ufs-mediatek.c
+++ b/drivers/scsi/ufs/ufs-mediatek.c
@@ -6,17 +6,41 @@
  *	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/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/regulator/consumer.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_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_SKHYNIX, "H9HQ21AFAMZDAR",
+		UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES),
+	END_FIX
+};
+
 static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable)
 {
 	u32 tmp;
@@ -53,6 +77,36 @@
 	}
 }
 
+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 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);
+
+	if (status == PRE_CHANGE) {
+		if (host->unipro_lpm)
+			hba->vps->hba_enable_delay_us = 0;
+		else
+			hba->vps->hba_enable_delay_us = 600;
+
+		if (hba->caps & UFSHCD_CAP_CRYPTO)
+			ufs_mtk_crypto_enable(hba);
+	}
+
+	return 0;
+}
+
 static int ufs_mtk_bind_mphy(struct ufs_hba *hba)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
@@ -78,10 +132,121 @@
 
 	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_us(ktime_get(), ms_to_ktime(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 void 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;
+
+	if (!mphy)
+		return;
+
+	if (on && !host->mphy_powered_on)
+		phy_power_on(mphy);
+	else if (!on && host->mphy_powered_on)
+		phy_power_off(mphy);
+	else
+		return;
+	host->mphy_powered_on = on;
+}
+
 /**
  * ufs_mtk_setup_clocks - enables/disable clocks
  * @hba: host controller instance
@@ -94,7 +259,8 @@
 				enum ufs_notify_change_status status)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
-	int ret = -EINVAL;
+	int ret = 0;
+	bool clk_pwr_off = false;
 
 	/*
 	 * In case ufs_mtk_init() is not yet done, simply ignore.
@@ -104,15 +270,31 @@
 	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_setup_ref_clk(hba, on);
+			ufs_mtk_mphy_power_on(hba, on);
+		}
+	} else if (on && status == POST_CHANGE) {
+		ufs_mtk_mphy_power_on(hba, on);
+		ufs_mtk_setup_ref_clk(hba, on);
 	}
 
 	return ret;
@@ -148,6 +330,19 @@
 	if (err)
 		goto out_variant_clear;
 
+	/* 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);
+
 	/*
 	 * ufshcd_vops_init() is invoked after
 	 * ufshcd_setup_clock(true) in ufshcd_hba_init() thus
@@ -219,11 +414,36 @@
 	return ret;
 }
 
+static int ufs_mtk_unipro_set_pm(struct ufs_hba *hba, u32 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);
+	if (!ret)
+		host->unipro_lpm = lpm;
+
+	return ret;
+}
+
 static int ufs_mtk_pre_link(struct ufs_hba *hba)
 {
 	int ret;
 	u32 tmp;
 
+	ufs_mtk_unipro_set_pm(hba, 0);
+
+	/*
+	 * 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 +456,37 @@
 	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,35 +510,172 @@
 	return ret;
 }
 
+static void ufs_mtk_device_reset(struct ufs_hba *hba)
+{
+	struct arm_smccc_res res;
+
+	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_pm(hba, 0);
+	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_pm(hba, 1);
+	if (err) {
+		/* Resume UniPro state for following error recovery */
+		ufs_mtk_unipro_set_pm(hba, 0);
+		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)
 {
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	int err;
 
-	if (ufshcd_is_link_hibern8(hba))
-		phy_power_off(host->mphy);
+	if (ufshcd_is_link_hibern8(hba)) {
+		err = ufs_mtk_link_set_lpm(hba);
+		if (err) {
+			/*
+			 * 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;
+		}
+		/*
+		 * 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);
+	}
 
 	return 0;
 }
 
 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);
+	if (ufshcd_is_link_hibern8(hba)) {
+		ufs_mtk_vreg_set_lpm(hba, false);
+		err = ufs_mtk_link_set_hpm(hba);
+		if (err) {
+			err = ufshcd_link_recovery(hba);
+			return err;
+		}
+	}
 
 	return 0;
 }
 
-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)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u16 mid = dev_info->wmanufacturerid;
+
+	ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups);
+
+	if (mid == UFS_VENDOR_SAMSUNG)
+		hba->dev_quirks &= ~UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE;
+}
+
 /**
  * struct ufs_hba_mtk_vops - UFS MTK specific variant operations
  *
@@ -306,11 +686,15 @@
 	.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,
 };
 
 /**
diff --git a/drivers/scsi/ufs/ufs-mediatek.h b/drivers/scsi/ufs/ufs-mediatek.h
index 19f8c42..8ed24d5 100644
--- a/drivers/scsi/ufs/ufs-mediatek.h
+++ b/drivers/scsi/ufs/ufs-mediatek.h
@@ -6,6 +6,30 @@
 #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
  */
@@ -30,6 +54,26 @@
 #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_DEVICE_RESET          BIT(1)
+#define UFS_MTK_SIP_CRYPTO_CTRL           BIT(2)
+#define UFS_MTK_SIP_REF_CLK_NOTIFICATION  BIT(3)
+
+/*
  * VS_DEBUGCLOCKENABLE
  */
 enum {
@@ -48,6 +92,11 @@
 struct ufs_mtk_host {
 	struct ufs_hba *hba;
 	struct phy *mphy;
+	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 c49e9f6..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 @@
 
 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 @@
 	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 @@
 	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 @@
 		/* 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 @@
 		 * 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 @@
 			return err;
 	}
 
+	err = ufs_qcom_ice_resume(host);
+	if (err)
+		return err;
+
 	hba->is_sys_suspended = false;
 	return 0;
 }
@@ -630,7 +676,7 @@
 	}
 }
 
-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 @@
 
 	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 @@
 	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 @@
 	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 @@
 		/*
 		 * 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 @@
 		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 @@
 	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 @@
 	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 @@
 				 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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 	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 @@
 				    dev_req_params->hs_rate,
 				    false);
 		ufs_qcom_update_bus_bw_vote(host);
+		ufshcd_uic_hibern8_exit(hba);
 	}
 
 out:
@@ -1492,9 +1625,6 @@
 	 */
 	}
 	mask <<= offset;
-
-	pm_runtime_get_sync(host->hba->dev);
-	ufshcd_hold(host->hba, false);
 	ufshcd_rmwl(host->hba, TEST_BUS_SEL,
 		    (u32)host->testbus.select_major << 19,
 		    REG_UFS_CFG1);
@@ -1507,50 +1637,16 @@
 	 * committed before returning.
 	 */
 	mb();
-	ufshcd_release(host->hba);
-	pm_runtime_put_sync(host->hba->dev);
 
 	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);
 }
 
 /**
@@ -1578,6 +1674,29 @@
 	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
  *
@@ -1599,6 +1718,8 @@
 	.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 @@
 	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 @@
 	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 @@
 		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..443e911 100644
--- a/drivers/scsi/ufs/ufs-sysfs.c
+++ b/drivers/scsi/ufs/ufs-sysfs.c
@@ -16,6 +16,7 @@
 	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 @@
 				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(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 @@
 	&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 @@
 	_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 @@
 	&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 @@
 	.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(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 @@
 	&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 @@
 	.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(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 @@
 	&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(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 @@
 	&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,
 };
 
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 @@
 	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 @@
 	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 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 #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 @@
 	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..e80d5f2 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,11 @@
  */
 #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)
+
 #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..714075e
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.c
@@ -0,0 +1,246 @@
+// 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 = { 0 };
+	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 = { 0 };
+
+	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. */
+	blk_ksm_reprogram_all_keys(&hba->ksm);
+	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;
+
+	/*
+	 * 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 = blk_ksm_init(&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 - the number of keyslots is (CFGC + 1) */
+	for (slot = 0; slot < hba->crypto_capabilities.config_count + 1; slot++)
+		ufshcd_clear_keyslot(hba, 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);
+}
+
+void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba)
+{
+	blk_ksm_destroy(&hba->ksm);
+}
diff --git a/drivers/scsi/ufs/ufshcd-crypto.h b/drivers/scsi/ufs/ufshcd-crypto.h
new file mode 100644
index 0000000..d53851b
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.h
@@ -0,0 +1,77 @@
+/* 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);
+	}
+}
+
+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);
+
+void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba);
+
+#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 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) { }
+
+static inline void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba)
+{ }
+
+#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 3b19de3..8f78a81 100644
--- a/drivers/scsi/ufs/ufshcd-pci.c
+++ b/drivers/scsi/ufs/ufshcd-pci.c
@@ -44,7 +44,7 @@
 
 	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 5e502e1..9d3d85f 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 @@
 	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 @@
 	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 */
@@ -165,19 +182,6 @@
 #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 +243,16 @@
 	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 +262,57 @@
 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_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,6 +351,26 @@
 			&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)
 {
@@ -392,7 +436,7 @@
 	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 +450,6 @@
 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 +468,7 @@
 	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 +500,11 @@
 		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 +512,7 @@
 
 		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 +530,8 @@
 
 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 +544,24 @@
 	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 +590,18 @@
 		 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 +920,12 @@
  */
 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 +968,29 @@
 		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 +1009,6 @@
 				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 +1027,36 @@
 				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 +1188,7 @@
 	}
 
 	/* 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 +1241,41 @@
 
 	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 +1328,9 @@
 	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 +1345,11 @@
 		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;
@@ -1279,6 +1379,9 @@
 	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;
@@ -1286,22 +1389,29 @@
 	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;
@@ -1311,12 +1421,6 @@
 	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;
@@ -1332,10 +1436,12 @@
 	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);
@@ -1489,6 +1595,8 @@
 	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 */
@@ -1524,11 +1632,6 @@
 	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:
@@ -1608,6 +1711,7 @@
 	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);
 	/*
@@ -1617,7 +1721,7 @@
 	 * 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);
@@ -1634,8 +1738,11 @@
 
 	/* 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;
@@ -1643,6 +1750,8 @@
 		ufshcd_set_link_hibern8(hba);
 	}
 
+	ufshcd_disable_irq(hba);
+
 	if (!ufshcd_is_link_active(hba))
 		ufshcd_setup_clocks(hba, false);
 	else
@@ -1678,11 +1787,10 @@
 
 	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;
@@ -1795,6 +1903,8 @@
 	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);
@@ -1838,6 +1948,7 @@
 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;
@@ -1853,13 +1964,13 @@
 			   &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;
 	}
 }
@@ -1886,8 +1997,11 @@
 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_clk_scaling_start_busy(hba);
 	__set_bit(task_tag, &hba->outstanding_reqs);
 	ufshcd_writel(hba, 1 << task_tag, REG_UTP_TRANSFER_REQ_DOOR_BELL);
@@ -1957,15 +2071,26 @@
 /**
  * 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;
 }
 
 /**
@@ -2013,6 +2138,8 @@
 	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);
@@ -2110,7 +2237,7 @@
  */
 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;
@@ -2125,21 +2252,22 @@
 		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;
@@ -2203,6 +2331,8 @@
 	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;
@@ -2220,10 +2350,12 @@
 	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
@@ -2231,8 +2363,7 @@
 	 */
 	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;
 }
@@ -2420,34 +2551,6 @@
 	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 */
@@ -2468,7 +2571,8 @@
 		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];
 
@@ -2479,6 +2583,9 @@
 	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;
+
+	ufshcd_prepare_lrbp_crypto(cmd->request, lrbp);
+
 	lrbp->req_abort_skip = false;
 
 	ufshcd_comp_scsi_upiu(hba, lrbp);
@@ -2493,12 +2600,52 @@
 	/* 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;
@@ -2513,6 +2660,7 @@
 	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);
@@ -2712,7 +2860,6 @@
 	/* 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);
 
@@ -2753,13 +2900,13 @@
 }
 
 static int ufshcd_query_flag_retry(struct ufs_hba *hba,
-	enum query_opcode opcode, enum flag_idn idn, bool *flag_res)
+	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",
@@ -2780,16 +2927,17 @@
  * @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);
@@ -2841,6 +2989,7 @@
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_flag);
 
 /**
  * ufshcd_query_attr - API function for sending attribute requests
@@ -2905,6 +3054,7 @@
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_attr);
 
 /**
  * ufshcd_query_attr_retry() - API function for sending query
@@ -3039,6 +3189,7 @@
 
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_descriptor_retry);
 
 /**
  * ufshcd_read_desc_length - read the specified descriptor length from header
@@ -3360,6 +3511,31 @@
 				      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
@@ -3378,7 +3554,7 @@
 	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,
@@ -3474,7 +3650,7 @@
 	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++) {
@@ -3506,17 +3682,17 @@
 		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;
 	}
 }
 
@@ -3770,6 +3946,10 @@
 	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);
@@ -3817,6 +3997,11 @@
 	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);
 
@@ -3857,7 +4042,7 @@
 	return ret;
 }
 
-static int ufshcd_link_recovery(struct ufs_hba *hba)
+int ufshcd_link_recovery(struct ufs_hba *hba)
 {
 	int ret;
 	unsigned long flags;
@@ -3867,6 +4052,9 @@
 	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);
@@ -3881,8 +4069,9 @@
 
 	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};
@@ -3895,46 +4084,18 @@
 	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;
@@ -3950,7 +4111,6 @@
 	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);
@@ -3960,6 +4120,32 @@
 
 	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)
 {
@@ -4100,6 +4286,26 @@
 		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);
 
@@ -4135,8 +4341,6 @@
 		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;
 }
@@ -4150,12 +4354,12 @@
  */
 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",
@@ -4163,20 +4367,26 @@
 		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;
 }
@@ -4193,7 +4403,7 @@
  *
  * 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;
@@ -4239,6 +4449,7 @@
 out:
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_make_hba_operational);
 
 /**
  * ufshcd_hba_stop - Send controller to reset state
@@ -4293,10 +4504,10 @@
 	 * 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--;
@@ -4305,7 +4516,7 @@
 				"Controller enable failed\n");
 			return -EIO;
 		}
-		usleep_range(5000, 5100);
+		usleep_range(1000, 1100);
 	}
 
 	/* enable UIC related interrupts */
@@ -4316,7 +4527,7 @@
 	return 0;
 }
 
-static int ufshcd_hba_enable(struct ufs_hba *hba)
+int ufshcd_hba_enable(struct ufs_hba *hba)
 {
 	int ret;
 
@@ -4341,9 +4552,11 @@
 
 	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),
@@ -4377,13 +4590,14 @@
 	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
@@ -4613,6 +4827,9 @@
 	/* 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;
 
@@ -4652,8 +4869,15 @@
 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;
 }
 
@@ -4728,6 +4952,12 @@
 	/* 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);
@@ -4760,8 +4990,15 @@
 			 * 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 */
@@ -4789,6 +5026,9 @@
 	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,
@@ -4808,19 +5048,33 @@
  * 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;
 }
 
 /**
@@ -4846,12 +5100,14 @@
 			cmd->result = result;
 			/* 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");
@@ -4860,8 +5116,6 @@
 		}
 		if (ufshcd_is_clkscaling_supported(hba))
 			hba->clk_scaling.active_reqs--;
-
-		lrbp->compl_time_stamp = ktime_get();
 	}
 
 	/* clear corresponding bits of completed commands */
@@ -4876,8 +5130,12 @@
 /**
  * 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;
@@ -4896,7 +5154,12 @@
 	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;
+	}
 }
 
 /**
@@ -4974,7 +5237,7 @@
 		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);
@@ -5024,7 +5287,7 @@
 	}
 
 	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);
@@ -5168,6 +5431,190 @@
 				__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
@@ -5183,7 +5630,7 @@
 	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",
@@ -5197,8 +5644,15 @@
 		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;
 }
 
@@ -5282,6 +5736,105 @@
 	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
+
 /**
  * ufshcd_err_handler - handle UFS errors that require s/w attention
  * @work: pointer to work structure
@@ -5298,15 +5851,28 @@
 
 	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);
@@ -5318,17 +5884,30 @@
 		/* 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 | UIC_ERROR |
+			      UFSHCD_UIC_HIBERN8_MASK)) {
+		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
@@ -5380,98 +5959,107 @@
 			__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 */
 	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_LANE_ERR_MASK)) {
 		/*
 		 * 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);
+		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,
@@ -5495,10 +6083,15 @@
 /**
  * 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);
@@ -5507,7 +6100,7 @@
 
 	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;
 	}
@@ -5520,6 +6113,7 @@
 			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;
 	}
 
@@ -5531,30 +6125,17 @@
 		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 | UIC_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) -
@@ -5562,44 +6143,62 @@
 	 * 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;
 }
 
 /**
@@ -5607,8 +6206,9 @@
  * @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)
 {
@@ -5619,6 +6219,8 @@
 
 	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
@@ -5631,14 +6233,18 @@
 			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 (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;
 }
@@ -5823,6 +6429,7 @@
 	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) {
@@ -6175,16 +6782,10 @@
 	}
 
 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;
@@ -6229,17 +6830,15 @@
 	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);
@@ -6258,9 +6857,23 @@
  */
 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);
@@ -6268,6 +6881,18 @@
 		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;
 }
 
@@ -6279,48 +6904,25 @@
  */
 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;
 }
 
@@ -6412,11 +7014,12 @@
 	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)
@@ -6430,25 +7033,32 @@
 		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
@@ -6488,6 +7098,7 @@
 		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,
@@ -6496,14 +7107,17 @@
 		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:
@@ -6512,16 +7126,110 @@
 	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);
@@ -6542,18 +7250,29 @@
 	 * 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
@@ -6565,25 +7284,12 @@
 	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;
 }
 
 /**
@@ -6733,22 +7439,21 @@
 	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)
@@ -6798,6 +7503,37 @@
 		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},
@@ -6866,16 +7602,87 @@
 	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;
+}
+
 /**
  * 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);
@@ -6892,38 +7699,35 @@
 	/* 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.
@@ -6936,68 +7740,28 @@
 					__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)),
@@ -7013,8 +7777,25 @@
 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);
+	}
 }
 
 static enum blk_eh_timer_return ufshcd_eh_timed_out(struct scsi_cmnd *scmd)
@@ -7058,6 +7839,16 @@
 	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,
@@ -7080,6 +7871,7 @@
 	.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,
@@ -7137,6 +7929,11 @@
 	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);
@@ -7147,11 +7944,6 @@
 				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;
@@ -7291,16 +8083,9 @@
 	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)) {
@@ -7324,16 +8109,9 @@
 		}
 	}
 
-	/*
-	 * 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) {
@@ -7508,6 +8286,7 @@
 		ufshcd_setup_clocks(hba, false);
 		ufshcd_setup_hba_vreg(hba, false);
 		hba->is_powered = false;
+		ufs_put_device_desc(hba);
 	}
 }
 
@@ -7625,10 +8404,13 @@
 
 	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
@@ -7645,8 +8427,11 @@
 		 * 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
@@ -7686,6 +8471,9 @@
 	 *
 	 * 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) {
@@ -7815,18 +8603,34 @@
 			/* 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;
@@ -7842,6 +8646,11 @@
 	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);
@@ -7849,13 +8658,12 @@
 		/* 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;
@@ -7875,9 +8683,16 @@
 	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;
@@ -7908,9 +8723,7 @@
 		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)
@@ -7927,14 +8740,21 @@
 
 	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))
@@ -7964,6 +8784,11 @@
 	/* 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);
 
@@ -7980,6 +8805,11 @@
 	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)
@@ -8203,6 +9033,7 @@
  */
 void ufshcd_dealloc_host(struct ufs_hba *hba)
 {
+	ufshcd_crypto_destroy_keyslot_manager(hba);
 	scsi_host_put(hba->host);
 }
 EXPORT_SYMBOL_GPL(ufshcd_dealloc_host);
@@ -8254,6 +9085,7 @@
 	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 +9106,7 @@
 	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 +9117,16 @@
 
 	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 +9172,15 @@
 	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 +9231,8 @@
 	/* 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 +9254,9 @@
 						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) |
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 4f1dec6..ab45c79 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 @@
 	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 @@
 				    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 @@
  * @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 @@
 	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,7 @@
  * @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
  */
 struct ufs_hba_variant_ops {
 	const char *name;
@@ -323,12 +352,23 @@
 	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);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* clock gating state  */
@@ -394,7 +434,7 @@
 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 +446,6 @@
 	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 +461,8 @@
 
 /**
  * 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 +482,9 @@
  * @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 +508,13 @@
 	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 +536,7 @@
  * @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 +550,14 @@
  * @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
  * @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 +571,10 @@
  * @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 +621,9 @@
 	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 +690,13 @@
 	 * 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
+
 	unsigned int quirks;	/* Deviations from standard UFSHCI spec. */
 
 	/* Device deviations from standard UFS device spec. */
@@ -659,10 +716,9 @@
 	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 +728,7 @@
 	u32 saved_err;
 	u32 saved_uic_err;
 	struct ufs_stats ufs_stats;
+	bool force_reset;
 	bool silence_err_logs;
 
 	/* Device management request data */
@@ -719,6 +776,23 @@
 	 * 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 +807,22 @@
 
 	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 +842,10 @@
 {
 	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 +871,11 @@
 	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 +900,19 @@
 
 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 +946,13 @@
 	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 +1020,11 @@
 		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,
@@ -922,10 +1040,11 @@
 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_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);
 
 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 +1172,19 @@
 		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 +1209,19 @@
 
 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);
 }
 
 extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];
@@ -1108,5 +1243,6 @@
 
 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..7459f63 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -90,6 +90,7 @@
 	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 @@
 #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 @@
 #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
@@ -195,7 +199,7 @@
 
 /* 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 +322,61 @@
 	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 +398,7 @@
 	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 +418,9 @@
 	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 +442,28 @@
 	__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..766d551 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,
@@ -192,6 +209,7 @@
 	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 {
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 63ee96e..ae1e248 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -162,9 +162,8 @@
 	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..0ce681d7 100644
--- a/drivers/soc/qcom/Kconfig
+++ b/drivers/soc/qcom/Kconfig
@@ -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/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 @@
 
 	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/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 @@
 	{ .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 @@
 	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 @@
 	/* 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/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/ion_cma_heap.c b/drivers/staging/android/ion/heaps/ion_cma_heap.c
similarity index 72%
rename from drivers/staging/android/ion/ion_cma_heap.c
rename to drivers/staging/android/ion/heaps/ion_cma_heap.c
index bf65e67..6ba7fd8 100644
--- a/drivers/staging/android/ion/ion_cma_heap.c
+++ b/drivers/staging/android/ion/heaps/ion_cma_heap.c
@@ -7,6 +7,7 @@
  */
 
 #include <linux/device.h>
+#include <linux/ion.h>
 #include <linux/slab.h>
 #include <linux/errno.h>
 #include <linux/err.h>
@@ -14,12 +15,10 @@
 #include <linux/scatterlist.h>
 #include <linux/highmem.h>
 
-#include "ion.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)
 
@@ -71,6 +70,9 @@
 
 	buffer->priv_virt = pages;
 	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
 	return 0;
 
 free_mem:
@@ -96,43 +98,54 @@
 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)
+static int __ion_add_cma_heap(struct cma *cma, void *data)
 {
+	int *cma_nr = data;
 	struct ion_cma_heap *cma_heap;
+	int ret;
 
-	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
+	if (*cma_nr >= MAX_CMA_AREAS)
+		return -EINVAL;
 
-	if (!cma_heap)
-		return ERR_PTR(-ENOMEM);
-
+	cma_heap = &cma_heaps[*cma_nr];
 	cma_heap->heap.ops = &ion_cma_ops;
-	cma_heap->cma = cma;
 	cma_heap->heap.type = ION_HEAP_TYPE_DMA;
-	return &cma_heap->heap;
-}
+	cma_heap->heap.name = cma_get_name(cma);
 
-static int __ion_add_cma_heaps(struct cma *cma, void *data)
-{
-	struct ion_heap *heap;
+	ret = ion_device_add_heap(&cma_heap->heap);
+	if (ret)
+		goto out;
 
-	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);
+	cma_heap->cma = cma;
+	*cma_nr += 1;
+out:
 	return 0;
 }
 
-static int ion_add_cma_heaps(void)
+static int __init ion_cma_heap_init(void)
 {
-	cma_for_each_area(__ion_add_cma_heaps, NULL);
-	return 0;
+	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;
 }
-device_initcall(ion_add_cma_heaps);
+
+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/ion_page_pool.c b/drivers/staging/android/ion/heaps/ion_page_pool.c
similarity index 87%
rename from drivers/staging/android/ion/ion_page_pool.c
rename to drivers/staging/android/ion/heaps/ion_page_pool.c
index f85ec5b..77c5b79 100644
--- a/drivers/staging/android/ion/ion_page_pool.c
+++ b/drivers/staging/android/ion/heaps/ion_page_pool.c
@@ -10,7 +10,7 @@
 #include <linux/swap.h>
 #include <linux/sched/signal.h>
 
-#include "ion.h"
+#include "ion_page_pool.h"
 
 static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
 {
@@ -79,6 +79,7 @@
 
 	return page;
 }
+EXPORT_SYMBOL_GPL(ion_page_pool_alloc);
 
 void ion_page_pool_free(struct ion_page_pool *pool, struct page *page)
 {
@@ -86,6 +87,7 @@
 
 	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)
 {
@@ -97,6 +99,18 @@
 	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)
 {
@@ -130,6 +144,7 @@
 
 	return freed;
 }
+EXPORT_SYMBOL_GPL(ion_page_pool_shrink);
 
 struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
 {
@@ -148,8 +163,10 @@
 
 	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/ion_system_heap.c b/drivers/staging/android/ion/heaps/ion_system_heap.c
similarity index 65%
rename from drivers/staging/android/ion/ion_system_heap.c
rename to drivers/staging/android/ion/heaps/ion_system_heap.c
index b83a1d1..d76595e 100644
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/heaps/ion_system_heap.c
@@ -9,12 +9,14 @@
 #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.h"
+#include "ion_page_pool.h"
 
 #define NUM_ORDERS ARRAY_SIZE(orders)
 
@@ -139,6 +141,9 @@
 	}
 
 	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
 	return 0;
 
 free_table:
@@ -160,7 +165,7 @@
 
 	/* zero the buffer before goto page pool */
 	if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
-		ion_heap_buffer_zero(buffer);
+		ion_buffer_zero(buffer);
 
 	for_each_sg(table->sgl, sg, table->nents, i)
 		free_buffer_page(sys_heap, buffer, sg_page(sg));
@@ -203,14 +208,18 @@
 	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 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)
 {
@@ -245,133 +254,37 @@
 	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_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_heap *__ion_system_contig_heap_create(void)
+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)
 {
-	struct ion_heap *heap;
+	int ret = ion_system_heap_create_pools(system_heap.pools);
+	if (ret)
+		return ret;
 
-	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;
+	return ion_device_add_heap(&system_heap.heap);
 }
 
-static int ion_system_contig_heap_create(void)
+static void __exit ion_system_heap_exit(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;
+	ion_device_remove_heap(&system_heap.heap);
+	ion_system_heap_destroy_pools(system_heap.pools);
 }
-device_initcall(ion_system_contig_heap_create);
+
+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 @@
 	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 @@
 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 @@
 	{
 		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 @@
 	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 @@
 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 @@
 				    &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 @@
 	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 @@
 	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 @@
 	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_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 @@
 	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 @@
 
 	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_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_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/thermal/Kconfig b/drivers/thermal/Kconfig
index 001a21a..47e1fb3 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -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..a340374
--- /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 (!thm->base)
+		return -ENOMEM;
+
+	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/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 @@
 	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 @@
 {
 	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 @@
 	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 @@
 }
 #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 @@
 
 	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 @@
 	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 serdev_controller *ctrl;
 	struct serport *serport;
+	bool platform = false;
 	int ret;
 
 	if (!port || !drv || !parent)
@@ -286,7 +293,28 @@
 	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 67a9eb3..8c9d37fb 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -237,7 +237,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,
@@ -260,15 +259,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"
@@ -975,7 +965,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
@@ -1452,7 +1442,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/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
index f98a791..0b18425 100644
--- a/drivers/tty/serial/qcom_geni_serial.c
+++ b/drivers/tty/serial/qcom_geni_serial.c
@@ -1063,7 +1063,7 @@
 }
 
 #ifdef CONFIG_SERIAL_QCOM_GENI_CONSOLE
-static int __init qcom_geni_console_setup(struct console *co, char *options)
+static int qcom_geni_console_setup(struct console *co, char *options)
 {
 	struct uart_port *uport;
 	struct qcom_geni_serial_port *port;
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.c b/drivers/tty/serial/samsung_tty.c
similarity index 90%
rename from drivers/tty/serial/samsung.c
rename to drivers/tty/serial/samsung_tty.c
index 71f99e9..e57c097 100644
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung_tty.c
@@ -4,7 +4,7 @@
  *
  * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
  *	http://armlinux.simtec.co.uk/
-*/
+ */
 
 /* Hote on 2410 error handling
  *
@@ -19,7 +19,7 @@
  * and change the policy on BREAK
  *
  * BJD, 04-Nov-2004
-*/
+ */
 
 #if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
 #define SUPPORT_SYSRQ
@@ -44,33 +44,8 @@
 #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"
@@ -81,14 +56,165 @@
 #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)
 
+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);
@@ -118,6 +244,7 @@
 
 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;
@@ -135,12 +262,13 @@
 	ucon |= S3C2410_UCON_RXIRQMODE;
 	wr_regl(port, S3C2410_UCON, ucon);
 
-	rx_enabled(port) = 1;
+	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;
 
@@ -150,7 +278,7 @@
 	ucon &= ~S3C2410_UCON_RXIRQMODE;
 	wr_regl(port, S3C2410_UCON, ucon);
 
-	rx_enabled(port) = 0;
+	ourport->rx_enabled = 0;
 	spin_unlock_irqrestore(&port->lock, flags);
 }
 
@@ -162,7 +290,7 @@
 	struct dma_tx_state state;
 	int count;
 
-	if (!tx_enabled(port))
+	if (!ourport->tx_enabled)
 		return;
 
 	if (s3c24xx_serial_has_interrupt_mask(port))
@@ -182,7 +310,7 @@
 		port->icount.tx += count;
 	}
 
-	tx_enabled(port) = 0;
+	ourport->tx_enabled = 0;
 	ourport->tx_in_progress = 0;
 
 	if (port->flags & UPF_CONS_FLOW)
@@ -340,11 +468,11 @@
 	struct s3c24xx_uart_port *ourport = to_ourport(port);
 	struct circ_buf *xmit = &port->state->xmit;
 
-	if (!tx_enabled(port)) {
+	if (!ourport->tx_enabled) {
 		if (port->flags & UPF_CONS_FLOW)
 			s3c24xx_serial_rx_disable(port);
 
-		tx_enabled(port) = 1;
+		ourport->tx_enabled = 1;
 		if (!ourport->dma || !ourport->dma->tx_chan)
 			s3c24xx_serial_start_tx_pio(ourport);
 	}
@@ -389,14 +517,14 @@
 	enum dma_status dma_status;
 	unsigned int received;
 
-	if (rx_enabled(port)) {
-		dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
+	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);
-		rx_enabled(port) = 0;
+		ourport->rx_enabled = 0;
 	}
 	if (dma && dma->rx_chan) {
 		dmaengine_pause(dma->tx_chan);
@@ -546,7 +674,7 @@
 
 static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
 {
-	unsigned int utrstat, ufstat, received;
+	unsigned int utrstat, received;
 	struct s3c24xx_uart_port *ourport = dev_id;
 	struct uart_port *port = &ourport->port;
 	struct s3c24xx_uart_dma *dma = ourport->dma;
@@ -556,7 +684,7 @@
 	struct dma_tx_state state;
 
 	utrstat = rd_regl(port, S3C2410_UTRSTAT);
-	ufstat = rd_regl(port, S3C2410_UFSTAT);
+	rd_regl(port, S3C2410_UFSTAT);
 
 	spin_lock_irqsave(&port->lock, flags);
 
@@ -613,14 +741,14 @@
 		fifocnt--;
 
 		uerstat = rd_regl(port, S3C2410_UERSTAT);
-		ch = rd_regb(port, S3C2410_URXH);
+		ch = rd_reg(port, S3C2410_URXH);
 
 		if (port->flags & UPF_CONS_FLOW) {
 			int txe = s3c24xx_serial_txempty_nofifo(port);
 
-			if (rx_enabled(port)) {
+			if (ourport->rx_enabled) {
 				if (!txe) {
-					rx_enabled(port) = 0;
+					ourport->rx_enabled = 0;
 					continue;
 				}
 			} else {
@@ -628,7 +756,7 @@
 					ufcon = rd_regl(port, S3C2410_UFCON);
 					ufcon |= S3C2410_UFCON_RESETRX;
 					wr_regl(port, S3C2410_UFCON, ufcon);
-					rx_enabled(port) = 1;
+					ourport->rx_enabled = 1;
 					return;
 				}
 				continue;
@@ -641,12 +769,13 @@
 		port->icount.rx++;
 
 		if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
-			dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n",
-			    ch, uerstat);
+			dev_dbg(port->dev,
+				"rxerr: port ch=0x%02x, rxs=0x%08x\n",
+				ch, uerstat);
 
 			/* check for break */
 			if (uerstat & S3C2410_UERSTAT_BREAK) {
-				dbg("break!\n");
+				dev_dbg(port->dev, "break!\n");
 				port->icount.brk++;
 				if (uart_handle_break(port))
 					continue; /* Ignore character */
@@ -724,7 +853,7 @@
 	}
 
 	if (port->x_char) {
-		wr_regb(port, S3C2410_UTXH, port->x_char);
+		wr_reg(port, S3C2410_UTXH, port->x_char);
 		port->icount.tx++;
 		port->x_char = 0;
 		goto out;
@@ -732,7 +861,7 @@
 
 	/* 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);
@@ -750,7 +879,7 @@
 		if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
 			break;
 
-		wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
+		wr_reg(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 		port->icount.tx++;
 		count--;
@@ -814,7 +943,7 @@
 /* no modem control lines */
 static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
 {
-	unsigned int umstat = rd_regb(port, S3C2410_UMSTAT);
+	unsigned int umstat = rd_reg(port, S3C2410_UMSTAT);
 
 	if (umstat & S3C2410_UMSTAT_CTS)
 		return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
@@ -978,7 +1107,7 @@
 	if (ourport->tx_claimed) {
 		if (!s3c24xx_serial_has_interrupt_mask(port))
 			free_irq(ourport->tx_irq, ourport);
-		tx_enabled(port) = 0;
+		ourport->tx_enabled = 0;
 		ourport->tx_claimed = 0;
 		ourport->tx_mode = 0;
 	}
@@ -987,7 +1116,7 @@
 		if (!s3c24xx_serial_has_interrupt_mask(port))
 			free_irq(ourport->rx_irq, ourport);
 		ourport->rx_claimed = 0;
-		rx_enabled(port) = 0;
+		ourport->rx_enabled = 0;
 	}
 
 	/* Clear pending interrupts and mask all interrupts */
@@ -1009,10 +1138,7 @@
 	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;
+	ourport->rx_enabled = 1;
 
 	ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
 			  s3c24xx_serial_portname(port), ourport);
@@ -1024,9 +1150,9 @@
 
 	ourport->rx_claimed = 1;
 
-	dbg("requesting tx irq...\n");
+	dev_dbg(port->dev, "requesting tx irq...\n");
 
-	tx_enabled(port) = 1;
+	ourport->tx_enabled = 1;
 
 	ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
 			  s3c24xx_serial_portname(port), ourport);
@@ -1038,10 +1164,9 @@
 
 	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 */
+	 * register setup for the port controls
+	 */
 
 	return ret;
 
@@ -1057,9 +1182,6 @@
 	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);
@@ -1077,9 +1199,9 @@
 	}
 
 	/* For compatibility with s3c24xx Soc's */
-	rx_enabled(port) = 1;
+	ourport->rx_enabled = 1;
 	ourport->rx_claimed = 1;
-	tx_enabled(port) = 0;
+	ourport->tx_enabled = 0;
 	ourport->tx_claimed = 1;
 
 	spin_lock_irqsave(&port->lock, flags);
@@ -1097,7 +1219,6 @@
 	/* Enable Rx Interrupt */
 	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
 
-	dbg("s3c64xx_serial_startup ok\n");
 	return ret;
 }
 
@@ -1145,7 +1266,7 @@
  * 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
 
@@ -1315,29 +1436,30 @@
 
 		if (cfg->has_fracval) {
 			udivslot = (div & 15);
-			dbg("fracval = %04x\n", udivslot);
+			dev_dbg(port->dev, "fracval = %04x\n", udivslot);
 		} else {
 			udivslot = udivslot_table[div & 15];
-			dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
+			dev_dbg(port->dev, "udivslot = %04x (div %d)\n",
+				udivslot, div & 15);
 		}
 	}
 
 	switch (termios->c_cflag & CSIZE) {
 	case CS5:
-		dbg("config: 5bits/char\n");
+		dev_dbg(port->dev, "config: 5bits/char\n");
 		ulcon = S3C2410_LCON_CS5;
 		break;
 	case CS6:
-		dbg("config: 6bits/char\n");
+		dev_dbg(port->dev, "config: 6bits/char\n");
 		ulcon = S3C2410_LCON_CS6;
 		break;
 	case CS7:
-		dbg("config: 7bits/char\n");
+		dev_dbg(port->dev, "config: 7bits/char\n");
 		ulcon = S3C2410_LCON_CS7;
 		break;
 	case CS8:
 	default:
-		dbg("config: 8bits/char\n");
+		dev_dbg(port->dev, "config: 8bits/char\n");
 		ulcon = S3C2410_LCON_CS8;
 		break;
 	}
@@ -1359,8 +1481,9 @@
 
 	spin_lock_irqsave(&port->lock, flags);
 
-	dbg("setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
-	    ulcon, quot, udivslot);
+	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);
@@ -1381,10 +1504,11 @@
 	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));
+	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.
@@ -1442,6 +1566,7 @@
 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;
 }
 
@@ -1583,7 +1708,7 @@
 /* s3c24xx_serial_resetport
  *
  * reset the fifos and other the settings.
-*/
+ */
 
 static void s3c24xx_serial_resetport(struct uart_port *port,
 				   struct s3c2410_uartcfg *cfg)
@@ -1637,7 +1762,8 @@
 
 	if (val == CPUFREQ_PRECHANGE) {
 		/* we should really shut the port down whilst the
-		 * frequency change is in progress. */
+		 * frequency change is in progress.
+		 */
 
 	} else if (val == CPUFREQ_POSTCHANGE) {
 		struct ktermios *termios;
@@ -1743,8 +1869,6 @@
 	struct resource *res;
 	int ret;
 
-	dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev);
-
 	if (platdev == NULL)
 		return -ENODEV;
 
@@ -1761,7 +1885,7 @@
 	port->uartclk = 1;
 
 	if (cfg->uart_flags & UPF_CONS_FLOW) {
-		dbg("s3c24xx_serial_init_port: enabling flow control\n");
+		dev_dbg(port->dev, "enabling flow control\n");
 		port->flags |= UPF_CONS_FLOW;
 	}
 
@@ -1773,7 +1897,7 @@
 		return -EINVAL;
 	}
 
-	dbg("resource %pR)\n", res);
+	dev_dbg(port->dev, "resource %pR)\n", res);
 
 	port->membase = devm_ioremap(port->dev, res->start, resource_size(res));
 	if (!port->membase) {
@@ -1837,9 +1961,9 @@
 		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);
+	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);
@@ -1853,7 +1977,10 @@
 
 /* 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(
@@ -1862,6 +1989,7 @@
 #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;
 	}
@@ -1875,7 +2003,7 @@
 	struct device_node *np = pdev->dev.of_node;
 	struct s3c24xx_uart_port *ourport;
 	int index = probe_index;
-	int ret;
+	int ret, prop = 0;
 
 	if (np) {
 		ret = of_alias_get_id(np, "serial");
@@ -1883,8 +2011,6 @@
 			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;
@@ -1903,10 +2029,27 @@
 			dev_get_platdata(&pdev->dev) :
 			ourport->drv_data->def_cfg;
 
-	if (np)
+	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)
@@ -1919,7 +2062,7 @@
 	ourport->min_dma_size = max_t(int, ourport->port.fifosize,
 				    dma_get_cache_alignment());
 
-	dbg("%s: initialising port %p...\n", __func__, ourport);
+	dev_dbg(&pdev->dev, "%s: initialising port %p...\n", __func__, ourport);
 
 	ret = s3c24xx_serial_init_port(ourport, pdev);
 	if (ret < 0)
@@ -1933,7 +2076,7 @@
 		}
 	}
 
-	dbg("%s: adding port\n", __func__);
+	dev_dbg(&pdev->dev, "%s: adding port\n", __func__);
 	uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
 	platform_set_drvdata(pdev, &ourport->port);
 
@@ -2010,9 +2153,10 @@
 		/* restore IRQ mask */
 		if (s3c24xx_serial_has_interrupt_mask(port)) {
 			unsigned int uintm = 0xf;
-			if (tx_enabled(port))
+
+			if (ourport->tx_enabled)
 				uintm &= ~S3C64XX_UINTM_TXD_MSK;
-			if (rx_enabled(port))
+			if (ourport->rx_enabled)
 				uintm &= ~S3C64XX_UINTM_RXD_MSK;
 			clk_prepare_enable(ourport->clk);
 			if (!IS_ERR(ourport->baudclk))
@@ -2086,7 +2230,7 @@
 	if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)
 		return NO_POLL_CHAR;
 
-	return rd_regb(port, S3C2410_URXH);
+	return rd_reg(port, S3C2410_URXH);
 }
 
 static void s3c24xx_serial_put_poll_char(struct uart_port *port,
@@ -2101,7 +2245,7 @@
 
 	while (!s3c24xx_serial_console_txrdy(port, ufcon))
 		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, c);
+	wr_reg(port, S3C2410_UTXH, c);
 }
 
 #endif /* CONFIG_CONSOLE_POLL */
@@ -2113,7 +2257,7 @@
 
 	while (!s3c24xx_serial_console_txrdy(port, ufcon))
 		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, ch);
+	wr_reg(port, S3C2410_UTXH, ch);
 }
 
 static void
@@ -2145,10 +2289,6 @@
 	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:
@@ -2192,7 +2332,7 @@
 			rate = 1;
 
 		*baud = rate / (16 * (ubrdiv + 1));
-		dbg("calculated baud %d\n", *baud);
+		dev_dbg(port->dev, "calculated baud %d\n", *baud);
 	}
 
 }
@@ -2206,9 +2346,6 @@
 	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)
@@ -2223,8 +2360,6 @@
 
 	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
@@ -2235,7 +2370,7 @@
 	else
 		s3c24xx_serial_get_options(port, &baud, &parity, &bits);
 
-	dbg("s3c24xx_serial_console_setup: baud %d\n", baud);
+	dev_dbg(port->dev, "baud %d\n", baud);
 
 	return uart_set_options(port, co, baud, parity, bits, flow);
 }
@@ -2497,6 +2632,18 @@
  * 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;
 };
@@ -2522,10 +2669,11 @@
 	else
 		samsung_early_busyuart(port);
 
-	writeb(c, port->membase + S3C2410_UTXH);
+	wr_reg_barrier(port, S3C2410_UTXH, c);
 }
 
-static void samsung_early_write(struct console *con, const char *s, unsigned n)
+static void samsung_early_write(struct console *con, const char *s,
+				unsigned int n)
 {
 	struct earlycon_device *dev = con->data;
 
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 7c27827..7b87c08 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2603,6 +2603,7 @@
 	*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 @@
 	}
 }
 
+#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 @@
 	.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/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 @@
 	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 @@
 	/* 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 526c275..0bdc4c2 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -289,12 +289,6 @@
 	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
@@ -1409,11 +1403,6 @@
 	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);
@@ -1444,22 +1433,23 @@
 
 	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 ce4acbf..4ef6cf8 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>
@@ -958,6 +959,9 @@
  * @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
@@ -1093,6 +1097,8 @@
 	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 @@
 	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 @@
 	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 @@
 {
 	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 02ff850..608f2aa 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
@@ -369,6 +383,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
@@ -483,34 +514,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 a7709d1..63f1aca 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 @@
 	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)
@@ -271,7 +303,7 @@
 
 	mutex_lock(&gi->lock);
 
-	if (!strlen(name)) {
+	if (!strlen(name) || strcmp(name, "none") == 0) {
 		ret = unregister_gadget(gi);
 		if (ret)
 			goto err;
@@ -296,6 +328,36 @@
 	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);
@@ -305,6 +367,7 @@
 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,
@@ -316,6 +379,7 @@
 	&gadget_dev_desc_attr_bcdDevice,
 	&gadget_dev_desc_attr_bcdUSB,
 	&gadget_dev_desc_attr_UDC,
+	&gadget_attr_driver_match_existing_only,
 	NULL,
 };
 
@@ -1378,6 +1442,57 @@
 	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;
@@ -1403,6 +1518,80 @@
 	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)
 {
@@ -1450,6 +1639,8 @@
 	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;
@@ -1498,10 +1689,15 @@
 	.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,
 
@@ -1513,6 +1709,91 @@
 	.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)
@@ -1565,7 +1846,11 @@
 	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);
@@ -1573,7 +1858,11 @@
 
 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 = {
@@ -1613,6 +1902,13 @@
 	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);
@@ -1620,5 +1916,10 @@
 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..7aa2656
--- /dev/null
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -0,0 +1,1352 @@
+/*
+ * 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/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 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:1;
+
+	/* disconnected indicates state of open & release
+	 * Set to 1 when we disconnect.
+	 * Not cleared until our file is closed.
+	 */
+	int disconnected:1;
+
+	/* 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,
+};
+
+/* temporary variable used between acc_open() and acc_gadget_bind() */
+static struct acc_dev *_acc_dev;
+
+struct acc_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+};
+
+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 = _acc_dev;
+
+	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);
+}
+
+static void acc_complete_out(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev *dev = _acc_dev;
+
+	dev->rx_done = 1;
+	if (req->status == -ESHUTDOWN) {
+		pr_debug("acc_complete_out set disconnected");
+		acc_set_disconnected(dev);
+	}
+
+	wake_up(&dev->read_wq);
+}
+
+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;
+	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;
+	}
+
+	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 = count;
+	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)
+{
+	printk(KERN_INFO "acc_open\n");
+	if (atomic_xchg(&_acc_dev->open_excl, 1))
+		return -EBUSY;
+
+	_acc_dev->disconnected = 0;
+	fp->private_data = _acc_dev;
+	return 0;
+}
+
+static int acc_release(struct inode *ip, struct file *fp)
+{
+	printk(KERN_INFO "acc_release\n");
+
+	WARN_ON(!atomic_xchg(&_acc_dev->open_excl, 0));
+	/* indicate that we are disconnected
+	 * still could be online so don't touch online flag
+	 */
+	_acc_dev->disconnected = 1;
+	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 = _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;
+
+/*
+	printk(KERN_INFO "acc_ctrlrequest "
+			"%02x.%02x v%04x i%04x l%u\n",
+			b_requestType, b_request,
+			w_value, w_index, w_length);
+*/
+
+	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);
+	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;
+
+	/* do nothing if usb accessory device doesn't exist */
+	if (!dev)
+		return;
+
+	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 = _acc_dev;
+	struct list_head	*entry, *temp;
+	struct acc_hid_dev *hid;
+	struct list_head	new_list, dead_list;
+	unsigned long flags;
+
+	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);
+	}
+}
+
+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 *dev;
+	int ret;
+
+	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);
+
+	/* _acc_dev must be set before calling usb_gadget_register_driver */
+	_acc_dev = dev;
+
+	ret = misc_register(&acc_device);
+	if (ret)
+		goto err;
+
+	return 0;
+
+err:
+	kfree(dev);
+	pr_err("USB accessory gadget driver failed to initialize\n");
+	return ret;
+}
+
+void acc_disconnect(void)
+{
+	/* unregister all HID devices if USB is disconnected */
+	kill_all_hid_devices(_acc_dev);
+}
+EXPORT_SYMBOL_GPL(acc_disconnect);
+
+static void acc_cleanup(void)
+{
+	misc_deregister(&acc_device);
+	kfree(_acc_dev);
+	_acc_dev = NULL;
+}
+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;
+	struct acc_dev *dev;
+	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);
+		pr_err("Error setting ACCESSORY\n");
+		return ERR_PTR(err);
+	}
+
+	config_group_init_type_name(&fi_acc->func_inst.group,
+					"", &acc_func_type);
+	dev = _acc_dev;
+	return  &fi_acc->func_inst;
+}
+
+static void acc_free(struct usb_function *f)
+{
+/*NO-OP: no function specific resource allocation in mtp_alloc*/
+}
+
+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 = _acc_dev;
+
+	pr_info("acc_alloc\n");
+
+	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 46af0aa..4713a1c 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -1216,6 +1216,65 @@
 	}
 }
 
+#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;
@@ -1234,6 +1293,11 @@
 	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);
 
@@ -1254,6 +1318,7 @@
 		kfifo_free(&midi->in_req_fifo);
 		kfree(midi);
 		free = true;
+		opts->func_inst.f = NULL;
 	}
 	mutex_unlock(&opts->lock);
 
@@ -1341,6 +1406,7 @@
 	midi->func.disable	= f_midi_disable;
 	midi->func.free_func	= f_midi_free;
 
+	fi->f = &midi->func;
 	return &midi->func;
 
 setup_fail:
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 4c9d1e4..9f177b2 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -187,31 +187,31 @@
 		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..be2e7ef
--- /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 <linux/unaligned/access_ok.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 bbd6163..00dfe42c 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
@@ -64,8 +65,6 @@
 
 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,
 };
@@ -292,7 +291,7 @@
 #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);
@@ -320,12 +319,13 @@
 	/* 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;
@@ -388,8 +388,9 @@
 	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;
 
@@ -411,6 +412,7 @@
 
 	usb_hcd_pci_remove(dev);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_remove);
 
 #ifdef CONFIG_PM
 /*
@@ -467,7 +469,7 @@
 	readl(reg);
 }
 
-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);
@@ -492,8 +494,9 @@
 
 	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);
@@ -541,6 +544,7 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 /*
  * 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 @@
 }
 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 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 @@
 	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_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 @@
 	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 @@
  * @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 @@
 	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 @@
  *    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 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 @@
 	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 @@
 	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 @@
 	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 @@
 					);
 			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 @@
 
 	/* 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 @@
 	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 @@
 			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 @@
 	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 @@
 	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 @@
 
 	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 @@
 	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 @@
 }
 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 @@
 	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 @@
 	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 @@
 	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 @@
 		(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 @@
 /*
  * 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_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 @@
 		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 @@
 			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 @@
 	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 @@
 		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 @@
 		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 @@
 		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 @@
 	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 @@
 		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 @@
 		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 @@
 	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 @@
 	ida_destroy(&port->mode_ids);
 	typec_switch_put(port->sw);
 	typec_mux_put(port->mux);
+	kfree(port->cap);
 	kfree(port);
 }
 
@@ -1487,6 +1490,16 @@
 /* --------------------------------------- */
 
 /**
+ * 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 @@
 	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 @@
 	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 355a2c7..70f749a6 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -390,12 +390,6 @@
 	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 @@
 }
 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 typec_port *port;
 	struct typec_partner *partner;
 	struct usb_pd_identity partner_identity;
-	struct typec_capability typec_cap;
 };
 
 /*
@@ -307,11 +306,10 @@
 	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 @@
 	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 @@
 	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 int tps6598x_probe(struct i2c_client *client)
 {
+	struct typec_capability typec_cap = { };
 	struct tps6598x *tps;
 	u32 status;
 	u32 conf;
@@ -492,40 +495,40 @@
 	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 ba288b9..edd722f 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
  *
@@ -713,10 +710,9 @@
 	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;
 
@@ -748,10 +744,9 @@
 	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;
 
@@ -788,6 +783,11 @@
 	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;
@@ -843,8 +843,8 @@
 		*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 36ca2cf..f44340b 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 @@
 		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 @@
 
 	/* 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 @@
 	if (dev->mm)
 		mmput(dev->mm);
 	dev->mm = NULL;
+	dev->kcov_handle = 0;
 err_mm:
 	return err;
 }
@@ -682,6 +687,7 @@
 	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 @@
 	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 ca68a27..3399368 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -384,6 +384,49 @@
 	return val < vq->num;
 }
 
+static struct virtio_transport vhost_transport = {
+	.transport = {
+		.module                   = THIS_MODULE,
+
+		.get_local_cid            = vhost_transport_get_local_cid,
+
+		.init                     = virtio_transport_do_socket_init,
+		.destruct                 = virtio_transport_destruct,
+		.release                  = virtio_transport_release,
+		.connect                  = virtio_transport_connect,
+		.shutdown                 = virtio_transport_shutdown,
+		.cancel_pkt               = vhost_transport_cancel_pkt,
+
+		.dgram_enqueue            = virtio_transport_dgram_enqueue,
+		.dgram_dequeue            = virtio_transport_dgram_dequeue,
+		.dgram_bind               = virtio_transport_dgram_bind,
+		.dgram_allow              = virtio_transport_dgram_allow,
+
+		.stream_enqueue           = virtio_transport_stream_enqueue,
+		.stream_dequeue           = virtio_transport_stream_dequeue,
+		.stream_has_data          = virtio_transport_stream_has_data,
+		.stream_has_space         = virtio_transport_stream_has_space,
+		.stream_rcvhiwat          = virtio_transport_stream_rcvhiwat,
+		.stream_is_active         = virtio_transport_stream_is_active,
+		.stream_allow             = virtio_transport_stream_allow,
+
+		.notify_poll_in           = virtio_transport_notify_poll_in,
+		.notify_poll_out          = virtio_transport_notify_poll_out,
+		.notify_recv_init         = virtio_transport_notify_recv_init,
+		.notify_recv_pre_block    = virtio_transport_notify_recv_pre_block,
+		.notify_recv_pre_dequeue  = virtio_transport_notify_recv_pre_dequeue,
+		.notify_recv_post_dequeue = virtio_transport_notify_recv_post_dequeue,
+		.notify_send_init         = virtio_transport_notify_send_init,
+		.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,
+
+	},
+
+	.send_pkt = vhost_transport_send_pkt,
+};
+
 static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
 {
 	struct vhost_virtqueue *vq = container_of(work, struct vhost_virtqueue,
@@ -440,7 +483,7 @@
 		if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid &&
 		    le64_to_cpu(pkt->hdr.dst_cid) ==
 		    vhost_transport_get_local_cid())
-			virtio_transport_recv_pkt(pkt);
+			virtio_transport_recv_pkt(&vhost_transport, pkt);
 		else
 			virtio_transport_free_pkt(pkt);
 
@@ -682,6 +725,12 @@
 	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);
@@ -793,57 +842,12 @@
 	.fops = &vhost_vsock_fops,
 };
 
-static struct virtio_transport vhost_transport = {
-	.transport = {
-		.get_local_cid            = vhost_transport_get_local_cid,
-
-		.init                     = virtio_transport_do_socket_init,
-		.destruct                 = virtio_transport_destruct,
-		.release                  = virtio_transport_release,
-		.connect                  = virtio_transport_connect,
-		.shutdown                 = virtio_transport_shutdown,
-		.cancel_pkt               = vhost_transport_cancel_pkt,
-
-		.dgram_enqueue            = virtio_transport_dgram_enqueue,
-		.dgram_dequeue            = virtio_transport_dgram_dequeue,
-		.dgram_bind               = virtio_transport_dgram_bind,
-		.dgram_allow              = virtio_transport_dgram_allow,
-
-		.stream_enqueue           = virtio_transport_stream_enqueue,
-		.stream_dequeue           = virtio_transport_stream_dequeue,
-		.stream_has_data          = virtio_transport_stream_has_data,
-		.stream_has_space         = virtio_transport_stream_has_space,
-		.stream_rcvhiwat          = virtio_transport_stream_rcvhiwat,
-		.stream_is_active         = virtio_transport_stream_is_active,
-		.stream_allow             = virtio_transport_stream_allow,
-
-		.notify_poll_in           = virtio_transport_notify_poll_in,
-		.notify_poll_out          = virtio_transport_notify_poll_out,
-		.notify_recv_init         = virtio_transport_notify_recv_init,
-		.notify_recv_pre_block    = virtio_transport_notify_recv_pre_block,
-		.notify_recv_pre_dequeue  = virtio_transport_notify_recv_pre_dequeue,
-		.notify_recv_post_dequeue = virtio_transport_notify_recv_post_dequeue,
-		.notify_send_init         = virtio_transport_notify_send_init,
-		.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,
-	},
-
-	.send_pkt = vhost_transport_send_pkt,
-};
-
 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 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 @@
 		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 @@
 	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 @@
 
 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 @@
 
 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..26454d4 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"
 
@@ -243,6 +244,7 @@
 source "fs/adfs/Kconfig"
 source "fs/affs/Kconfig"
 source "fs/ecryptfs/Kconfig"
+source "fs/sdcardfs/Kconfig"
 source "fs/hfs/Kconfig"
 source "fs/hfsplus/Kconfig"
 source "fs/befs/Kconfig"
diff --git a/fs/Makefile b/fs/Makefile
index 14231b4..1edfae4 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -87,6 +87,7 @@
 obj-$(CONFIG_HFSPLUS_FS)	+= hfsplus/ # Before hfs to find wrapped HFS+
 obj-$(CONFIG_HFS_FS)		+= hfs/
 obj-$(CONFIG_ECRYPT_FS)		+= ecryptfs/
+obj-$(CONFIG_SDCARD_FS)		+= sdcardfs/
 obj-$(CONFIG_VXFS_FS)		+= freevxfs/
 obj-$(CONFIG_NFS_FS)		+= nfs/
 obj-$(CONFIG_EXPORTFS)		+= exportfs/
@@ -111,6 +112,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 @@
 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 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 @@
 		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 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 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 @@
 	/* 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 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/attr.c b/fs/attr.c
index b4bbdbd4..03217e0 100644
--- a/fs/attr.c
+++ b/fs/attr.c
@@ -220,7 +220,7 @@
  * the file open for write, as there can be no conflicting delegation in
  * that case.
  */
-int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
+int notify_change2(struct vfsmount *mnt, struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
 {
 	struct inode *inode = dentry->d_inode;
 	umode_t mode = inode->i_mode;
@@ -244,7 +244,7 @@
 			return -EPERM;
 
 		if (!inode_owner_or_capable(inode)) {
-			error = inode_permission(inode, MAY_WRITE);
+			error = inode_permission2(mnt, inode, MAY_WRITE);
 			if (error)
 				return error;
 		}
@@ -332,7 +332,9 @@
 	if (error)
 		return error;
 
-	if (inode->i_op->setattr)
+	if (mnt && inode->i_op->setattr2)
+		error = inode->i_op->setattr2(mnt, dentry, attr);
+	else if (inode->i_op->setattr)
 		error = inode->i_op->setattr(dentry, attr);
 	else
 		error = simple_setattr(dentry, attr);
@@ -345,4 +347,10 @@
 
 	return error;
 }
+EXPORT_SYMBOL_GPL(notify_change2);
+
+int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
+{
+	return notify_change2(NULL, dentry, attr, delegated_inode);
+}
 EXPORT_SYMBOL(notify_change);
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 @@
 
 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 22d8ac4..2615926 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,
@@ -3056,6 +3057,8 @@
 	 */
 	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 @@
 
 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_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/coredump.c b/fs/coredump.c
index 5c0375e..e69e142 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -777,7 +777,7 @@
 			goto close_fail;
 		if (!(cprm.file->f_mode & FMODE_CAN_WRITE))
 			goto close_fail;
-		if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file))
+		if (do_truncate2(cprm.file->f_path.mnt, cprm.file->f_path.dentry, 0, 0, cprm.file))
 			goto close_fail;
 	}
 
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 @@
 							   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..f4be878 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 @@
 }
 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 @@
 
 /**
  * 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 @@
 }
 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_dio_pages().  fscrypt_limit_dio_pages()
+ * 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 @@
 	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 @@
 }
 
 /**
- * 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 @@
  *
  * 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 @@
 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 @@
 }
 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 @@
  * 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 @@
 
 	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,
@@ -475,6 +361,8 @@
 
 /**
  * fscrypt_init() - Set up for fs encryption.
+ *
+ * Return: 0 on success; -errno on failure
  */
 static int __init fscrypt_init(void)
 {
@@ -494,13 +382,9 @@
 	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 +394,6 @@
 
 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..efa942e 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -11,10 +11,65 @@
  * 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 void fscrypt_do_sha256(const u8 *data, unsigned int data_len, u8 *result)
+{
+	struct sha256_state sctx;
+
+	sha256_init(&sctx);
+	sha256_update(&sctx, data, data_len);
+	sha256_final(&sctx, result);
+}
+
 static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
 {
 	if (str->len == 1 && str->name[0] == '.')
@@ -27,20 +82,23 @@
 }
 
 /**
- * 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 +138,23 @@
 
 /**
  * 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 +190,10 @@
 #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.
@@ -195,7 +259,12 @@
 }
 
 /**
- * fscrypt_fname_alloc_buffer - allocate a buffer for presented filenames
+ * fscrypt_fname_alloc_buffer() - allocate a buffer for presented filenames
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @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.
@@ -206,9 +275,7 @@
 			       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 +289,10 @@
 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 +304,34 @@
 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 +346,35 @@
 	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. */
+		fscrypt_do_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);
@@ -306,8 +395,7 @@
  * 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
+ * we decode it to get the 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 +405,8 @@
 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;
@@ -342,8 +430,8 @@
 		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;
@@ -358,40 +446,31 @@
 	 * 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 +479,105 @@
 	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 sha256[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;
+	fscrypt_do_sha256(&de_name[sizeof(nokey_name->bytes)],
+			  de_name_len - sizeof(nokey_name->bytes), sha256);
+	return !memcmp(sha256, nokey_name->sha256, sizeof(sha256));
+}
+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 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;
+}
+EXPORT_SYMBOL_GPL(fscrypt_d_revalidate);
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
index e84efc0..9542ef2 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
@@ -29,7 +33,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];
 };
 
 struct fscrypt_context_v2 {
@@ -39,10 +43,10 @@
 	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
@@ -75,6 +79,26 @@
 	return 0;
 }
 
+/* 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;
+}
+
 #undef fscrypt_policy
 union fscrypt_policy {
 	u8 version;
@@ -136,13 +160,7 @@
 	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.
  */
@@ -151,6 +169,20 @@
 	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
  *
@@ -160,14 +192,19 @@
  */
 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
@@ -193,15 +230,26 @@
 
 	/*
 	 * 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 {
@@ -209,38 +257,16 @@
 	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, ...)		\
@@ -256,20 +282,20 @@
 		__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 struct inode *inode, u32 orig_len,
+				  u32 max_len, u32 *encrypted_len_ret);
 
 /* hkdf.c */
 
@@ -277,8 +303,8 @@
 	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
@@ -287,15 +313,113 @@
  * 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 */
 
@@ -313,8 +437,15 @@
 	/* 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;
 
@@ -386,8 +517,17 @@
 	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;
 
@@ -427,14 +567,17 @@
 	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 */
 
@@ -443,40 +586,40 @@
 	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)
-{
-	return mode->ivsize >= offsetofend(union fscrypt_iv, nonce);
-}
+extern struct fscrypt_mode fscrypt_modes[];
 
-extern struct crypto_skcipher *
-fscrypt_allocate_skcipher(struct fscrypt_mode *mode, const u8 *raw_key,
-			  const struct inode *inode);
+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);
 
-extern int fscrypt_set_derived_key(struct fscrypt_info *ci,
-				   const u8 *derived_key);
+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);
 
 /* 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);
 
 #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 @@
  * 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 bb3b7fc..7d6898c 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
  *
@@ -116,12 +118,53 @@
 		spin_lock(&dentry->d_lock);
 		dentry->d_flags |= DCACHE_ENCRYPTED_NAME;
 		spin_unlock(&dentry->d_lock);
-		d_set_d_op(dentry, &fscrypt_d_ops);
 	}
 	return err;
 }
 EXPORT_SYMBOL_GPL(__fscrypt_prepare_lookup);
 
+/**
+ * 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 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;
+		mk = ci->ci_master_key->payload.data[0];
+		down_read(&mk->mk_secret_sem);
+		if (is_master_key_secret_present(&mk->mk_secret))
+			err = fscrypt_derive_dirhash_key(ci, mk);
+		else
+			err = -ENOKEY;
+		up_read(&mk->mk_secret_sem);
+		return err;
+	}
+	return 0;
+}
+
 int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
 			      unsigned int max_len,
 			      struct fscrypt_str *disk_link)
@@ -188,7 +231,8 @@
 	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 +261,7 @@
 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
diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c
new file mode 100644
index 0000000..4298b9f
--- /dev/null
+++ b/fs/crypto/inline_crypt.c
@@ -0,0 +1,475 @@
+// 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 (!fscrypt_needs_contents_encryption(inode))
+		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_NOFS);
+	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;
+	unsigned int flags;
+
+	blk_key = kzalloc(struct_size(blk_key, devs, num_devs), GFP_NOFS);
+	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++;
+
+		flags = memalloc_nofs_save();
+		err = blk_crypto_start_using_key(&blk_key->base,
+						 blk_key->devs[i]);
+		memalloc_nofs_restore(flags);
+		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_dio_pages() - limit I/O pages to avoid discontiguous DUNs
+ * @inode: the file on which I/O is being done
+ * @pos: the file position (in bytes) at which the I/O is being done
+ * @nr_pages: the number of pages we want to submit starting at @pos
+ *
+ * For direct I/O: limit the number of pages that will be submitted in the bio
+ * targeting @pos, in order to avoid crossing a data unit number (DUN)
+ * discontinuity.  This is only needed for certain IV generation methods.
+ *
+ * This assumes block_size == PAGE_SIZE; see fscrypt_dio_supported().
+ *
+ * Return: the actual number of pages that can be submitted
+ */
+int fscrypt_limit_dio_pages(const struct inode *inode, loff_t pos, int nr_pages)
+{
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	u32 dun;
+
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return nr_pages;
+
+	if (nr_pages <= 1)
+		return nr_pages;
+
+	if (!(fscrypt_policy_flags(&ci->ci_policy) &
+	      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32))
+		return nr_pages;
+
+	if (WARN_ON_ONCE(i_blocksize(inode) != PAGE_SIZE))
+		return 1;
+
+	/* With IV_INO_LBLK_32, the DUN can wrap around from U32_MAX to 0. */
+
+	dun = ci->ci_hashed_ino + (pos >> inode->i_blkbits);
+
+	return min_t(u64, nr_pages, (u64)U32_MAX + 1 - dun);
+}
diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c
index 4ee65b2..f511a39 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 @@
 
 	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 @@
 	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 *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. */
 
@@ -422,9 +435,9 @@
 	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 +476,154 @@
 	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 +662,60 @@
 	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 +723,29 @@
 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.
@@ -693,12 +876,34 @@
 	return -EBUSY;
 }
 
+static BLOCKING_NOTIFIER_HEAD(fscrypt_key_removal_notifiers);
+
+/*
+ * Register a function to be executed when the FS_IOC_REMOVE_ENCRYPTION_KEY
+ * ioctl has removed a key and is about to try evicting inodes.
+ */
+int fscrypt_register_key_removal_notifier(struct notifier_block *nb)
+{
+	return blocking_notifier_chain_register(&fscrypt_key_removal_notifiers,
+						nb);
+}
+EXPORT_SYMBOL_GPL(fscrypt_register_key_removal_notifier);
+
+int fscrypt_unregister_key_removal_notifier(struct notifier_block *nb)
+{
+	return blocking_notifier_chain_unregister(&fscrypt_key_removal_notifiers,
+						  nb);
+}
+EXPORT_SYMBOL_GPL(fscrypt_unregister_key_removal_notifier);
+
 static int try_to_lock_encrypted_files(struct super_block *sb,
 				       struct fscrypt_master_key *mk)
 {
 	int err1;
 	int err2;
 
+	blocking_notifier_call_chain(&fscrypt_key_removal_notifiers, 0, NULL);
+
 	/*
 	 * An inode can't be evicted while it is dirty or has dirty pages.
 	 * Thus, we first have to clean the inodes in ->mk_decrypted_inodes.
@@ -965,8 +1170,14 @@
 	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 7589834..df404c5 100644
--- a/fs/crypto/keysetup.c
+++ b/fs/crypto/keysetup.c
@@ -8,21 +8,18 @@
  * Heavily modified since then.
  */
 
-#include <crypto/aes.h>
-#include <crypto/sha.h>
 #include <crypto/skcipher.h>
 #include <linux/key.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 +28,11 @@
 		.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,18 +45,21 @@
 		.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)
 {
 	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));
@@ -67,9 +67,9 @@
 }
 
 /* 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;
@@ -86,18 +86,19 @@
 			    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);
@@ -111,174 +112,246 @@
 	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;
+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;
+
+	ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino,
+					      &mk->mk_ino_hash_key);
 	return 0;
 }
 
 static int fscrypt_setup_v2_file_key(struct fscrypt_info *ci,
 				     struct fscrypt_master_key *mk)
 {
-	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 (S_ISDIR(ci->ci_inode->i_mode) && IS_CASEFOLDED(ci->ci_inode)) {
+		err = fscrypt_derive_dirhash_key(ci, mk);
+		if (err)
+			return err;
+	}
+
+	return 0;
 }
 
 /*
@@ -323,6 +396,10 @@
 		    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
@@ -357,6 +434,10 @@
 		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);
@@ -388,13 +469,10 @@
 	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) {
@@ -415,6 +493,7 @@
 			key_invalidate(key);
 		key_put(key);
 	}
+	memzero_explicit(ci, sizeof(*ci));
 	kmem_cache_free(fscrypt_info_cachep, ci);
 }
 
@@ -435,21 +514,18 @@
 
 	res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
 	if (res < 0) {
-		if (!fscrypt_dummy_context_enabled(inode) ||
-		    IS_ENCRYPTED(inode)) {
+		const union fscrypt_context *dummy_ctx =
+			fscrypt_get_dummy_context(inode->i_sb);
+
+		if (IS_ENCRYPTED(inode) || !dummy_ctx) {
 			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);
+		res = fscrypt_context_size(dummy_ctx);
+		memcpy(&ctx, dummy_ctx, res);
 	}
 
 	crypt_info = kmem_cache_zalloc(fscrypt_info_cachep, GFP_NOFS);
@@ -465,20 +541,8 @@
 		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;
-	}
+	memcpy(crypt_info->ci_nonce, fscrypt_context_nonce(&ctx),
+	       FSCRYPT_FILE_NONCE_SIZE);
 
 	if (!fscrypt_supported_policy(&crypt_info->ci_policy, inode)) {
 		res = -EINVAL;
@@ -497,7 +561,17 @@
 	if (res)
 		goto out;
 
+	/*
+	 * 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];
@@ -527,7 +601,8 @@
 EXPORT_SYMBOL(fscrypt_get_encryption_info);
 
 /**
- * fscrypt_put_encryption_info - free most of an inode's fscrypt data
+ * 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.
@@ -540,7 +615,8 @@
 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.
@@ -555,7 +631,8 @@
 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
@@ -565,7 +642,7 @@
  */
 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;
 
 	/*
diff --git a/fs/crypto/keysetup_v1.c b/fs/crypto/keysetup_v1.c
index ad1a36c..21d3521 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 @@
  * 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;
@@ -68,7 +68,7 @@
 	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;
 
@@ -146,7 +146,7 @@
 	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 @@
 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 @@
 			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) */
@@ -231,13 +233,10 @@
 		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 @@
 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;
 }
 
@@ -302,7 +282,7 @@
 	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 4072ba6..2d73fd3 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,189 @@
 	return !memcmp(policy1, policy2, fscrypt_policy_size(policy1));
 }
 
+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_VALID) {
+		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;
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
+	    /* This uses hashed inode numbers, so ino_bits doesn't matter. */
+	    !supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_32",
+					  INT_MAX, 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,61 +222,19 @@
 			      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_VALID) {
-			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_VALID) {
-			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_from_policy() - create a new fscrypt_context from
+ *				       an fscrypt_policy
+ * @ctx_u: output context
+ * @policy_u: input policy
  *
  * Create an fscrypt_context for an inode that is being assigned the given
  * encryption policy.  A new nonce is randomly generated.
@@ -147,7 +284,11 @@
 }
 
 /**
- * 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.
  *
@@ -163,7 +304,7 @@
 {
 	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) {
@@ -211,7 +352,7 @@
 	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;
@@ -259,6 +400,9 @@
 					       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);
@@ -386,6 +530,25 @@
 }
 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?
@@ -478,7 +641,7 @@
 	if (res < 0)
 		return res;
 
-	ci = READ_ONCE(parent->i_crypt_info);
+	ci = fscrypt_get_info(parent);
 	if (ci == NULL)
 		return -ENOKEY;
 
@@ -491,3 +654,127 @@
 	return preload ? fscrypt_get_encryption_info(child): 0;
 }
 EXPORT_SYMBOL(fscrypt_inherit_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.
+ *	 If no argument was specified, then @arg->from == NULL.
+ * @dummy_ctx: the filesystem's current dummy context (input/output, see below)
+ *
+ * Handle the test_dummy_encryption mount option by creating a dummy encryption
+ * context, saving it in @dummy_ctx, and adding the corresponding dummy
+ * encryption key to the filesystem.  If the @dummy_ctx is already set, then
+ * instead validate that it matches @arg.  Don't support changing it via
+ * remount, as that is difficult to do safely.
+ *
+ * The reason we use an fscrypt_context rather than an fscrypt_policy is because
+ * we mustn't generate a new nonce each time we access a dummy-encrypted
+ * directory, as that would change the way filenames are encrypted.
+ *
+ * Return: 0 on success (dummy context set, or the same context is already set);
+ *         -EEXIST if a different dummy context is already set;
+ *         or another -errno value.
+ */
+int fscrypt_set_test_dummy_encryption(struct super_block *sb,
+				      const substring_t *arg,
+				      struct fscrypt_dummy_context *dummy_ctx)
+{
+	const char *argstr = "v2";
+	const char *argstr_to_free = NULL;
+	struct fscrypt_key_specifier key_spec = { 0 };
+	int version;
+	union fscrypt_context *ctx = NULL;
+	int err;
+
+	if (arg->from) {
+		argstr = argstr_to_free = match_strdup(arg);
+		if (!argstr)
+			return -ENOMEM;
+	}
+
+	if (!strcmp(argstr, "v1")) {
+		version = FSCRYPT_CONTEXT_V1;
+		key_spec.type = FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR;
+		memset(key_spec.u.descriptor, 0x42,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+	} else if (!strcmp(argstr, "v2")) {
+		version = FSCRYPT_CONTEXT_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;
+	}
+
+	if (dummy_ctx->ctx) {
+		/*
+		 * Note: if we ever make test_dummy_encryption support
+		 * specifying other encryption settings, such as the encryption
+		 * modes, we'll need to compare those settings here.
+		 */
+		if (dummy_ctx->ctx->version == version)
+			err = 0;
+		else
+			err = -EEXIST;
+		goto out;
+	}
+
+	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	if (!ctx) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	err = fscrypt_add_test_dummy_key(sb, &key_spec);
+	if (err)
+		goto out;
+
+	ctx->version = version;
+	switch (ctx->version) {
+	case FSCRYPT_CONTEXT_V1:
+		ctx->v1.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		ctx->v1.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(ctx->v1.master_key_descriptor, key_spec.u.descriptor,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+		break;
+	case FSCRYPT_CONTEXT_V2:
+		ctx->v2.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		ctx->v2.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(ctx->v2.master_key_identifier, key_spec.u.identifier,
+		       FSCRYPT_KEY_IDENTIFIER_SIZE);
+		break;
+	default:
+		WARN_ON(1);
+		err = -EINVAL;
+		goto out;
+	}
+	dummy_ctx->ctx = ctx;
+	ctx = NULL;
+	err = 0;
+out:
+	kfree(ctx);
+	kfree(argstr_to_free);
+	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_context *ctx = fscrypt_get_dummy_context(sb);
+
+	if (!ctx)
+		return;
+	seq_printf(seq, "%ctest_dummy_encryption=v%d", sep, ctx->version);
+}
+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 @@
 	      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 @@
 	 */
 	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 @@
 		 * 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 @@
 		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 @@
 
 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 @@
 	}
 	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 b766c3ee..59e1d3e 100644
--- a/fs/erofs/xattr.c
+++ b/fs/erofs/xattr.c
@@ -463,7 +463,8 @@
 
 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 0d9b1e2..f91a433 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>
@@ -1913,7 +1914,8 @@
 			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/exec.c b/fs/exec.c
index d62cd1d..ae7b891 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1315,7 +1315,7 @@
 void would_dump(struct linux_binprm *bprm, struct file *file)
 {
 	struct inode *inode = file_inode(file);
-	if (inode_permission(inode, MAY_READ) < 0) {
+	if (inode_permission2(file->f_path.mnt, inode, MAY_READ) < 0) {
 		struct user_namespace *old, *user_ns;
 		bprm->interp_flags |= BINPRM_FLAGS_ENFORCE_NONDUMP;
 
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 @@
 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 @@
 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..37890e6 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.
 
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index 0589e91..cdd83ee 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 @@
 	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 @@
 			   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 @@
 	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;
 }
@@ -121,7 +141,7 @@
 
 	if (IS_ENCRYPTED(inode)) {
 		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
+		if (err)
 			return err;
 	}
 
@@ -227,7 +247,8 @@
 				 * 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 +264,7 @@
 			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 +289,9 @@
 
 					/* 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)
@@ -645,7 +668,7 @@
 	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);
@@ -669,70 +692,3 @@
 	.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 d576add..f2b4038 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1354,11 +1354,9 @@
  */
 #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_ctx.ctx != NULL)
 #else
 #define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
 #endif
@@ -1369,14 +1367,6 @@
 #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 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 ratelimit_state s_warning_ratelimit_state;
 	struct ratelimit_state s_msg_ratelimit_state;
 
+	/* Encryption context for '-o test_dummy_encryption' */
+	struct fscrypt_dummy_context s_dummy_enc_ctx;
+
 	/*
 	 * Barrier between writepages ops and changing any inode's JOURNAL_DATA
 	 * or EXTENTS flag.
@@ -1698,6 +1687,7 @@
 #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(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 @@
 	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 @@
 };
 
 /*
+ * 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 @@
  */
 #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 @@
 #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 @@
 };
 
 #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 @@
 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 @@
 	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 @@
 	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 @@
 					    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 @@
 				  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);
@@ -2674,11 +2710,12 @@
 			   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,
@@ -3213,9 +3250,6 @@
 					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..035b57b 100644
--- a/fs/ext4/hash.c
+++ b/fs/ext4/hash.c
@@ -197,7 +197,7 @@
  * 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 @@
 		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,12 @@
 		   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 && needs_casefold(dir) && um) {
 		buff = kzalloc(sizeof(char) * PATH_MAX, GFP_KERNEL);
 		if (!buff)
 			return -ENOMEM;
@@ -291,12 +307,12 @@
 			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..c19664a 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -451,7 +451,10 @@
 		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;
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 2fec62d..4ffd8e7 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 @@
 		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 @@
 		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 @@
 			     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 @@
 	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 @@
 	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 @@
 	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 @@
 			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 @@
 			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 @@
 			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 @@
 	 * 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 @@
 			 * 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 @@
 		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 @@
 						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 @@
 	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 @@
 	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 @@
 					   &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.c b/fs/ext4/inode.c
index a284d99..6ef1c64 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
 
@@ -1246,7 +1247,7 @@
 	}
 	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;
 
@@ -1278,6 +1279,16 @@
 	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
@@ -1420,6 +1431,7 @@
 	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,
@@ -1530,6 +1542,7 @@
 	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;
@@ -3049,6 +3062,16 @@
 					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)) {
@@ -3167,6 +3190,7 @@
 		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;
@@ -3872,11 +3896,11 @@
 	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;
 
@@ -3890,12 +3914,42 @@
 	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;
 }
 
@@ -4060,7 +4114,7 @@
 		/* 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(
@@ -5200,7 +5254,7 @@
 	    (inode->i_state & I_DIRTY_TIME)) {
 		struct ext4_inode_info	*ei = EXT4_I(inode);
 
-		inode->i_state &= ~(I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED);
+		inode->i_state &= ~I_DIRTY_TIME;
 		spin_unlock(&inode->i_lock);
 
 		spin_lock(&ei->i_raw_lock);
@@ -5759,12 +5813,15 @@
 		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 0b7f316..a05916c 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -1210,6 +1210,11 @@
 			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))
@@ -1369,6 +1374,7 @@
 	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:
@@ -1376,6 +1382,8 @@
 	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 36a81b5..b62b52c 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -277,9 +277,11 @@
 		       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 @@
 				 __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 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_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);
@@ -677,7 +681,10 @@
 						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 +700,7 @@
 				       (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 +772,34 @@
 	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 +1014,7 @@
 	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,9 +1023,11 @@
 		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)) {
@@ -1020,13 +1046,23 @@
 #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 +1133,11 @@
 		       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 +1230,12 @@
 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 +1256,10 @@
 
 	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 +1323,84 @@
  * 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_enc_strict_mode(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 (!needs_casefold(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 +1409,11 @@
  *
  * 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 +1425,23 @@
 #endif
 
 #ifdef CONFIG_UNICODE
-	if (EXT4_SB(parent->i_sb)->s_encoding && IS_CASEFOLDED(parent)) {
+	if (needs_casefold(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 +1453,8 @@
  */
 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 +1470,7 @@
 			/* 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 +1516,7 @@
 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 +1540,8 @@
 		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 +1560,7 @@
 		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 +1624,11 @@
 			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 +1663,7 @@
 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 +1675,7 @@
 	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 +1690,13 @@
 	struct buffer_head *bh;
 
 	err = ext4_fname_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dir, 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 +1704,7 @@
 
 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 +1720,13 @@
 		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 +1821,7 @@
 	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 +1843,8 @@
  * 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 +1852,8 @@
 	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 +1868,8 @@
  * 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 +1878,7 @@
 	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 +1896,12 @@
  * 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 +1913,7 @@
 	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 +1967,9 @@
 					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 +1991,7 @@
 		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 +2011,14 @@
 }
 
 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 +2027,11 @@
 	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 +2045,8 @@
 	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 +2054,7 @@
 
 	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 +2068,13 @@
 	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 +2088,7 @@
 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 +2099,7 @@
 		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 +2112,7 @@
 	}
 
 	/* 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 +2204,16 @@
 
 	/* 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 +2224,11 @@
 	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 +2243,13 @@
 	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 +2280,6 @@
 	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,14 +2291,13 @@
 		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;
 
 #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_enc_strict_mode(sb) && IS_CASEFOLDED(dir) &&
+	    sb->s_encoding && utf8_validate(sb->s_encoding, &dentry->d_name))
 		return -EINVAL;
 #endif
 
@@ -2241,7 +2344,7 @@
 			goto out;
 		}
 		retval = add_dirent_to_buf(handle, &fname, dir, inode,
-					   NULL, bh);
+					   NULL, block, bh);
 		if (retval != -ENOSPC)
 			goto out;
 
@@ -2268,7 +2371,7 @@
 	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);
@@ -2290,6 +2393,7 @@
 	struct ext4_dir_entry_2 *de;
 	int restart;
 	int err;
+	ext4_lblk_t lblk;
 
 again:
 	restart = 0;
@@ -2298,7 +2402,8 @@
 		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;
@@ -2310,7 +2415,7 @@
 	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;
 
@@ -2430,12 +2535,12 @@
 			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:
@@ -2458,6 +2563,7 @@
 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,
@@ -2472,7 +2578,7 @@
 	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)
@@ -2497,6 +2603,7 @@
 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;
@@ -2517,7 +2624,7 @@
 	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)
@@ -2700,7 +2807,7 @@
 {
 	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);
@@ -2710,11 +2817,12 @@
 	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);
 
@@ -2839,7 +2947,8 @@
 	}
 
 	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;
 	}
@@ -2851,7 +2960,7 @@
 		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 '.'");
@@ -2860,7 +2969,7 @@
 	}
 	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 '..'");
@@ -2884,7 +2993,7 @@
 		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;
 		}
@@ -3079,6 +3188,8 @@
 	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;
@@ -3093,7 +3204,7 @@
 		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)
@@ -3120,7 +3231,7 @@
 	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))
@@ -3166,6 +3277,7 @@
 	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;
@@ -3181,7 +3293,7 @@
 		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)
@@ -3204,7 +3316,7 @@
 	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);
@@ -3466,6 +3578,7 @@
 	int dir_nlink_delta;
 
 	/* entry for "dentry" */
+	ext4_lblk_t lblk;
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	int inlined;
@@ -3553,12 +3666,13 @@
 	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;
@@ -3582,7 +3696,8 @@
 		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);
@@ -3695,7 +3810,8 @@
 			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);
 	/*
@@ -3709,7 +3825,7 @@
 		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;
@@ -3889,7 +4005,7 @@
 		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);
 	/*
@@ -3903,7 +4019,7 @@
 		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 @@
 	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 @@
 {
 	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 @@
 	 * (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 @@
 	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 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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 		 * 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 @@
 				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 @@
 		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 @@
 	}
 	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 4aae7e3..5dd2c47 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1066,8 +1066,9 @@
 		crypto_free_shash(sbi->s_chksum_driver);
 	kfree(sbi->s_blockgroup_lock);
 	fs_put_dax(sbi->s_daxdev);
+	fscrypt_free_dummy_context(&sbi->s_dummy_enc_ctx);
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
 	kfree(sbi);
 }
@@ -1351,18 +1352,33 @@
 	return res;
 }
 
-static bool ext4_dummy_context(struct inode *inode)
+static const union fscrypt_context *
+ext4_get_dummy_context(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(EXT4_SB(inode->i_sb));
+	return EXT4_SB(sb)->s_dummy_enc_ctx.ctx;
+}
+
+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_context	= ext4_get_dummy_context,
 	.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
 
@@ -1458,6 +1474,7 @@
 	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,
@@ -1553,7 +1570,9 @@
 	{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 */
@@ -1764,7 +1783,7 @@
 	{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}
 };
@@ -1799,6 +1818,48 @@
 }
 #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_ctx.ctx) {
+		ext4_msg(sb, KERN_WARNING,
+			 "Can't set test_dummy_encryption on remount");
+		return -1;
+	}
+	err = fscrypt_set_test_dummy_encryption(sb, arg, &sbi->s_dummy_enc_ctx);
+	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)
@@ -1841,6 +1902,13 @@
 	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++)
@@ -1995,14 +2063,8 @@
 		*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)
@@ -2271,8 +2333,11 @@
 		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;
@@ -3890,17 +3955,11 @@
 		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,
@@ -3921,8 +3980,8 @@
 			 "%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
 
@@ -4542,11 +4601,6 @@
 		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");
@@ -4740,13 +4794,14 @@
 		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_context(&sbi->s_dummy_enc_ctx);
 	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(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 @@
 	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 @@
 	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 @@
 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 @@
 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.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 bbd07fe..ff807e1 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -50,9 +50,6 @@
 	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 @@
 		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 @@
 }
 
 /*
- * 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 @@
 		.is_por = (type == META_POR),
 	};
 	struct blk_plug plug;
+	int err;
 
 	if (unlikely(type == META_POR))
 		fio.op_flags &= ~REQ_META;
@@ -266,8 +266,11 @@
 		}
 
 		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);
@@ -520,7 +523,7 @@
 	__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];
@@ -581,7 +584,7 @@
 
 	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;
 	}
 
@@ -898,7 +901,7 @@
 		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);
@@ -1163,10 +1166,12 @@
 		.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);
@@ -1195,7 +1200,7 @@
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_dirty_inodes(sbi, DIR_INODE);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1211,7 +1216,7 @@
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_inode_meta(sbi);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1227,7 +1232,7 @@
 		if (err) {
 			up_write(&sbi->node_change);
 			f2fs_unlock_all(sbi);
-			goto out;
+			return err;
 		}
 		cond_resched();
 		goto retry_flush_nodes;
@@ -1239,8 +1244,6 @@
 	 */
 	__prepare_cp_block(sbi);
 	up_write(&sbi->node_change);
-out:
-	blk_finish_plug(&plug);
 	return err;
 }
 
@@ -1255,15 +1258,20 @@
 	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);
 }
@@ -1389,10 +1397,7 @@
 	/* 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++) {
@@ -1412,7 +1417,7 @@
 				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)
@@ -1511,10 +1516,11 @@
 	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);
 
@@ -1545,9 +1551,6 @@
 	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);
@@ -1562,7 +1565,8 @@
 			return 0;
 		f2fs_warn(sbi, "Start checkpoint disabled!");
 	}
-	mutex_lock(&sbi->cp_mutex);
+	if (cpc->reason != CP_RESIZE)
+		mutex_lock(&sbi->cp_mutex);
 
 	if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
 		((cpc->reason & CP_FASTBOOT) || (cpc->reason & CP_SYNC) ||
@@ -1615,7 +1619,6 @@
 
 	f2fs_flush_sit_entries(sbi, cpc);
 
-	/* unlock all the fs_lock[] in do_checkpoint() */
 	err = do_checkpoint(sbi, cpc);
 	if (err)
 		f2fs_release_discard_addrs(sbi);
@@ -1628,11 +1631,12 @@
 	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)
+		mutex_unlock(&sbi->cp_mutex);
 	return err;
 }
 
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
new file mode 100644
index 0000000..950ac5f
--- /dev/null
+++ b/fs/f2fs/compress.c
@@ -0,0 +1,1533 @@
+// 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>
+
+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)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+
+	if (cc->nr_rpages)
+		return 0;
+
+	cc->rpages = f2fs_kzalloc(sbi, sizeof(struct page *) <<
+					cc->log_cluster_size, GFP_NOFS);
+	return cc->rpages ? 0 : -ENOMEM;
+}
+
+void f2fs_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kfree(cc->rpages);
+	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;
+
+	workspace_size = ZSTD_DStreamWorkspaceBound(MAX_COMPRESS_WINDOW_SIZE);
+
+	workspace = f2fs_kvmalloc(F2FS_I_SB(dic->inode),
+					workspace_size, GFP_NOFS);
+	if (!workspace)
+		return -ENOMEM;
+
+	stream = ZSTD_initDStream(MAX_COMPRESS_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);
+}
+
+static int f2fs_compress_pages(struct compress_ctx *cc)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+	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, nr_cpages;
+	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 = f2fs_kzalloc(sbi, sizeof(struct page *) *
+					cc->nr_cpages, GFP_NOFS);
+	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 = vmap(cc->rpages, cc->cluster_size, VM_MAP, PAGE_KERNEL_RO);
+	if (!cc->rbuf) {
+		ret = -ENOMEM;
+		goto out_free_cpages;
+	}
+
+	cc->cbuf = vmap(cc->cpages, cc->nr_cpages, VM_MAP, PAGE_KERNEL);
+	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);
+
+	for (i = 0; i < COMPRESS_DATA_RESERVED_SIZE; i++)
+		cc->cbuf->reserved[i] = cpu_to_le32(0);
+
+	nr_cpages = DIV_ROUND_UP(cc->clen + COMPRESS_HEADER_SIZE, PAGE_SIZE);
+
+	/* zero out any unused part of the last page */
+	memset(&cc->cbuf->cdata[cc->clen], 0,
+	       (nr_cpages * PAGE_SIZE) - (cc->clen + COMPRESS_HEADER_SIZE));
+
+	vunmap(cc->cbuf);
+	vunmap(cc->rbuf);
+
+	for (i = nr_cpages; i < cc->nr_cpages; i++) {
+		f2fs_compress_free_page(cc->cpages[i]);
+		cc->cpages[i] = NULL;
+	}
+
+	if (cops->destroy_compress_ctx)
+		cops->destroy_compress_ctx(cc);
+
+	cc->nr_cpages = nr_cpages;
+
+	trace_f2fs_compress_pages_end(cc->inode, cc->cluster_idx,
+							cc->clen, ret);
+	return 0;
+
+out_vunmap_cbuf:
+	vunmap(cc->cbuf);
+out_vunmap_rbuf:
+	vunmap(cc->rbuf);
+out_free_cpages:
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (cc->cpages[i])
+			f2fs_compress_free_page(cc->cpages[i]);
+	}
+	kfree(cc->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 (refcount_dec_not_one(&dic->ref))
+		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 = f2fs_kzalloc(sbi, sizeof(struct page *) *
+					dic->cluster_size, GFP_NOFS);
+	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 = vmap(dic->tpages, dic->cluster_size, VM_MAP, PAGE_KERNEL);
+	if (!dic->rbuf) {
+		ret = -ENOMEM;
+		goto destroy_decompress_ctx;
+	}
+
+	dic->cbuf = vmap(dic->cpages, dic->nr_cpages, VM_MAP, PAGE_KERNEL_RO);
+	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);
+
+out_vunmap_cbuf:
+	vunmap(dic->cbuf);
+out_vunmap_rbuf:
+	vunmap(dic->rbuf);
+destroy_decompress_ctx:
+	if (cops->destroy_decompress_ctx)
+		cops->destroy_decompress_ctx(dic);
+out_free_dic:
+	if (verity)
+		refcount_set(&dic->ref, dic->nr_cpages);
+	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_compressed_file(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 = {
+		.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)) {
+		return -EAGAIN;
+	}
+
+	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 = f2fs_kzalloc(sbi, sizeof(struct compress_io_ctx), GFP_NOFS);
+	if (!cic)
+		goto out_put_dnode;
+
+	cic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	cic->inode = inode;
+	refcount_set(&cic->ref, cc->nr_cpages);
+	cic->rpages = f2fs_kzalloc(sbi, sizeof(struct page *) <<
+			cc->log_cluster_size, GFP_NOFS);
+	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);
+	f2fs_destroy_compress_ctx(cc);
+	return 0;
+
+out_destroy_crypt:
+	kfree(cic->rpages);
+
+	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:
+	kfree(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);
+	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 (refcount_dec_not_one(&cic->ref))
+		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]);
+	}
+
+	kfree(cic->rpages);
+	kfree(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)
+{
+	struct f2fs_inode_info *fi = F2FS_I(cc->inode);
+	const struct f2fs_compress_ops *cops =
+			f2fs_cops[fi->i_compress_algorithm];
+	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);
+		cops->destroy_compress_ctx(cc);
+		kfree(cc->cpages);
+		cc->cpages = NULL;
+		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 f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+	struct decompress_io_ctx *dic;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	int i;
+
+	dic = f2fs_kzalloc(sbi, sizeof(struct decompress_io_ctx), GFP_NOFS);
+	if (!dic)
+		return ERR_PTR(-ENOMEM);
+
+	dic->rpages = f2fs_kzalloc(sbi, sizeof(struct page *) <<
+			cc->log_cluster_size, GFP_NOFS);
+	if (!dic->rpages) {
+		kfree(dic);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	dic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	dic->inode = cc->inode;
+	refcount_set(&dic->ref, 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 = f2fs_kzalloc(sbi, sizeof(struct page *) *
+					dic->nr_cpages, GFP_NOFS);
+	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]);
+		}
+		kfree(dic->tpages);
+	}
+
+	if (dic->cpages) {
+		for (i = 0; i < dic->nr_cpages; i++) {
+			if (!dic->cpages[i])
+				continue;
+			f2fs_compress_free_page(dic->cpages[i]);
+		}
+		kfree(dic->cpages);
+	}
+
+	kfree(dic->rpages);
+	kfree(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);
+	}
+}
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index ec9a1f9..884f0b7 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 @@
 	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 @@
 
 /* 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 @@
 	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 @@
 		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 (refcount_dec_not_one(&dic->ref))
+				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 @@
 	 * 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 @@
 	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 @@
 
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 		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))
@@ -356,6 +541,40 @@
 	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 @@
 	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 @@
 						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 @@
 		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 @@
 	/* 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 @@
 	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) ?
@@ -543,6 +774,134 @@
 	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 +916,20 @@
 	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 +943,6 @@
 	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 +968,23 @@
 
 	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 +996,8 @@
 			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 +1031,36 @@
 
 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)
 {
 	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_compressed_file(inode))
+		post_read_steps |= 1 << STEP_DECOMPRESS_NOWQ;
 	if (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 +1068,22 @@
 	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);
 	if (IS_ERR(bio))
 		return PTR_ERR(bio);
 
@@ -729,6 +1096,7 @@
 	}
 	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 +1156,7 @@
 	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 +1198,7 @@
 
 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 +1270,8 @@
 		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 +1409,7 @@
 	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 +1420,7 @@
 	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 +1480,7 @@
 	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 +1496,9 @@
 }
 
 /*
- * 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 +1526,7 @@
 	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 +1545,7 @@
 
 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 +1571,7 @@
 	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 +1581,7 @@
 
 	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 +1694,7 @@
 	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 +1720,7 @@
 	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:
@@ -1504,6 +1867,7 @@
 			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;
 	}
@@ -1527,12 +1891,33 @@
 		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)
 {
@@ -1542,6 +1927,8 @@
 	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);
@@ -1576,6 +1963,9 @@
 	memset(&map_bh, 0, sizeof(struct buffer_head));
 	map_bh.b_size = len;
 
+	if (compr_cluster)
+		map_bh.b_size = blk_to_logical(inode, cluster_size - 1);
+
 	ret = get_data_block(inode, start_blk, &map_bh, 0,
 					F2FS_GET_BLOCK_FIEMAP, &next_pgofs);
 	if (ret)
@@ -1586,7 +1976,7 @@
 		start_blk = next_pgofs;
 
 		if (blk_to_logical(inode, start_blk) < blk_to_logical(inode,
-					F2FS_I_SB(inode)->max_file_blocks))
+						max_inode_blocks(inode)))
 			goto prep_next;
 
 		flags |= FIEMAP_EXTENT_LAST;
@@ -1598,11 +1988,39 @@
 
 		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;
 
+	if (compr_cluster) {
+		compr_cluster = false;
+
+
+		logical = blk_to_logical(inode, start_blk - 1);
+		phys = blk_to_logical(inode, map_bh.b_blocknr);
+		size = blk_to_logical(inode, cluster_size);
+
+		flags |= FIEMAP_EXTENT_ENCODED;
+
+		start_blk += cluster_size - 1;
+
+		if (start_blk > last_blk)
+			goto out;
+
+		goto prep_next;
+	}
+
+	if (map_bh.b_blocknr == COMPRESS_ADDR) {
+		compr_cluster = true;
+		start_blk++;
+		goto prep_next;
+	}
+
 	logical = blk_to_logical(inode, start_blk);
 	phys = blk_to_logical(inode, map_bh.b_blocknr);
 	size = map_bh.b_size;
@@ -1713,15 +2131,17 @@
 	 * 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);
 		if (IS_ERR(bio)) {
 			ret = PTR_ERR(bio);
 			bio = NULL;
@@ -1739,6 +2159,7 @@
 		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 +2174,152 @@
 	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 blkbits = inode->i_blkbits;
+	const unsigned blocksize = 1 << blkbits;
+	struct decompress_io_ctx *dic = NULL;
+	int i;
+	int ret = 0;
+
+	f2fs_bug_on(sbi, f2fs_cluster_is_empty(cc));
+
+	last_block_in_file = (f2fs_readpage_limit(inode) +
+					blocksize - 1) >> blkbits;
+
+	/* 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;
+	}
+
+	for (i = 0; i < dic->nr_cpages; i++) {
+		struct page *page = dic->cpages[i];
+		block_t blkaddr;
+		struct bio_post_read_ctx *ctx;
+
+		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);
+			if (IS_ERR(bio)) {
+				ret = PTR_ERR(bio);
+				dic->failed = true;
+				if (refcount_sub_and_test(dic->nr_cpages - i,
+							&dic->ref)) {
+					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 +2329,7 @@
  * 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 +2337,21 @@
 	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 +2362,65 @@
 	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 +2428,26 @@
 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 +2458,11 @@
 
 	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 +2481,9 @@
 
 	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 +2491,31 @@
 	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 +2586,7 @@
 {
 	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 +2670,7 @@
 	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 +2681,7 @@
 			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 +2706,16 @@
 
 	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 +2730,17 @@
 	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 +2756,7 @@
 		.page = page,
 		.encrypted_page = NULL,
 		.submitted = false,
+		.compr_blocks = compr_blocks,
 		.need_lock = LOCK_RETRY,
 		.io_type = io_type,
 		.io_wbc = wbc,
@@ -2123,7 +2781,9 @@
 	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 +2804,22 @@
 			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 +2848,10 @@
 	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 +2871,19 @@
 		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 +2904,23 @@
 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 +2933,37 @@
 					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 +2976,23 @@
 	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 +3000,62 @@
 
 		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 +3072,87 @@
 			}
 
 			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;
+		}
+	}
+#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 +3161,7 @@
 								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 +3169,17 @@
 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_compressed_file(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 +3270,16 @@
 	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 +3316,10 @@
 
 	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 +3353,7 @@
 			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 +3369,7 @@
 	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 +3385,16 @@
 	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 +3420,24 @@
 		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 +3450,8 @@
 		goto fail;
 	}
 
+	/* TODO: cluster can be compressed due to race with .writepage */
+
 	*pagep = page;
 
 	err = prepare_write_begin(sbi, page, pos, len,
@@ -2686,7 +3491,7 @@
 			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 +3522,7 @@
 {
 	struct inode *inode = page->mapping->host;
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_f2fs_write_end(inode, pos, len, copied);
 
 	/*
@@ -2730,6 +3536,20 @@
 		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;
 
@@ -2833,6 +3653,29 @@
 
 	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;
 
@@ -2857,7 +3700,8 @@
 	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,9 +3719,19 @@
 		} else if (err < 0) {
 			f2fs_write_failed(mapping, offset + count);
 		}
+	} else {
+		if (err > 0)
+			f2fs_update_iostat(sbi, APP_DIRECT_READ_IO, err);
 	}
 
 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;
@@ -2958,18 +3812,59 @@
 	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;
+	struct buffer_head tmp = {
+		.b_size = i_blocksize(inode),
+	};
+	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);
+	if (f2fs_compressed_file(inode))
+		blknr = f2fs_bmap_compress(inode, block);
+
+	if (!get_data_block_bmap(inode, block, &tmp, 0))
+		blknr = tmp.b_blocknr;
+out:
+	trace_f2fs_bmap(inode, block, blknr);
+	return blknr;
 }
 
 #ifdef CONFIG_MIGRATION
@@ -3138,6 +4033,9 @@
 	if (ret)
 		return ret;
 
+	if (f2fs_disable_compressed_file(inode))
+		return -EINVAL;
+
 	ret = check_swap_activate(sis, file, span);
 	if (ret < 0)
 		return ret;
@@ -3216,8 +4114,43 @@
 	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 9b0bedd..4276c0f7 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 @@
 	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 @@
 	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 = atomic_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 @@
 	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];
@@ -137,6 +174,26 @@
 	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 @@
 }
 
 /*
- * 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)
@@ -297,6 +321,9 @@
 			   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);
@@ -315,35 +342,57 @@
 			   si->inline_inode);
 		seq_printf(s, "  - Inline_dentry Inode: %u\n",
 			   si->inline_dir);
+		seq_printf(s, "  - Compressed Inode: %u, Blocks: %u\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, "\n  - Valid: %d\n  - Dirty: %d\n",
 			   si->main_area_segs - si->dirty_count -
 			   si->prefree_count - si->free_segs,
@@ -441,7 +490,7 @@
 			   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);
 
@@ -461,6 +510,7 @@
 }
 
 DEFINE_SHOW_ATTRIBUTE(stat);
+#endif
 
 int f2fs_build_stats(struct f2fs_sb_info *sbi)
 {
@@ -491,11 +541,12 @@
 	atomic_set(&sbi->inline_xattr, 0);
 	atomic_set(&sbi->inline_inode, 0);
 	atomic_set(&sbi->inline_dir, 0);
+	atomic_set(&sbi->compr_inode, 0);
+	atomic_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);
@@ -520,14 +571,18 @@
 
 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 e9af46dc..f1beb18 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,111 @@
 	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 f2fs_sb_info *sbi = F2FS_SB(dir->i_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(sbi->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_enc_strict_mode(dir->i_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_ciphertext_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,8 +190,7 @@
 
 static struct f2fs_dir_entry *find_in_block(struct inode *dir,
 				struct page *dentry_page,
-				struct fscrypt_name *fname,
-				f2fs_hash_t namehash,
+				const struct f2fs_filename *fname,
 				int *max_slots,
 				struct page **res_page)
 {
@@ -96,7 +201,7 @@
 	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);
+	de = f2fs_find_target_dentry(&d, fname, max_slots);
 	if (de)
 		*res_page = dentry_page;
 
@@ -109,102 +214,77 @@
  * being searched for.
  */
 static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
-			       const struct qstr *entry, bool quick)
+			       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 (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 false;
+
+		decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL);
+		if (!decrypted_name.name)
+			return false;
+		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;
+	}
+
+	res = utf8_strncasecmp_folded(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 (sb_has_enc_strict_mode(sb) || name->len != entry.len)
+			res = 1;
+		else
+			res = memcmp(name->name, entry.name, name->len);
 	}
+out:
+	kfree(decrypted_name.name);
 	return res == 0;
 }
+#endif /* CONFIG_UNICODE */
 
-static void f2fs_fname_setup_ci_filename(struct inode *dir,
-					const struct qstr *iname,
-					struct fscrypt_str *cf_name)
+static inline bool 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
-
 	if (max_slots)
 		*max_slots = 0;
 	while (bit_pos < d->max) {
@@ -221,7 +301,9 @@
 			continue;
 		}
 
-		if (f2fs_match_name(d, de, fname, &cf_str, bit_pos, namehash))
+		if (de->hash_code == fname->hash &&
+		    f2fs_match_name(d->inode, fname, d->filename[bit_pos],
+				    le16_to_cpu(de->name_len)))
 			goto found;
 
 		if (max_slots && max_len > *max_slots)
@@ -235,33 +317,27 @@
 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,8 +353,8 @@
 			}
 		}
 
-		de = find_in_block(dir, dentry_page, fname, namehash,
-							&max_slots, res_page);
+		de = find_in_block(dir, dentry_page, fname, &max_slots,
+				   res_page);
 		if (de)
 			break;
 
@@ -287,8 +363,8 @@
 		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 +372,8 @@
 }
 
 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;
@@ -345,18 +422,10 @@
 			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;
@@ -367,7 +436,7 @@
 
 	de = __f2fs_find_entry(dir, &fname, res_page);
 
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return de;
 }
 
@@ -408,24 +477,47 @@
 	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);
@@ -459,11 +551,9 @@
 }
 
 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)) {
@@ -486,12 +576,12 @@
 		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)) {
+		if (IS_ENCRYPTED(inode)) {
 			err = fscrypt_inherit_context(dir, inode, page, false);
 			if (err)
 				goto put_error;
@@ -502,11 +592,7 @@
 			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.
@@ -570,9 +656,23 @@
 	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);
@@ -592,15 +692,13 @@
 	}
 }
 
-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;
@@ -609,18 +707,17 @@
 	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;
 	}
 
@@ -635,7 +732,7 @@
 	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);
@@ -659,8 +756,7 @@
 
 	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;
@@ -668,7 +764,8 @@
 	}
 
 	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);
 
@@ -692,21 +789,15 @@
 	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;
@@ -719,17 +810,17 @@
 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
@@ -747,7 +838,7 @@
 	} else {
 		err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
 	}
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return err;
 }
 
@@ -757,7 +848,7 @@
 	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;
@@ -828,12 +919,6 @@
 			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);
@@ -845,6 +930,12 @@
 		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)
@@ -911,8 +1002,9 @@
 			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;
 		}
@@ -978,7 +1070,7 @@
 
 	if (IS_ENCRYPTED(inode)) {
 		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
+		if (err)
 			goto out;
 
 		err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
@@ -1054,77 +1146,3 @@
 	.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..686c68b 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -325,9 +325,10 @@
 }
 
 /* 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 +336,18 @@
 	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 +363,14 @@
 	}
 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 b3b7e63..4d1a4e4 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
  *
@@ -74,7 +74,6 @@
 /*
  * 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 +87,8 @@
 #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
@@ -117,6 +113,8 @@
 			 */
 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 +135,19 @@
 	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_context dummy_enc_ctx; /* 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 compress_log_size;		/* cluster log size */
+	unsigned char compress_ext_cnt;		/* extension count */
+	unsigned char extensions[COMPRESS_EXT_NUM][F2FS_EXTENSION_LEN];	/* extensions */
 };
 
 #define F2FS_FEATURE_ENCRYPT		0x0001
@@ -157,6 +163,7 @@
 #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 +194,7 @@
 #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 +332,8 @@
 	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 {
@@ -393,12 +401,8 @@
 }
 
 /*
- * ioctl commands
+ * f2fs-specific 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)
@@ -420,13 +424,13 @@
 #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
+#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)
 
 /*
  * should be same as XFS_IOC_GOINGDOWN.
@@ -439,17 +443,12 @@
 #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
+ * Flags used by F2FS_IOC_SEC_TRIM_FILE
  */
-#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
+#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;
@@ -474,6 +473,12 @@
 	u32 segments;		/* # of segments to flush */
 };
 
+struct f2fs_sectrim_range {
+	u64 start;
+	u64 len;
+	u64 flags;
+};
+
 /* for inline stuff */
 #define DEF_INLINE_RESERVED_SIZE	1
 static inline int get_extra_isize(struct inode *inode);
@@ -498,6 +503,44 @@
  * 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 +595,9 @@
 
 #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
 
@@ -668,6 +714,44 @@
 	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_MMAP_FILE,		/* indicate file was mmapped */
+	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 +764,7 @@
 	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 +773,7 @@
 	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 +787,7 @@
 	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 +800,12 @@
 	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 */
+	u64 i_compr_blocks;			/* # of compressed blocks */
+	unsigned char i_compress_algorithm;	/* algorithm type */
+	unsigned char i_log_cluster_size;	/* log of cluster size */
+	unsigned int i_cluster_size;		/* cluster size */
 };
 
 static inline void get_extent_info(struct extent_info *ext,
@@ -892,6 +984,7 @@
 	CURSEG_WARM_NODE,	/* direct node blocks of normal files */
 	CURSEG_COLD_NODE,	/* indirect node blocks */
 	NO_CHECK_TYPE,
+	CURSEG_COLD_DATA_PINNED,/* cold data for pinned file */
 };
 
 struct flush_cmd {
@@ -1019,6 +1112,7 @@
 enum cp_reason_type {
 	CP_NO_NEEDED,
 	CP_NON_REGULAR,
+	CP_COMPRESSED,
 	CP_HARDLINK,
 	CP_SB_NEED_CP,
 	CP_WRONG_PINO,
@@ -1030,8 +1124,9 @@
 };
 
 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 */
@@ -1042,6 +1137,19 @@
 	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,
 };
@@ -1057,12 +1165,15 @@
 	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 */
@@ -1070,6 +1181,11 @@
 	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 */
@@ -1079,6 +1195,8 @@
 	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])
@@ -1143,7 +1261,22 @@
 	GC_NORMAL,
 	GC_IDLE_CB,
 	GC_IDLE_GREEDY,
-	GC_URGENT,
+	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 {
@@ -1163,13 +1296,107 @@
 	FSYNC_MODE_NOBARRIER,	/* fsync behaves nobarrier based on posix */
 };
 
+/*
+ * 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)
+
+#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 IS_IO_TRACED_PAGE(page) (0)
+#endif
+
 #ifdef CONFIG_FS_ENCRYPTION
 #define DUMMY_ENCRYPTION_ENABLED(sbi) \
-			(unlikely(F2FS_OPTION(sbi).test_dummy_encryption))
+	(unlikely(F2FS_OPTION(sbi).dummy_enc_ctx.ctx != NULL))
 #else
 #define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
 #endif
 
+/* For compression */
+enum compress_algorithm_type {
+	COMPRESS_LZO,
+	COMPRESS_LZ4,
+	COMPRESS_ZSTD,
+	COMPRESS_LZORLE,
+	COMPRESS_MAX,
+};
+
+#define COMPRESS_DATA_RESERVED_SIZE		5
+struct compress_data {
+	__le32 clen;			/* compressed data size */
+	__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 */
+	refcount_t ref;			/* referrence count of raw page */
+};
+
+/* 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 */
+	refcount_t ref;			/* referrence count of compressed page */
+	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	((PAGE_SIZE) << MAX_COMPRESS_LOG_SIZE)
+
 struct f2fs_sb_info {
 	struct super_block *sb;			/* pointer to VFS super block */
 	struct proc_dir_entry *s_proc;		/* proc entry */
@@ -1178,10 +1405,6 @@
 	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 */
@@ -1214,7 +1437,7 @@
 	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 */
@@ -1251,7 +1474,6 @@
 	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 */
@@ -1285,18 +1507,23 @@
 	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 */
 	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;
@@ -1320,11 +1547,11 @@
 	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 */
+	atomic_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 */
@@ -1333,8 +1560,15 @@
 
 	/* 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;
@@ -1358,6 +1592,11 @@
 
 	/* 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 */
 };
 
 struct f2fs_private_dio {
@@ -1368,9 +1607,10 @@
 };
 
 #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)
 {
@@ -1390,7 +1630,7 @@
 	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;
@@ -1775,7 +2015,7 @@
 		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;
 	}
@@ -2027,7 +2267,7 @@
 	}
 
 	if (time_to_inject(sbi, FAULT_BLOCK)) {
-		f2fs_show_injection_info(FAULT_BLOCK);
+		f2fs_show_injection_info(sbi, FAULT_BLOCK);
 		goto enospc;
 	}
 
@@ -2097,7 +2337,7 @@
 		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);
@@ -2142,7 +2382,8 @@
 			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;
 		}
 	}
@@ -2157,7 +2398,7 @@
 				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;
 	}
 
@@ -2213,29 +2454,9 @@
 	return entry;
 }
 
-static inline struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi,
-						int npages, bool no_fail)
-{
-	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)
+	if (sbi->gc_mode == GC_URGENT_HIGH)
 		return true;
 
 	if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) ||
@@ -2253,6 +2474,10 @@
 			atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
 		return false;
 
+	if (sbi->gc_mode == GC_URGENT_LOW &&
+			(type == DISCARD_TIME || type == GC_TIME))
+		return true;
+
 	return f2fs_time_over(sbi, type);
 }
 
@@ -2284,7 +2509,7 @@
 }
 
 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;
@@ -2294,9 +2519,9 @@
 
 	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);
@@ -2306,6 +2531,11 @@
 	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;
@@ -2369,11 +2599,13 @@
 /*
  * 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 */
@@ -2382,7 +2614,7 @@
 /* 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 | \
@@ -2401,41 +2633,6 @@
 		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)
 {
@@ -2456,20 +2653,18 @@
 
 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);
 }
 
@@ -2560,19 +2755,19 @@
 	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)
@@ -2605,16 +2800,27 @@
 	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 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)
@@ -2647,6 +2853,11 @@
 	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);
@@ -2741,9 +2952,9 @@
 	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;
 }
@@ -2758,12 +2969,12 @@
 	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;
@@ -2774,7 +2985,8 @@
 	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;
 
 	/*
@@ -2791,7 +3003,7 @@
 					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;
 	}
 
@@ -2808,7 +3020,7 @@
 					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;
 	}
 
@@ -2845,29 +3057,45 @@
 		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)
@@ -2888,7 +3116,8 @@
 
 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;
 }
@@ -2919,6 +3148,7 @@
  */
 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,
@@ -2958,22 +3188,28 @@
  * 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);
@@ -2981,13 +3217,14 @@
 			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);
@@ -3017,8 +3254,7 @@
 /*
  * 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
@@ -3050,6 +3286,7 @@
 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);
@@ -3082,7 +3319,7 @@
 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);
@@ -3099,8 +3336,9 @@
 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_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 +3362,7 @@
 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);
@@ -3135,6 +3373,8 @@
 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);
@@ -3185,12 +3425,19 @@
 /*
  * 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);
@@ -3205,6 +3452,9 @@
 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);
@@ -3213,13 +3463,19 @@
 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);
@@ -3229,6 +3485,10 @@
 #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
@@ -3275,6 +3535,7 @@
 	int nr_discard_cmd;
 	unsigned int undiscard_blks;
 	int inline_xattr, inline_inode, inline_dir, append, update, orphans;
+	int compr_inode, 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;
@@ -3290,6 +3551,9 @@
 	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];
@@ -3306,7 +3570,7 @@
 #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]++)
@@ -3345,6 +3609,20 @@
 		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)				\
+		(atomic_add(blocks, &F2FS_I_SB(inode)->compr_blocks))
+#define stat_sub_compr_blocks(inode, blocks)				\
+		(atomic_sub(blocks, &F2FS_I_SB(inode)->compr_blocks))
 #define stat_inc_meta_count(sbi, blkaddr)				\
 	do {								\
 		if (blkaddr < SIT_I(sbi)->sit_base_addr)		\
@@ -3362,13 +3640,9 @@
 		((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);	\
@@ -3420,6 +3694,7 @@
 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)
@@ -3429,8 +3704,8 @@
 #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)
@@ -3439,6 +3714,10 @@
 #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)
@@ -3458,12 +3737,10 @@
 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;
@@ -3486,14 +3763,15 @@
 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,
@@ -3532,7 +3810,7 @@
 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
 						struct rb_root_cached *root);
 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);
@@ -3578,7 +3856,96 @@
  */
 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);
+#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) { }
+#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_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 u64 f2fs_disable_compressed_file(struct inode *inode)
+{
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	if (!f2fs_compressed_file(inode))
+		return 0;
+	if (S_ISREG(inode->i_mode)) {
+		if (get_dirty_pages(inode))
+			return 1;
+		if (fi->i_compr_blocks)
+			return fi->i_compr_blocks;
+	}
+
+	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 0;
 }
 
 #define F2FS_FEATURE_FUNCS(name, flagname) \
@@ -3599,6 +3966,7 @@
 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,
@@ -3653,31 +4021,53 @@
 	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_encrypt(struct inode *dir, struct inode *inode)
 {
 #ifdef CONFIG_FS_ENCRYPTION
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 	umode_t mode = inode->i_mode;
 
-	return (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode));
-#else
-	return false;
+	/*
+	 * If the directory encrypted or dummy encryption enabled,
+	 * then we should encrypt the inode.
+	 */
+	if (IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi))
+		return (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode));
 #endif
+	return false;
+}
+
+static inline bool f2fs_may_compress(struct inode *inode)
+{
+	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);
+}
+
+static inline void f2fs_i_compr_blocks_update(struct inode *inode,
+						u64 blocks, bool add)
+{
+	int diff = F2FS_I(inode)->i_cluster_size - blocks;
+
+	/* don't update i_compr_blocks if saved blocks were released */
+	if (!add && !F2FS_I(inode)->i_compr_blocks)
+		return;
+
+	if (add) {
+		F2FS_I(inode)->i_compr_blocks += diff;
+		stat_add_compr_blocks(inode, diff);
+	} else {
+		F2FS_I(inode)->i_compr_blocks -= diff;
+		stat_sub_compr_blocks(inode, diff);
+	}
+	f2fs_mark_inode_dirty_sync(inode, true);
 }
 
 static inline int block_unaligned_IO(struct inode *inode,
@@ -3697,7 +4087,7 @@
 	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));
 }
 
@@ -3707,7 +4097,11 @@
 	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;
@@ -3717,7 +4111,7 @@
 	 */
 	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..0a8ff1e 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"
@@ -40,6 +41,10 @@
 	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 +56,8 @@
 	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 +69,25 @@
 		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 +104,27 @@
 		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 +170,11 @@
 {
 	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 +190,8 @@
 
 	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))
@@ -426,8 +462,7 @@
 				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),
@@ -486,6 +521,9 @@
 	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 +531,7 @@
 
 	file_accessed(file);
 	vma->vm_ops = &f2fs_file_vm_ops;
+	set_inode_flag(inode, FI_MMAP_FILE);
 	return 0;
 }
 
@@ -503,6 +542,9 @@
 	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 +561,10 @@
 	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 = !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 +572,45 @@
 	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 +668,7 @@
 	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 +733,33 @@
 	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);
+#endif
+
+	return err;
+}
+
 int f2fs_truncate(struct inode *inode)
 {
 	int err;
@@ -682,7 +774,7 @@
 	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 +811,8 @@
 	}
 
 	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 +821,15 @@
 		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 +876,10 @@
 	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 +950,10 @@
 		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 +980,7 @@
 	.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 +1118,8 @@
 	} 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 +1128,7 @@
 	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 +1139,7 @@
 
 		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 +1217,7 @@
 				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 +1280,13 @@
 
 		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 +1374,6 @@
 	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 +1391,7 @@
 	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 +1402,7 @@
 
 	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 +1634,48 @@
 	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);
+		map.m_seg_type = CURSEG_COLD_DATA_PINNED;
+
+		f2fs_lock_op(sbi);
+		f2fs_allocate_new_segment(sbi, CURSEG_COLD_DATA);
+		f2fs_unlock_op(sbi);
+
+		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 +1711,8 @@
 		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 +1722,11 @@
 		(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 +1804,50 @@
 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;
+
+			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 +1873,13 @@
 	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 +1887,13 @@
 };
 
 #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 +1904,13 @@
 		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 +2031,8 @@
 
 	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 +2071,6 @@
 
 	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 +2445,14 @@
 	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 +2474,12 @@
 		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);
@@ -2334,15 +2517,20 @@
 
 do_more:
 	if (!range.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, 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;
@@ -2770,7 +2958,7 @@
 	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 +3253,16 @@
 		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 +3325,6 @@
 {
 	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 +3336,7 @@
 			   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 +3363,7 @@
 	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);
@@ -3198,7 +3389,7 @@
 	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,6 +3425,528 @@
 	return err;
 }
 
+static int f2fs_get_compress_blocks(struct file *filp, unsigned long arg)
+{
+	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 = 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) || 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 (!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 && 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=%llu, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			released_blocks,
+			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 (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 && 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=%llu, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			reserved_blocks,
+			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;
+}
+
 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
@@ -3242,11 +3955,11 @@
 		return -ENOSPC;
 
 	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 +3975,11 @@
 		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 +3991,8 @@
 		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 +4007,9 @@
 		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 +4023,40 @@
 		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);
 	default:
 		return -ENOTTY;
 	}
 }
 
+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 +4068,11 @@
 		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;
@@ -3414,14 +4159,14 @@
 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
 	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_IOC_START_ATOMIC_WRITE:
 	case F2FS_IOC_COMMIT_ATOMIC_WRITE:
@@ -3429,14 +4174,15 @@
 	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:
@@ -3444,16 +4190,20 @@
 	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:
 		break;
 	default:
 		return -ENOIOCTLCMD;
@@ -3464,7 +4214,7 @@
 
 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 e611d76..11b4add 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,9 @@
 #include "gc.h"
 #include <trace/events/f2fs.h>
 
+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 +35,8 @@
 
 	set_freezable();
 	do {
+		bool sync_mode;
+
 		wait_event_interruptible_timeout(*wq,
 				kthread_should_stop() || freezing(current) ||
 				gc_th->gc_wake,
@@ -54,7 +60,7 @@
 		}
 
 		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 +82,20 @@
 		 * 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 +105,19 @@
 		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);
 
@@ -168,7 +176,7 @@
 		gc_mode = GC_CB;
 		break;
 	case GC_IDLE_GREEDY:
-	case GC_URGENT:
+	case GC_URGENT_HIGH:
 		gc_mode = GC_GREEDY;
 		break;
 	}
@@ -182,19 +190,28 @@
 
 	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 {
 		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->max_search > sbi->max_victim_search)
 		p->max_search = sbi->max_victim_search;
 
@@ -313,6 +330,7 @@
 	unsigned int secno, last_victim;
 	unsigned int last_segment;
 	unsigned int nsearched = 0;
+	int ret = 0;
 
 	mutex_lock(&dirty_i->seglist_lock);
 	last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
@@ -324,12 +342,19 @@
 	p.min_cost = get_max_cost(sbi, &p);
 
 	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 +382,14 @@
 	}
 
 	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 +402,7 @@
 		}
 
 		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
 		/*
@@ -413,9 +435,10 @@
 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;
@@ -432,6 +455,7 @@
 			else
 				set_bit(secno, dirty_i->victim_secmap);
 		}
+		ret = 0;
 
 	}
 out:
@@ -441,7 +465,7 @@
 				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 = {
@@ -634,7 +658,7 @@
 	}
 
 	*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 +754,10 @@
 		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 +790,7 @@
 	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);
 
 	/* do not read out */
 	page = f2fs_grab_cache_page(inode->i_mapping, bidx, false);
@@ -821,8 +849,10 @@
 
 	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 +863,10 @@
 			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 +877,7 @@
 	}
 
 	f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
-					&sum, CURSEG_COLD_DATA, NULL, false);
+					&sum, CURSEG_COLD_DATA, NULL);
 
 	fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(fio.sbi),
 				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
@@ -970,7 +1004,8 @@
 		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)
@@ -1012,8 +1047,14 @@
 		block_t start_bidx;
 		nid_t nid = le32_to_cpu(entry->nid);
 
-		/* stop BG_GC if there is not enough free sections. */
-		if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0))
+		/*
+		 * stop BG_GC if there is not enough free sections.
+		 * Or, stop GC if the segment becomes fully valid caused by
+		 * 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, true) ==
+							BLKS_PER_SEC(sbi))
 			return submitted;
 
 		if (check_valid_map(sbi, segno, off) == 0)
@@ -1043,8 +1084,10 @@
 
 		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])) {
@@ -1195,7 +1238,7 @@
 
 		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)))
@@ -1225,12 +1268,12 @@
 							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;
@@ -1308,10 +1351,9 @@
 		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)
@@ -1362,7 +1404,7 @@
 				reserved_segments(sbi),
 				prefree_segments(sbi));
 
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 
 	put_gc_inode(&gc_list);
 
@@ -1383,16 +1425,33 @@
 				GET_SEGNO(sbi, FDEV(0).end_blk) + 1;
 }
 
-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);
+		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) {
@@ -1401,18 +1460,24 @@
 			.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) {
@@ -1420,44 +1485,77 @@
 			 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;
 
@@ -1465,6 +1563,15 @@
 	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)
@@ -1483,10 +1590,27 @@
 		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);
+	mutex_lock(&sbi->cp_mutex);
+
 	spin_lock(&sbi->stat_lock);
 	if (shrunk_blocks + valid_user_blocks(sbi) +
 		sbi->current_reserved_blocks + sbi->unusable_block_count +
@@ -1495,69 +1619,44 @@
 	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:
+	mutex_unlock(&sbi->cp_mutex);
+	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..db3c610 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
  *
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 @@
 		*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 @@
 	buf[2] = 0x98badcfe;
 	buf[3] = 0x10325476;
 
-	p = name;
 	while (1) {
 		str2hashbuf(p, len, in, 4);
 		TEA_transform(buf, in);
@@ -100,41 +86,52 @@
 			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..e2fd458 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 @@
 {
 	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 @@
 	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;
 }
@@ -310,15 +329,14 @@
 }
 
 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,12 +344,10 @@
 		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 (de)
 		*res_page = ipage;
@@ -373,7 +389,7 @@
 	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 +464,7 @@
 
 	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 +480,19 @@
 			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;
 
@@ -535,7 +556,7 @@
 	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 +565,55 @@
 		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 +626,7 @@
 
 	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 +635,7 @@
 
 	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 +644,8 @@
 
 	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 +799,7 @@
 	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..66969ae8 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -200,6 +200,7 @@
 {
 	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,36 @@
 		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) {
+			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)) {
+			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) {
+			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 +362,12 @@
 	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 +401,7 @@
 
 	/* 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 +438,18 @@
 		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)) {
+			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_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 +459,8 @@
 	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, F2FS_I(inode)->i_compr_blocks);
 
 	return 0;
 }
@@ -490,7 +535,7 @@
 	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 +614,17 @@
 			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(F2FS_I(inode)->i_compr_blocks);
+			ri->i_compress_algorithm =
+				F2FS_I(inode)->i_compress_algorithm;
+			ri->i_log_cluster_size =
+				F2FS_I(inode)->i_log_cluster_size;
+		}
 	}
 
 	__set_inode_rdev(inode, ri);
@@ -681,7 +737,7 @@
 		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 +767,8 @@
 	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, F2FS_I(inode)->i_compr_blocks);
 
 	if (likely(!f2fs_cp_error(sbi) &&
 				!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
@@ -718,7 +776,7 @@
 	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..bde7d37 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -75,9 +75,7 @@
 
 	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 (f2fs_may_encrypt(dir, inode))
 		f2fs_set_encrypted_inode(inode);
 
 	if (f2fs_sb_has_extra_attr(sbi)) {
@@ -119,6 +117,13 @@
 	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 +154,9 @@
 	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 +175,7 @@
 }
 
 /*
- * 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 +270,45 @@
 	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 +333,8 @@
 	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 +482,7 @@
 	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 +491,21 @@
 		goto out;
 	}
 
-	err = fscrypt_prepare_lookup(dir, dentry, &fname);
+	err = f2fs_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dir, 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 +551,7 @@
 #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 +566,21 @@
 	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 +603,7 @@
 	/* 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))
@@ -825,12 +878,6 @@
 	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 +897,11 @@
 	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 +914,20 @@
 			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 +989,7 @@
 			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 +1015,6 @@
 
 		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 +1029,7 @@
 	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 +1065,7 @@
 
 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 +1288,10 @@
 }
 
 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 +1309,21 @@
 	.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 daeac42..c4e2ab5 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -510,9 +510,6 @@
 	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)
 {
@@ -716,8 +713,7 @@
 /*
  * 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)
 {
@@ -809,8 +805,7 @@
 	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:
@@ -1046,8 +1041,10 @@
 	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)) {
@@ -1188,8 +1185,9 @@
 	}
 
 	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);
 	}
 
@@ -1304,7 +1302,13 @@
 	}
 
 	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;
 }
 
 /*
@@ -1518,8 +1522,15 @@
 
 	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;
@@ -1717,7 +1728,7 @@
 					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);
 			}
@@ -1805,6 +1816,51 @@
 	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)
@@ -1868,6 +1924,10 @@
 				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);
@@ -1882,7 +1942,7 @@
 				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))
@@ -1980,7 +2040,7 @@
 		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 &&
@@ -2041,7 +2101,7 @@
 	.invalidatepage	= f2fs_invalidate_page,
 	.releasepage	= f2fs_release_page,
 #ifdef CONFIG_MIGRATION
-	.migratepage    = f2fs_migrate_page,
+	.migratepage	= f2fs_migrate_page,
 #endif
 };
 
@@ -2052,7 +2112,7 @@
 }
 
 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);
 
@@ -2060,10 +2120,8 @@
 	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;
 }
 
@@ -2185,7 +2243,7 @@
 		}
 	}
 	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);
@@ -2350,7 +2408,6 @@
 
 			if (ret) {
 				up_read(&nm_i->nat_tree_lock);
-				f2fs_bug_on(sbi, !mount);
 				f2fs_err(sbi, "NAT is corrupt, run fsck to fix it");
 				return ret;
 			}
@@ -2400,7 +2457,7 @@
 	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;
 	}
 
@@ -2487,7 +2544,6 @@
 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)
@@ -2496,17 +2552,23 @@
 	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;
@@ -2606,7 +2668,7 @@
 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;
 	}
 
@@ -3197,22 +3259,22 @@
 
 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 e05af5d..69e5859 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..0947d36 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 @@
 	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 @@
 	}
 
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 			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 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
@@ -780,6 +822,8 @@
 		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,9 +834,22 @@
 	if (err) {
 		truncate_inode_pages_final(NODE_MAPPING(sbi));
 		truncate_inode_pages_final(META_MAPPING(sbi));
-	} else {
-		clear_sbi_flag(sbi, SBI_POR_DOING);
 	}
+
+	/*
+	 * 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);
+
 	mutex_unlock(&sbi->cp_mutex);
 
 	/* let's drop all the directory inodes for clean checkpoint */
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 7d85784..a65d357 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -172,9 +172,9 @@
 	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;
@@ -245,7 +245,8 @@
 								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 @@
 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 @@
 	}
 
 	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 @@
 			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 @@
 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 @@
 	 * 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;
@@ -539,7 +540,7 @@
 			excess_dirty_nats(sbi) ||
 			excess_dirty_nodes(sbi) ||
 			f2fs_time_over(sbi, CP_TIME)) {
-		if (test_opt(sbi, DATA_FLUSH)) {
+		if (test_opt(sbi, DATA_FLUSH) && from_bg) {
 			struct blk_plug plug;
 
 			mutex_lock(&sbi->flush_lock);
@@ -795,6 +796,18 @@
 		}
 		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);
+			unsigned short 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 +815,7 @@
 		enum dirty_type dirty_type)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
+	unsigned short valid_blocks;
 
 	if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
 		dirty_i->nr_dirty[dirty_type]--;
@@ -813,13 +827,26 @@
 		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);
+		}
 	}
 }
 
@@ -1017,8 +1044,9 @@
 
 	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 +1055,9 @@
 	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 +1106,7 @@
 
 	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 +1127,10 @@
 	} 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 +1186,7 @@
 		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 +1240,14 @@
 		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 +1256,6 @@
 	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 +1267,8 @@
 	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 +1485,8 @@
 
 	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 +1495,17 @@
 	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)
@@ -1497,8 +1526,8 @@
 		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 +1549,11 @@
 			break;
 	}
 
+	if (dpolicy->type == DPOLICY_UMOUNT && issued) {
+		__wait_all_discard_cmd(sbi, dpolicy);
+		goto retry;
+	}
+
 	if (!issued && io_interrupted)
 		issued = -1;
 
@@ -1677,7 +1711,6 @@
 
 	__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 +1759,7 @@
 			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 +1813,8 @@
 			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 */
@@ -1939,7 +1973,7 @@
 	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 +2005,7 @@
 					(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;
@@ -2132,7 +2166,7 @@
 	new_vblocks = se->valid_blocks + del;
 	offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
 
-	f2fs_bug_on(sbi, (new_vblocks >> (sizeof(unsigned short) << 3) ||
+	f2fs_bug_on(sbi, (new_vblocks < 0 ||
 				(new_vblocks > sbi->blocks_per_seg)));
 
 	se->valid_blocks = new_vblocks;
@@ -2223,7 +2257,7 @@
 	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);
@@ -2597,7 +2631,7 @@
 	bool reversed = false;
 
 	/* 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, type, SSR)) {
 		curseg->next_segno = segno;
 		return 1;
 	}
@@ -2624,7 +2658,7 @@
 	for (; cnt-- > 0; reversed ? i-- : i++) {
 		if (i == type)
 			continue;
-		if (v_ops->get_victim(sbi, &segno, BG_GC, i, SSR)) {
+		if (!v_ops->get_victim(sbi, &segno, BG_GC, i, SSR)) {
 			curseg->next_segno = segno;
 			return 1;
 		}
@@ -2666,7 +2700,7 @@
 	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);
@@ -2699,21 +2733,35 @@
 	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->next_blkoff &&
+		!get_valid_blocks(sbi, curseg->segno, false) &&
+		!get_ckpt_valid_blocks(sbi, curseg->segno))
+		return;
+
+	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);
 }
 
@@ -2793,7 +2841,7 @@
 			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:
@@ -2822,7 +2870,7 @@
 	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;
@@ -2852,9 +2900,9 @@
 	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;
 
@@ -3027,7 +3075,8 @@
 	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) || file_is_cold(inode) ||
+				f2fs_compressed_file(inode))
 			return CURSEG_COLD_DATA;
 		if (file_is_hot(inode) ||
 				is_inode_flag_set(inode, FI_HOT_DATA) ||
@@ -3073,10 +3122,23 @@
 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);
+	bool put_pin_sem = false;
+
+	if (type == CURSEG_COLD_DATA) {
+		/* GC during CURSEG_COLD_DATA_PINNED allocation */
+		if (down_read_trylock(&sbi->pin_sem)) {
+			put_pin_sem = true;
+		} else {
+			type = CURSEG_WARM_DATA;
+			curseg = CURSEG_I(sbi, type);
+		}
+	} else if (type == CURSEG_COLD_DATA_PINNED) {
+		type = CURSEG_COLD_DATA;
+	}
 
 	down_read(&SM_I(sbi)->curseg_lock);
 
@@ -3128,7 +3190,7 @@
 	if (F2FS_IO_ALIGNED(sbi))
 		fio->retry = false;
 
-	if (add_list) {
+	if (fio) {
 		struct f2fs_bio_info *io;
 
 		INIT_LIST_HEAD(&fio->list);
@@ -3142,6 +3204,9 @@
 	mutex_unlock(&curseg->curseg_mutex);
 
 	up_read(&SM_I(sbi)->curseg_lock);
+
+	if (put_pin_sem)
+		up_read(&sbi->pin_sem);
 }
 
 static void update_device_state(struct f2fs_io_info *fio)
@@ -3168,13 +3233,13 @@
 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);
@@ -3264,7 +3329,7 @@
 
 	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);
@@ -3388,7 +3453,10 @@
 	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));
@@ -4043,7 +4111,7 @@
 	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;
 }
@@ -4247,8 +4315,9 @@
 {
 	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 int segno = 0, offset = 0, secno;
 	unsigned short valid_blocks;
+	unsigned short blks_per_sec = BLKS_PER_SEC(sbi);
 
 	while (1) {
 		/* find dirty segment based on free segmap */
@@ -4267,6 +4336,22 @@
 		__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_SECS(sbi); segno += blks_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)
@@ -4303,6 +4388,14 @@
 			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);
 }
@@ -4340,6 +4433,263 @@
 	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 < NO_CHECK_TYPE; 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;
+}
+#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;
+}
+#endif
+
 /*
  * Update min, max modified time for cost-benefit GC algorithm
  */
@@ -4393,7 +4743,7 @@
 	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;
@@ -4472,6 +4822,12 @@
 	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);
@@ -4545,22 +4901,22 @@
 
 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..752b177 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
  *
@@ -166,8 +166,11 @@
 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 */
@@ -184,7 +187,7 @@
 	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 +203,6 @@
 	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 {
@@ -278,6 +269,7 @@
 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 */
@@ -313,6 +305,8 @@
  */
 static inline struct curseg_info *CURSEG_I(struct f2fs_sb_info *sbi, int type)
 {
+	if (type == CURSEG_COLD_DATA_PINNED)
+		type = CURSEG_COLD_DATA;
 	return (struct curseg_info *)(SM_I(sbi)->curseg_array + type);
 }
 
@@ -617,8 +611,10 @@
  *                     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 +629,7 @@
 	F2FS_IPU_SSR_UTIL,
 	F2FS_IPU_FSYNC,
 	F2FS_IPU_ASYNC,
+	F2FS_IPU_NOCACHE,
 };
 
 static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
@@ -763,7 +760,7 @@
 						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 a467aca..d66de599 100644
--- a/fs/f2fs/shrinker.c
+++ b/fs/f2fs/shrinker.c
@@ -58,7 +58,7 @@
 		/* 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 fa461db..e88400d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -137,10 +137,14 @@
 	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_err,
 };
 
@@ -198,11 +202,16 @@
 	{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_err, NULL},
 };
 
@@ -340,7 +349,7 @@
 	set_opt(sbi, QUOTA);
 	return 0;
 errout:
-	kvfree(qname);
+	kfree(qname);
 	return ret;
 }
 
@@ -352,7 +361,7 @@
 		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 +412,64 @@
 }
 #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_ctx.ctx) {
+		f2fs_warn(sbi, "Can't set test_dummy_encryption on remount");
+		return -EINVAL;
+	}
+	err = fscrypt_set_test_dummy_encryption(
+		sb, arg, &F2FS_OPTION(sbi).dummy_enc_ctx);
+	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 +491,17 @@
 
 			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);
@@ -602,22 +655,20 @@
 
 			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 +787,61 @@
 			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 +864,79 @@
 		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_err(sbi, "Compression feature if off");
+				return -EINVAL;
+			}
+			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_err(sbi, "Compression feature is off");
+				return -EINVAL;
+			}
+			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_err(sbi, "Compression feature is off");
+				return -EINVAL;
+			}
+			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;
+#else
+		case Opt_compress_algorithm:
+		case Opt_compress_log_size:
+		case Opt_compress_extension:
+			f2fs_info(sbi, "compression options not supported");
+			break;
+#endif
 		default:
 			f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
 				 p);
@@ -848,7 +964,7 @@
 	}
 #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,7 +994,7 @@
 		}
 	}
 
-	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;
 	}
@@ -904,6 +1020,7 @@
 	/* Initialize f2fs-specific inode info */
 	atomic_set(&fi->dirty_pages, 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 +1034,8 @@
 	/* Will be used by directory only */
 	fi->i_dir_level = F2FS_SB(sb)->dir_level;
 
+	fi->ra_offset = -1;
+
 	return &fi->vfs_inode;
 }
 
@@ -1139,26 +1258,30 @@
 	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_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_context(&F2FS_OPTION(sbi).dummy_enc_ctx);
 	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 +1304,9 @@
 
 		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 +1470,52 @@
 #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]);
+	}
+}
+
 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 +1571,9 @@
 		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 +1609,11 @@
 		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,6 +1629,10 @@
 		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
 	return 0;
 }
 
@@ -1482,11 +1644,15 @@
 	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).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 +1664,9 @@
 	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 +1699,7 @@
 	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 +1721,7 @@
 		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 +1733,20 @@
 	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);
+	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);
 }
@@ -1617,7 +1783,7 @@
 				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 +1804,7 @@
 	default_options(sbi);
 
 	/* parse mount options */
-	err = parse_options(sb, data);
+	err = parse_options(sb, data, true);
 	if (err)
 		goto restore_opts;
 	checkpoint_changed =
@@ -1692,7 +1858,8 @@
 	 * 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;
@@ -1741,7 +1908,7 @@
 #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 +1929,7 @@
 #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 +1965,8 @@
 		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 +2021,8 @@
 							&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 +2338,7 @@
 	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 +2362,10 @@
 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 +2373,22 @@
 {
 	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 +2481,54 @@
 				ctx, len, fs_data, XATTR_CREATE);
 }
 
-static bool f2fs_dummy_context(struct inode *inode)
+static const union fscrypt_context *
+f2fs_get_dummy_context(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(inode));
+	return F2FS_OPTION(F2FS_SB(sb)).dummy_enc_ctx.ctx;
+}
+
+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_context	= f2fs_get_dummy_context,
+	.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
 
@@ -2623,6 +2818,21 @@
 		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;
+		}
+	}
+
 	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);
@@ -2857,6 +3067,7 @@
 	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)
@@ -2876,15 +3087,21 @@
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
+static int f2fs_report_zone_cb(struct blk_zone *zone, unsigned int idx,
+			       void *data)
+{
+	struct f2fs_dev_info *dev = data;
+
+	if (zone->type != BLK_ZONE_TYPE_CONVENTIONAL)
+		set_bit(idx, dev->blkz_seq);
+	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;
+	int ret;
 
 	if (!f2fs_sb_has_blkzoned(sbi))
 		return 0;
@@ -2909,38 +3126,13 @@
 	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)
-		return -ENOMEM;
-
 	/* Get block zones type */
-	while (zones && sector < nr_sectors) {
+	ret = blkdev_report_zones(bdev, 0, BLK_ALL_ZONES, f2fs_report_zone_cb,
+				  &FDEV(devi));
+	if (ret < 0)
+		return ret;
 
-		nr_zones = F2FS_REPORT_NR_ZONES;
-		err = blkdev_report_zones(bdev, sector, zones, &nr_zones);
-		if (err)
-			break;
-		if (!nr_zones) {
-			err = -EIO;
-			break;
-		}
-
-		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++;
-		}
-	}
-
-	kvfree(zones);
-
-	return err;
+	return 0;
 }
 #endif
 
@@ -2970,6 +3162,7 @@
 			f2fs_err(sbi, "Unable to read %dth superblock",
 				 block + 1);
 			err = -EIO;
+			*recovery = 1;
 			continue;
 		}
 
@@ -2979,6 +3172,7 @@
 			f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
 				 block + 1);
 			brelse(bh);
+			*recovery = 1;
 			continue;
 		}
 
@@ -2991,13 +3185,9 @@
 		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;
 
@@ -3138,17 +3328,11 @@
 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,
@@ -3169,9 +3353,8 @@
 			 "%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)) {
@@ -3269,7 +3452,7 @@
 		goto free_sb_buf;
 	}
 
-	err = parse_options(sb, options);
+	err = parse_options(sb, options, false);
 	if (err)
 		goto free_options;
 
@@ -3313,10 +3496,9 @@
 
 	/* 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->node_write);
 	init_rwsem(&sbi->node_change);
 
@@ -3327,6 +3509,7 @@
 	/* 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;
@@ -3348,6 +3531,8 @@
 			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);
 		}
 	}
 
@@ -3369,12 +3554,17 @@
 		}
 	}
 
+	/* init per sbi slab cache */
+	err = f2fs_init_xattr_caches(sbi);
+	if (err)
+		goto free_io_dummy;
+
 	/* 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_xattr_cache;
 	}
 
 	err = f2fs_get_valid_checkpoint(sbi);
@@ -3400,6 +3590,12 @@
 		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,
@@ -3497,7 +3693,7 @@
 			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;
@@ -3546,6 +3742,17 @@
 			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_recover_fsync_data() cleared this already */
 	clear_sbi_flag(sbi, SBI_POR_DOING);
@@ -3562,7 +3769,7 @@
 	 * 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)
@@ -3623,6 +3830,7 @@
 	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);
@@ -3630,6 +3838,8 @@
 	make_bad_inode(sbi->meta_inode);
 	iput(sbi->meta_inode);
 	sbi->meta_inode = NULL;
+free_xattr_cache:
+	f2fs_destroy_xattr_caches(sbi);
 free_io_dummy:
 	mempool_destroy(sbi->write_io_dummy);
 free_percpu:
@@ -3639,20 +3849,21 @@
 		kvfree(sbi->write_io[i]);
 
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #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_context(&F2FS_OPTION(sbi).dummy_enc_ctx);
 	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) {
@@ -3761,8 +3972,22 @@
 	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;
 	return 0;
-
+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);
@@ -3786,6 +4011,9 @@
 
 static void __exit exit_f2fs_fs(void)
 {
+	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);
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 17093443..b8512df 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 @@
 	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 @@
 	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,98 @@
 					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 +
+			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 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 +169,67 @@
 		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 +249,23 @@
 		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,14 +359,16 @@
 		return -EINVAL;
 
 	if (!strcmp(a->attr.name, "gc_urgent")) {
-		if (t >= 1) {
-			sbi->gc_mode = GC_URGENT;
+		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 {
 			sbi->gc_mode = GC_NORMAL;
 		}
@@ -314,7 +384,6 @@
 		return count;
 	}
 
-
 	if (!strcmp(a->attr.name, "iostat_enable")) {
 		sbi->iostat_enable = !!t;
 		if (!sbi->iostat_enable)
@@ -322,6 +391,15 @@
 		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 +465,8 @@
 	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 +486,9 @@
 	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 +517,14 @@
 	.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,6 +557,7 @@
 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, gc_pin_file_thresh, gc_pin_file_threshold);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_super_block, extension_list, extension_list);
@@ -474,15 +565,30 @@
 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 +606,9 @@
 #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 +619,7 @@
 	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,6 +641,7 @@
 	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(gc_pin_file_thresh),
 	ATTR_LIST(extension_list),
@@ -538,13 +649,26 @@
 	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 +676,7 @@
 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 +694,9 @@
 #endif
 	ATTR_LIST(sb_checksum),
 	ATTR_LIST(casefold),
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	ATTR_LIST(compression),
+#endif
 	NULL,
 };
 ATTRIBUTE_GROUPS(f2fs_feat);
@@ -589,7 +717,7 @@
 };
 
 static struct kset f2fs_kset = {
-	.kobj   = {.ktype = &f2fs_ktype},
+	.kobj	= {.ktype = &f2fs_ktype},
 };
 
 static struct kobj_type f2fs_feat_ktype = {
@@ -652,6 +780,33 @@
 	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 +819,58 @@
 
 	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 @@
 	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 @@
 			    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 @@
 	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..1e70b01 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
+		kvfree(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 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_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 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 @@
 	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 @@
 	*base_addr = txattr_addr;
 	return 0;
 out:
-	kvfree(txattr_addr);
+	xattr_free(F2FS_I_SB(inode), txattr_addr, *is_inline);
 	return err;
 }
 
@@ -499,6 +519,7 @@
 	unsigned int size, len;
 	void *base_addr = NULL;
 	int base_size;
+	bool is_inline;
 
 	if (name == NULL)
 		return -EINVAL;
@@ -509,7 +530,7 @@
 
 	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 @@
 	}
 	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 @@
 	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 =
@@ -609,7 +629,6 @@
 {
 	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 @@
 	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);
@@ -758,14 +777,34 @@
 	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 @@
 	__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 @@
 				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_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 @@
 {
 	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/fs-writeback.c b/fs/fs-writeback.c
index 5f6400b..a8c8a49 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -1238,7 +1238,7 @@
  */
 static int move_expired_inodes(struct list_head *delaying_queue,
 			       struct list_head *dispatch_queue,
-			       int flags, unsigned long dirtied_before)
+			       unsigned long dirtied_before)
 {
 	LIST_HEAD(tmp);
 	struct list_head *pos, *node;
@@ -1254,8 +1254,6 @@
 		list_move(&inode->i_io_list, &tmp);
 		moved++;
 		spin_lock(&inode->i_lock);
-		if (flags & EXPIRE_DIRTY_ATIME)
-			inode->i_state |= I_DIRTY_TIME_EXPIRED;
 		inode->i_state |= I_SYNC_QUEUED;
 		spin_unlock(&inode->i_lock);
 		if (sb_is_blkdev_sb(inode->i_sb))
@@ -1303,11 +1301,11 @@
 
 	assert_spin_locked(&wb->list_lock);
 	list_splice_init(&wb->b_more_io, &wb->b_io);
-	moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, 0, dirtied_before);
+	moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, dirtied_before);
 	if (!work->for_sync)
 		time_expire_jif = jiffies - dirtytime_expire_interval * HZ;
 	moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io,
-				     EXPIRE_DIRTY_ATIME, time_expire_jif);
+				     time_expire_jif);
 	if (moved)
 		wb_io_lists_populated(wb);
 	trace_writeback_queue_io(wb, work, dirtied_before, moved);
@@ -1483,18 +1481,14 @@
 	spin_lock(&inode->i_lock);
 
 	dirty = inode->i_state & I_DIRTY;
-	if (inode->i_state & I_DIRTY_TIME) {
-		if ((dirty & I_DIRTY_INODE) ||
-		    wbc->sync_mode == WB_SYNC_ALL ||
-		    unlikely(inode->i_state & I_DIRTY_TIME_EXPIRED) ||
-		    unlikely(time_after(jiffies,
-					(inode->dirtied_time_when +
-					 dirtytime_expire_interval * HZ)))) {
-			dirty |= I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED;
-			trace_writeback_lazytime(inode);
-		}
-	} else
-		inode->i_state &= ~I_DIRTY_TIME_EXPIRED;
+	if ((inode->i_state & I_DIRTY_TIME) &&
+	    ((dirty & I_DIRTY_INODE) ||
+	     wbc->sync_mode == WB_SYNC_ALL || wbc->for_sync ||
+	     time_after(jiffies, inode->dirtied_time_when +
+			dirtytime_expire_interval * HZ))) {
+		dirty |= I_DIRTY_TIME;
+		trace_writeback_lazytime(inode);
+	}
 	inode->i_state &= ~dirty;
 
 	/*
diff --git a/fs/fs_struct.c b/fs/fs_struct.c
index ca639ed..483730d 100644
--- a/fs/fs_struct.c
+++ b/fs/fs_struct.c
@@ -46,6 +46,7 @@
 	if (old_pwd.dentry)
 		path_put(&old_pwd);
 }
+EXPORT_SYMBOL_GPL(set_fs_pwd);
 
 static inline int replace_path(struct path *p, const struct path *old, const struct path *new)
 {
@@ -91,6 +92,7 @@
 	path_put(&fs->pwd);
 	kmem_cache_free(fs_cachep, fs);
 }
+EXPORT_SYMBOL_GPL(free_fs_struct);
 
 void exit_fs(struct task_struct *tsk)
 {
@@ -129,6 +131,7 @@
 	}
 	return fs;
 }
+EXPORT_SYMBOL_GPL(copy_fs_struct);
 
 int unshare_fs_struct(void)
 {
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index d7cde216..5d2d2ff 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -356,10 +356,8 @@
 	/** 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;
diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c
index 20d052e..414718a 100644
--- a/fs/fuse/xattr.c
+++ b/fs/fuse/xattr.c
@@ -176,7 +176,7 @@
 
 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)
 {
 	return fuse_getxattr(inode, name, value, size);
 }
@@ -199,7 +199,7 @@
 
 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(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 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_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..1ffe31a
--- /dev/null
+++ b/fs/incfs/Kconfig
@@ -0,0 +1,18 @@
+config INCREMENTAL_FS
+	tristate "Incremental file system support"
+	depends on BLOCK
+	select DECOMPRESS_LZ4
+	select CRC32
+	select CRYPTO
+	select CRYPTO_RSA
+	select CRYPTO_SHA256
+	select X509_CERTIFICATE_PARSER
+	select ASYMMETRIC_KEY_TYPE
+	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+	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..8d734bf9
--- /dev/null
+++ b/fs/incfs/Makefile
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_INCREMENTAL_FS)	+= incrementalfs.o
+
+incrementalfs-y := \
+	data_mgmt.o \
+	format.o \
+	integrity.o \
+	main.o \
+	vfs.o
diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c
new file mode 100644
index 0000000..074a733
--- /dev/null
+++ b/fs/incfs/data_mgmt.c
@@ -0,0 +1,1426 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <linux/crc32.h>
+#include <linux/file.h>
+#include <linux/gfp.h>
+#include <linux/ktime.h>
+#include <linux/lz4.h>
+#include <linux/mm.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 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);
+}
+
+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);
+	mutex_init(&mi->mi_pending_reads_mutex);
+	init_waitqueue_head(&mi->mi_pending_reads_notif_wq);
+	init_waitqueue_head(&mi->mi_log.ml_notif_wq);
+	INIT_DELAYED_WORK(&mi->mi_log.ml_wakeup_work, log_wake_up_all);
+	spin_lock_init(&mi->mi_log.rl_lock);
+	INIT_LIST_HEAD(&mi->mi_reads_list_head);
+
+	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)
+{
+	if (!mi)
+		return;
+
+	flush_delayed_work(&mi->mi_log.ml_wakeup_work);
+
+	dput(mi->mi_index_dir);
+	path_put(&mi->mi_backing_dir_path);
+	mutex_destroy(&mi->mi_dir_struct_mutex);
+	mutex_destroy(&mi->mi_pending_reads_mutex);
+	put_cred(mi->mi_owner);
+	kfree(mi->mi_log.rl_ring_buf);
+	kfree(mi->log_xattr);
+	kfree(mi->pending_read_xattr);
+	kfree(mi);
+}
+
+static void data_file_segment_init(struct data_file_segment *segment)
+{
+	init_waitqueue_head(&segment->new_data_arrival_wq);
+	mutex_init(&segment->blockmap_mutex);
+	INIT_LIST_HEAD(&segment->reads_list_head);
+}
+
+static void data_file_segment_destroy(struct data_file_segment *segment)
+{
+	mutex_destroy(&segment->blockmap_mutex);
+}
+
+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(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 = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (error)
+		goto out;
+	error = incfs_read_file_header(bfc, &df->df_metadata_off, &df->df_id,
+				       &size, &df->df_header_flags);
+	mutex_unlock(&bfc->bc_mutex);
+
+	if (error)
+		goto out;
+
+	df->df_size = size;
+	if (size > 0)
+		df->df_data_block_count = get_blocks_count_for_size(size);
+
+	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)
+{
+	int i;
+
+	if (!df)
+		return;
+
+	incfs_free_mtree(df->df_hash_tree);
+	for (i = 0; i < ARRAY_SIZE(df->df_segments); i++)
+		data_file_segment_destroy(&df->df_segments[i]);
+	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 decompress(struct mem_range src, struct mem_range dst)
+{
+	int result = LZ4_decompress_safe(src.data, dst.data, src.len, dst.len);
+
+	if (result < 0)
+		return -EBADMSG;
+
+	return result;
+}
+
+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;
+
+	/*
+	 * 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) {
+		record.full_record = (struct full_record){
+			.type = FULL,
+			.block_index = block_index,
+			.file_id = *id,
+			.absolute_ts_us = now_us,
+		};
+		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 file *bf, 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(bf, 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_debug("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("incfs: 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("incfs: 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_LZ4) ?
+					 COMPRESSION_LZ4 :
+					 COMPRESSION_NONE;
+}
+
+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;
+}
+
+static int update_file_header_flags(struct data_file *df, u32 bits_to_reset,
+				    u32 bits_to_set)
+{
+	int result;
+	u32 new_flags;
+	struct backing_file_context *bfc;
+
+	if (!df)
+		return -EFAULT;
+	bfc = df->df_backing_file_context;
+	if (!bfc)
+		return -EFAULT;
+
+	result = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (result)
+		return result;
+
+	new_flags = (df->df_header_flags & ~bits_to_reset) | bits_to_set;
+	if (new_flags != df->df_header_flags) {
+		df->df_header_flags = new_flags;
+		result = incfs_write_file_header_flags(bfc, new_flags);
+	}
+
+	mutex_unlock(&bfc->bc_mutex);
+
+	return result;
+}
+
+#define READ_BLOCKMAP_ENTRIES 512
+int incfs_get_filled_blocks(struct data_file *df,
+			    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;
+
+	*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 (df->df_header_flags & INCFS_FILE_COMPLETE) {
+		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) == 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 (!error && in_range && arg->start_index == 0 &&
+	    end_index == df->df_total_block_count &&
+	    *size_out == sizeof(struct incfs_filled_range)) {
+		int result =
+			update_file_header_flags(df, 0, INCFS_FILE_COMPLETE);
+		/* Log failure only, since it's just a failed optimization */
+		pr_debug("Marked file full with result %d", result);
+	}
+
+	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());
+
+	mutex_lock(&mi->mi_pending_reads_mutex);
+
+	result->serial_number = ++mi->mi_last_pending_read_number;
+	mi->mi_pending_reads_count++;
+
+	list_add(&result->mi_reads_list, &mi->mi_reads_list_head);
+	list_add(&result->segment_reads_list, &segment->reads_list_head);
+	mutex_unlock(&mi->mi_pending_reads_mutex);
+
+	wake_up_all(&mi->mi_pending_reads_notif_wq);
+	return result;
+}
+
+/* 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;
+
+	mutex_lock(&mi->mi_pending_reads_mutex);
+	list_del(&read->mi_reads_list);
+	list_del(&read->segment_reads_list);
+
+	mi->mi_pending_reads_count--;
+	mutex_unlock(&mi->mi_pending_reads_mutex);
+
+	kfree(read);
+}
+
+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. */
+	mutex_lock(&mi->mi_pending_reads_mutex);
+	list_for_each_entry(entry, &segment->reads_list_head,
+						segment_reads_list) {
+		if (entry->block_index == index)
+			set_read_done(entry);
+	}
+	mutex_unlock(&mi->mi_pending_reads_mutex);
+	wake_up_all(&segment->new_data_arrival_wq);
+}
+
+static int wait_for_data_block(struct data_file *df, int block_index,
+			       int timeout_ms,
+			       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;
+
+	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)
+		return -ENODATA;
+
+	segment = get_file_segment(df, block_index);
+	error = mutex_lock_interruptible(&segment->blockmap_mutex);
+	if (error)
+		return error;
+
+	/* Look up the given block */
+	error = get_data_file_block(df, block_index, &block);
+
+	/* If it's not found, create a pending read */
+	if (!error && !is_data_block_present(&block) && timeout_ms != 0)
+		read = add_pending_read(df, block_index);
+
+	mutex_unlock(&segment->blockmap_mutex);
+	if (error)
+		return error;
+
+	/* If the block was found, just return it. No need to wait. */
+	if (is_data_block_present(&block)) {
+		*res_block = block;
+		return 0;
+	}
+
+	mi = df->df_mount_info;
+
+	if (timeout_ms == 0) {
+		log_block_read(mi, &df->df_id, block_index);
+		return -ETIME;
+	}
+
+	if (!read)
+		return -ENOMEM;
+
+	/* Wait for notifications about block's arrival */
+	wait_res =
+		wait_event_interruptible_timeout(segment->new_data_arrival_wq,
+						 (is_read_done(read)),
+						 msecs_to_jiffies(timeout_ms));
+
+	/* Woke up, the pending read is no longer needed. */
+	remove_pending_read(df, read);
+	read = NULL;
+
+	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;
+	}
+
+	error = mutex_lock_interruptible(&segment->blockmap_mutex);
+	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;
+		}
+	}
+
+	mutex_unlock(&segment->blockmap_mutex);
+	return error;
+}
+
+ssize_t incfs_read_data_file_block(struct mem_range dst, struct file *f,
+				   int index, int timeout_ms,
+				   struct mem_range tmp)
+{
+	loff_t pos;
+	ssize_t result;
+	size_t bytes_to_read;
+	struct mount_info *mi = NULL;
+	struct file *bf = NULL;
+	struct data_file_block block = {};
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!dst.data || !df)
+		return -EFAULT;
+
+	if (tmp.len < 2 * INCFS_DATA_FILE_BLOCK_SIZE)
+		return -ERANGE;
+
+	mi = df->df_mount_info;
+	bf = df->df_backing_file_context->bc_file;
+
+	result = wait_for_data_block(df, index, timeout_ms, &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(bf, 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(bf, tmp.data, bytes_to_read, pos);
+		if (result == bytes_to_read) {
+			result =
+				decompress(range(tmp.data, bytes_to_read), dst);
+			if (result < 0) {
+				const char *name =
+					bf->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(bf, 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;
+
+	error = mutex_lock_interruptible(&segment->blockmap_mutex);
+	if (error)
+		return error;
+
+	error = get_data_file_block(df, block->block_index, &existing_block);
+	if (error)
+		goto unlock;
+	if (is_data_block_present(&existing_block)) {
+		/* Block is already present, nothing to do here */
+		goto unlock;
+	}
+
+	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);
+
+unlock:
+	mutex_unlock(&segment->blockmap_mutex);
+	if (error)
+		pr_debug("incfs: %s %d error: %d\n", __func__,
+				block->block_index, error);
+	return error;
+}
+
+int incfs_read_file_signature(struct data_file *df, struct mem_range dst)
+{
+	struct file *bf = df->df_backing_file_context->bc_file;
+	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(bf, 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);
+	}
+	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_attr_md(struct incfs_file_attr *fa,
+				struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	u16 attr_size = le16_to_cpu(fa->fa_size);
+
+	if (!df)
+		return -EFAULT;
+
+	if (attr_size > INCFS_MAX_FILE_ATTR_SIZE)
+		return -E2BIG;
+
+	df->n_attr.fa_value_offset = le64_to_cpu(fa->fa_offset);
+	df->n_attr.fa_value_size = attr_size;
+	df->n_attr.fa_crc = le32_to_cpu(fa->fa_crc);
+
+	return 0;
+}
+
+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->bc_file, 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;
+}
+
+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;
+
+	/* No writing to the backing file while it's being scanned. */
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (error)
+		goto out;
+
+	/* Reading superblock */
+	handler->md_record_offset = df->df_metadata_off;
+	handler->context = df;
+	handler->handle_blockmap = process_blockmap_md;
+	handler->handle_file_attr = process_file_attr_md;
+	handler->handle_signature = process_file_signature_md;
+
+	pr_debug("incfs: Starting reading incfs-metadata records at offset %lld\n",
+		 handler->md_record_offset);
+	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_debug("incfs: Error %d after reading %d incfs-metadata records.\n",
+			 -error, records_count);
+		result = error;
+	} else {
+		pr_debug("incfs: Finished reading %d incfs-metadata records.\n",
+			 records_count);
+		result = records_count;
+	}
+	mutex_unlock(&bfc->bc_mutex);
+
+	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;
+
+out:
+	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;
+
+	mutex_lock(&mi->mi_pending_reads_mutex);
+	result = (mi->mi_last_pending_read_number > last_number) &&
+		 (mi->mi_pending_reads_count > 0);
+	mutex_unlock(&mi->mi_pending_reads_mutex);
+	return result;
+}
+
+int incfs_collect_pending_reads(struct mount_info *mi, int sn_lowerbound,
+				struct incfs_pending_read_info *reads,
+				int reads_size)
+{
+	int reported_reads = 0;
+	struct pending_read *entry = NULL;
+
+	if (!mi)
+		return -EFAULT;
+
+	if (reads_size <= 0)
+		return 0;
+
+	mutex_lock(&mi->mi_pending_reads_mutex);
+
+	if (mi->mi_last_pending_read_number <= sn_lowerbound
+	    || mi->mi_pending_reads_count == 0)
+		goto unlock;
+
+	list_for_each_entry(entry, &mi->mi_reads_list_head, mi_reads_list) {
+		if (entry->serial_number <= sn_lowerbound)
+			continue;
+
+		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;
+		/* reads[reported_reads].kind = INCFS_READ_KIND_PENDING; */
+
+		reported_reads++;
+		if (reported_reads >= reads_size)
+			break;
+	}
+
+unlock:
+	mutex_unlock(&mi->mi_pending_reads_mutex);
+
+	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 *reader_state,
+			       struct incfs_pending_read_info *reads,
+			       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 (reader_state->generation_id != head->generation_id) {
+		pr_debug("read ptr is wrong generation: %u/%u",
+			 reader_state->generation_id, head->generation_id);
+
+		*reader_state = (struct read_log_state){
+			.generation_id = head->generation_id,
+		};
+	}
+
+	if (reader_state->current_record_no < tail->current_record_no) {
+		pr_debug("read ptr is behind, moving: %u/%u -> %u/%u\n",
+			 (u32)reader_state->next_offset,
+			 (u32)reader_state->current_pass_no,
+			 (u32)tail->next_offset, (u32)tail->current_pass_no);
+
+		*reader_state = *tail;
+	}
+
+	for (dst_idx = 0; dst_idx < reads_size; dst_idx++) {
+		if (reader_state->current_record_no == head->current_record_no)
+			break;
+
+		log_read_one_record(log, reader_state);
+
+		reads[dst_idx] = (struct incfs_pending_read_info){
+			.file_id = reader_state->base_record.file_id,
+			.block_index = reader_state->base_record.block_index,
+			.serial_number = reader_state->current_record_no,
+			.timestamp_us = reader_state->base_record.absolute_ts_us
+		};
+	}
+
+	spin_unlock(&log->rl_lock);
+	return dst_idx;
+}
+
+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;
+}
diff --git a/fs/incfs/data_mgmt.h b/fs/incfs/data_mgmt.h
new file mode 100644
index 0000000..2726867
--- /dev/null
+++ b/fs/incfs/data_mgmt.h
@@ -0,0 +1,394 @@
+/* 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/completion.h>
+#include <linux/wait.h>
+#include <crypto/hash.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.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;
+} __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; /* 12 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 no_backing_file_cache;
+	bool no_backing_file_readahead;
+};
+
+struct mount_info {
+	struct super_block *mi_sb;
+
+	struct path mi_backing_dir_path;
+
+	struct dentry *mi_index_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:
+	 *  - reads_list_head
+	 *  - mi_pending_reads_count
+	 *  - mi_last_pending_read_number
+	 *  - data_file_segment.reads_list_head
+	 */
+	struct mutex mi_pending_reads_mutex;
+
+	/* 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;
+
+	void *log_xattr;
+	size_t log_xattr_size;
+
+	void *pending_read_xattr;
+	size_t pending_read_xattr_size;
+};
+
+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;
+
+	struct list_head mi_reads_list;
+
+	struct list_head segment_reads_list;
+};
+
+struct data_file_segment {
+	wait_queue_head_t new_data_arrival_wq;
+
+	/* Protects reads and writes from the blockmap */
+	/* Good candidate for read/write mutex */
+	struct mutex blockmap_mutex;
+
+	/* 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;
+
+	struct file_attr n_attr;
+
+	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;
+};
+
+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);
+
+struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf);
+void incfs_free_data_file(struct data_file *df);
+
+int incfs_scan_metadata_chain(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, int timeout_ms,
+				   struct mem_range tmp);
+
+int incfs_get_filled_blocks(struct data_file *df,
+			    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,
+				int reads_size);
+
+int incfs_collect_logged_reads(struct mount_info *mi,
+			       struct read_log_state *start_state,
+			       struct incfs_pending_read_info *reads,
+			       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;
+}
+
+bool incfs_equal_ranges(struct mem_range lhs, struct mem_range rhs);
+
+#endif /* _INCFS_DATA_MGMT_H */
diff --git a/fs/incfs/format.c b/fs/incfs/format.c
new file mode 100644
index 0000000..c56e559
--- /dev/null
+++ b/fs/incfs/format.c
@@ -0,0 +1,691 @@
+// 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 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);
+	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);
+}
+
+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;
+}
+
+/* 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;
+
+	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;
+	return vfs_fallocate(bfc->bc_file, 0, new_last_byte_offset, 1);
+}
+
+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->bc_file, buf, count, pos);
+
+	if (res < 0)
+		return res;
+	if (res != count)
+		return -EIO;
+	return 0;
+}
+
+static u32 calc_md_crc(struct incfs_md_header *record)
+{
+	u32 result = 0;
+	__le32 saved_crc = record->h_record_crc;
+	__le64 saved_md_offset = record->h_next_md_offset;
+	size_t record_size = min_t(size_t, le16_to_cpu(record->h_record_size),
+				INCFS_MAX_METADATA_RECORD_SIZE);
+
+	/* Zero fields which needs to be excluded from CRC calculation. */
+	record->h_record_crc = 0;
+	record->h_next_md_offset = 0;
+	result = crc32(0, record, record_size);
+
+	/* Restore excluded fields. */
+	record->h_record_crc = saved_crc;
+	record->h_next_md_offset = saved_md_offset;
+
+	return result;
+}
+
+/*
+ * 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_prev_md_offset = cpu_to_le64(bfc->bc_last_md_record_offset);
+	record->h_next_md_offset = 0;
+	record->h_record_crc = cpu_to_le32(calc_md_crc(record));
+
+	/* 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;
+}
+
+int incfs_write_file_header_flags(struct backing_file_context *bfc, u32 flags)
+{
+	if (!bfc)
+		return -EFAULT;
+
+	return write_to_bf(bfc, &flags, sizeof(flags),
+			   offsetof(struct incfs_file_header,
+				    fh_file_header_flags));
+}
+
+/*
+ * 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;
+}
+
+/*
+ * Write file attribute data and metadata record to the backing file.
+ */
+int incfs_write_file_attr_to_backing_file(struct backing_file_context *bfc,
+		struct mem_range value, struct incfs_file_attr *attr)
+{
+	struct incfs_file_attr file_attr = {};
+	int result = 0;
+	u32 crc = 0;
+	loff_t value_offset = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (value.len > INCFS_MAX_FILE_ATTR_SIZE)
+		return -ENOSPC;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	crc = crc32(0, value.data, value.len);
+	value_offset = incfs_get_end_offset(bfc->bc_file);
+	file_attr.fa_header.h_md_entry_type = INCFS_MD_FILE_ATTR;
+	file_attr.fa_header.h_record_size = cpu_to_le16(sizeof(file_attr));
+	file_attr.fa_header.h_next_md_offset = cpu_to_le64(0);
+	file_attr.fa_size = cpu_to_le16((u16)value.len);
+	file_attr.fa_offset = cpu_to_le64(value_offset);
+	file_attr.fa_crc = cpu_to_le32(crc);
+
+	result = write_to_bf(bfc, value.data, value.len, value_offset);
+	if (result)
+		return result;
+
+	result = append_md_to_backing_file(bfc, &file_attr.fa_header);
+	if (result) {
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, value_offset);
+	} else if (attr) {
+		*attr = file_attr;
+	}
+
+	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;
+}
+
+/*
+ * Write a backing file header
+ * It should always be called only on empty file.
+ * incfs_super_block.s_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 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);
+	bm_entry.me_flags = cpu_to_le16(INCFS_BLOCK_HASH);
+
+	return write_to_bf(bfc, &bm_entry, sizeof(bm_entry), bm_entry_off);
+}
+
+/* Initialize a new image in a given backing file. */
+int incfs_make_empty_backing_file(struct backing_file_context *bfc,
+				  incfs_uuid_t *uuid, u64 file_size)
+{
+	int result = 0;
+
+	if (!bfc || !bfc->bc_file)
+		return -EFAULT;
+
+	result = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (result)
+		goto out;
+
+	result = truncate_backing_file(bfc, 0);
+	if (result)
+		goto out;
+
+	result = incfs_write_fh_to_backing_file(bfc, uuid, file_size);
+out:
+	mutex_unlock(&bfc->bc_mutex);
+	return result;
+}
+
+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->bc_file, 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;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+	bytes_read = incfs_kread(bfc->bc_file, &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_file_header_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;
+	loff_t prev_record = 0;
+	int res = 0;
+	struct incfs_md_header *md_hdr = NULL;
+
+	if (!bfc || !handler)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	if (handler->md_record_offset == 0)
+		return -EPERM;
+
+	memset(&handler->md_buffer, 0, max_md_size);
+	bytes_read = incfs_kread(bfc->bc_file, &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);
+	prev_record = le64_to_cpu(md_hdr->h_prev_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;
+	}
+
+	if (prev_record != handler->md_prev_record_offset) {
+		pr_warn("incfs: Metadata chain has been corrupted.");
+		return -EBADMSG;
+	}
+
+	if (le32_to_cpu(md_hdr->h_record_crc) != calc_md_crc(md_hdr)) {
+		pr_warn("incfs: Metadata CRC mismatch.");
+		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:
+		if (handler->handle_file_attr)
+			res = handler->handle_file_attr(
+				&handler->md_buffer.file_attr, handler);
+		break;
+	case INCFS_MD_SIGNATURE:
+		if (handler->handle_signature)
+			res = handler->handle_signature(
+				&handler->md_buffer.signature, 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 file *f, void *buf, size_t size, loff_t pos)
+{
+	return kernel_read(f, buf, size, &pos);
+}
+
+ssize_t incfs_kwrite(struct file *f, const void *buf, size_t size, loff_t pos)
+{
+	return kernel_write(f, buf, size, &pos);
+}
diff --git a/fs/incfs/format.h b/fs/incfs/format.h
new file mode 100644
index 0000000..1a83349
--- /dev/null
+++ b/fs/incfs/format.h
@@ -0,0 +1,340 @@
+/* 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_super_block              |]---+
+ *              +-------------------------------------------+    |
+ *              |                 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
+};
+
+enum incfs_file_header_flags {
+	INCFS_FILE_COMPLETE = 1 << 0,
+};
+
+/* 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;
+
+	/*
+	 * CRC32 of the metadata record.
+	 * (e.g. inode, dir entry etc) not just this struct.
+	 */
+	__le32 h_record_crc;
+
+	/* Offset of the next metadata entry if any */
+	__le64 h_next_md_offset;
+
+	/* Offset of the previous metadata entry if any */
+	__le64 h_prev_md_offset;
+
+} __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_file_header_flags;
+
+	/* Offset of the first metadata record */
+	__le64 fh_first_md_offset;
+
+	/*
+	 * Put file specific information after this point
+	 */
+
+	/* Full size of the file's content */
+	__le64 fh_file_size;
+
+	/* File uuid */
+	incfs_uuid_t fh_uuid;
+} __packed;
+
+enum incfs_block_map_entry_flags {
+	INCFS_BLOCK_COMPRESSED_LZ4 = (1 << 0),
+	INCFS_BLOCK_HASH = (1 << 1),
+};
+
+/* 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 attribute. Type = INCFS_MD_FILE_ATTR */
+struct incfs_file_attr {
+	struct incfs_md_header fa_header;
+
+	__le64 fa_offset;
+
+	__le16 fa_size;
+
+	__le32 fa_crc;
+} __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;
+};
+
+/* 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;
+};
+
+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_attr file_attr;
+		struct incfs_file_signature signature;
+	} md_buffer;
+
+	int (*handle_blockmap)(struct incfs_blockmap *bm,
+			       struct metadata_handler *handler);
+	int (*handle_file_attr)(struct incfs_file_attr *fa,
+				 struct metadata_handler *handler);
+	int (*handle_signature)(struct incfs_file_signature *sig,
+				 struct metadata_handler *handler);
+};
+#define INCFS_MAX_METADATA_RECORD_SIZE \
+	FIELD_SIZEOF(struct metadata_handler, md_buffer)
+
+loff_t incfs_get_end_offset(struct file *f);
+
+/* Backing file context management */
+struct backing_file_context *incfs_alloc_bfc(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_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_file_attr_to_backing_file(struct backing_file_context *bfc,
+		struct mem_range value, struct incfs_file_attr *attr);
+
+int incfs_write_signature_to_backing_file(struct backing_file_context *bfc,
+					  struct mem_range sig, u32 tree_size);
+
+int incfs_write_file_header_flags(struct backing_file_context *bfc, u32 flags);
+
+int incfs_make_empty_backing_file(struct backing_file_context *bfc,
+				  incfs_uuid_t *uuid, u64 file_size);
+
+/* 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 file *f, void *buf, size_t size, loff_t pos);
+ssize_t incfs_kwrite(struct file *f, 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..e65d0d8
--- /dev/null
+++ b/fs/incfs/main.c
@@ -0,0 +1,103 @@
+// 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 corefs_show(struct kobject *kobj,
+			  struct kobj_attribute *attr, char *buff)
+{
+	return snprintf(buff, PAGE_SIZE, "supported\n");
+}
+
+static struct kobj_attribute corefs_attr = __ATTR_RO(corefs);
+
+static struct attribute *attributes[] = {
+	&corefs_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/vfs.c b/fs/incfs/vfs.c
new file mode 100644
index 0000000..582448c
--- /dev/null
+++ b/fs/incfs/vfs.c
@@ -0,0 +1,2304 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#include <linux/blkdev.h>
+#include <linux/cred.h>
+#include <linux/eventpoll.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fs_stack.h>
+#include <linux/namei.h>
+#include <linux/parser.h>
+#include <linux/poll.h>
+#include <linux/seq_file.h>
+#include <linux/syscalls.h>
+#include <linux/xattr.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "vfs.h"
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+#include "internal.h"
+
+#define INCFS_PENDING_READS_INODE 2
+#define INCFS_LOG_INODE 3
+#define INCFS_START_INO_RANGE 10
+#define READ_FILE_MODE 0444
+#define READ_EXEC_FILE_MODE 0555
+#define READ_WRITE_FILE_MODE 0666
+
+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 ssize_t pending_reads_read(struct file *f, char __user *buf, size_t len,
+			    loff_t *ppos);
+static __poll_t pending_reads_poll(struct file *file, poll_table *wait);
+static int pending_reads_open(struct inode *inode, struct file *file);
+static int pending_reads_release(struct inode *, struct file *);
+
+static ssize_t log_read(struct file *f, char __user *buf, size_t len,
+			    loff_t *ppos);
+static __poll_t log_poll(struct file *file, poll_table *wait);
+static int log_open(struct inode *inode, struct file *file);
+static int log_release(struct inode *, struct file *);
+
+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,
+	.unlocked_ioctl = dispatch_ioctl,
+	.compat_ioctl = dispatch_ioctl
+};
+
+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 */
+};
+
+static 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
+};
+
+enum FILL_PERMISSION {
+	CANT_FILL = 0,
+	CAN_FILL = 1,
+};
+
+static const struct file_operations incfs_pending_read_file_ops = {
+	.read = pending_reads_read,
+	.poll = pending_reads_poll,
+	.open = pending_reads_open,
+	.release = pending_reads_release,
+	.llseek = noop_llseek,
+	.unlocked_ioctl = dispatch_ioctl,
+	.compat_ioctl = dispatch_ioctl
+};
+
+static const struct file_operations incfs_log_file_ops = {
+	.read = log_read,
+	.poll = log_poll,
+	.open = log_open,
+	.release = log_release,
+	.llseek = noop_llseek,
+	.unlocked_ioctl = dispatch_ioctl,
+	.compat_ioctl = dispatch_ioctl
+};
+
+static 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,
+};
+
+/* 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;
+};
+
+/* State of an open .log file, unique for each file descriptor. */
+struct log_file_state {
+	struct read_log_state state;
+};
+
+struct inode_search {
+	unsigned long ino;
+
+	struct dentry *backing_dentry;
+
+	size_t size;
+};
+
+enum parse_parameter {
+	Opt_read_timeout,
+	Opt_readahead_pages,
+	Opt_no_backing_file_cache,
+	Opt_no_backing_file_readahead,
+	Opt_rlog_pages,
+	Opt_rlog_wakeup_cnt,
+	Opt_err
+};
+
+static const char pending_reads_file_name[] = INCFS_PENDING_READS_FILENAME;
+static struct mem_range pending_reads_file_name_range = {
+	.data = (u8 *)pending_reads_file_name,
+	.len = ARRAY_SIZE(pending_reads_file_name) - 1
+};
+
+static const char log_file_name[] = INCFS_LOG_FILENAME;
+static struct mem_range log_file_name_range = {
+	.data = (u8 *)log_file_name,
+	.len = ARRAY_SIZE(log_file_name) - 1
+};
+
+static const match_table_t option_tokens = {
+	{ Opt_read_timeout, "read_timeout_ms=%u" },
+	{ Opt_readahead_pages, "readahead=%u" },
+	{ Opt_no_backing_file_cache, "no_bf_cache=%u" },
+	{ Opt_no_backing_file_readahead, "no_bf_readahead=%u" },
+	{ Opt_rlog_pages, "rlog_pages=%u" },
+	{ Opt_rlog_wakeup_cnt, "rlog_wakeup_cnt=%u" },
+	{ 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->read_timeout_ms = 1000; /* Default: 1s */
+	opts->readahead_pages = 10;
+	opts->read_log_pages = 2;
+	opts->read_log_wakeup_count = 10;
+	opts->no_backing_file_cache = false;
+	opts->no_backing_file_readahead = false;
+	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;
+			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_no_backing_file_cache:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->no_backing_file_cache = (value != 0);
+			break;
+		case Opt_no_backing_file_readahead:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->no_backing_file_readahead = (value != 0);
+			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;
+		default:
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+static struct super_block *file_superblock(struct file *f)
+{
+	struct inode *inode = file_inode(f);
+
+	return inode->i_sb;
+}
+
+static struct mount_info *get_mount_info(struct super_block *sb)
+{
+	struct mount_info *result = sb->s_fs_info;
+
+	WARN_ON(!result);
+	return result;
+}
+
+/* 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);
+
+	if (!node)
+		return 0;
+
+	if (search->backing_dentry) {
+		struct inode *backing_inode = d_inode(search->backing_dentry);
+
+		return (node->n_backing_inode == backing_inode) &&
+			inode->i_ino == search->ino;
+	} else
+		return 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);
+
+	if (search->backing_dentry) {
+		/* It's a regular inode that has corresponding backing 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;
+	} else if (search->ino == INCFS_PENDING_READS_INODE) {
+		/* It's an inode for .pending_reads pseudo file. */
+
+		inode->i_ctime = (struct timespec64){};
+		inode->i_mtime = inode->i_ctime;
+		inode->i_atime = inode->i_ctime;
+		inode->i_size = 0;
+		inode->i_ino = INCFS_PENDING_READS_INODE;
+		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 = &incfs_pending_read_file_ops;
+
+	} else if (search->ino == INCFS_LOG_INODE) {
+		/* It's an inode for .log pseudo file. */
+
+		inode->i_ctime = (struct timespec64){};
+		inode->i_mtime = inode->i_ctime;
+		inode->i_atime = inode->i_ctime;
+		inode->i_size = 0;
+		inode->i_ino = INCFS_LOG_INODE;
+		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 = &incfs_log_file_ops;
+
+	} else {
+		/* Unknown inode requested. */
+		return -EINVAL;
+	}
+
+	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 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));
+	struct incfs_pending_read_info *reads_buf = NULL;
+	size_t reads_to_collect = len / sizeof(*reads_buf);
+	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;
+	int i = 0;
+
+	if (!incfs_fresh_pending_reads_exist(mi, last_known_read_sn))
+		return 0;
+
+	reads_buf = (struct incfs_pending_read_info *)get_zeroed_page(GFP_NOFS);
+	if (!reads_buf)
+		return -ENOMEM;
+
+	reads_to_collect =
+		min_t(size_t, PAGE_SIZE / sizeof(*reads_buf), reads_to_collect);
+
+	reads_collected = incfs_collect_pending_reads(
+		mi, last_known_read_sn, reads_buf, reads_to_collect);
+	if (reads_collected < 0) {
+		result = reads_collected;
+		goto out;
+	}
+
+	for (i = 0; i < reads_collected; i++)
+		if (reads_buf[i].serial_number > new_max_sn)
+			new_max_sn = reads_buf[i].serial_number;
+
+	/*
+	 * 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 * sizeof(*reads_buf);
+
+	/* Copy reads info to the userspace buffer */
+	if (copy_to_user(buf, reads_buf, result)) {
+		result = -EFAULT;
+		goto out;
+	}
+
+	WRITE_ONCE(pr_state->last_pending_read_sn, new_max_sn);
+	*ppos = 0;
+out:
+	if (reads_buf)
+		free_page((unsigned long)reads_buf);
+	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 struct inode *fetch_pending_reads_inode(struct super_block *sb)
+{
+	struct inode_search search = {
+		.ino = INCFS_PENDING_READS_INODE
+	};
+	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 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 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;
+	struct incfs_pending_read_info *reads_buf;
+	ssize_t reads_to_collect = len / sizeof(*reads_buf);
+	ssize_t reads_per_page = PAGE_SIZE / sizeof(*reads_buf);
+
+	rl_size = READ_ONCE(mi->mi_log.rl_size);
+	if (rl_size == 0)
+		return 0;
+
+	reads_buf = (struct incfs_pending_read_info *)__get_free_page(GFP_NOFS);
+	if (!reads_buf)
+		return -ENOMEM;
+
+	reads_to_collect = min_t(ssize_t, rl_size, reads_to_collect);
+	while (reads_to_collect > 0) {
+		struct read_log_state next_state = READ_ONCE(log_state->state);
+		int reads_collected = incfs_collect_logged_reads(
+			mi, &next_state, reads_buf,
+			min_t(ssize_t, reads_to_collect, reads_per_page));
+		if (reads_collected <= 0) {
+			result = total_reads_collected ?
+					 total_reads_collected *
+						 sizeof(*reads_buf) :
+					 reads_collected;
+			goto out;
+		}
+		if (copy_to_user(buf, reads_buf,
+				 reads_collected * sizeof(*reads_buf))) {
+			result = total_reads_collected ?
+					 total_reads_collected *
+						 sizeof(*reads_buf) :
+					 -EFAULT;
+			goto out;
+		}
+
+		WRITE_ONCE(log_state->state, next_state);
+		total_reads_collected += reads_collected;
+		buf += reads_collected * sizeof(*reads_buf);
+		reads_to_collect -= reads_collected;
+	}
+
+	result = total_reads_collected * sizeof(*reads_buf);
+	*ppos = 0;
+out:
+	if (reads_buf)
+		free_page((unsigned long)reads_buf);
+	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 struct inode *fetch_log_inode(struct super_block *sb)
+{
+	struct inode_search search = {
+		.ino = INCFS_LOG_INODE
+	};
+	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 && ctx->pos == 0) {
+		if (!dir_emit(ctx, pending_reads_file_name,
+			      ARRAY_SIZE(pending_reads_file_name) - 1,
+			      INCFS_PENDING_READS_INODE, DT_REG)) {
+			error = -EINVAL;
+			goto out;
+		}
+		ctx->pos++;
+	}
+
+	if (root && ctx->pos == 1) {
+		if (!dir_emit(ctx, log_file_name,
+			      ARRAY_SIZE(log_file_name) - 1,
+			      INCFS_LOG_INODE, DT_REG)) {
+			error = -EINVAL;
+			goto out;
+		}
+		ctx->pos++;
+	}
+
+	ctx->pos -= 2;
+	error = iterate_dir(dir->backing_dir, ctx);
+	ctx->pos += 2;
+	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 *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 dentry *open_or_create_index_dir(struct dentry *backing_dir)
+{
+	static const char name[] = ".index";
+	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)) {
+		dput(index_dentry);
+		return ERR_PTR(-EINVAL);
+	}
+
+	return index_dentry;
+}
+
+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 = kmap(page);
+	int block_index;
+	int timeout_ms;
+
+	if (!df)
+		return -EBADF;
+
+	offset = page_offset(page);
+	block_index = offset / INCFS_DATA_FILE_BLOCK_SIZE;
+	size = df->df_size;
+	timeout_ms = df->df_mount_info->mi_options.read_timeout_ms;
+
+	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));
+		bytes_to_read = min_t(loff_t, size - offset, PAGE_SIZE);
+		read_result = incfs_read_data_file_block(
+			range(page_start, bytes_to_read), f, block_index,
+			timeout_ms, tmp);
+
+		free_pages((unsigned long)tmp.data, get_order(tmp.len));
+	} else {
+		bytes_to_read = 0;
+		read_result = 0;
+	}
+
+	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;
+}
+
+static 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;
+}
+
+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,
+			       mi->mi_owner);
+
+	if (IS_ERR(new_file)) {
+		error = PTR_ERR(new_file);
+		goto out;
+	}
+
+	bfc = incfs_alloc_bfc(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;
+
+	if (attr.data && attr.len) {
+		error = incfs_write_file_attr_to_backing_file(bfc,
+							attr, NULL);
+		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 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;
+}
+
+static 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 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, mi->mi_owner);
+
+	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 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 (incfs_equal_ranges(pending_reads_file_name_range, name))
+		return -EINVAL;
+
+	for (i = 0; i < name.len; i++)
+		if (name.data[i] == '/')
+			return -EINVAL;
+
+	return 0;
+}
+
+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 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 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;
+
+	if (!mi || !mi->mi_index_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;
+	}
+
+	/* 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 .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 delete_index_file;
+	}
+
+	/* 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 delete_index_file;
+	}
+
+	/* 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 delete_index_file;
+	}
+
+	/* 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 delete_index_file;
+		}
+
+		attr_value = kmalloc(args.file_attr_len, GFP_NOFS);
+		if (!attr_value) {
+			error = -ENOMEM;
+			goto delete_index_file;
+		}
+
+		if (copy_from_user(attr_value,
+				u64_to_user_ptr(args.file_attr),
+				args.file_attr_len) > 0) {
+			error = -EFAULT;
+			goto delete_index_file;
+		}
+
+		error = vfs_setxattr(index_file_dentry,
+				INCFS_XATTR_METADATA_NAME,
+				attr_value, args.file_attr_len,
+				XATTR_CREATE);
+
+		if (error)
+			goto delete_index_file;
+	}
+
+	/* 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 delete_index_file;
+
+	/* Linking a file with it's real name from the requested dir. */
+	error = incfs_link(index_file_dentry, named_file_dentry);
+
+	if (!error)
+		goto out;
+
+delete_index_file:
+	incfs_unlink(index_file_dentry);
+
+out:
+	if (error)
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+
+	kfree(file_id_str);
+	kfree(file_name);
+	kfree(attr_value);
+	dput(named_file_dentry);
+	dput(index_file_dentry);
+	path_put(&parent_dir_path);
+	if (locked)
+		mutex_unlock(&mi->mi_dir_struct_mutex);
+	return error;
+}
+
+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);
+	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 ((uintptr_t)f->private_data != 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));
+
+	/*
+	 * 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_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;
+
+	if (f->f_op != &incfs_pending_read_file_ops)
+		return -EPERM;
+
+	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;
+	}
+
+	switch ((uintptr_t)file->private_data) {
+	case CANT_FILL:
+		file->private_data = (void *)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 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);
+	int error;
+
+	if (!df)
+		return -EINVAL;
+
+	if ((uintptr_t)f->private_data != CAN_FILL)
+		return -EPERM;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	error = incfs_get_filled_blocks(df, &args);
+
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		return -EFAULT;
+
+	return error;
+}
+
+static long 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_FILL_BLOCKS:
+		return ioctl_fill_blocks(f, (void __user *)arg);
+	case INCFS_IOC_PERMIT_FILL:
+		return ioctl_permit_fill(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);
+	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);
+	struct mem_range name_range =
+			range((u8 *)dentry->d_name.name, dentry->d_name.len);
+	int err = 0;
+
+	if (d_inode(mi->mi_backing_dir_path.dentry) ==
+		dir_info->n_backing_inode) {
+		/* We do lookup in the FS root. Show pseudo files. */
+
+		if (incfs_equal_ranges(pending_reads_file_name_range,
+								name_range)) {
+			struct inode *inode = fetch_pending_reads_inode(
+				dir_inode->i_sb);
+
+			if (IS_ERR(inode)) {
+				err = PTR_ERR(inode);
+				goto out;
+			}
+
+			d_add(dentry, inode);
+			goto out;
+		}
+
+		if (incfs_equal_ranges(log_file_name_range, name_range)) {
+			struct inode *inode = fetch_log_inode(
+				dir_inode->i_sb);
+
+			if (IS_ERR(inode)) {
+				err = PTR_ERR(inode);
+				goto out;
+			}
+
+			d_add(dentry, inode);
+			goto out;
+		}
+	}
+
+	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 out;
+	}
+
+	if (backing_dentry->d_parent == mi->mi_index_dir) {
+		/* Can't create a subdir inside .index */
+		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)) {
+			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);
+	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 also its hardlink from .index */
+static int final_file_delete(struct mount_info *mi,
+			struct dentry *backing_dentry)
+{
+	struct dentry *index_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));
+	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);
+		goto out;
+	}
+
+	error = incfs_unlink(backing_dentry);
+	if (error)
+		goto out;
+
+	if (d_really_is_positive(index_file_dentry))
+		error = incfs_unlink(index_file_dentry);
+out:
+	dput(index_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;
+
+	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 out;
+	}
+
+	if (backing_path.dentry->d_parent == mi->mi_index_dir) {
+		/* Direct unlink from .index are not allowed. */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = vfs_getattr(&backing_path, &stat, STATX_NLINK,
+			  AT_STATX_SYNC_AS_STAT);
+	if (err)
+		goto out;
+
+	if (stat.nlink == 2) {
+		/*
+		 * This is the last named link to this file. The only one left
+		 * is in .index. Remove them both now.
+		 */
+		err = final_file_delete(mi, backing_path.dentry);
+	} else {
+		/* There are other links to this file. Remove just this one. */
+		err = incfs_unlink(backing_path.dentry);
+	}
+
+	d_drop(dentry);
+out:
+	path_put(&backing_path);
+	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;
+
+	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;
+	}
+
+	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;
+
+	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 out;
+	}
+
+	if (backing_path.dentry == mi->mi_index_dir) {
+		/* Can't delete .index */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = incfs_rmdir(backing_path.dentry);
+	if (!err)
+		d_drop(dentry);
+out:
+	path_put(&backing_path);
+	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;
+	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) {
+		/* Direct moves from .index 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);
+
+	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;
+
+	get_incfs_backing_path(file->f_path.dentry, &backing_path);
+	backing_file = dentry_open(
+		&backing_path, O_RDWR | O_NOATIME | O_LARGEFILE, mi->mi_owner);
+	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)) {
+		err = make_inode_ready_for_data_ops(mi, inode, backing_file);
+		file->private_data = (void *)CANT_FILL;
+	} 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("incfs: %s name:%s err: %d\n", __func__,
+			file->f_path.dentry->d_name.name, err);
+	if (backing_file)
+		fput(backing_file);
+	return err;
+}
+
+static int file_release(struct inode *inode, struct file *file)
+{
+	if (S_ISREG(inode->i_mode)) {
+		/* Do nothing.
+		 * data_file is released only by inode eviction.
+		 */
+	} 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;
+
+	if (di && di->backing_path.dentry)
+		return vfs_getxattr(di->backing_path.dentry, name, value, size);
+
+	if (strcmp(name, "security.selinux"))
+		return -ENODATA;
+
+	if (!strcmp(d->d_iname, INCFS_PENDING_READS_FILENAME)) {
+		stored_value = mi->pending_read_xattr;
+		stored_size = mi->pending_read_xattr_size;
+	} else if (!strcmp(d->d_iname, INCFS_LOG_FILENAME)) {
+		stored_value = mi->log_xattr;
+		stored_size = mi->log_xattr_size;
+	} else {
+		return -ENODATA;
+	}
+
+	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);
+	void **stored_value;
+	size_t *stored_size;
+
+	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;
+
+	if (!strcmp(d->d_iname, INCFS_PENDING_READS_FILENAME)) {
+		stored_value = &mi->pending_read_xattr;
+		stored_size = &mi->pending_read_xattr_size;
+	} else if (!strcmp(d->d_iname, INCFS_LOG_FILENAME)) {
+		stored_value = &mi->log_xattr;
+		stored_size = &mi->log_xattr_size;
+	} else {
+		return -ENODATA;
+	}
+
+	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)
+{
+	struct mount_options options = {};
+	struct mount_info *mi = NULL;
+	struct path backing_dir_path = {};
+	struct dentry *index_dir;
+	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_index_dir(backing_dir_path.dentry);
+	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);
+		goto err;
+	}
+	mi->mi_index_dir = index_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;
+
+	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");
+	incfs_free_mount_info(mi);
+	generic_shutdown_super(sb);
+}
+
+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.no_backing_file_cache)
+		seq_puts(m, ",no_bf_cache");
+	if (mi->mi_options.no_backing_file_readahead)
+		seq_puts(m, ",no_bf_readahead");
+	return 0;
+}
diff --git a/fs/incfs/vfs.h b/fs/incfs/vfs.h
new file mode 100644
index 0000000..eaa490e
--- /dev/null
+++ b/fs/incfs/vfs.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#ifndef _INCFS_VFS_H
+#define _INCFS_VFS_H
+
+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);
+
+#endif
diff --git a/fs/inode.c b/fs/inode.c
index c5267a4..64d502a 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>
@@ -1818,7 +1819,7 @@
 	return mask;
 }
 
-static int __remove_privs(struct dentry *dentry, int kill)
+static int __remove_privs(struct vfsmount *mnt, struct dentry *dentry, int kill)
 {
 	struct iattr newattrs;
 
@@ -1827,7 +1828,7 @@
 	 * Note we call this on write, so notify_change will not
 	 * encounter any conflicting delegations:
 	 */
-	return notify_change(dentry, &newattrs, NULL);
+	return notify_change2(mnt, dentry, &newattrs, NULL);
 }
 
 /*
@@ -1854,7 +1855,7 @@
 	if (kill < 0)
 		return kill;
 	if (kill)
-		error = __remove_privs(dentry, kill);
+		error = __remove_privs(file->f_path.mnt, dentry, kill);
 	if (!error)
 		inode_has_no_xattr(inode);
 
@@ -2253,7 +2254,7 @@
 	    !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/internal.h b/fs/internal.h
index 7651e8b..35eb6d1 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -62,8 +62,6 @@
 extern int filename_lookup(int dfd, struct filename *name, unsigned flags,
 			   struct path *path, struct path *root);
 extern int user_path_mountpoint_at(int, const char __user *, unsigned int, struct path *);
-extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
-			   const char *, unsigned int, struct path *);
 long do_mknodat(int dfd, const char __user *filename, umode_t mode,
 		unsigned int dev);
 long do_mkdirat(int dfd, const char __user *pathname, umode_t mode);
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 @@
 /* ---- 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_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_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 @@
 
 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 5fd9cc0..1d50444 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>
 
@@ -1293,3 +1295,128 @@
 	return (inode->i_fop == &empty_dir_operations) &&
 		(inode->i_op == &empty_dir_inode_operations);
 }
+
+#ifdef CONFIG_UNICODE
+bool needs_casefold(const struct inode *dir)
+{
+	return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding &&
+			(!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir));
+}
+EXPORT_SYMBOL(needs_casefold);
+
+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 *inode = READ_ONCE(parent->d_inode);
+	const struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct qstr entry = QSTR_INIT(str, len);
+	char strbuf[DNAME_INLINE_LEN];
+	int ret;
+
+	if (!inode || !needs_casefold(inode))
+		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();
+	}
+
+	ret = utf8_strncasecmp(um, name, &entry);
+	if (ret >= 0)
+		return ret;
+
+	if (sb_has_enc_strict_mode(sb))
+		return -EINVAL;
+fallback:
+	if (len != name->len)
+		return 1;
+	return !!memcmp(str, name->name, len);
+}
+EXPORT_SYMBOL(generic_ci_d_compare);
+
+int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
+{
+	const struct inode *inode = READ_ONCE(dentry->d_inode);
+	struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	int ret = 0;
+
+	if (!inode || !needs_casefold(inode))
+		return 0;
+
+	ret = utf8_casefold_hash(um, dentry, str);
+	if (ret < 0)
+		goto err;
+
+	return 0;
+err:
+	if (sb_has_enc_strict_mode(sb))
+		ret = -EINVAL;
+	else
+		ret = 0;
+	return ret;
+}
+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 IS_ENABLED(CONFIG_UNICODE) && IS_ENABLED(CONFIG_FS_ENCRYPTION)
+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
+ * @dir:	parent of dentry whose ops to set
+ * @dentry:	detnry to set ops on
+ *
+ * This function sets the dentry ops for the given dentry to handle both
+ * casefolding and encryption of the dentry name.
+ */
+void generic_set_encrypted_ci_d_ops(struct inode *dir, struct dentry *dentry)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	if (dentry->d_flags & DCACHE_ENCRYPTED_NAME) {
+#ifdef CONFIG_UNICODE
+		if (dir->i_sb->s_encoding) {
+			d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
+			return;
+		}
+#endif
+		d_set_d_op(dentry, &generic_encrypted_dentry_ops);
+		return;
+	}
+#endif
+#ifdef CONFIG_UNICODE
+	if (dir->i_sb->s_encoding) {
+		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 @@
 	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 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 5b5759d..d1332a3 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
@@ -377,9 +380,11 @@
  * flag in inode->i_opflags, that says "this has not special
  * permission function, use the fast case".
  */
-static inline int do_inode_permission(struct inode *inode, int mask)
+static inline int do_inode_permission(struct vfsmount *mnt, struct inode *inode, int mask)
 {
 	if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
+		if (likely(mnt && inode->i_op->permission2))
+			return inode->i_op->permission2(mnt, inode, mask);
 		if (likely(inode->i_op->permission))
 			return inode->i_op->permission(inode, mask);
 
@@ -412,7 +417,8 @@
 }
 
 /**
- * inode_permission - Check for access rights to a given inode
+ * inode_permission2 - Check for access rights to a given inode
+ * @mnt:
  * @inode: Inode to check permission on
  * @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
  *
@@ -422,7 +428,7 @@
  *
  * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
  */
-int inode_permission(struct inode *inode, int mask)
+int inode_permission2(struct vfsmount *mnt, struct inode *inode, int mask)
 {
 	int retval;
 
@@ -446,7 +452,7 @@
 			return -EACCES;
 	}
 
-	retval = do_inode_permission(inode, mask);
+	retval = do_inode_permission(mnt, inode, mask);
 	if (retval)
 		return retval;
 
@@ -454,7 +460,14 @@
 	if (retval)
 		return retval;
 
-	return security_inode_permission(inode, mask);
+	retval = security_inode_permission(inode, mask);
+	return retval;
+}
+EXPORT_SYMBOL_GPL(inode_permission2);
+
+int inode_permission(struct inode *inode, int mask)
+{
+	return inode_permission2(NULL, inode, mask);
 }
 EXPORT_SYMBOL(inode_permission);
 
@@ -760,6 +773,81 @@
 		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 +870,21 @@
 			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;
@@ -1686,13 +1780,13 @@
 static inline int may_lookup(struct nameidata *nd)
 {
 	if (nd->flags & LOOKUP_RCU) {
-		int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
+		int err = inode_permission2(nd->path.mnt, nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
 		if (err != -ECHILD)
 			return err;
 		if (unlazy_walk(nd))
 			return -ECHILD;
 	}
-	return inode_permission(nd->inode, MAY_EXEC);
+	return inode_permission2(nd->path.mnt, nd->inode, MAY_EXEC);
 }
 
 static inline int handle_dots(struct nameidata *nd, int type)
@@ -2446,8 +2540,8 @@
 }
 EXPORT_SYMBOL(vfs_path_lookup);
 
-static int lookup_one_len_common(const char *name, struct dentry *base,
-				 int len, struct qstr *this)
+static int lookup_one_len_common(const char *name, struct vfsmount *mnt,
+				 struct dentry *base, int len, struct qstr *this)
 {
 	this->name = name;
 	this->len = len;
@@ -2475,7 +2569,7 @@
 			return err;
 	}
 
-	return inode_permission(base->d_inode, MAY_EXEC);
+	return inode_permission2(mnt, base->d_inode, MAY_EXEC);
 }
 
 /**
@@ -2499,7 +2593,7 @@
 
 	WARN_ON_ONCE(!inode_is_locked(base->d_inode));
 
-	err = lookup_one_len_common(name, base, len, &this);
+	err = lookup_one_len_common(name, NULL, base, len, &this);
 	if (err)
 		return ERR_PTR(err);
 
@@ -2518,7 +2612,7 @@
  *
  * The caller must hold base->i_mutex.
  */
-struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
+struct dentry *lookup_one_len2(const char *name, struct vfsmount *mnt, struct dentry *base, int len)
 {
 	struct dentry *dentry;
 	struct qstr this;
@@ -2526,13 +2620,19 @@
 
 	WARN_ON_ONCE(!inode_is_locked(base->d_inode));
 
-	err = lookup_one_len_common(name, base, len, &this);
+	err = lookup_one_len_common(name, mnt, base, len, &this);
 	if (err)
 		return ERR_PTR(err);
 
 	dentry = lookup_dcache(&this, base, 0);
 	return dentry ? dentry : __lookup_slow(&this, base, 0);
 }
+EXPORT_SYMBOL_GPL(lookup_one_len2);
+
+struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
+{
+	return lookup_one_len2(name, NULL, base, len);
+}
 EXPORT_SYMBOL(lookup_one_len);
 
 /**
@@ -2554,7 +2654,7 @@
 	int err;
 	struct dentry *ret;
 
-	err = lookup_one_len_common(name, base, len, &this);
+	err = lookup_one_len_common(name, NULL, base, len, &this);
 	if (err)
 		return ERR_PTR(err);
 
@@ -2778,7 +2878,7 @@
  * 11. We don't allow removal of NFS sillyrenamed files; it's handled by
  *     nfs_async_unlink().
  */
-static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
+static int may_delete(struct vfsmount *mnt, struct inode *dir, struct dentry *victim, bool isdir)
 {
 	struct inode *inode = d_backing_inode(victim);
 	int error;
@@ -2795,7 +2895,7 @@
 
 	audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
 
-	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
+	error = inode_permission2(mnt, dir, MAY_WRITE | MAY_EXEC);
 	if (error)
 		return error;
 	if (IS_APPEND(dir))
@@ -2827,7 +2927,7 @@
  *  4. We should have write and exec permissions on dir
  *  5. We can't do it if dir is immutable (done in permission())
  */
-static inline int may_create(struct inode *dir, struct dentry *child)
+static inline int may_create(struct vfsmount *mnt, struct inode *dir, struct dentry *child)
 {
 	struct user_namespace *s_user_ns;
 	audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
@@ -2839,7 +2939,7 @@
 	if (!kuid_has_mapping(s_user_ns, current_fsuid()) ||
 	    !kgid_has_mapping(s_user_ns, current_fsgid()))
 		return -EOVERFLOW;
-	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
+	return inode_permission2(mnt, dir, MAY_WRITE | MAY_EXEC);
 }
 
 /*
@@ -2886,10 +2986,10 @@
 }
 EXPORT_SYMBOL(unlock_rename);
 
-int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
-		bool want_excl)
+int vfs_create2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry,
+		umode_t mode, bool want_excl)
 {
-	int error = may_create(dir, dentry);
+	int error = may_create(mnt, dir, dentry);
 	if (error)
 		return error;
 
@@ -2905,14 +3005,21 @@
 		fsnotify_create(dir, dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_create2);
+
+int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
+		bool want_excl)
+{
+	return vfs_create2(NULL, dir, dentry, mode, want_excl);
+}
 EXPORT_SYMBOL(vfs_create);
 
-int vfs_mkobj(struct dentry *dentry, umode_t mode,
+int vfs_mkobj2(struct vfsmount *mnt, struct dentry *dentry, umode_t mode,
 		int (*f)(struct dentry *, umode_t, void *),
 		void *arg)
 {
 	struct inode *dir = dentry->d_parent->d_inode;
-	int error = may_create(dir, dentry);
+	int error = may_create(mnt, dir, dentry);
 	if (error)
 		return error;
 
@@ -2926,6 +3033,15 @@
 		fsnotify_create(dir, dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_mkobj2);
+
+
+int vfs_mkobj(struct dentry *dentry, umode_t mode,
+		int (*f)(struct dentry *, umode_t, void *),
+		void *arg)
+{
+	return vfs_mkobj2(NULL, dentry, mode, f, arg);
+}
 EXPORT_SYMBOL(vfs_mkobj);
 
 bool may_open_dev(const struct path *path)
@@ -2937,6 +3053,7 @@
 static int may_open(const struct path *path, int acc_mode, int flag)
 {
 	struct dentry *dentry = path->dentry;
+	struct vfsmount *mnt = path->mnt;
 	struct inode *inode = dentry->d_inode;
 	int error;
 
@@ -2961,7 +3078,7 @@
 		break;
 	}
 
-	error = inode_permission(inode, MAY_OPEN | acc_mode);
+	error = inode_permission2(mnt, inode, MAY_OPEN | acc_mode);
 	if (error)
 		return error;
 
@@ -2996,7 +3113,7 @@
 	if (!error)
 		error = security_path_truncate(path);
 	if (!error) {
-		error = do_truncate(path->dentry, 0,
+		error = do_truncate2(path->mnt, path->dentry, 0,
 				    ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
 				    filp);
 	}
@@ -3023,7 +3140,7 @@
 	    !kgid_has_mapping(s_user_ns, current_fsgid()))
 		return -EOVERFLOW;
 
-	error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC);
+	error = inode_permission2(dir->mnt, dir->dentry->d_inode, MAY_WRITE | MAY_EXEC);
 	if (error)
 		return error;
 
@@ -3433,7 +3550,8 @@
 	int error;
 
 	/* we want directory to be writable */
-	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
+	error = inode_permission2(ERR_PTR(-EOPNOTSUPP), dir,
+					MAY_WRITE | MAY_EXEC);
 	if (error)
 		goto out_err;
 	error = -EOPNOTSUPP;
@@ -3688,9 +3806,9 @@
 }
 EXPORT_SYMBOL(user_path_create);
 
-int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
+int vfs_mknod2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
 {
-	int error = may_create(dir, dentry);
+	int error = may_create(mnt, dir, dentry);
 
 	if (error)
 		return error;
@@ -3714,6 +3832,12 @@
 		fsnotify_create(dir, dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_mknod2);
+
+int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
+{
+	return vfs_mknod2(NULL, dir, dentry, mode, dev);
+}
 EXPORT_SYMBOL(vfs_mknod);
 
 static int may_mknod(umode_t mode)
@@ -3756,12 +3880,12 @@
 		goto out;
 	switch (mode & S_IFMT) {
 		case 0: case S_IFREG:
-			error = vfs_create(path.dentry->d_inode,dentry,mode,true);
+			error = vfs_create2(path.mnt, path.dentry->d_inode,dentry,mode,true);
 			if (!error)
 				ima_post_path_mknod(dentry);
 			break;
 		case S_IFCHR: case S_IFBLK:
-			error = vfs_mknod(path.dentry->d_inode,dentry,mode,
+			error = vfs_mknod2(path.mnt, path.dentry->d_inode,dentry,mode,
 					new_decode_dev(dev));
 			break;
 		case S_IFIFO: case S_IFSOCK:
@@ -3788,9 +3912,9 @@
 	return do_mknodat(AT_FDCWD, filename, mode, dev);
 }
 
-int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
+int vfs_mkdir2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry, umode_t mode)
 {
-	int error = may_create(dir, dentry);
+	int error = may_create(mnt, dir, dentry);
 	unsigned max_links = dir->i_sb->s_max_links;
 
 	if (error)
@@ -3812,6 +3936,12 @@
 		fsnotify_mkdir(dir, dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_mkdir2);
+
+int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
+{
+	return vfs_mkdir2(NULL, dir, dentry, mode);
+}
 EXPORT_SYMBOL(vfs_mkdir);
 
 long do_mkdirat(int dfd, const char __user *pathname, umode_t mode)
@@ -3830,7 +3960,7 @@
 		mode &= ~current_umask();
 	error = security_path_mkdir(&path, dentry, mode);
 	if (!error)
-		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
+		error = vfs_mkdir2(path.mnt, path.dentry->d_inode, dentry, mode);
 	done_path_create(&path, dentry);
 	if (retry_estale(error, lookup_flags)) {
 		lookup_flags |= LOOKUP_REVAL;
@@ -3849,9 +3979,9 @@
 	return do_mkdirat(AT_FDCWD, pathname, mode);
 }
 
-int vfs_rmdir(struct inode *dir, struct dentry *dentry)
+int vfs_rmdir2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry)
 {
-	int error = may_delete(dir, dentry, 1);
+	int error = may_delete(mnt, dir, dentry, 1);
 
 	if (error)
 		return error;
@@ -3887,6 +4017,12 @@
 		d_delete(dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_rmdir2);
+
+int vfs_rmdir(struct inode *dir, struct dentry *dentry)
+{
+	return vfs_rmdir2(NULL, dir, dentry);
+}
 EXPORT_SYMBOL(vfs_rmdir);
 
 long do_rmdir(int dfd, const char __user *pathname)
@@ -3932,7 +4068,7 @@
 	error = security_path_rmdir(&path, dentry);
 	if (error)
 		goto exit3;
-	error = vfs_rmdir(path.dentry->d_inode, dentry);
+	error = vfs_rmdir2(path.mnt, path.dentry->d_inode, dentry);
 exit3:
 	dput(dentry);
 exit2:
@@ -3971,10 +4107,10 @@
  * be appropriate for callers that expect the underlying filesystem not
  * to be NFS exported.
  */
-int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
+int vfs_unlink2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
 {
 	struct inode *target = dentry->d_inode;
-	int error = may_delete(dir, dentry, 0);
+	int error = may_delete(mnt, dir, dentry, 0);
 
 	if (error)
 		return error;
@@ -4010,6 +4146,12 @@
 
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_unlink2);
+
+int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
+{
+	return vfs_unlink2(NULL, dir, dentry, delegated_inode);
+}
 EXPORT_SYMBOL(vfs_unlink);
 
 /*
@@ -4055,7 +4197,7 @@
 		error = security_path_unlink(&path, dentry);
 		if (error)
 			goto exit2;
-		error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode);
+		error = vfs_unlink2(path.mnt, path.dentry->d_inode, dentry, &delegated_inode);
 exit2:
 		dput(dentry);
 	}
@@ -4105,9 +4247,9 @@
 	return do_unlinkat(AT_FDCWD, getname(pathname));
 }
 
-int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
+int vfs_symlink2(struct vfsmount *mnt, struct inode *dir, struct dentry *dentry, const char *oldname)
 {
-	int error = may_create(dir, dentry);
+	int error = may_create(mnt, dir, dentry);
 
 	if (error)
 		return error;
@@ -4124,6 +4266,12 @@
 		fsnotify_create(dir, dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_symlink2);
+
+int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
+{
+	return vfs_symlink2(NULL, dir, dentry, oldname);
+}
 EXPORT_SYMBOL(vfs_symlink);
 
 long do_symlinkat(const char __user *oldname, int newdfd,
@@ -4146,7 +4294,7 @@
 
 	error = security_path_symlink(&path, dentry, from->name);
 	if (!error)
-		error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
+		error = vfs_symlink2(path.mnt, path.dentry->d_inode, dentry, from->name);
 	done_path_create(&path, dentry);
 	if (retry_estale(error, lookup_flags)) {
 		lookup_flags |= LOOKUP_REVAL;
@@ -4187,7 +4335,7 @@
  * be appropriate for callers that expect the underlying filesystem not
  * to be NFS exported.
  */
-int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
+int vfs_link2(struct vfsmount *mnt, struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
 {
 	struct inode *inode = old_dentry->d_inode;
 	unsigned max_links = dir->i_sb->s_max_links;
@@ -4196,7 +4344,7 @@
 	if (!inode)
 		return -ENOENT;
 
-	error = may_create(dir, new_dentry);
+	error = may_create(mnt, dir, new_dentry);
 	if (error)
 		return error;
 
@@ -4246,6 +4394,12 @@
 		fsnotify_link(dir, inode, new_dentry);
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_link2);
+
+int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
+{
+	return vfs_link2(NULL, old_dentry, dir, new_dentry, delegated_inode);
+}
 EXPORT_SYMBOL(vfs_link);
 
 /*
@@ -4301,7 +4455,7 @@
 	error = security_path_link(old_path.dentry, &new_path, new_dentry);
 	if (error)
 		goto out_dput;
-	error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
+	error = vfs_link2(old_path.mnt, old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
 out_dput:
 	done_path_create(&new_path, new_dentry);
 	if (delegated_inode) {
@@ -4383,7 +4537,8 @@
  *	   ->i_mutex on parents, which works but leads to some truly excessive
  *	   locking].
  */
-int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+int vfs_rename2(struct vfsmount *mnt,
+	       struct inode *old_dir, struct dentry *old_dentry,
 	       struct inode *new_dir, struct dentry *new_dentry,
 	       struct inode **delegated_inode, unsigned int flags)
 {
@@ -4398,19 +4553,19 @@
 	if (source == target)
 		return 0;
 
-	error = may_delete(old_dir, old_dentry, is_dir);
+	error = may_delete(mnt, old_dir, old_dentry, is_dir);
 	if (error)
 		return error;
 
 	if (!target) {
-		error = may_create(new_dir, new_dentry);
+		error = may_create(mnt, new_dir, new_dentry);
 	} else {
 		new_is_dir = d_is_dir(new_dentry);
 
 		if (!(flags & RENAME_EXCHANGE))
-			error = may_delete(new_dir, new_dentry, is_dir);
+			error = may_delete(mnt, new_dir, new_dentry, is_dir);
 		else
-			error = may_delete(new_dir, new_dentry, new_is_dir);
+			error = may_delete(mnt, new_dir, new_dentry, new_is_dir);
 	}
 	if (error)
 		return error;
@@ -4424,12 +4579,12 @@
 	 */
 	if (new_dir != old_dir) {
 		if (is_dir) {
-			error = inode_permission(source, MAY_WRITE);
+			error = inode_permission2(mnt, source, MAY_WRITE);
 			if (error)
 				return error;
 		}
 		if ((flags & RENAME_EXCHANGE) && new_is_dir) {
-			error = inode_permission(target, MAY_WRITE);
+			error = inode_permission2(mnt, target, MAY_WRITE);
 			if (error)
 				return error;
 		}
@@ -4506,6 +4661,14 @@
 
 	return error;
 }
+EXPORT_SYMBOL_GPL(vfs_rename2);
+
+int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+	       struct inode *new_dir, struct dentry *new_dentry,
+	       struct inode **delegated_inode, unsigned int flags)
+{
+	return vfs_rename2(NULL, old_dir, old_dentry, new_dir, new_dentry, delegated_inode, flags);
+}
 EXPORT_SYMBOL(vfs_rename);
 
 static int do_renameat2(int olddfd, const char __user *oldname, int newdfd,
@@ -4619,7 +4782,7 @@
 				     &new_path, new_dentry, flags);
 	if (error)
 		goto exit5;
-	error = vfs_rename(old_path.dentry->d_inode, old_dentry,
+	error = vfs_rename2(old_path.mnt, old_path.dentry->d_inode, old_dentry,
 			   new_path.dentry->d_inode, new_dentry,
 			   &delegated_inode, flags);
 exit5:
@@ -4670,7 +4833,7 @@
 
 int vfs_whiteout(struct inode *dir, struct dentry *dentry)
 {
-	int error = may_create(dir, dentry);
+	int error = may_create(NULL, dir, dentry);
 	if (error)
 		return error;
 
diff --git a/fs/namespace.c b/fs/namespace.c
index 2adfe7b..5dd3db9 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -198,6 +198,7 @@
 		mnt->mnt_count = 1;
 		mnt->mnt_writers = 0;
 #endif
+		mnt->mnt.data = NULL;
 
 		INIT_HLIST_NODE(&mnt->mnt_hash);
 		INIT_LIST_HEAD(&mnt->mnt_child);
@@ -547,6 +548,7 @@
 
 static void free_vfsmnt(struct mount *mnt)
 {
+	kfree(mnt->mnt.data);
 	kfree_const(mnt->mnt_devname);
 #ifdef CONFIG_SMP
 	free_percpu(mnt->mnt_pcp);
@@ -933,14 +935,26 @@
 struct vfsmount *vfs_create_mount(struct fs_context *fc)
 {
 	struct mount *mnt;
+	struct super_block *sb;
 
 	if (!fc->root)
 		return ERR_PTR(-EINVAL);
+	sb = fc->root->d_sb;
 
 	mnt = alloc_vfsmnt(fc->source ?: "none");
 	if (!mnt)
 		return ERR_PTR(-ENOMEM);
 
+	if (fc->fs_type->alloc_mnt_data) {
+		mnt->mnt.data = fc->fs_type->alloc_mnt_data();
+		if (!mnt->mnt.data) {
+			mnt_free_id(mnt);
+			free_vfsmnt(mnt);
+			return ERR_PTR(-ENOMEM);
+		}
+		if (sb->s_op->update_mnt_data)
+			sb->s_op->update_mnt_data(mnt->mnt.data, fc);
+	}
 	if (fc->sb_flags & SB_KERNMOUNT)
 		mnt->mnt.mnt_flags = MNT_INTERNAL;
 
@@ -1024,6 +1038,14 @@
 	if (!mnt)
 		return ERR_PTR(-ENOMEM);
 
+	if (sb->s_op->clone_mnt_data) {
+		mnt->mnt.data = sb->s_op->clone_mnt_data(old->mnt.data);
+		if (!mnt->mnt.data) {
+			err = -ENOMEM;
+			goto out_free;
+		}
+	}
+
 	if (flag & (CL_SLAVE | CL_PRIVATE | CL_SHARED_TO_SLAVE))
 		mnt->mnt_group_id = 0; /* not a peer of original */
 	else
@@ -2551,7 +2573,15 @@
 		err = -EPERM;
 		if (ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) {
 			err = reconfigure_super(fc);
-			if (!err)
+			if (!err && sb->s_op->update_mnt_data) {
+				sb->s_op->update_mnt_data(mnt->mnt.data, fc);
+				set_mount_attributes(mnt, mnt_flags);
+				namespace_lock();
+				lock_mount_hash();
+				propagate_remount(mnt);
+				unlock_mount_hash();
+				namespace_unlock();
+			} else if (!err)
 				set_mount_attributes(mnt, mnt_flags);
 		}
 		up_write(&sb->s_umount);
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index d0cb827..7e9dd88 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -7328,7 +7328,8 @@
 
 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);
 }
@@ -7353,7 +7354,8 @@
 
 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/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
index 8508ab5..2e667cb 100644
--- a/fs/notify/fanotify/fanotify_user.c
+++ b/fs/notify/fanotify/fanotify_user.c
@@ -567,7 +567,7 @@
 	}
 
 	/* you can only watch an inode if you have read permissions on it */
-	ret = inode_permission(path->dentry->d_inode, MAY_READ);
+	ret = inode_permission2(path->mnt, path->dentry->d_inode, MAY_READ);
 	if (ret) {
 		path_put(path);
 		goto out;
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index 81ffc86..68c06ad 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -341,7 +341,7 @@
 	if (error)
 		return error;
 	/* you can only watch an inode if you have read permissions on it */
-	error = inode_permission(path->dentry->d_inode, MAY_READ);
+	error = inode_permission2(path->mnt, path->dentry->d_inode, MAY_READ);
 	if (error) {
 		path_put(path);
 		return error;
@@ -701,6 +701,8 @@
 	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,22 @@
 	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 @@
  */
 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 @@
  */
 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 @@
  */
 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..457fac8 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -35,8 +35,8 @@
 
 #include "internal.h"
 
-int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
-	struct file *filp)
+int do_truncate2(struct vfsmount *mnt, struct dentry *dentry, loff_t length,
+		unsigned int time_attrs, struct file *filp)
 {
 	int ret;
 	struct iattr newattrs;
@@ -61,17 +61,24 @@
 
 	inode_lock(dentry->d_inode);
 	/* Note any delegations or leases have already been broken: */
-	ret = notify_change(dentry, &newattrs, NULL);
+	ret = notify_change2(mnt, dentry, &newattrs, NULL);
 	inode_unlock(dentry->d_inode);
 	return ret;
 }
+int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+	struct file *filp)
+{
+	return do_truncate2(NULL, dentry, length, time_attrs, filp);
+}
 
 long vfs_truncate(const struct path *path, loff_t length)
 {
 	struct inode *inode;
+	struct vfsmount *mnt;
 	long error;
 
 	inode = path->dentry->d_inode;
+	mnt = path->mnt;
 
 	/* For directories it's -EISDIR, for other non-regulars - -EINVAL */
 	if (S_ISDIR(inode->i_mode))
@@ -83,7 +90,7 @@
 	if (error)
 		goto out;
 
-	error = inode_permission(inode, MAY_WRITE);
+	error = inode_permission2(mnt, inode, MAY_WRITE);
 	if (error)
 		goto mnt_drop_write_and_out;
 
@@ -107,7 +114,7 @@
 	if (!error)
 		error = security_path_truncate(path);
 	if (!error)
-		error = do_truncate(path->dentry, length, 0, NULL);
+		error = do_truncate2(mnt, path->dentry, length, 0, NULL);
 
 put_write_and_out:
 	put_write_access(inode);
@@ -156,6 +163,7 @@
 {
 	struct inode *inode;
 	struct dentry *dentry;
+	struct vfsmount *mnt;
 	struct fd f;
 	int error;
 
@@ -172,6 +180,7 @@
 		small = 0;
 
 	dentry = f.file->f_path.dentry;
+	mnt = f.file->f_path.mnt;
 	inode = dentry->d_inode;
 	error = -EINVAL;
 	if (!S_ISREG(inode->i_mode) || !(f.file->f_mode & FMODE_WRITE))
@@ -192,7 +201,7 @@
 	if (!error)
 		error = security_path_truncate(&f.file->f_path);
 	if (!error)
-		error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, f.file);
+		error = do_truncate2(mnt, dentry, length, ATTR_MTIME|ATTR_CTIME, f.file);
 	sb_end_write(inode->i_sb);
 out_putf:
 	fdput(f);
@@ -351,6 +360,7 @@
 	struct cred *override_cred;
 	struct path path;
 	struct inode *inode;
+	struct vfsmount *mnt;
 	int res;
 	unsigned int lookup_flags = LOOKUP_FOLLOW;
 
@@ -400,6 +410,7 @@
 		goto out;
 
 	inode = d_backing_inode(path.dentry);
+	mnt = path.mnt;
 
 	if ((mode & MAY_EXEC) && S_ISREG(inode->i_mode)) {
 		/*
@@ -411,7 +422,7 @@
 			goto out_path_release;
 	}
 
-	res = inode_permission(inode, mode | MAY_ACCESS);
+	res = inode_permission2(mnt, inode, mode | MAY_ACCESS);
 	/* SuS v2 requires we report a read only fs too */
 	if (res || !(mode & S_IWOTH) || special_file(inode->i_mode))
 		goto out_path_release;
@@ -460,7 +471,7 @@
 	if (error)
 		goto out;
 
-	error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR);
+	error = inode_permission2(path.mnt, path.dentry->d_inode, MAY_EXEC | MAY_CHDIR);
 	if (error)
 		goto dput_and_out;
 
@@ -494,7 +505,8 @@
 	if (!d_can_lookup(f.file->f_path.dentry))
 		goto out_putf;
 
-	error = inode_permission(file_inode(f.file), MAY_EXEC | MAY_CHDIR);
+	error = inode_permission2(f.file->f_path.mnt, file_inode(f.file),
+				MAY_EXEC | MAY_CHDIR);
 	if (!error)
 		set_fs_pwd(current->fs, &f.file->f_path);
 out_putf:
@@ -513,7 +525,7 @@
 	if (error)
 		goto out;
 
-	error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR);
+	error = inode_permission2(path.mnt, path.dentry->d_inode, MAY_EXEC | MAY_CHDIR);
 	if (error)
 		goto dput_and_out;
 
@@ -558,7 +570,7 @@
 		goto out_unlock;
 	newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
 	newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-	error = notify_change(path->dentry, &newattrs, &delegated_inode);
+	error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode);
 out_unlock:
 	inode_unlock(inode);
 	if (delegated_inode) {
@@ -649,7 +661,7 @@
 	inode_lock(inode);
 	error = security_path_chown(path, uid, gid);
 	if (!error)
-		error = notify_change(path->dentry, &newattrs, &delegated_inode);
+		error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode);
 	inode_unlock(inode);
 	if (delegated_inode) {
 		error = break_deleg_wait(&delegated_inode);
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 @@
 				      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 ec5eca5..f84f374 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -886,7 +886,7 @@
 		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 29abdb1..abf622d 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -536,7 +536,7 @@
 			      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 @@
 		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 @@
 			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 @@
 
 	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 @@
 		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 @@
 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..1db50dd 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -35,7 +35,7 @@
 	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 +178,7 @@
 
 	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);
@@ -244,7 +244,7 @@
 	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);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	ovl_file_accessed(file);
 
@@ -280,7 +280,7 @@
 	ret = vfs_iter_write(real.file, iter, &iocb->ki_pos,
 			     ovl_iocb_to_rwf(iocb));
 	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 +307,7 @@
 	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 +331,7 @@
 
 	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 +359,7 @@
 
 	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 +381,7 @@
 
 	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 +401,7 @@
 
 	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 +591,7 @@
 						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 bb98072..be1e197 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -61,7 +61,7 @@
 		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 @@
 		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 @@
 		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 @@
 
 	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;
 }
 
@@ -357,7 +357,7 @@
 		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);
@@ -369,7 +369,7 @@
 }
 
 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;
@@ -377,8 +377,9 @@
 		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;
 }
 
@@ -403,7 +404,7 @@
 
 	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;
 
@@ -438,7 +439,7 @@
 
 	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;
 }
@@ -476,7 +477,7 @@
 		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 @@
 
 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 @@
 	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 @@
 	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 @@
 			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 @@
 	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 @@
 			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 @@
 	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_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 @@
 	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 @@
 		}
 		inode_unlock(dir->d_inode);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(rdd->dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -924,7 +924,7 @@
 
 	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 d6b724b..5af77c2 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -53,6 +53,11 @@
 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;
@@ -363,6 +368,9 @@
 	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;
 }
 
@@ -403,6 +411,8 @@
 	OPT_XINO_AUTO,
 	OPT_METACOPY_ON,
 	OPT_METACOPY_OFF,
+	OPT_OVERRIDE_CREDS_ON,
+	OPT_OVERRIDE_CREDS_OFF,
 	OPT_ERR,
 };
 
@@ -421,6 +431,8 @@
 	{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}
 };
 
@@ -479,6 +491,7 @@
 	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;
@@ -559,6 +572,14 @@
 			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;
@@ -855,9 +876,9 @@
 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
@@ -920,7 +941,8 @@
 
 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;
 }
@@ -935,9 +957,10 @@
 
 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,
@@ -1724,7 +1747,6 @@
 		       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 @@
 {
 	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 @@
 
 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_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 @@
 	 * 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 @@
 
 		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 @@
 /* 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 @@
 
 	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 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 @@
 		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/pnode.c b/fs/pnode.c
index 1106137..f6cf374 100644
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -600,3 +600,19 @@
 
 	return 0;
 }
+
+void propagate_remount(struct mount *mnt)
+{
+	struct mount *parent = mnt->mnt_parent;
+	struct mount *p = mnt, *m;
+	struct super_block *sb = mnt->mnt.mnt_sb;
+
+	if (!sb->s_op->copy_mnt_data)
+		return;
+	for (p = propagation_next(parent, parent); p;
+				p = propagation_next(p, parent)) {
+		m = __lookup_mnt(&p->mnt, mnt->mnt_mountpoint);
+		if (m)
+			sb->s_op->copy_mnt_data(m->mnt.data, mnt->mnt.data);
+	}
+}
diff --git a/fs/pnode.h b/fs/pnode.h
index 49a058c..a95e519 100644
--- a/fs/pnode.h
+++ b/fs/pnode.h
@@ -42,6 +42,7 @@
 int propagate_umount(struct list_head *);
 int propagate_mount_busy(struct mount *, int);
 void propagate_mount_unlock(struct mount *);
+void propagate_remount(struct mount *);
 void mnt_release_group_id(struct mount *);
 int get_dominating_id(struct mount *mnt, const struct path *root);
 unsigned int mnt_get_count(struct mount *mnt);
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 @@
 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/base.c b/fs/proc/base.c
index ebea950..7d13501 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"
@@ -3091,6 +3092,9 @@
 #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
@@ -3487,6 +3491,9 @@
 #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/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 @@
 	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 @@
 	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 @@
 	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 @@
 
 	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 @@
 {
 	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 9442631..1ce1cb0 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -123,6 +123,56 @@
 }
 #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 @@
 			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 @@
 	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/proc_namespace.c b/fs/proc_namespace.c
index 273ee82..5b8d065 100644
--- a/fs/proc_namespace.c
+++ b/fs/proc_namespace.c
@@ -121,7 +121,9 @@
 	if (err)
 		goto out;
 	show_mnt_opts(m, mnt);
-	if (sb->s_op->show_options)
+	if (sb->s_op->show_options2)
+		err = sb->s_op->show_options2(mnt, m, mnt_path.dentry);
+	else if (sb->s_op->show_options)
 		err = sb->s_op->show_options(m, mnt_path.dentry);
 	seq_puts(m, " 0 0\n");
 out:
@@ -183,7 +185,9 @@
 	err = show_sb_opts(m, sb);
 	if (err)
 		goto out;
-	if (sb->s_op->show_options)
+	if (sb->s_op->show_options2) {
+		err = sb->s_op->show_options2(mnt, m, mnt->mnt_root);
+	} else if (sb->s_op->show_options)
 		err = sb->s_op->show_options(m, mnt->mnt_root);
 	seq_putc(m, '\n');
 out:
diff --git a/fs/read_write.c b/fs/read_write.c
index 7458fcc..d7baa83 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -469,6 +469,8 @@
 	return ret;
 }
 
+EXPORT_SYMBOL_GPL(vfs_read);
+
 static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
 {
 	struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
@@ -566,6 +568,7 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(vfs_write);
 
 /* file_ppos returns &file->f_pos or NULL if file is stream */
 static inline loff_t *file_ppos(struct file *file)
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/sdcardfs/Kconfig b/fs/sdcardfs/Kconfig
new file mode 100644
index 0000000..a1c1033
--- /dev/null
+++ b/fs/sdcardfs/Kconfig
@@ -0,0 +1,13 @@
+config SDCARD_FS
+	tristate "sdcard file system"
+	depends on CONFIGFS_FS
+	default n
+	help
+	  Sdcardfs is based on Wrapfs file system.
+
+config SDCARD_FS_FADV_NOACTIVE
+	bool "sdcardfs fadvise noactive support"
+	depends on FADV_NOACTIVE
+	default y
+	help
+	  Sdcardfs supports fadvise noactive mode.
diff --git a/fs/sdcardfs/Makefile b/fs/sdcardfs/Makefile
new file mode 100644
index 0000000..b84fbb2
--- /dev/null
+++ b/fs/sdcardfs/Makefile
@@ -0,0 +1,7 @@
+SDCARDFS_VERSION="0.1"
+
+EXTRA_CFLAGS += -DSDCARDFS_VERSION=\"$(SDCARDFS_VERSION)\"
+
+obj-$(CONFIG_SDCARD_FS) += sdcardfs.o
+
+sdcardfs-y := dentry.o file.o inode.o main.o super.o lookup.o mmap.o packagelist.o derived_perm.o
diff --git a/fs/sdcardfs/dentry.c b/fs/sdcardfs/dentry.c
new file mode 100644
index 0000000..cb573f1
--- /dev/null
+++ b/fs/sdcardfs/dentry.c
@@ -0,0 +1,196 @@
+/*
+ * fs/sdcardfs/dentry.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#include "linux/ctype.h"
+
+/*
+ * returns: -ERRNO if error (returned to user)
+ *          0: tell VFS to invalidate dentry
+ *          1: dentry is valid
+ */
+static int sdcardfs_d_revalidate(struct dentry *dentry, unsigned int flags)
+{
+	int err = 1;
+	struct path parent_lower_path, lower_path;
+	struct dentry *parent_dentry = NULL;
+	struct dentry *parent_lower_dentry = NULL;
+	struct dentry *lower_cur_parent_dentry = NULL;
+	struct dentry *lower_dentry = NULL;
+	struct inode *inode;
+	struct sdcardfs_inode_data *data;
+
+	if (flags & LOOKUP_RCU)
+		return -ECHILD;
+
+	spin_lock(&dentry->d_lock);
+	if (IS_ROOT(dentry)) {
+		spin_unlock(&dentry->d_lock);
+		return 1;
+	}
+	spin_unlock(&dentry->d_lock);
+
+	/* check uninitialized obb_dentry and
+	 * whether the base obbpath has been changed or not
+	 */
+	if (is_obbpath_invalid(dentry)) {
+		return 0;
+	}
+
+	parent_dentry = dget_parent(dentry);
+	sdcardfs_get_lower_path(parent_dentry, &parent_lower_path);
+	sdcardfs_get_real_lower(dentry, &lower_path);
+	parent_lower_dentry = parent_lower_path.dentry;
+	lower_dentry = lower_path.dentry;
+	lower_cur_parent_dentry = dget_parent(lower_dentry);
+
+	if ((lower_dentry->d_flags & DCACHE_OP_REVALIDATE)) {
+		err = lower_dentry->d_op->d_revalidate(lower_dentry, flags);
+		if (err == 0) {
+			goto out;
+		}
+	}
+
+	spin_lock(&lower_dentry->d_lock);
+	if (d_unhashed(lower_dentry)) {
+		spin_unlock(&lower_dentry->d_lock);
+		err = 0;
+		goto out;
+	}
+	spin_unlock(&lower_dentry->d_lock);
+
+	if (parent_lower_dentry != lower_cur_parent_dentry) {
+		err = 0;
+		goto out;
+	}
+
+	if (dentry < lower_dentry) {
+		spin_lock(&dentry->d_lock);
+		spin_lock_nested(&lower_dentry->d_lock, DENTRY_D_LOCK_NESTED);
+	} else {
+		spin_lock(&lower_dentry->d_lock);
+		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+	}
+
+	if (!qstr_case_eq(&dentry->d_name, &lower_dentry->d_name)) {
+		err = 0;
+	}
+
+	if (dentry < lower_dentry) {
+		spin_unlock(&lower_dentry->d_lock);
+		spin_unlock(&dentry->d_lock);
+	} else {
+		spin_unlock(&dentry->d_lock);
+		spin_unlock(&lower_dentry->d_lock);
+	}
+	if (!err)
+		goto out;
+
+	/* If our top's inode is gone, we may be out of date */
+	inode = igrab(d_inode(dentry));
+	if (inode) {
+		data = top_data_get(SDCARDFS_I(inode));
+		if (!data || data->abandoned) {
+			err = 0;
+		}
+		if (data)
+			data_put(data);
+		iput(inode);
+	}
+
+out:
+	dput(parent_dentry);
+	dput(lower_cur_parent_dentry);
+	sdcardfs_put_lower_path(parent_dentry, &parent_lower_path);
+	sdcardfs_put_real_lower(dentry, &lower_path);
+	return err;
+}
+
+/* 1 = delete, 0 = cache */
+static int sdcardfs_d_delete(const struct dentry *d)
+{
+	return SDCARDFS_SB(d->d_sb)->options.nocache ? 1 : 0;
+}
+
+static void sdcardfs_d_release(struct dentry *dentry)
+{
+	if (!dentry || !dentry->d_fsdata)
+		return;
+	/* release and reset the lower paths */
+	if (has_graft_path(dentry))
+		sdcardfs_put_reset_orig_path(dentry);
+	sdcardfs_put_reset_lower_path(dentry);
+	free_dentry_private_data(dentry);
+}
+
+static int sdcardfs_hash_ci(const struct dentry *dentry,
+				struct qstr *qstr)
+{
+	/*
+	 * This function is copy of vfat_hashi.
+	 * FIXME Should we support national language?
+	 *       Refer to vfat_hashi()
+	 * struct nls_table *t = MSDOS_SB(dentry->d_sb)->nls_io;
+	 */
+	const unsigned char *name;
+	unsigned int len;
+	unsigned long hash;
+
+	name = qstr->name;
+	len = qstr->len;
+
+	hash = init_name_hash(dentry);
+	while (len--)
+		hash = partial_name_hash(tolower(*name++), hash);
+	qstr->hash = end_name_hash(hash);
+
+	return 0;
+}
+
+/*
+ * Case insensitive compare of two vfat names.
+ */
+static int sdcardfs_cmp_ci(const struct dentry *dentry,
+		unsigned int len, const char *str, const struct qstr *name)
+{
+	/* FIXME Should we support national language? */
+
+	if (name->len == len) {
+		if (str_n_case_eq(name->name, str, len))
+			return 0;
+	}
+	return 1;
+}
+
+static void sdcardfs_canonical_path(const struct path *path,
+				struct path *actual_path)
+{
+	sdcardfs_get_real_lower(path->dentry, actual_path);
+}
+
+const struct dentry_operations sdcardfs_ci_dops = {
+	.d_revalidate	= sdcardfs_d_revalidate,
+	.d_delete	= sdcardfs_d_delete,
+	.d_release	= sdcardfs_d_release,
+	.d_hash	= sdcardfs_hash_ci,
+	.d_compare	= sdcardfs_cmp_ci,
+	.d_canonical_path = sdcardfs_canonical_path,
+};
+
diff --git a/fs/sdcardfs/derived_perm.c b/fs/sdcardfs/derived_perm.c
new file mode 100644
index 0000000..78a669c
--- /dev/null
+++ b/fs/sdcardfs/derived_perm.c
@@ -0,0 +1,477 @@
+/*
+ * fs/sdcardfs/derived_perm.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+
+/* copy derived state from parent inode */
+static void inherit_derived_state(struct inode *parent, struct inode *child)
+{
+	struct sdcardfs_inode_info *pi = SDCARDFS_I(parent);
+	struct sdcardfs_inode_info *ci = SDCARDFS_I(child);
+
+	ci->data->perm = PERM_INHERIT;
+	ci->data->userid = pi->data->userid;
+	ci->data->d_uid = pi->data->d_uid;
+	ci->data->under_android = pi->data->under_android;
+	ci->data->under_cache = pi->data->under_cache;
+	ci->data->under_obb = pi->data->under_obb;
+}
+
+/* helper function for derived state */
+void setup_derived_state(struct inode *inode, perm_t perm, userid_t userid,
+					uid_t uid)
+{
+	struct sdcardfs_inode_info *info = SDCARDFS_I(inode);
+
+	info->data->perm = perm;
+	info->data->userid = userid;
+	info->data->d_uid = uid;
+	info->data->under_android = false;
+	info->data->under_cache = false;
+	info->data->under_obb = false;
+}
+
+/* While renaming, there is a point where we want the path from dentry,
+ * but the name from newdentry
+ */
+void get_derived_permission_new(struct dentry *parent, struct dentry *dentry,
+				const struct qstr *name)
+{
+	struct sdcardfs_inode_info *info = SDCARDFS_I(d_inode(dentry));
+	struct sdcardfs_inode_info *parent_info = SDCARDFS_I(d_inode(parent));
+	struct sdcardfs_inode_data *parent_data = parent_info->data;
+	appid_t appid;
+	unsigned long user_num;
+	int err;
+	struct qstr q_Android = QSTR_LITERAL("Android");
+	struct qstr q_data = QSTR_LITERAL("data");
+	struct qstr q_sandbox = QSTR_LITERAL("sandbox");
+	struct qstr q_obb = QSTR_LITERAL("obb");
+	struct qstr q_media = QSTR_LITERAL("media");
+	struct qstr q_cache = QSTR_LITERAL("cache");
+
+	/* By default, each inode inherits from its parent.
+	 * the properties are maintained on its private fields
+	 * because the inode attributes will be modified with that of
+	 * its lower inode.
+	 * These values are used by our custom permission call instead
+	 * of using the inode permissions.
+	 */
+
+	inherit_derived_state(d_inode(parent), d_inode(dentry));
+
+	/* Files don't get special labels */
+	if (!S_ISDIR(d_inode(dentry)->i_mode)) {
+		set_top(info, parent_info);
+		return;
+	}
+	/* Derive custom permissions based on parent and current node */
+	switch (parent_data->perm) {
+	case PERM_INHERIT:
+	case PERM_ANDROID_PACKAGE_CACHE:
+		set_top(info, parent_info);
+		break;
+	case PERM_PRE_ROOT:
+		/* Legacy internal layout places users at top level */
+		info->data->perm = PERM_ROOT;
+		err = kstrtoul(name->name, 10, &user_num);
+		if (err)
+			info->data->userid = 0;
+		else
+			info->data->userid = user_num;
+		break;
+	case PERM_ROOT:
+		/* Assume masked off by default. */
+		if (qstr_case_eq(name, &q_Android)) {
+			/* App-specific directories inside; let anyone traverse */
+			info->data->perm = PERM_ANDROID;
+			info->data->under_android = true;
+		} else {
+			set_top(info, parent_info);
+		}
+		break;
+	case PERM_ANDROID:
+		if (qstr_case_eq(name, &q_data)) {
+			/* App-specific directories inside; let anyone traverse */
+			info->data->perm = PERM_ANDROID_DATA;
+		} else if (qstr_case_eq(name, &q_sandbox)) {
+			/* App-specific directories inside; let anyone traverse */
+			info->data->perm = PERM_ANDROID_DATA;
+		} else if (qstr_case_eq(name, &q_obb)) {
+			/* App-specific directories inside; let anyone traverse */
+			info->data->perm = PERM_ANDROID_OBB;
+			info->data->under_obb = true;
+			/* Single OBB directory is always shared */
+		} else if (qstr_case_eq(name, &q_media)) {
+			/* App-specific directories inside; let anyone traverse */
+			info->data->perm = PERM_ANDROID_MEDIA;
+		} else {
+			set_top(info, parent_info);
+		}
+		break;
+	case PERM_ANDROID_OBB:
+	case PERM_ANDROID_DATA:
+	case PERM_ANDROID_MEDIA:
+		info->data->perm = PERM_ANDROID_PACKAGE;
+		appid = get_appid(name->name);
+		if (appid != 0 && !is_excluded(name->name, parent_data->userid))
+			info->data->d_uid =
+				multiuser_get_uid(parent_data->userid, appid);
+		break;
+	case PERM_ANDROID_PACKAGE:
+		if (qstr_case_eq(name, &q_cache)) {
+			info->data->perm = PERM_ANDROID_PACKAGE_CACHE;
+			info->data->under_cache = true;
+		}
+		set_top(info, parent_info);
+		break;
+	}
+}
+
+void get_derived_permission(struct dentry *parent, struct dentry *dentry)
+{
+	get_derived_permission_new(parent, dentry, &dentry->d_name);
+}
+
+static appid_t get_type(const char *name)
+{
+	const char *ext = strrchr(name, '.');
+	appid_t id;
+
+	if (ext && ext[0]) {
+		ext = &ext[1];
+		id = get_ext_gid(ext);
+		return id?:AID_MEDIA_RW;
+	}
+	return AID_MEDIA_RW;
+}
+
+void fixup_lower_ownership(struct dentry *dentry, const char *name)
+{
+	struct path path;
+	struct inode *inode;
+	struct inode *delegated_inode = NULL;
+	int error;
+	struct sdcardfs_inode_info *info;
+	struct sdcardfs_inode_data *info_d;
+	struct sdcardfs_inode_data *info_top;
+	perm_t perm;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	uid_t uid = sbi->options.fs_low_uid;
+	gid_t gid = sbi->options.fs_low_gid;
+	struct iattr newattrs;
+
+	if (!sbi->options.gid_derivation)
+		return;
+
+	info = SDCARDFS_I(d_inode(dentry));
+	info_d = info->data;
+	perm = info_d->perm;
+	if (info_d->under_obb) {
+		perm = PERM_ANDROID_OBB;
+	} else if (info_d->under_cache) {
+		perm = PERM_ANDROID_PACKAGE_CACHE;
+	} else if (perm == PERM_INHERIT) {
+		info_top = top_data_get(info);
+		perm = info_top->perm;
+		data_put(info_top);
+	}
+
+	switch (perm) {
+	case PERM_ROOT:
+	case PERM_ANDROID:
+	case PERM_ANDROID_DATA:
+	case PERM_ANDROID_MEDIA:
+	case PERM_ANDROID_PACKAGE:
+	case PERM_ANDROID_PACKAGE_CACHE:
+		uid = multiuser_get_uid(info_d->userid, uid);
+		break;
+	case PERM_ANDROID_OBB:
+		uid = AID_MEDIA_OBB;
+		break;
+	case PERM_PRE_ROOT:
+	default:
+		break;
+	}
+	switch (perm) {
+	case PERM_ROOT:
+	case PERM_ANDROID:
+	case PERM_ANDROID_DATA:
+	case PERM_ANDROID_MEDIA:
+		if (S_ISDIR(d_inode(dentry)->i_mode))
+			gid = multiuser_get_uid(info_d->userid, AID_MEDIA_RW);
+		else
+			gid = multiuser_get_uid(info_d->userid, get_type(name));
+		break;
+	case PERM_ANDROID_OBB:
+		gid = AID_MEDIA_OBB;
+		break;
+	case PERM_ANDROID_PACKAGE:
+		if (uid_is_app(info_d->d_uid))
+			gid = multiuser_get_ext_gid(info_d->d_uid);
+		else
+			gid = multiuser_get_uid(info_d->userid, AID_MEDIA_RW);
+		break;
+	case PERM_ANDROID_PACKAGE_CACHE:
+		if (uid_is_app(info_d->d_uid))
+			gid = multiuser_get_ext_cache_gid(info_d->d_uid);
+		else
+			gid = multiuser_get_uid(info_d->userid, AID_MEDIA_RW);
+		break;
+	case PERM_PRE_ROOT:
+	default:
+		break;
+	}
+
+	sdcardfs_get_lower_path(dentry, &path);
+	inode = d_inode(path.dentry);
+	if (d_inode(path.dentry)->i_gid.val != gid || d_inode(path.dentry)->i_uid.val != uid) {
+retry_deleg:
+		newattrs.ia_valid = ATTR_GID | ATTR_UID | ATTR_FORCE;
+		newattrs.ia_uid = make_kuid(current_user_ns(), uid);
+		newattrs.ia_gid = make_kgid(current_user_ns(), gid);
+		if (!S_ISDIR(inode->i_mode))
+			newattrs.ia_valid |=
+				ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV;
+		inode_lock(inode);
+		error = security_path_chown(&path, newattrs.ia_uid, newattrs.ia_gid);
+		if (!error)
+			error = notify_change2(path.mnt, path.dentry, &newattrs, &delegated_inode);
+		inode_unlock(inode);
+		if (delegated_inode) {
+			error = break_deleg_wait(&delegated_inode);
+			if (!error)
+				goto retry_deleg;
+		}
+		if (error)
+			pr_debug("sdcardfs: Failed to touch up lower fs gid/uid for %s\n", name);
+	}
+	sdcardfs_put_lower_path(dentry, &path);
+}
+
+static int descendant_may_need_fixup(struct sdcardfs_inode_data *data,
+		struct limit_search *limit)
+{
+	if (data->perm == PERM_ROOT)
+		return (limit->flags & BY_USERID) ?
+				data->userid == limit->userid : 1;
+	if (data->perm == PERM_PRE_ROOT || data->perm == PERM_ANDROID)
+		return 1;
+	return 0;
+}
+
+static int needs_fixup(perm_t perm)
+{
+	if (perm == PERM_ANDROID_DATA || perm == PERM_ANDROID_OBB
+			|| perm == PERM_ANDROID_MEDIA)
+		return 1;
+	return 0;
+}
+
+static void __fixup_perms_recursive(struct dentry *dentry, struct limit_search *limit, int depth)
+{
+	struct dentry *child;
+	struct sdcardfs_inode_info *info;
+
+	/*
+	 * All paths will terminate their recursion on hitting PERM_ANDROID_OBB,
+	 * PERM_ANDROID_MEDIA, or PERM_ANDROID_DATA. This happens at a depth of
+	 * at most 3.
+	 */
+	WARN(depth > 3, "%s: Max expected depth exceeded!\n", __func__);
+	spin_lock_nested(&dentry->d_lock, depth);
+	if (!d_inode(dentry)) {
+		spin_unlock(&dentry->d_lock);
+		return;
+	}
+	info = SDCARDFS_I(d_inode(dentry));
+
+	if (needs_fixup(info->data->perm)) {
+		list_for_each_entry(child, &dentry->d_subdirs, d_child) {
+			spin_lock_nested(&child->d_lock, depth + 1);
+			if (!(limit->flags & BY_NAME) || qstr_case_eq(&child->d_name, &limit->name)) {
+				if (d_inode(child)) {
+					get_derived_permission(dentry, child);
+					fixup_tmp_permissions(d_inode(child));
+					spin_unlock(&child->d_lock);
+					break;
+				}
+			}
+			spin_unlock(&child->d_lock);
+		}
+	} else if (descendant_may_need_fixup(info->data, limit)) {
+		list_for_each_entry(child, &dentry->d_subdirs, d_child) {
+			__fixup_perms_recursive(child, limit, depth + 1);
+		}
+	}
+	spin_unlock(&dentry->d_lock);
+}
+
+void fixup_perms_recursive(struct dentry *dentry, struct limit_search *limit)
+{
+	__fixup_perms_recursive(dentry, limit, 0);
+}
+
+/* main function for updating derived permission */
+inline void update_derived_permission_lock(struct dentry *dentry)
+{
+	struct dentry *parent;
+
+	if (!dentry || !d_inode(dentry)) {
+		pr_err("sdcardfs: %s: invalid dentry\n", __func__);
+		return;
+	}
+	/* FIXME:
+	 * 1. need to check whether the dentry is updated or not
+	 * 2. remove the root dentry update
+	 */
+	if (!IS_ROOT(dentry)) {
+		parent = dget_parent(dentry);
+		if (parent) {
+			get_derived_permission(parent, dentry);
+			dput(parent);
+		}
+	}
+	fixup_tmp_permissions(d_inode(dentry));
+}
+
+int need_graft_path(struct dentry *dentry)
+{
+	int ret = 0;
+	struct dentry *parent = dget_parent(dentry);
+	struct sdcardfs_inode_info *parent_info = SDCARDFS_I(d_inode(parent));
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	struct qstr obb = QSTR_LITERAL("obb");
+
+	if (!sbi->options.unshared_obb &&
+			parent_info->data->perm == PERM_ANDROID &&
+			qstr_case_eq(&dentry->d_name, &obb)) {
+
+		/* /Android/obb is the base obbpath of DERIVED_UNIFIED */
+		if (!(sbi->options.multiuser == false
+				&& parent_info->data->userid == 0)) {
+			ret = 1;
+		}
+	}
+	dput(parent);
+	return ret;
+}
+
+int is_obbpath_invalid(struct dentry *dent)
+{
+	int ret = 0;
+	struct sdcardfs_dentry_info *di = SDCARDFS_D(dent);
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dent->d_sb);
+	char *path_buf, *obbpath_s;
+	int need_put = 0;
+	struct path lower_path;
+
+	/* check the base obbpath has been changed.
+	 * this routine can check an uninitialized obb dentry as well.
+	 * regarding the uninitialized obb, refer to the sdcardfs_mkdir()
+	 */
+	spin_lock(&di->lock);
+	if (di->orig_path.dentry) {
+		if (!di->lower_path.dentry) {
+			ret = 1;
+		} else {
+			path_get(&di->lower_path);
+
+			path_buf = kmalloc(PATH_MAX, GFP_ATOMIC);
+			if (!path_buf) {
+				ret = 1;
+				pr_err("sdcardfs: fail to allocate path_buf in %s.\n", __func__);
+			} else {
+				obbpath_s = d_path(&di->lower_path, path_buf, PATH_MAX);
+				if (d_unhashed(di->lower_path.dentry) ||
+					!str_case_eq(sbi->obbpath_s, obbpath_s)) {
+					ret = 1;
+				}
+				kfree(path_buf);
+			}
+
+			pathcpy(&lower_path, &di->lower_path);
+			need_put = 1;
+		}
+	}
+	spin_unlock(&di->lock);
+	if (need_put)
+		path_put(&lower_path);
+	return ret;
+}
+
+int is_base_obbpath(struct dentry *dentry)
+{
+	int ret = 0;
+	struct dentry *parent = dget_parent(dentry);
+	struct sdcardfs_inode_info *parent_info = SDCARDFS_I(d_inode(parent));
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	struct qstr q_obb = QSTR_LITERAL("obb");
+
+	spin_lock(&SDCARDFS_D(dentry)->lock);
+	if (sbi->options.multiuser) {
+		if (parent_info->data->perm == PERM_PRE_ROOT &&
+				qstr_case_eq(&dentry->d_name, &q_obb)) {
+			ret = 1;
+		}
+	} else  if (parent_info->data->perm == PERM_ANDROID &&
+			qstr_case_eq(&dentry->d_name, &q_obb)) {
+		ret = 1;
+	}
+	spin_unlock(&SDCARDFS_D(dentry)->lock);
+	return ret;
+}
+
+/* The lower_path will be stored to the dentry's orig_path
+ * and the base obbpath will be copyed to the lower_path variable.
+ * if an error returned, there's no change in the lower_path
+ * returns: -ERRNO if error (0: no error)
+ */
+int setup_obb_dentry(struct dentry *dentry, struct path *lower_path)
+{
+	int err = 0;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	struct path obbpath;
+
+	/* A local obb dentry must have its own orig_path to support rmdir
+	 * and mkdir of itself. Usually, we expect that the sbi->obbpath
+	 * is avaiable on this stage.
+	 */
+	sdcardfs_set_orig_path(dentry, lower_path);
+
+	err = kern_path(sbi->obbpath_s,
+			LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &obbpath);
+
+	if (!err) {
+		/* the obbpath base has been found */
+		pathcpy(lower_path, &obbpath);
+	} else {
+		/* if the sbi->obbpath is not available, we can optionally
+		 * setup the lower_path with its orig_path.
+		 * but, the current implementation just returns an error
+		 * because the sdcard daemon also regards this case as
+		 * a lookup fail.
+		 */
+		pr_info("sdcardfs: the sbi->obbpath is not available\n");
+	}
+	return err;
+}
+
+
diff --git a/fs/sdcardfs/file.c b/fs/sdcardfs/file.c
new file mode 100644
index 0000000..271c4c4
--- /dev/null
+++ b/fs/sdcardfs/file.c
@@ -0,0 +1,467 @@
+/*
+ * fs/sdcardfs/file.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#ifdef CONFIG_SDCARD_FS_FADV_NOACTIVE
+#include <linux/backing-dev.h>
+#endif
+
+static ssize_t sdcardfs_read(struct file *file, char __user *buf,
+			   size_t count, loff_t *ppos)
+{
+	int err;
+	struct file *lower_file;
+	struct dentry *dentry = file->f_path.dentry;
+#ifdef CONFIG_SDCARD_FS_FADV_NOACTIVE
+	struct backing_dev_info *bdi;
+#endif
+
+	lower_file = sdcardfs_lower_file(file);
+
+#ifdef CONFIG_SDCARD_FS_FADV_NOACTIVE
+	if (file->f_mode & FMODE_NOACTIVE) {
+		if (!(lower_file->f_mode & FMODE_NOACTIVE)) {
+			bdi = lower_file->f_mapping->backing_dev_info;
+			lower_file->f_ra.ra_pages = bdi->ra_pages * 2;
+			spin_lock(&lower_file->f_lock);
+			lower_file->f_mode |= FMODE_NOACTIVE;
+			spin_unlock(&lower_file->f_lock);
+		}
+	}
+#endif
+
+	err = vfs_read(lower_file, buf, count, ppos);
+	/* update our inode atime upon a successful lower read */
+	if (err >= 0)
+		fsstack_copy_attr_atime(d_inode(dentry),
+					file_inode(lower_file));
+
+	return err;
+}
+
+static ssize_t sdcardfs_write(struct file *file, const char __user *buf,
+			    size_t count, loff_t *ppos)
+{
+	int err;
+	struct file *lower_file;
+	struct dentry *dentry = file->f_path.dentry;
+	struct inode *inode = d_inode(dentry);
+
+	/* check disk space */
+	if (!check_min_free_space(dentry, count, 0)) {
+		pr_err("No minimum free space.\n");
+		return -ENOSPC;
+	}
+
+	lower_file = sdcardfs_lower_file(file);
+	err = vfs_write(lower_file, buf, count, ppos);
+	/* update our inode times+sizes upon a successful lower write */
+	if (err >= 0) {
+		if (sizeof(loff_t) > sizeof(long))
+			inode_lock(inode);
+		fsstack_copy_inode_size(inode, file_inode(lower_file));
+		fsstack_copy_attr_times(inode, file_inode(lower_file));
+		if (sizeof(loff_t) > sizeof(long))
+			inode_unlock(inode);
+	}
+
+	return err;
+}
+
+static int sdcardfs_readdir(struct file *file, struct dir_context *ctx)
+{
+	int err;
+	struct file *lower_file = NULL;
+	struct dentry *dentry = file->f_path.dentry;
+
+	lower_file = sdcardfs_lower_file(file);
+
+	lower_file->f_pos = file->f_pos;
+	err = iterate_dir(lower_file, ctx);
+	file->f_pos = lower_file->f_pos;
+	if (err >= 0)		/* copy the atime */
+		fsstack_copy_attr_atime(d_inode(dentry),
+					file_inode(lower_file));
+	return err;
+}
+
+static long sdcardfs_unlocked_ioctl(struct file *file, unsigned int cmd,
+				  unsigned long arg)
+{
+	long err = -ENOTTY;
+	struct file *lower_file;
+	const struct cred *saved_cred = NULL;
+	struct dentry *dentry = file->f_path.dentry;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+
+	lower_file = sdcardfs_lower_file(file);
+
+	/* XXX: use vfs_ioctl if/when VFS exports it */
+	if (!lower_file || !lower_file->f_op)
+		goto out;
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(sbi, SDCARDFS_I(file_inode(file))->data);
+	if (!saved_cred) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	if (lower_file->f_op->unlocked_ioctl)
+		err = lower_file->f_op->unlocked_ioctl(lower_file, cmd, arg);
+
+	/* some ioctls can change inode attributes (EXT2_IOC_SETFLAGS) */
+	if (!err)
+		sdcardfs_copy_and_fix_attrs(file_inode(file),
+				      file_inode(lower_file));
+	revert_fsids(saved_cred);
+out:
+	return err;
+}
+
+#ifdef CONFIG_COMPAT
+static long sdcardfs_compat_ioctl(struct file *file, unsigned int cmd,
+				unsigned long arg)
+{
+	long err = -ENOTTY;
+	struct file *lower_file;
+	const struct cred *saved_cred = NULL;
+	struct dentry *dentry = file->f_path.dentry;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+
+	lower_file = sdcardfs_lower_file(file);
+
+	/* XXX: use vfs_ioctl if/when VFS exports it */
+	if (!lower_file || !lower_file->f_op)
+		goto out;
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(sbi, SDCARDFS_I(file_inode(file))->data);
+	if (!saved_cred) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	if (lower_file->f_op->compat_ioctl)
+		err = lower_file->f_op->compat_ioctl(lower_file, cmd, arg);
+
+	revert_fsids(saved_cred);
+out:
+	return err;
+}
+#endif
+
+static int sdcardfs_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	int err = 0;
+	bool willwrite;
+	struct file *lower_file;
+	const struct vm_operations_struct *saved_vm_ops = NULL;
+
+	/* this might be deferred to mmap's writepage */
+	willwrite = ((vma->vm_flags | VM_SHARED | VM_WRITE) == vma->vm_flags);
+
+	/*
+	 * File systems which do not implement ->writepage may use
+	 * generic_file_readonly_mmap as their ->mmap op.  If you call
+	 * generic_file_readonly_mmap with VM_WRITE, you'd get an -EINVAL.
+	 * But we cannot call the lower ->mmap op, so we can't tell that
+	 * writeable mappings won't work.  Therefore, our only choice is to
+	 * check if the lower file system supports the ->writepage, and if
+	 * not, return EINVAL (the same error that
+	 * generic_file_readonly_mmap returns in that case).
+	 */
+	lower_file = sdcardfs_lower_file(file);
+	if (willwrite && !lower_file->f_mapping->a_ops->writepage) {
+		err = -EINVAL;
+		pr_err("sdcardfs: lower file system does not support writeable mmap\n");
+		goto out;
+	}
+
+	/*
+	 * find and save lower vm_ops.
+	 *
+	 * XXX: the VFS should have a cleaner way of finding the lower vm_ops
+	 */
+	if (!SDCARDFS_F(file)->lower_vm_ops) {
+		err = lower_file->f_op->mmap(lower_file, vma);
+		if (err) {
+			pr_err("sdcardfs: lower mmap failed %d\n", err);
+			goto out;
+		}
+		saved_vm_ops = vma->vm_ops; /* save: came from lower ->mmap */
+	}
+
+	/*
+	 * Next 3 lines are all I need from generic_file_mmap.  I definitely
+	 * don't want its test for ->readpage which returns -ENOEXEC.
+	 */
+	file_accessed(file);
+	vma->vm_ops = &sdcardfs_vm_ops;
+
+	file->f_mapping->a_ops = &sdcardfs_aops; /* set our aops */
+	if (!SDCARDFS_F(file)->lower_vm_ops) /* save for our ->fault */
+		SDCARDFS_F(file)->lower_vm_ops = saved_vm_ops;
+	vma->vm_private_data = file;
+	get_file(lower_file);
+	vma->vm_file = lower_file;
+
+out:
+	return err;
+}
+
+static int sdcardfs_open(struct inode *inode, struct file *file)
+{
+	int err = 0;
+	struct file *lower_file = NULL;
+	struct path lower_path;
+	struct dentry *dentry = file->f_path.dentry;
+	struct dentry *parent = dget_parent(dentry);
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	const struct cred *saved_cred = NULL;
+
+	/* don't open unhashed/deleted files */
+	if (d_unhashed(dentry)) {
+		err = -ENOENT;
+		goto out_err;
+	}
+
+	if (!check_caller_access_to_name(d_inode(parent), &dentry->d_name)) {
+		err = -EACCES;
+		goto out_err;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(sbi, SDCARDFS_I(inode)->data);
+	if (!saved_cred) {
+		err = -ENOMEM;
+		goto out_err;
+	}
+
+	file->private_data =
+		kzalloc(sizeof(struct sdcardfs_file_info), GFP_KERNEL);
+	if (!SDCARDFS_F(file)) {
+		err = -ENOMEM;
+		goto out_revert_cred;
+	}
+
+	/* open lower object and link sdcardfs's file struct to lower's */
+	sdcardfs_get_lower_path(file->f_path.dentry, &lower_path);
+	lower_file = dentry_open(&lower_path, file->f_flags, current_cred());
+	path_put(&lower_path);
+	if (IS_ERR(lower_file)) {
+		err = PTR_ERR(lower_file);
+		lower_file = sdcardfs_lower_file(file);
+		if (lower_file) {
+			sdcardfs_set_lower_file(file, NULL);
+			fput(lower_file); /* fput calls dput for lower_dentry */
+		}
+	} else {
+		sdcardfs_set_lower_file(file, lower_file);
+	}
+
+	if (err)
+		kfree(SDCARDFS_F(file));
+	else
+		sdcardfs_copy_and_fix_attrs(inode, sdcardfs_lower_inode(inode));
+
+out_revert_cred:
+	revert_fsids(saved_cred);
+out_err:
+	dput(parent);
+	return err;
+}
+
+static int sdcardfs_flush(struct file *file, fl_owner_t id)
+{
+	int err = 0;
+	struct file *lower_file = NULL;
+
+	lower_file = sdcardfs_lower_file(file);
+	if (lower_file && lower_file->f_op && lower_file->f_op->flush) {
+		filemap_write_and_wait(file->f_mapping);
+		err = lower_file->f_op->flush(lower_file, id);
+	}
+
+	return err;
+}
+
+/* release all lower object references & free the file info structure */
+static int sdcardfs_file_release(struct inode *inode, struct file *file)
+{
+	struct file *lower_file;
+
+	lower_file = sdcardfs_lower_file(file);
+	if (lower_file) {
+		sdcardfs_set_lower_file(file, NULL);
+		fput(lower_file);
+	}
+
+	kfree(SDCARDFS_F(file));
+	return 0;
+}
+
+static int sdcardfs_fsync(struct file *file, loff_t start, loff_t end,
+			int datasync)
+{
+	int err;
+	struct file *lower_file;
+	struct path lower_path;
+	struct dentry *dentry = file->f_path.dentry;
+
+	err = __generic_file_fsync(file, start, end, datasync);
+	if (err)
+		goto out;
+
+	lower_file = sdcardfs_lower_file(file);
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	err = vfs_fsync_range(lower_file, start, end, datasync);
+	sdcardfs_put_lower_path(dentry, &lower_path);
+out:
+	return err;
+}
+
+static int sdcardfs_fasync(int fd, struct file *file, int flag)
+{
+	int err = 0;
+	struct file *lower_file = NULL;
+
+	lower_file = sdcardfs_lower_file(file);
+	if (lower_file->f_op && lower_file->f_op->fasync)
+		err = lower_file->f_op->fasync(fd, lower_file, flag);
+
+	return err;
+}
+
+/*
+ * Sdcardfs cannot use generic_file_llseek as ->llseek, because it would
+ * only set the offset of the upper file.  So we have to implement our
+ * own method to set both the upper and lower file offsets
+ * consistently.
+ */
+static loff_t sdcardfs_file_llseek(struct file *file, loff_t offset, int whence)
+{
+	int err;
+	struct file *lower_file;
+
+	err = generic_file_llseek(file, offset, whence);
+	if (err < 0)
+		goto out;
+
+	lower_file = sdcardfs_lower_file(file);
+	err = generic_file_llseek(lower_file, offset, whence);
+
+out:
+	return err;
+}
+
+/*
+ * Sdcardfs read_iter, redirect modified iocb to lower read_iter
+ */
+ssize_t sdcardfs_read_iter(struct kiocb *iocb, struct iov_iter *iter)
+{
+	int err;
+	struct file *file = iocb->ki_filp, *lower_file;
+
+	lower_file = sdcardfs_lower_file(file);
+	if (!lower_file->f_op->read_iter) {
+		err = -EINVAL;
+		goto out;
+	}
+
+	get_file(lower_file); /* prevent lower_file from being released */
+	iocb->ki_filp = lower_file;
+	err = lower_file->f_op->read_iter(iocb, iter);
+	iocb->ki_filp = file;
+	fput(lower_file);
+	/* update upper inode atime as needed */
+	if (err >= 0 || err == -EIOCBQUEUED)
+		fsstack_copy_attr_atime(file->f_path.dentry->d_inode,
+					file_inode(lower_file));
+out:
+	return err;
+}
+
+/*
+ * Sdcardfs write_iter, redirect modified iocb to lower write_iter
+ */
+ssize_t sdcardfs_write_iter(struct kiocb *iocb, struct iov_iter *iter)
+{
+	int err;
+	struct file *file = iocb->ki_filp, *lower_file;
+	struct inode *inode = file->f_path.dentry->d_inode;
+
+	lower_file = sdcardfs_lower_file(file);
+	if (!lower_file->f_op->write_iter) {
+		err = -EINVAL;
+		goto out;
+	}
+
+	get_file(lower_file); /* prevent lower_file from being released */
+	iocb->ki_filp = lower_file;
+	err = lower_file->f_op->write_iter(iocb, iter);
+	iocb->ki_filp = file;
+	fput(lower_file);
+	/* update upper inode times/sizes as needed */
+	if (err >= 0 || err == -EIOCBQUEUED) {
+		if (sizeof(loff_t) > sizeof(long))
+			inode_lock(inode);
+		fsstack_copy_inode_size(inode, file_inode(lower_file));
+		fsstack_copy_attr_times(inode, file_inode(lower_file));
+		if (sizeof(loff_t) > sizeof(long))
+			inode_unlock(inode);
+	}
+out:
+	return err;
+}
+
+const struct file_operations sdcardfs_main_fops = {
+	.llseek		= generic_file_llseek,
+	.read		= sdcardfs_read,
+	.write		= sdcardfs_write,
+	.unlocked_ioctl	= sdcardfs_unlocked_ioctl,
+#ifdef CONFIG_COMPAT
+	.compat_ioctl	= sdcardfs_compat_ioctl,
+#endif
+	.mmap		= sdcardfs_mmap,
+	.open		= sdcardfs_open,
+	.flush		= sdcardfs_flush,
+	.release	= sdcardfs_file_release,
+	.fsync		= sdcardfs_fsync,
+	.fasync		= sdcardfs_fasync,
+	.read_iter	= sdcardfs_read_iter,
+	.write_iter	= sdcardfs_write_iter,
+};
+
+/* trimmed directory options */
+const struct file_operations sdcardfs_dir_fops = {
+	.llseek		= sdcardfs_file_llseek,
+	.read		= generic_read_dir,
+	.iterate	= sdcardfs_readdir,
+	.unlocked_ioctl	= sdcardfs_unlocked_ioctl,
+#ifdef CONFIG_COMPAT
+	.compat_ioctl	= sdcardfs_compat_ioctl,
+#endif
+	.open		= sdcardfs_open,
+	.release	= sdcardfs_file_release,
+	.flush		= sdcardfs_flush,
+	.fsync		= sdcardfs_fsync,
+	.fasync		= sdcardfs_fasync,
+};
diff --git a/fs/sdcardfs/inode.c b/fs/sdcardfs/inode.c
new file mode 100644
index 0000000..edeca11
--- /dev/null
+++ b/fs/sdcardfs/inode.c
@@ -0,0 +1,824 @@
+/*
+ * fs/sdcardfs/inode.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#include <linux/fs_struct.h>
+#include <linux/ratelimit.h>
+#include <linux/sched/task.h>
+
+const struct cred *override_fsids(struct sdcardfs_sb_info *sbi,
+		struct sdcardfs_inode_data *data)
+{
+	struct cred *cred;
+	const struct cred *old_cred;
+	uid_t uid;
+
+	cred = prepare_creds();
+	if (!cred)
+		return NULL;
+
+	if (sbi->options.gid_derivation) {
+		if (data->under_obb)
+			uid = AID_MEDIA_OBB;
+		else
+			uid = multiuser_get_uid(data->userid, sbi->options.fs_low_uid);
+	} else {
+		uid = sbi->options.fs_low_uid;
+	}
+	cred->fsuid = make_kuid(&init_user_ns, uid);
+	cred->fsgid = make_kgid(&init_user_ns, sbi->options.fs_low_gid);
+
+	old_cred = override_creds(cred);
+
+	return old_cred;
+}
+
+void revert_fsids(const struct cred *old_cred)
+{
+	const struct cred *cur_cred;
+
+	cur_cred = current->cred;
+	revert_creds(old_cred);
+	put_cred(cur_cred);
+}
+
+static int sdcardfs_create(struct inode *dir, struct dentry *dentry,
+			 umode_t mode, bool want_excl)
+{
+	int err;
+	struct dentry *lower_dentry;
+	struct vfsmount *lower_dentry_mnt;
+	struct dentry *lower_parent_dentry = NULL;
+	struct path lower_path;
+	const struct cred *saved_cred = NULL;
+	struct fs_struct *saved_fs;
+	struct fs_struct *copied_fs;
+
+	if (!check_caller_access_to_name(dir, &dentry->d_name)) {
+		err = -EACCES;
+		goto out_eacces;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dir->i_sb),
+					SDCARDFS_I(dir)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	lower_dentry = lower_path.dentry;
+	lower_dentry_mnt = lower_path.mnt;
+	lower_parent_dentry = lock_parent(lower_dentry);
+
+	if (d_is_positive(lower_dentry))
+		return -EEXIST;
+
+	/* set last 16bytes of mode field to 0664 */
+	mode = (mode & S_IFMT) | 00664;
+
+	/* temporarily change umask for lower fs write */
+	saved_fs = current->fs;
+	copied_fs = copy_fs_struct(current->fs);
+	if (!copied_fs) {
+		err = -ENOMEM;
+		goto out_unlock;
+	}
+	copied_fs->umask = 0;
+	task_lock(current);
+	current->fs = copied_fs;
+	task_unlock(current);
+
+	err = vfs_create2(lower_dentry_mnt, d_inode(lower_parent_dentry), lower_dentry, mode, want_excl);
+	if (err)
+		goto out;
+
+	err = sdcardfs_interpose(dentry, dir->i_sb, &lower_path,
+			SDCARDFS_I(dir)->data->userid);
+	if (err)
+		goto out;
+	fsstack_copy_attr_times(dir, sdcardfs_lower_inode(dir));
+	fsstack_copy_inode_size(dir, d_inode(lower_parent_dentry));
+	fixup_lower_ownership(dentry, dentry->d_name.name);
+
+out:
+	task_lock(current);
+	current->fs = saved_fs;
+	task_unlock(current);
+	free_fs_struct(copied_fs);
+out_unlock:
+	unlock_dir(lower_parent_dentry);
+	sdcardfs_put_lower_path(dentry, &lower_path);
+	revert_fsids(saved_cred);
+out_eacces:
+	return err;
+}
+
+static int sdcardfs_unlink(struct inode *dir, struct dentry *dentry)
+{
+	int err;
+	struct dentry *lower_dentry;
+	struct vfsmount *lower_mnt;
+	struct inode *lower_dir_inode = sdcardfs_lower_inode(dir);
+	struct dentry *lower_dir_dentry;
+	struct path lower_path;
+	const struct cred *saved_cred = NULL;
+
+	if (!check_caller_access_to_name(dir, &dentry->d_name)) {
+		err = -EACCES;
+		goto out_eacces;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dir->i_sb),
+						SDCARDFS_I(dir)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	lower_dentry = lower_path.dentry;
+	lower_mnt = lower_path.mnt;
+	dget(lower_dentry);
+	lower_dir_dentry = lock_parent(lower_dentry);
+
+	err = vfs_unlink2(lower_mnt, lower_dir_inode, lower_dentry, NULL);
+
+	/*
+	 * Note: unlinking on top of NFS can cause silly-renamed files.
+	 * Trying to delete such files results in EBUSY from NFS
+	 * below.  Silly-renamed files will get deleted by NFS later on, so
+	 * we just need to detect them here and treat such EBUSY errors as
+	 * if the upper file was successfully deleted.
+	 */
+	if (err == -EBUSY && lower_dentry->d_flags & DCACHE_NFSFS_RENAMED)
+		err = 0;
+	if (err)
+		goto out;
+	fsstack_copy_attr_times(dir, lower_dir_inode);
+	fsstack_copy_inode_size(dir, lower_dir_inode);
+	set_nlink(d_inode(dentry),
+		  sdcardfs_lower_inode(d_inode(dentry))->i_nlink);
+	d_inode(dentry)->i_ctime = dir->i_ctime;
+	d_drop(dentry); /* this is needed, else LTP fails (VFS won't do it) */
+out:
+	unlock_dir(lower_dir_dentry);
+	dput(lower_dentry);
+	sdcardfs_put_lower_path(dentry, &lower_path);
+	revert_fsids(saved_cred);
+out_eacces:
+	return err;
+}
+
+static int touch(char *abs_path, mode_t mode)
+{
+	struct file *filp = filp_open(abs_path, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, mode);
+
+	if (IS_ERR(filp)) {
+		if (PTR_ERR(filp) == -EEXIST) {
+			return 0;
+		} else {
+			pr_err("sdcardfs: failed to open(%s): %ld\n",
+						abs_path, PTR_ERR(filp));
+			return PTR_ERR(filp);
+		}
+	}
+	filp_close(filp, current->files);
+	return 0;
+}
+
+static int sdcardfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
+{
+	int err;
+	int make_nomedia_in_obb = 0;
+	struct dentry *lower_dentry;
+	struct vfsmount *lower_mnt;
+	struct dentry *lower_parent_dentry = NULL;
+	struct dentry *parent_dentry = NULL;
+	struct path lower_path;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+	const struct cred *saved_cred = NULL;
+	struct sdcardfs_inode_data *pd = SDCARDFS_I(dir)->data;
+	int touch_err = 0;
+	struct fs_struct *saved_fs;
+	struct fs_struct *copied_fs;
+	struct qstr q_obb = QSTR_LITERAL("obb");
+	struct qstr q_data = QSTR_LITERAL("data");
+
+	if (!check_caller_access_to_name(dir, &dentry->d_name)) {
+		err = -EACCES;
+		goto out_eacces;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dir->i_sb),
+						SDCARDFS_I(dir)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	/* check disk space */
+	parent_dentry = dget_parent(dentry);
+	if (!check_min_free_space(parent_dentry, 0, 1)) {
+		pr_err("sdcardfs: No minimum free space.\n");
+		err = -ENOSPC;
+		dput(parent_dentry);
+		goto out_revert;
+	}
+	dput(parent_dentry);
+
+	/* the lower_dentry is negative here */
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	lower_dentry = lower_path.dentry;
+	lower_mnt = lower_path.mnt;
+	lower_parent_dentry = lock_parent(lower_dentry);
+
+	/* set last 16bytes of mode field to 0775 */
+	mode = (mode & S_IFMT) | 00775;
+
+	/* temporarily change umask for lower fs write */
+	saved_fs = current->fs;
+	copied_fs = copy_fs_struct(current->fs);
+	if (!copied_fs) {
+		err = -ENOMEM;
+		unlock_dir(lower_parent_dentry);
+		goto out_unlock;
+	}
+	copied_fs->umask = 0;
+	task_lock(current);
+	current->fs = copied_fs;
+	task_unlock(current);
+
+	err = vfs_mkdir2(lower_mnt, d_inode(lower_parent_dentry), lower_dentry, mode);
+
+	if (err) {
+		unlock_dir(lower_parent_dentry);
+		goto out;
+	}
+
+	/* if it is a local obb dentry, setup it with the base obbpath */
+	if (need_graft_path(dentry)) {
+
+		err = setup_obb_dentry(dentry, &lower_path);
+		if (err) {
+			/* if the sbi->obbpath is not available, the lower_path won't be
+			 * changed by setup_obb_dentry() but the lower path is saved to
+			 * its orig_path. this dentry will be revalidated later.
+			 * but now, the lower_path should be NULL
+			 */
+			sdcardfs_put_reset_lower_path(dentry);
+
+			/* the newly created lower path which saved to its orig_path or
+			 * the lower_path is the base obbpath.
+			 * therefore, an additional path_get is required
+			 */
+			path_get(&lower_path);
+		} else
+			make_nomedia_in_obb = 1;
+	}
+
+	err = sdcardfs_interpose(dentry, dir->i_sb, &lower_path, pd->userid);
+	if (err) {
+		unlock_dir(lower_parent_dentry);
+		goto out;
+	}
+
+	fsstack_copy_attr_times(dir, sdcardfs_lower_inode(dir));
+	fsstack_copy_inode_size(dir, d_inode(lower_parent_dentry));
+	/* update number of links on parent directory */
+	set_nlink(dir, sdcardfs_lower_inode(dir)->i_nlink);
+	fixup_lower_ownership(dentry, dentry->d_name.name);
+	unlock_dir(lower_parent_dentry);
+	if ((!sbi->options.multiuser) && (qstr_case_eq(&dentry->d_name, &q_obb))
+		&& (pd->perm == PERM_ANDROID) && (pd->userid == 0))
+		make_nomedia_in_obb = 1;
+
+	/* When creating /Android/data and /Android/obb, mark them as .nomedia */
+	if (make_nomedia_in_obb ||
+		((pd->perm == PERM_ANDROID)
+				&& (qstr_case_eq(&dentry->d_name, &q_data)))) {
+		revert_fsids(saved_cred);
+		saved_cred = override_fsids(sbi,
+					SDCARDFS_I(d_inode(dentry))->data);
+		if (!saved_cred) {
+			pr_err("sdcardfs: failed to set up .nomedia in %s: %d\n",
+						lower_path.dentry->d_name.name,
+						-ENOMEM);
+			goto out;
+		}
+		set_fs_pwd(current->fs, &lower_path);
+		touch_err = touch(".nomedia", 0664);
+		if (touch_err) {
+			pr_err("sdcardfs: failed to create .nomedia in %s: %d\n",
+						lower_path.dentry->d_name.name,
+						touch_err);
+			goto out;
+		}
+	}
+out:
+	task_lock(current);
+	current->fs = saved_fs;
+	task_unlock(current);
+
+	free_fs_struct(copied_fs);
+out_unlock:
+	sdcardfs_put_lower_path(dentry, &lower_path);
+out_revert:
+	revert_fsids(saved_cred);
+out_eacces:
+	return err;
+}
+
+static int sdcardfs_rmdir(struct inode *dir, struct dentry *dentry)
+{
+	struct dentry *lower_dentry;
+	struct dentry *lower_dir_dentry;
+	struct vfsmount *lower_mnt;
+	int err;
+	struct path lower_path;
+	const struct cred *saved_cred = NULL;
+
+	if (!check_caller_access_to_name(dir, &dentry->d_name)) {
+		err = -EACCES;
+		goto out_eacces;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dir->i_sb),
+						SDCARDFS_I(dir)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	/* sdcardfs_get_real_lower(): in case of remove an user's obb dentry
+	 * the dentry on the original path should be deleted.
+	 */
+	sdcardfs_get_real_lower(dentry, &lower_path);
+
+	lower_dentry = lower_path.dentry;
+	lower_mnt = lower_path.mnt;
+	lower_dir_dentry = lock_parent(lower_dentry);
+
+	err = vfs_rmdir2(lower_mnt, d_inode(lower_dir_dentry), lower_dentry);
+	if (err)
+		goto out;
+
+	d_drop(dentry);	/* drop our dentry on success (why not VFS's job?) */
+	if (d_inode(dentry))
+		clear_nlink(d_inode(dentry));
+	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
+	fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
+	set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink);
+
+out:
+	unlock_dir(lower_dir_dentry);
+	sdcardfs_put_real_lower(dentry, &lower_path);
+	revert_fsids(saved_cred);
+out_eacces:
+	return err;
+}
+
+/*
+ * The locking rules in sdcardfs_rename are complex.  We could use a simpler
+ * superblock-level name-space lock for renames and copy-ups.
+ */
+static int sdcardfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+			 struct inode *new_dir, struct dentry *new_dentry,
+			 unsigned int flags)
+{
+	int err = 0;
+	struct dentry *lower_old_dentry = NULL;
+	struct dentry *lower_new_dentry = NULL;
+	struct dentry *lower_old_dir_dentry = NULL;
+	struct dentry *lower_new_dir_dentry = NULL;
+	struct vfsmount *lower_mnt = NULL;
+	struct dentry *trap = NULL;
+	struct path lower_old_path, lower_new_path;
+	const struct cred *saved_cred = NULL;
+
+	if (flags)
+		return -EINVAL;
+
+	if (!check_caller_access_to_name(old_dir, &old_dentry->d_name) ||
+		!check_caller_access_to_name(new_dir, &new_dentry->d_name)) {
+		err = -EACCES;
+		goto out_eacces;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(old_dir->i_sb),
+						SDCARDFS_I(new_dir)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	sdcardfs_get_real_lower(old_dentry, &lower_old_path);
+	sdcardfs_get_lower_path(new_dentry, &lower_new_path);
+	lower_old_dentry = lower_old_path.dentry;
+	lower_new_dentry = lower_new_path.dentry;
+	lower_mnt = lower_old_path.mnt;
+	lower_old_dir_dentry = dget_parent(lower_old_dentry);
+	lower_new_dir_dentry = dget_parent(lower_new_dentry);
+
+	trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
+	/* source should not be ancestor of target */
+	if (trap == lower_old_dentry) {
+		err = -EINVAL;
+		goto out;
+	}
+	/* target should not be ancestor of source */
+	if (trap == lower_new_dentry) {
+		err = -ENOTEMPTY;
+		goto out;
+	}
+
+	err = vfs_rename2(lower_mnt,
+			 d_inode(lower_old_dir_dentry), lower_old_dentry,
+			 d_inode(lower_new_dir_dentry), lower_new_dentry,
+			 NULL, 0);
+	if (err)
+		goto out;
+
+	/* Copy attrs from lower dir, but i_uid/i_gid */
+	sdcardfs_copy_and_fix_attrs(new_dir, d_inode(lower_new_dir_dentry));
+	fsstack_copy_inode_size(new_dir, d_inode(lower_new_dir_dentry));
+
+	if (new_dir != old_dir) {
+		sdcardfs_copy_and_fix_attrs(old_dir, d_inode(lower_old_dir_dentry));
+		fsstack_copy_inode_size(old_dir, d_inode(lower_old_dir_dentry));
+	}
+	get_derived_permission_new(new_dentry->d_parent, old_dentry, &new_dentry->d_name);
+	fixup_tmp_permissions(d_inode(old_dentry));
+	fixup_lower_ownership(old_dentry, new_dentry->d_name.name);
+	d_invalidate(old_dentry); /* Can't fixup ownership recursively :( */
+out:
+	unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
+	dput(lower_old_dir_dentry);
+	dput(lower_new_dir_dentry);
+	sdcardfs_put_real_lower(old_dentry, &lower_old_path);
+	sdcardfs_put_lower_path(new_dentry, &lower_new_path);
+	revert_fsids(saved_cred);
+out_eacces:
+	return err;
+}
+
+#if 0
+static int sdcardfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz)
+{
+	int err;
+	struct dentry *lower_dentry;
+	struct path lower_path;
+	/* XXX readlink does not requires overriding credential */
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	lower_dentry = lower_path.dentry;
+	if (!d_inode(lower_dentry)->i_op ||
+	    !d_inode(lower_dentry)->i_op->readlink) {
+		err = -EINVAL;
+		goto out;
+	}
+
+	err = d_inode(lower_dentry)->i_op->readlink(lower_dentry,
+						    buf, bufsiz);
+	if (err < 0)
+		goto out;
+	fsstack_copy_attr_atime(d_inode(dentry), d_inode(lower_dentry));
+
+out:
+	sdcardfs_put_lower_path(dentry, &lower_path);
+	return err;
+}
+#endif
+
+#if 0
+static const char *sdcardfs_follow_link(struct dentry *dentry, void **cookie)
+{
+	char *buf;
+	int len = PAGE_SIZE, err;
+	mm_segment_t old_fs;
+
+	/* This is freed by the put_link method assuming a successful call. */
+	buf = kmalloc(len, GFP_KERNEL);
+	if (!buf) {
+		buf = ERR_PTR(-ENOMEM);
+		return buf;
+	}
+
+	/* read the symlink, and then we will follow it */
+	old_fs = get_fs();
+	set_fs(KERNEL_DS);
+	err = sdcardfs_readlink(dentry, buf, len);
+	set_fs(old_fs);
+	if (err < 0) {
+		kfree(buf);
+		buf = ERR_PTR(err);
+	} else {
+		buf[err] = '\0';
+	}
+	return *cookie = buf;
+}
+#endif
+
+static int sdcardfs_permission_wrn(struct inode *inode, int mask)
+{
+	WARN_RATELIMIT(1, "sdcardfs does not support permission. Use permission2.\n");
+	return -EINVAL;
+}
+
+void copy_attrs(struct inode *dest, const struct inode *src)
+{
+	dest->i_mode = src->i_mode;
+	dest->i_uid = src->i_uid;
+	dest->i_gid = src->i_gid;
+	dest->i_rdev = src->i_rdev;
+	dest->i_atime = src->i_atime;
+	dest->i_mtime = src->i_mtime;
+	dest->i_ctime = src->i_ctime;
+	dest->i_blkbits = src->i_blkbits;
+	dest->i_flags = src->i_flags;
+#ifdef CONFIG_FS_POSIX_ACL
+	dest->i_acl = src->i_acl;
+#endif
+#ifdef CONFIG_SECURITY
+	dest->i_security = src->i_security;
+#endif
+}
+
+static int sdcardfs_permission(struct vfsmount *mnt, struct inode *inode, int mask)
+{
+	int err;
+	struct inode tmp;
+	struct sdcardfs_inode_data *top = top_data_get(SDCARDFS_I(inode));
+
+	if (IS_ERR(mnt))
+		return PTR_ERR(mnt);
+
+	if (!top)
+		return -EINVAL;
+
+	/*
+	 * Permission check on sdcardfs inode.
+	 * Calling process should have AID_SDCARD_RW permission
+	 * Since generic_permission only needs i_mode, i_uid,
+	 * i_gid, and i_sb, we can create a fake inode to pass
+	 * this information down in.
+	 *
+	 * The underlying code may attempt to take locks in some
+	 * cases for features we're not using, but if that changes,
+	 * locks must be dealt with to avoid undefined behavior.
+	 */
+	copy_attrs(&tmp, inode);
+	tmp.i_uid = make_kuid(&init_user_ns, top->d_uid);
+	tmp.i_gid = make_kgid(&init_user_ns, get_gid(mnt, inode->i_sb, top));
+	tmp.i_mode = (inode->i_mode & S_IFMT)
+			| get_mode(mnt, SDCARDFS_I(inode), top);
+	data_put(top);
+	tmp.i_sb = inode->i_sb;
+	if (IS_POSIXACL(inode))
+		pr_warn("%s: This may be undefined behavior...\n", __func__);
+	err = generic_permission(&tmp, mask);
+	return err;
+}
+
+static int sdcardfs_setattr_wrn(struct dentry *dentry, struct iattr *ia)
+{
+	WARN_RATELIMIT(1, "sdcardfs does not support setattr. User setattr2.\n");
+	return -EINVAL;
+}
+
+static int sdcardfs_setattr(struct vfsmount *mnt, struct dentry *dentry, struct iattr *ia)
+{
+	int err;
+	struct dentry *lower_dentry;
+	struct vfsmount *lower_mnt;
+	struct inode *inode;
+	struct inode *lower_inode;
+	struct path lower_path;
+	struct iattr lower_ia;
+	struct dentry *parent;
+	struct inode tmp;
+	struct dentry tmp_d;
+	struct sdcardfs_inode_data *top;
+
+	const struct cred *saved_cred = NULL;
+
+	inode = d_inode(dentry);
+	top = top_data_get(SDCARDFS_I(inode));
+
+	if (!top)
+		return -EINVAL;
+
+	/*
+	 * Permission check on sdcardfs inode.
+	 * Calling process should have AID_SDCARD_RW permission
+	 * Since generic_permission only needs i_mode, i_uid,
+	 * i_gid, and i_sb, we can create a fake inode to pass
+	 * this information down in.
+	 *
+	 * The underlying code may attempt to take locks in some
+	 * cases for features we're not using, but if that changes,
+	 * locks must be dealt with to avoid undefined behavior.
+	 *
+	 */
+	copy_attrs(&tmp, inode);
+	tmp.i_uid = make_kuid(&init_user_ns, top->d_uid);
+	tmp.i_gid = make_kgid(&init_user_ns, get_gid(mnt, dentry->d_sb, top));
+	tmp.i_mode = (inode->i_mode & S_IFMT)
+			| get_mode(mnt, SDCARDFS_I(inode), top);
+	tmp.i_size = i_size_read(inode);
+	data_put(top);
+	tmp.i_sb = inode->i_sb;
+	tmp_d.d_inode = &tmp;
+
+	/*
+	 * Check if user has permission to change dentry.  We don't check if
+	 * this user can change the lower inode: that should happen when
+	 * calling notify_change on the lower inode.
+	 */
+	/* prepare our own lower struct iattr (with the lower file) */
+	memcpy(&lower_ia, ia, sizeof(lower_ia));
+	/* Allow touch updating timestamps. A previous permission check ensures
+	 * we have write access. Changes to mode, owner, and group are ignored
+	 */
+	ia->ia_valid |= ATTR_FORCE;
+	err = setattr_prepare(&tmp_d, ia);
+
+	if (!err) {
+		/* check the Android group ID */
+		parent = dget_parent(dentry);
+		if (!check_caller_access_to_name(d_inode(parent), &dentry->d_name))
+			err = -EACCES;
+		dput(parent);
+	}
+
+	if (err)
+		goto out_err;
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dentry->d_sb),
+						SDCARDFS_I(inode)->data);
+	if (!saved_cred)
+		return -ENOMEM;
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	lower_dentry = lower_path.dentry;
+	lower_mnt = lower_path.mnt;
+	lower_inode = sdcardfs_lower_inode(inode);
+
+	if (ia->ia_valid & ATTR_FILE)
+		lower_ia.ia_file = sdcardfs_lower_file(ia->ia_file);
+
+	lower_ia.ia_valid &= ~(ATTR_UID | ATTR_GID | ATTR_MODE);
+
+	/*
+	 * If shrinking, first truncate upper level to cancel writing dirty
+	 * pages beyond the new eof; and also if its' maxbytes is more
+	 * limiting (fail with -EFBIG before making any change to the lower
+	 * level).  There is no need to vmtruncate the upper level
+	 * afterwards in the other cases: we fsstack_copy_inode_size from
+	 * the lower level.
+	 */
+	if (ia->ia_valid & ATTR_SIZE) {
+		err = inode_newsize_ok(&tmp, ia->ia_size);
+		if (err) {
+			goto out;
+		}
+		truncate_setsize(inode, ia->ia_size);
+	}
+
+	/*
+	 * mode change is for clearing setuid/setgid bits. Allow lower fs
+	 * to interpret this in its own way.
+	 */
+	if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
+		lower_ia.ia_valid &= ~ATTR_MODE;
+
+	/* notify the (possibly copied-up) lower inode */
+	/*
+	 * Note: we use d_inode(lower_dentry), because lower_inode may be
+	 * unlinked (no inode->i_sb and i_ino==0.  This happens if someone
+	 * tries to open(), unlink(), then ftruncate() a file.
+	 */
+	inode_lock(d_inode(lower_dentry));
+	err = notify_change2(lower_mnt, lower_dentry, &lower_ia, /* note: lower_ia */
+			NULL);
+	inode_unlock(d_inode(lower_dentry));
+	if (err)
+		goto out;
+
+	/* get attributes from the lower inode and update derived permissions */
+	sdcardfs_copy_and_fix_attrs(inode, lower_inode);
+
+	/*
+	 * Not running fsstack_copy_inode_size(inode, lower_inode), because
+	 * VFS should update our inode size, and notify_change on
+	 * lower_inode should update its size.
+	 */
+
+out:
+	sdcardfs_put_lower_path(dentry, &lower_path);
+	revert_fsids(saved_cred);
+out_err:
+	return err;
+}
+
+static int sdcardfs_fillattr(struct vfsmount *mnt, struct inode *inode,
+				struct kstat *lower_stat, struct kstat *stat)
+{
+	struct sdcardfs_inode_info *info = SDCARDFS_I(inode);
+	struct sdcardfs_inode_data *top = top_data_get(info);
+	struct super_block *sb = inode->i_sb;
+
+	if (!top)
+		return -EINVAL;
+
+	stat->dev = inode->i_sb->s_dev;
+	stat->ino = inode->i_ino;
+	stat->mode = (inode->i_mode  & S_IFMT) | get_mode(mnt, info, top);
+	stat->nlink = inode->i_nlink;
+	stat->uid = make_kuid(&init_user_ns, top->d_uid);
+	stat->gid = make_kgid(&init_user_ns, get_gid(mnt, sb, top));
+	stat->rdev = inode->i_rdev;
+	stat->size = lower_stat->size;
+	stat->atime = lower_stat->atime;
+	stat->mtime = lower_stat->mtime;
+	stat->ctime = lower_stat->ctime;
+	stat->blksize = lower_stat->blksize;
+	stat->blocks = lower_stat->blocks;
+	data_put(top);
+	return 0;
+}
+static int sdcardfs_getattr(const struct path *path, struct kstat *stat,
+				u32 request_mask, unsigned int flags)
+{
+	struct vfsmount *mnt = path->mnt;
+	struct dentry *dentry = path->dentry;
+	struct kstat lower_stat;
+	struct path lower_path;
+	struct dentry *parent;
+	int err;
+
+	parent = dget_parent(dentry);
+	if (!check_caller_access_to_name(d_inode(parent), &dentry->d_name)) {
+		dput(parent);
+		return -EACCES;
+	}
+	dput(parent);
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	err = vfs_getattr(&lower_path, &lower_stat, request_mask, flags);
+	if (err)
+		goto out;
+	sdcardfs_copy_and_fix_attrs(d_inode(dentry),
+			      d_inode(lower_path.dentry));
+	err = sdcardfs_fillattr(mnt, d_inode(dentry), &lower_stat, stat);
+out:
+	sdcardfs_put_lower_path(dentry, &lower_path);
+	return err;
+}
+
+const struct inode_operations sdcardfs_symlink_iops = {
+	.permission2	= sdcardfs_permission,
+	.setattr2	= sdcardfs_setattr,
+	/* XXX Following operations are implemented,
+	 *     but FUSE(sdcard) or FAT does not support them
+	 *     These methods are *NOT* perfectly tested.
+	.readlink	= sdcardfs_readlink,
+	.follow_link	= sdcardfs_follow_link,
+	.put_link	= kfree_put_link,
+	 */
+};
+
+const struct inode_operations sdcardfs_dir_iops = {
+	.create		= sdcardfs_create,
+	.lookup		= sdcardfs_lookup,
+	.permission	= sdcardfs_permission_wrn,
+	.permission2	= sdcardfs_permission,
+	.unlink		= sdcardfs_unlink,
+	.mkdir		= sdcardfs_mkdir,
+	.rmdir		= sdcardfs_rmdir,
+	.rename		= sdcardfs_rename,
+	.setattr	= sdcardfs_setattr_wrn,
+	.setattr2	= sdcardfs_setattr,
+	.getattr	= sdcardfs_getattr,
+};
+
+const struct inode_operations sdcardfs_main_iops = {
+	.permission	= sdcardfs_permission_wrn,
+	.permission2	= sdcardfs_permission,
+	.setattr	= sdcardfs_setattr_wrn,
+	.setattr2	= sdcardfs_setattr,
+	.getattr	= sdcardfs_getattr,
+};
diff --git a/fs/sdcardfs/lookup.c b/fs/sdcardfs/lookup.c
new file mode 100644
index 0000000..d2dfdf1
--- /dev/null
+++ b/fs/sdcardfs/lookup.c
@@ -0,0 +1,468 @@
+/*
+ * fs/sdcardfs/lookup.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#include "linux/delay.h"
+
+/* The dentry cache is just so we have properly sized dentries */
+static struct kmem_cache *sdcardfs_dentry_cachep;
+
+int sdcardfs_init_dentry_cache(void)
+{
+	sdcardfs_dentry_cachep =
+		kmem_cache_create("sdcardfs_dentry",
+				  sizeof(struct sdcardfs_dentry_info),
+				  0, SLAB_RECLAIM_ACCOUNT, NULL);
+
+	return sdcardfs_dentry_cachep ? 0 : -ENOMEM;
+}
+
+void sdcardfs_destroy_dentry_cache(void)
+{
+	kmem_cache_destroy(sdcardfs_dentry_cachep);
+}
+
+void free_dentry_private_data(struct dentry *dentry)
+{
+	kmem_cache_free(sdcardfs_dentry_cachep, dentry->d_fsdata);
+	dentry->d_fsdata = NULL;
+}
+
+/* allocate new dentry private data */
+int new_dentry_private_data(struct dentry *dentry)
+{
+	struct sdcardfs_dentry_info *info = SDCARDFS_D(dentry);
+
+	/* use zalloc to init dentry_info.lower_path */
+	info = kmem_cache_zalloc(sdcardfs_dentry_cachep, GFP_ATOMIC);
+	if (!info)
+		return -ENOMEM;
+
+	spin_lock_init(&info->lock);
+	dentry->d_fsdata = info;
+
+	return 0;
+}
+
+struct inode_data {
+	struct inode *lower_inode;
+	userid_t id;
+};
+
+static int sdcardfs_inode_test(struct inode *inode, void *candidate_data/*void *candidate_lower_inode*/)
+{
+	struct inode *current_lower_inode = sdcardfs_lower_inode(inode);
+	userid_t current_userid = SDCARDFS_I(inode)->data->userid;
+
+	if (current_lower_inode == ((struct inode_data *)candidate_data)->lower_inode &&
+			current_userid == ((struct inode_data *)candidate_data)->id)
+		return 1; /* found a match */
+	else
+		return 0; /* no match */
+}
+
+static int sdcardfs_inode_set(struct inode *inode, void *lower_inode)
+{
+	/* we do actual inode initialization in sdcardfs_iget */
+	return 0;
+}
+
+struct inode *sdcardfs_iget(struct super_block *sb, struct inode *lower_inode, userid_t id)
+{
+	struct sdcardfs_inode_info *info;
+	struct inode_data data;
+	struct inode *inode; /* the new inode to return */
+
+	if (!igrab(lower_inode))
+		return ERR_PTR(-ESTALE);
+
+	data.id = id;
+	data.lower_inode = lower_inode;
+	inode = iget5_locked(sb, /* our superblock */
+			     /*
+			      * hashval: we use inode number, but we can
+			      * also use "(unsigned long)lower_inode"
+			      * instead.
+			      */
+			     lower_inode->i_ino, /* hashval */
+			     sdcardfs_inode_test, /* inode comparison function */
+			     sdcardfs_inode_set, /* inode init function */
+			     &data); /* data passed to test+set fxns */
+	if (!inode) {
+		iput(lower_inode);
+		return ERR_PTR(-ENOMEM);
+	}
+	/* if found a cached inode, then just return it (after iput) */
+	if (!(inode->i_state & I_NEW)) {
+		iput(lower_inode);
+		return inode;
+	}
+
+	/* initialize new inode */
+	info = SDCARDFS_I(inode);
+
+	inode->i_ino = lower_inode->i_ino;
+	sdcardfs_set_lower_inode(inode, lower_inode);
+
+	inode_inc_iversion_raw(inode);
+
+	/* use different set of inode ops for symlinks & directories */
+	if (S_ISDIR(lower_inode->i_mode))
+		inode->i_op = &sdcardfs_dir_iops;
+	else if (S_ISLNK(lower_inode->i_mode))
+		inode->i_op = &sdcardfs_symlink_iops;
+	else
+		inode->i_op = &sdcardfs_main_iops;
+
+	/* use different set of file ops for directories */
+	if (S_ISDIR(lower_inode->i_mode))
+		inode->i_fop = &sdcardfs_dir_fops;
+	else
+		inode->i_fop = &sdcardfs_main_fops;
+
+	inode->i_mapping->a_ops = &sdcardfs_aops;
+
+	inode->i_atime.tv_sec = 0;
+	inode->i_atime.tv_nsec = 0;
+	inode->i_mtime.tv_sec = 0;
+	inode->i_mtime.tv_nsec = 0;
+	inode->i_ctime.tv_sec = 0;
+	inode->i_ctime.tv_nsec = 0;
+
+	/* properly initialize special inodes */
+	if (S_ISBLK(lower_inode->i_mode) || S_ISCHR(lower_inode->i_mode) ||
+	    S_ISFIFO(lower_inode->i_mode) || S_ISSOCK(lower_inode->i_mode))
+		init_special_inode(inode, lower_inode->i_mode,
+				   lower_inode->i_rdev);
+
+	/* all well, copy inode attributes */
+	sdcardfs_copy_and_fix_attrs(inode, lower_inode);
+	fsstack_copy_inode_size(inode, lower_inode);
+
+	unlock_new_inode(inode);
+	return inode;
+}
+
+/*
+ * Helper interpose routine, called directly by ->lookup to handle
+ * spliced dentries.
+ */
+static struct dentry *__sdcardfs_interpose(struct dentry *dentry,
+					 struct super_block *sb,
+					 struct path *lower_path,
+					 userid_t id)
+{
+	struct inode *inode;
+	struct inode *lower_inode;
+	struct super_block *lower_sb;
+	struct dentry *ret_dentry;
+
+	lower_inode = d_inode(lower_path->dentry);
+	lower_sb = sdcardfs_lower_super(sb);
+
+	/* check that the lower file system didn't cross a mount point */
+	if (lower_inode->i_sb != lower_sb) {
+		ret_dentry = ERR_PTR(-EXDEV);
+		goto out;
+	}
+
+	/*
+	 * We allocate our new inode below by calling sdcardfs_iget,
+	 * which will initialize some of the new inode's fields
+	 */
+
+	/* inherit lower inode number for sdcardfs's inode */
+	inode = sdcardfs_iget(sb, lower_inode, id);
+	if (IS_ERR(inode)) {
+		ret_dentry = ERR_CAST(inode);
+		goto out;
+	}
+
+	ret_dentry = d_splice_alias(inode, dentry);
+	dentry = ret_dentry ?: dentry;
+	if (!IS_ERR(dentry))
+		update_derived_permission_lock(dentry);
+out:
+	return ret_dentry;
+}
+
+/*
+ * Connect an sdcardfs inode dentry/inode with several lower ones.  This is
+ * the classic stackable file system "vnode interposition" action.
+ *
+ * @dentry: sdcardfs's dentry which interposes on lower one
+ * @sb: sdcardfs's super_block
+ * @lower_path: the lower path (caller does path_get/put)
+ */
+int sdcardfs_interpose(struct dentry *dentry, struct super_block *sb,
+		     struct path *lower_path, userid_t id)
+{
+	struct dentry *ret_dentry;
+
+	ret_dentry = __sdcardfs_interpose(dentry, sb, lower_path, id);
+	return PTR_ERR(ret_dentry);
+}
+
+struct sdcardfs_name_data {
+	struct dir_context ctx;
+	const struct qstr *to_find;
+	char *name;
+	bool found;
+};
+
+static int sdcardfs_name_match(struct dir_context *ctx, const char *name,
+		int namelen, loff_t offset, u64 ino, unsigned int d_type)
+{
+	struct sdcardfs_name_data *buf = container_of(ctx, struct sdcardfs_name_data, ctx);
+	struct qstr candidate = QSTR_INIT(name, namelen);
+
+	if (qstr_case_eq(buf->to_find, &candidate)) {
+		memcpy(buf->name, name, namelen);
+		buf->name[namelen] = 0;
+		buf->found = true;
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * Main driver function for sdcardfs's lookup.
+ *
+ * Returns: NULL (ok), ERR_PTR if an error occurred.
+ * Fills in lower_parent_path with <dentry,mnt> on success.
+ */
+static struct dentry *__sdcardfs_lookup(struct dentry *dentry,
+		unsigned int flags, struct path *lower_parent_path, userid_t id)
+{
+	int err = 0;
+	struct vfsmount *lower_dir_mnt;
+	struct dentry *lower_dir_dentry = NULL;
+	struct dentry *lower_dentry;
+	const struct qstr *name;
+	struct path lower_path;
+	struct dentry *ret_dentry = NULL;
+	struct sdcardfs_sb_info *sbi;
+
+	sbi = SDCARDFS_SB(dentry->d_sb);
+	/* must initialize dentry operations */
+	d_set_d_op(dentry, &sdcardfs_ci_dops);
+
+	if (IS_ROOT(dentry))
+		goto out;
+
+	name = &dentry->d_name;
+
+	/* now start the actual lookup procedure */
+	lower_dir_dentry = lower_parent_path->dentry;
+	lower_dir_mnt = lower_parent_path->mnt;
+
+	/* Use vfs_path_lookup to check if the dentry exists or not */
+	err = vfs_path_lookup(lower_dir_dentry, lower_dir_mnt, name->name, 0,
+				&lower_path);
+	/* check for other cases */
+	if (err == -ENOENT) {
+		struct file *file;
+		const struct cred *cred = current_cred();
+
+		struct sdcardfs_name_data buffer = {
+			.ctx.actor = sdcardfs_name_match,
+			.to_find = name,
+			.name = __getname(),
+			.found = false,
+		};
+
+		if (!buffer.name) {
+			err = -ENOMEM;
+			goto out;
+		}
+		file = dentry_open(lower_parent_path, O_RDONLY, cred);
+		if (IS_ERR(file)) {
+			err = PTR_ERR(file);
+			goto put_name;
+		}
+		err = iterate_dir(file, &buffer.ctx);
+		fput(file);
+		if (err)
+			goto put_name;
+
+		if (buffer.found)
+			err = vfs_path_lookup(lower_dir_dentry,
+						lower_dir_mnt,
+						buffer.name, 0,
+						&lower_path);
+		else
+			err = -ENOENT;
+put_name:
+		__putname(buffer.name);
+	}
+
+	/* no error: handle positive dentries */
+	if (!err) {
+found:
+		/* check if the dentry is an obb dentry
+		 * if true, the lower_inode must be replaced with
+		 * the inode of the graft path
+		 */
+
+		if (need_graft_path(dentry)) {
+
+			/* setup_obb_dentry()
+			 * The lower_path will be stored to the dentry's orig_path
+			 * and the base obbpath will be copyed to the lower_path variable.
+			 * if an error returned, there's no change in the lower_path
+			 * returns: -ERRNO if error (0: no error)
+			 */
+			err = setup_obb_dentry(dentry, &lower_path);
+
+			if (err) {
+				/* if the sbi->obbpath is not available, we can optionally
+				 * setup the lower_path with its orig_path.
+				 * but, the current implementation just returns an error
+				 * because the sdcard daemon also regards this case as
+				 * a lookup fail.
+				 */
+				pr_info("sdcardfs: base obbpath is not available\n");
+				sdcardfs_put_reset_orig_path(dentry);
+				goto out;
+			}
+		}
+
+		sdcardfs_set_lower_path(dentry, &lower_path);
+		ret_dentry =
+			__sdcardfs_interpose(dentry, dentry->d_sb, &lower_path, id);
+		if (IS_ERR(ret_dentry)) {
+			err = PTR_ERR(ret_dentry);
+			 /* path_put underlying path on error */
+			sdcardfs_put_reset_lower_path(dentry);
+		}
+		goto out;
+	}
+
+	/*
+	 * We don't consider ENOENT an error, and we want to return a
+	 * negative dentry.
+	 */
+	if (err && err != -ENOENT)
+		goto out;
+
+	/* get a (very likely) new negative dentry */
+	lower_dentry = lookup_one_len_unlocked(name->name,
+					       lower_dir_dentry, name->len);
+	if (IS_ERR(lower_dentry)) {
+		err = PTR_ERR(lower_dentry);
+		goto out;
+	}
+
+	lower_path.dentry = lower_dentry;
+	lower_path.mnt = mntget(lower_dir_mnt);
+
+	/*
+	 * Check if someone sneakily filled in the dentry when
+	 * we weren't looking. We'll check again in create.
+	 */
+	if (unlikely(d_inode_rcu(lower_dentry))) {
+		err = 0;
+		goto found;
+	}
+
+	sdcardfs_set_lower_path(dentry, &lower_path);
+
+	/*
+	 * If the intent is to create a file, then don't return an error, so
+	 * the VFS will continue the process of making this negative dentry
+	 * into a positive one.
+	 */
+	if (flags & (LOOKUP_CREATE|LOOKUP_RENAME_TARGET))
+		err = 0;
+
+out:
+	if (err)
+		return ERR_PTR(err);
+	return ret_dentry;
+}
+
+/*
+ * On success:
+ * fills dentry object appropriate values and returns NULL.
+ * On fail (== error)
+ * returns error ptr
+ *
+ * @dir : Parent inode.
+ * @dentry : Target dentry to lookup. we should set each of fields.
+ *	     (dentry->d_name is initialized already)
+ * @nd : nameidata of parent inode
+ */
+struct dentry *sdcardfs_lookup(struct inode *dir, struct dentry *dentry,
+			     unsigned int flags)
+{
+	struct dentry *ret = NULL, *parent;
+	struct path lower_parent_path;
+	int err = 0;
+	const struct cred *saved_cred = NULL;
+
+	parent = dget_parent(dentry);
+
+	if (!check_caller_access_to_name(d_inode(parent), &dentry->d_name)) {
+		ret = ERR_PTR(-EACCES);
+		goto out_err;
+	}
+
+	/* save current_cred and override it */
+	saved_cred = override_fsids(SDCARDFS_SB(dir->i_sb),
+						SDCARDFS_I(dir)->data);
+	if (!saved_cred) {
+		ret = ERR_PTR(-ENOMEM);
+		goto out_err;
+	}
+
+	sdcardfs_get_lower_path(parent, &lower_parent_path);
+
+	/* allocate dentry private data.  We free it in ->d_release */
+	err = new_dentry_private_data(dentry);
+	if (err) {
+		ret = ERR_PTR(err);
+		goto out;
+	}
+
+	ret = __sdcardfs_lookup(dentry, flags, &lower_parent_path,
+				SDCARDFS_I(dir)->data->userid);
+	if (IS_ERR(ret))
+		goto out;
+	if (ret)
+		dentry = ret;
+	if (d_inode(dentry)) {
+		fsstack_copy_attr_times(d_inode(dentry),
+					sdcardfs_lower_inode(d_inode(dentry)));
+		/* get derived permission */
+		get_derived_permission(parent, dentry);
+		fixup_tmp_permissions(d_inode(dentry));
+		fixup_lower_ownership(dentry, dentry->d_name.name);
+	}
+	/* update parent directory's atime */
+	fsstack_copy_attr_atime(d_inode(parent),
+				sdcardfs_lower_inode(d_inode(parent)));
+
+out:
+	sdcardfs_put_lower_path(parent, &lower_parent_path);
+	revert_fsids(saved_cred);
+out_err:
+	dput(parent);
+	return ret;
+}
diff --git a/fs/sdcardfs/main.c b/fs/sdcardfs/main.c
new file mode 100644
index 0000000..19fa9c4
--- /dev/null
+++ b/fs/sdcardfs/main.c
@@ -0,0 +1,462 @@
+/*
+ * fs/sdcardfs/main.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#include <linux/fs_context.h>
+#include <linux/fs_parser.h>
+#include <linux/fscrypt.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/parser.h>
+
+enum sdcardfs_param {
+	Opt_fsuid,
+	Opt_fsgid,
+	Opt_gid,
+	Opt_debug,
+	Opt_mask,
+	Opt_multiuser,
+	Opt_userid,
+	Opt_reserved_mb,
+	Opt_gid_derivation,
+	Opt_default_normal,
+	Opt_nocache,
+	Opt_unshared_obb,
+	Opt_err,
+};
+
+static const struct fs_parameter_spec sdcardfs_param_specs[] = {
+	fsparam_u32("fsuid", Opt_fsuid),
+	fsparam_u32("fsgid", Opt_fsgid),
+	fsparam_u32("gid", Opt_gid),
+	fsparam_bool("debug", Opt_debug),
+	fsparam_u32("mask", Opt_mask),
+	fsparam_u32("userid", Opt_userid),
+	fsparam_bool("multiuser", Opt_multiuser),
+	fsparam_bool("derive_gid", Opt_gid_derivation),
+	fsparam_bool("default_normal", Opt_default_normal),
+	fsparam_bool("unshared_obb", Opt_unshared_obb),
+	fsparam_u32("reserved_mb", Opt_reserved_mb),
+	fsparam_bool("nocache", Opt_nocache),
+	{}
+};
+
+static const struct fs_parameter_description sdcardfs_parameters = {
+	.name	= "sdcardfs",
+	.specs	= sdcardfs_param_specs,
+};
+
+static int sdcardfs_parse_param(struct fs_context *fc, struct fs_parameter *param)
+{
+	struct sdcardfs_context_options *fc_opts = fc->fs_private;
+	struct sdcardfs_mount_options *opts = &fc_opts->opts;
+	struct sdcardfs_vfsmount_options *vfsopts = &fc_opts->vfsopts;
+	struct fs_parse_result result;
+	int opt;
+
+	opt = fs_parse(fc, &sdcardfs_parameters, param, &result);
+	if (opt < 0)
+		return opt;
+
+	switch (opt) {
+	case Opt_debug:
+		opts->debug = true;
+		break;
+	case Opt_fsuid:
+		opts->fs_low_uid = result.uint_32;
+		break;
+	case Opt_fsgid:
+		opts->fs_low_gid = result.uint_32;
+		break;
+	case Opt_gid:
+		vfsopts->gid = result.uint_32;
+		break;
+	case Opt_userid:
+		opts->fs_user_id = result.uint_32;
+		break;
+	case Opt_mask:
+		vfsopts->mask = result.uint_32;
+		break;
+	case Opt_multiuser:
+		opts->multiuser = true;
+		break;
+	case Opt_reserved_mb:
+		opts->reserved_mb = result.uint_32;
+		break;
+	case Opt_gid_derivation:
+		opts->gid_derivation = true;
+		break;
+	case Opt_default_normal:
+		opts->default_normal = true;
+		break;
+	case Opt_nocache:
+		opts->nocache = true;
+		break;
+	case Opt_unshared_obb:
+		opts->unshared_obb = true;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static void copy_sb_opts(struct sdcardfs_mount_options *opts,
+		struct fs_context *fc)
+{
+	struct sdcardfs_context_options *fcopts = fc->fs_private;
+
+	opts->debug = fcopts->opts.debug;
+	opts->default_normal = fcopts->opts.default_normal;
+	opts->fs_low_gid = fcopts->opts.fs_low_gid;
+	opts->fs_low_uid = fcopts->opts.fs_low_uid;
+	opts->fs_user_id = fcopts->opts.fs_user_id;
+	opts->gid_derivation = fcopts->opts.gid_derivation;
+	opts->multiuser = fcopts->opts.multiuser;
+	opts->nocache = fcopts->opts.nocache;
+	opts->reserved_mb = fcopts->opts.reserved_mb;
+	opts->unshared_obb = fcopts->opts.unshared_obb;
+}
+
+#if 0
+/*
+ * our custom d_alloc_root work-alike
+ *
+ * we can't use d_alloc_root if we want to use our own interpose function
+ * unchanged, so we simply call our own "fake" d_alloc_root
+ */
+static struct dentry *sdcardfs_d_alloc_root(struct super_block *sb)
+{
+	struct dentry *ret = NULL;
+
+	if (sb) {
+		static const struct qstr name = {
+			.name = "/",
+			.len = 1
+		};
+
+		ret = d_alloc(NULL, &name);
+		if (ret) {
+			d_set_d_op(ret, &sdcardfs_ci_dops);
+			ret->d_sb = sb;
+			ret->d_parent = ret;
+		}
+	}
+	return ret;
+}
+#endif
+
+DEFINE_MUTEX(sdcardfs_super_list_lock);
+EXPORT_SYMBOL_GPL(sdcardfs_super_list_lock);
+LIST_HEAD(sdcardfs_super_list);
+EXPORT_SYMBOL_GPL(sdcardfs_super_list);
+
+struct sdcardfs_mount_private {
+	struct vfsmount *mnt;
+	const char *dev_name;
+	void *raw_data;
+};
+
+static int __sdcardfs_fill_super(
+	struct super_block *sb,
+	struct fs_context *fc)
+{
+	int err = 0;
+	struct super_block *lower_sb;
+	struct path lower_path;
+	struct sdcardfs_sb_info *sb_info;
+	struct inode *inode;
+	const char *dev_name = fc->source;
+	struct sdcardfs_context_options *fcopts = fc->fs_private;
+	struct sdcardfs_mount_options *opts = &fcopts->opts;
+	struct sdcardfs_vfsmount_options *mntopts = &fcopts->vfsopts;
+
+	pr_info("sdcardfs version 2.0\n");
+
+	if (!dev_name) {
+		pr_err("sdcardfs: read_super: missing dev_name argument\n");
+		err = -EINVAL;
+		goto out;
+	}
+
+	pr_info("sdcardfs: dev_name -> %s\n", dev_name);
+	pr_info("sdcardfs: gid=%d,mask=%x\n", mntopts->gid, mntopts->mask);
+
+	/* parse lower path */
+	err = kern_path(dev_name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY,
+			&lower_path);
+	if (err) {
+		pr_err("sdcardfs: error accessing lower directory '%s'\n", dev_name);
+		goto out;
+	}
+
+	/* allocate superblock private data */
+	sb->s_fs_info = kzalloc(sizeof(struct sdcardfs_sb_info), GFP_KERNEL);
+	if (!SDCARDFS_SB(sb)) {
+		pr_crit("sdcardfs: read_super: out of memory\n");
+		err = -ENOMEM;
+		goto out_free;
+	}
+
+	sb_info = sb->s_fs_info;
+	copy_sb_opts(&sb_info->options, fc);
+	if (opts->debug) {
+		pr_info("sdcardfs : options - debug:%d\n", opts->debug);
+		pr_info("sdcardfs : options - gid:%d\n", mntopts->gid);
+		pr_info("sdcardfs : options - mask:%d\n", mntopts->mask);
+	}
+
+	/* set the lower superblock field of upper superblock */
+	lower_sb = lower_path.dentry->d_sb;
+	atomic_inc(&lower_sb->s_active);
+	sdcardfs_set_lower_super(sb, lower_sb);
+
+	sb->s_stack_depth = lower_sb->s_stack_depth + 1;
+	if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
+		pr_err("sdcardfs: maximum fs stacking depth exceeded\n");
+		err = -EINVAL;
+		goto out_sput;
+	}
+
+	/* inherit maxbytes from lower file system */
+	sb->s_maxbytes = lower_sb->s_maxbytes;
+
+	/*
+	 * Our c/m/atime granularity is 1 ns because we may stack on file
+	 * systems whose granularity is as good.
+	 */
+	sb->s_time_gran = 1;
+
+	sb->s_magic = SDCARDFS_SUPER_MAGIC;
+	sb->s_op = &sdcardfs_sops;
+
+	/* get a new inode and allocate our root dentry */
+	inode = sdcardfs_iget(sb, d_inode(lower_path.dentry), 0);
+	if (IS_ERR(inode)) {
+		err = PTR_ERR(inode);
+		goto out_sput;
+	}
+	sb->s_root = d_make_root(inode);
+	if (!sb->s_root) {
+		err = -ENOMEM;
+		goto out_sput;
+	}
+	d_set_d_op(sb->s_root, &sdcardfs_ci_dops);
+
+	/* link the upper and lower dentries */
+	sb->s_root->d_fsdata = NULL;
+	err = new_dentry_private_data(sb->s_root);
+	if (err)
+		goto out_freeroot;
+
+	/* set the lower dentries for s_root */
+	sdcardfs_set_lower_path(sb->s_root, &lower_path);
+
+	/*
+	 * No need to call interpose because we already have a positive
+	 * dentry, which was instantiated by d_make_root.  Just need to
+	 * d_rehash it.
+	 */
+	d_rehash(sb->s_root);
+
+	/* setup permission policy */
+	sb_info->obbpath_s = kzalloc(PATH_MAX, GFP_KERNEL);
+	mutex_lock(&sdcardfs_super_list_lock);
+	if (sb_info->options.multiuser) {
+		setup_derived_state(d_inode(sb->s_root), PERM_PRE_ROOT,
+				sb_info->options.fs_user_id, AID_ROOT);
+		snprintf(sb_info->obbpath_s, PATH_MAX, "%s/obb", dev_name);
+	} else {
+		setup_derived_state(d_inode(sb->s_root), PERM_ROOT,
+				sb_info->options.fs_user_id, AID_ROOT);
+		snprintf(sb_info->obbpath_s, PATH_MAX, "%s/Android/obb", dev_name);
+	}
+	fixup_tmp_permissions(d_inode(sb->s_root));
+	sb_info->sb = sb;
+	list_add(&sb_info->list, &sdcardfs_super_list);
+	mutex_unlock(&sdcardfs_super_list_lock);
+
+	sb_info->fscrypt_nb.notifier_call = sdcardfs_on_fscrypt_key_removed;
+	fscrypt_register_key_removal_notifier(&sb_info->fscrypt_nb);
+
+	if (!(fc->sb_flags & SB_SILENT))
+		pr_info("sdcardfs: mounted on top of %s type %s\n",
+				dev_name, lower_sb->s_type->name);
+	goto out; /* all is well */
+
+	/* no longer needed: free_dentry_private_data(sb->s_root); */
+out_freeroot:
+	dput(sb->s_root);
+	sb->s_root = NULL;
+out_sput:
+	/* drop refs we took earlier */
+	atomic_dec(&lower_sb->s_active);
+	kfree(SDCARDFS_SB(sb));
+	sb->s_fs_info = NULL;
+out_free:
+	path_put(&lower_path);
+
+out:
+	return err;
+}
+
+static int sdcardfs_get_tree(struct fs_context *fc)
+{
+	return vfs_get_super(fc, vfs_get_independent_super,
+			__sdcardfs_fill_super);
+}
+
+void *sdcardfs_alloc_mnt_data(void)
+{
+	return kmalloc(sizeof(struct sdcardfs_vfsmount_options), GFP_KERNEL);
+}
+
+void sdcardfs_kill_sb(struct super_block *sb)
+{
+	struct sdcardfs_sb_info *sbi;
+
+	if (sb->s_magic == SDCARDFS_SUPER_MAGIC && sb->s_fs_info) {
+		sbi = SDCARDFS_SB(sb);
+
+		fscrypt_unregister_key_removal_notifier(&sbi->fscrypt_nb);
+
+		mutex_lock(&sdcardfs_super_list_lock);
+		list_del(&sbi->list);
+		mutex_unlock(&sdcardfs_super_list_lock);
+	}
+	kill_anon_super(sb);
+}
+
+static void sdcardfs_free_fs_context(struct fs_context *fc)
+{
+	struct sdcardfs_context_options *fc_opts = fc->fs_private;
+
+	kfree(fc_opts);
+}
+
+/* Most of the remount happens in sdcardfs_update_mnt_data */
+static int sdcardfs_reconfigure_context(struct fs_context *fc)
+{
+	struct sdcardfs_context_options *fc_opts = fc->fs_private;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(fc->root->d_sb);
+
+	sbi->options.debug = fc_opts->opts.debug;
+	if (sbi->options.debug) {
+		pr_info("sdcardfs : options - debug:%d\n", sbi->options.debug);
+		pr_info("sdcardfs : options - gid:%d\n", fc_opts->vfsopts.gid);
+		pr_info("sdcardfs : options - mask:%d\n",
+						fc_opts->vfsopts.mask);
+	}
+	return 0;
+}
+
+/* reconfigure is handled by sdcardfs_update_mnt_data */
+static const struct fs_context_operations sdcardfs_context_options_ops = {
+
+    .parse_param    = sdcardfs_parse_param,
+    .get_tree   = sdcardfs_get_tree,
+    .free       = sdcardfs_free_fs_context,
+    .reconfigure = sdcardfs_reconfigure_context,
+};
+
+static int sdcardfs_init_fs_context(struct fs_context *fc)
+{
+	struct sdcardfs_context_options *fc_opts =
+		kmalloc(sizeof(struct sdcardfs_context_options), GFP_KERNEL);
+
+	/* by default, we use AID_MEDIA_RW as uid, gid */
+	fc_opts->opts.fs_low_uid = AID_MEDIA_RW;
+	fc_opts->opts.fs_low_gid = AID_MEDIA_RW;
+	fc_opts->opts.fs_user_id = 0;
+	fc_opts->vfsopts.gid = 0;
+	fc_opts->vfsopts.mask = 0;
+
+	/* by default, 0MB is reserved */
+	fc_opts->opts.reserved_mb = 0;
+	/* by default, gid derivation is off */
+	fc_opts->opts.gid_derivation = false;
+	fc_opts->opts.default_normal = false;
+	fc_opts->opts.nocache = false;
+	fc_opts->opts.multiuser = false;
+	fc_opts->opts.debug = false;
+
+	fc->fs_private = fc_opts;
+	fc->ops = &sdcardfs_context_options_ops;
+	return 0;
+}
+
+static struct file_system_type sdcardfs_fs_type = {
+	.owner		= THIS_MODULE,
+	.name		= SDCARDFS_NAME,
+	.alloc_mnt_data = sdcardfs_alloc_mnt_data,
+	.kill_sb	= sdcardfs_kill_sb,
+	.init_fs_context = sdcardfs_init_fs_context,
+	.fs_flags	= 0,
+};
+MODULE_ALIAS_FS(SDCARDFS_NAME);
+
+static int __init init_sdcardfs_fs(void)
+{
+	int err;
+
+	pr_info("Registering sdcardfs " SDCARDFS_VERSION "\n");
+
+	err = sdcardfs_init_inode_cache();
+	if (err)
+		goto out;
+	err = sdcardfs_init_dentry_cache();
+	if (err)
+		goto out;
+	err = packagelist_init();
+	if (err)
+		goto out;
+	err = register_filesystem(&sdcardfs_fs_type);
+out:
+	if (err) {
+		sdcardfs_destroy_inode_cache();
+		sdcardfs_destroy_dentry_cache();
+		packagelist_exit();
+	}
+	return err;
+}
+
+static void __exit exit_sdcardfs_fs(void)
+{
+	sdcardfs_destroy_inode_cache();
+	sdcardfs_destroy_dentry_cache();
+	packagelist_exit();
+	unregister_filesystem(&sdcardfs_fs_type);
+	pr_info("Completed sdcardfs module unload\n");
+}
+
+/* Original wrapfs authors */
+MODULE_AUTHOR("Erez Zadok, Filesystems and Storage Lab, Stony Brook University (http://www.fsl.cs.sunysb.edu/)");
+
+/* Original sdcardfs authors */
+MODULE_AUTHOR("Woojoong Lee, Daeho Jeong, Kitae Lee, Yeongjin Gil System Memory Lab., Samsung Electronics");
+
+/* Current maintainer */
+MODULE_AUTHOR("Daniel Rosenberg, Google");
+MODULE_DESCRIPTION("Sdcardfs " SDCARDFS_VERSION);
+MODULE_LICENSE("GPL");
+
+module_init(init_sdcardfs_fs);
+module_exit(exit_sdcardfs_fs);
diff --git a/fs/sdcardfs/mmap.c b/fs/sdcardfs/mmap.c
new file mode 100644
index 0000000..0ec0950
--- /dev/null
+++ b/fs/sdcardfs/mmap.c
@@ -0,0 +1,87 @@
+/*
+ * fs/sdcardfs/mmap.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+
+static vm_fault_t sdcardfs_fault(struct vm_fault *vmf)
+{
+	vm_fault_t err;
+	struct file *file;
+	const struct vm_operations_struct *lower_vm_ops;
+
+	file = (struct file *)vmf->vma->vm_private_data;
+	lower_vm_ops = SDCARDFS_F(file)->lower_vm_ops;
+	BUG_ON(!lower_vm_ops);
+
+	err = lower_vm_ops->fault(vmf);
+	return err;
+}
+
+static void sdcardfs_vm_open(struct vm_area_struct *vma)
+{
+	struct file *file = (struct file *)vma->vm_private_data;
+
+	get_file(file);
+}
+
+static void sdcardfs_vm_close(struct vm_area_struct *vma)
+{
+	struct file *file = (struct file *)vma->vm_private_data;
+
+	fput(file);
+}
+
+static vm_fault_t sdcardfs_page_mkwrite(struct vm_fault *vmf)
+{
+	vm_fault_t err = 0;
+	struct file *file;
+	const struct vm_operations_struct *lower_vm_ops;
+
+	file = (struct file *)vmf->vma->vm_private_data;
+	lower_vm_ops = SDCARDFS_F(file)->lower_vm_ops;
+	BUG_ON(!lower_vm_ops);
+	if (!lower_vm_ops->page_mkwrite)
+		goto out;
+
+	err = lower_vm_ops->page_mkwrite(vmf);
+out:
+	return err;
+}
+
+static ssize_t sdcardfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
+{
+	/*
+	 * This function should never be called directly.  We need it
+	 * to exist, to get past a check in open_check_o_direct(),
+	 * which is called from do_last().
+	 */
+	return -EINVAL;
+}
+
+const struct address_space_operations sdcardfs_aops = {
+	.direct_IO	= sdcardfs_direct_IO,
+};
+
+const struct vm_operations_struct sdcardfs_vm_ops = {
+	.fault		= sdcardfs_fault,
+	.page_mkwrite	= sdcardfs_page_mkwrite,
+	.open		= sdcardfs_vm_open,
+	.close		= sdcardfs_vm_close,
+};
diff --git a/fs/sdcardfs/multiuser.h b/fs/sdcardfs/multiuser.h
new file mode 100644
index 0000000..85341e7
--- /dev/null
+++ b/fs/sdcardfs/multiuser.h
@@ -0,0 +1,53 @@
+/*
+ * fs/sdcardfs/multiuser.h
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#define AID_USER_OFFSET     100000 /* offset for uid ranges for each user */
+#define AID_APP_START        10000 /* first app user */
+#define AID_APP_END          19999 /* last app user */
+#define AID_CACHE_GID_START  20000 /* start of gids for apps to mark cached data */
+#define AID_EXT_GID_START    30000 /* start of gids for apps to mark external data */
+#define AID_EXT_CACHE_GID_START 40000 /* start of gids for apps to mark external cached data */
+#define AID_EXT_CACHE_GID_END 49999   /* end of gids for apps to mark external cached data */
+#define AID_SHARED_GID_START 50000 /* start of gids for apps in each user to share */
+
+typedef uid_t userid_t;
+typedef uid_t appid_t;
+
+static inline uid_t multiuser_get_uid(userid_t user_id, appid_t app_id)
+{
+	return (user_id * AID_USER_OFFSET) + (app_id % AID_USER_OFFSET);
+}
+
+static inline bool uid_is_app(uid_t uid)
+{
+	appid_t appid = uid % AID_USER_OFFSET;
+
+	return appid >= AID_APP_START && appid <= AID_APP_END;
+}
+
+static inline gid_t multiuser_get_ext_cache_gid(uid_t uid)
+{
+	return uid - AID_APP_START + AID_EXT_CACHE_GID_START;
+}
+
+static inline gid_t multiuser_get_ext_gid(uid_t uid)
+{
+	return uid - AID_APP_START + AID_EXT_GID_START;
+}
diff --git a/fs/sdcardfs/packagelist.c b/fs/sdcardfs/packagelist.c
new file mode 100644
index 0000000..4b9a563
--- /dev/null
+++ b/fs/sdcardfs/packagelist.c
@@ -0,0 +1,882 @@
+/*
+ * fs/sdcardfs/packagelist.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include "sdcardfs.h"
+#include <linux/hashtable.h>
+#include <linux/ctype.h>
+#include <linux/delay.h>
+#include <linux/radix-tree.h>
+#include <linux/dcache.h>
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+
+#include <linux/configfs.h>
+
+struct hashtable_entry {
+	struct hlist_node hlist;
+	struct hlist_node dlist; /* for deletion cleanup */
+	struct qstr key;
+	atomic_t value;
+};
+
+static DEFINE_HASHTABLE(package_to_appid, 8);
+static DEFINE_HASHTABLE(package_to_userid, 8);
+static DEFINE_HASHTABLE(ext_to_groupid, 8);
+
+
+static struct kmem_cache *hashtable_entry_cachep;
+
+static unsigned int full_name_case_hash(const void *salt, const unsigned char *name, unsigned int len)
+{
+	unsigned long hash = init_name_hash(salt);
+
+	while (len--)
+		hash = partial_name_hash(tolower(*name++), hash);
+	return end_name_hash(hash);
+}
+
+static inline void qstr_init(struct qstr *q, const char *name)
+{
+	q->name = name;
+	q->len = strlen(q->name);
+	q->hash = full_name_case_hash(0, q->name, q->len);
+}
+
+static inline int qstr_copy(const struct qstr *src, struct qstr *dest)
+{
+	dest->name = kstrdup(src->name, GFP_KERNEL);
+	dest->hash_len = src->hash_len;
+	return !!dest->name;
+}
+
+
+static appid_t __get_appid(const struct qstr *key)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = key->hash;
+	appid_t ret_id;
+
+	rcu_read_lock();
+	hash_for_each_possible_rcu(package_to_appid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key)) {
+			ret_id = atomic_read(&hash_cur->value);
+			rcu_read_unlock();
+			return ret_id;
+		}
+	}
+	rcu_read_unlock();
+	return 0;
+}
+
+appid_t get_appid(const char *key)
+{
+	struct qstr q;
+
+	qstr_init(&q, key);
+	return __get_appid(&q);
+}
+
+static appid_t __get_ext_gid(const struct qstr *key)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = key->hash;
+	appid_t ret_id;
+
+	rcu_read_lock();
+	hash_for_each_possible_rcu(ext_to_groupid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key)) {
+			ret_id = atomic_read(&hash_cur->value);
+			rcu_read_unlock();
+			return ret_id;
+		}
+	}
+	rcu_read_unlock();
+	return 0;
+}
+
+appid_t get_ext_gid(const char *key)
+{
+	struct qstr q;
+
+	qstr_init(&q, key);
+	return __get_ext_gid(&q);
+}
+
+static appid_t __is_excluded(const struct qstr *app_name, userid_t user)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = app_name->hash;
+
+	rcu_read_lock();
+	hash_for_each_possible_rcu(package_to_userid, hash_cur, hlist, hash) {
+		if (atomic_read(&hash_cur->value) == user &&
+				qstr_case_eq(app_name, &hash_cur->key)) {
+			rcu_read_unlock();
+			return 1;
+		}
+	}
+	rcu_read_unlock();
+	return 0;
+}
+
+appid_t is_excluded(const char *key, userid_t user)
+{
+	struct qstr q;
+	qstr_init(&q, key);
+	return __is_excluded(&q, user);
+}
+
+/* Kernel has already enforced everything we returned through
+ * derive_permissions_locked(), so this is used to lock down access
+ * even further, such as enforcing that apps hold sdcard_rw.
+ */
+int check_caller_access_to_name(struct inode *parent_node, const struct qstr *name)
+{
+	struct qstr q_autorun = QSTR_LITERAL("autorun.inf");
+	struct qstr q__android_secure = QSTR_LITERAL(".android_secure");
+	struct qstr q_android_secure = QSTR_LITERAL("android_secure");
+
+	/* Always block security-sensitive files at root */
+	if (parent_node && SDCARDFS_I(parent_node)->data->perm == PERM_ROOT) {
+		if (qstr_case_eq(name, &q_autorun)
+			|| qstr_case_eq(name, &q__android_secure)
+			|| qstr_case_eq(name, &q_android_secure)) {
+			return 0;
+		}
+	}
+
+	/* Root always has access; access for any other UIDs should always
+	 * be controlled through packages.list.
+	 */
+	if (from_kuid(&init_user_ns, current_fsuid()) == 0)
+		return 1;
+
+	/* No extra permissions to enforce */
+	return 1;
+}
+
+static struct hashtable_entry *alloc_hashtable_entry(const struct qstr *key,
+		appid_t value)
+{
+	struct hashtable_entry *ret = kmem_cache_alloc(hashtable_entry_cachep,
+			GFP_KERNEL);
+	if (!ret)
+		return NULL;
+	INIT_HLIST_NODE(&ret->dlist);
+	INIT_HLIST_NODE(&ret->hlist);
+
+	if (!qstr_copy(key, &ret->key)) {
+		kmem_cache_free(hashtable_entry_cachep, ret);
+		return NULL;
+	}
+
+	atomic_set(&ret->value, value);
+	return ret;
+}
+
+static int insert_packagelist_appid_entry_locked(const struct qstr *key, appid_t value)
+{
+	struct hashtable_entry *hash_cur;
+	struct hashtable_entry *new_entry;
+	unsigned int hash = key->hash;
+
+	hash_for_each_possible_rcu(package_to_appid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key)) {
+			atomic_set(&hash_cur->value, value);
+			return 0;
+		}
+	}
+	new_entry = alloc_hashtable_entry(key, value);
+	if (!new_entry)
+		return -ENOMEM;
+	hash_add_rcu(package_to_appid, &new_entry->hlist, hash);
+	return 0;
+}
+
+static int insert_ext_gid_entry_locked(const struct qstr *key, appid_t value)
+{
+	struct hashtable_entry *hash_cur;
+	struct hashtable_entry *new_entry;
+	unsigned int hash = key->hash;
+
+	/* An extension can only belong to one gid */
+	hash_for_each_possible_rcu(ext_to_groupid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key))
+			return -EINVAL;
+	}
+	new_entry = alloc_hashtable_entry(key, value);
+	if (!new_entry)
+		return -ENOMEM;
+	hash_add_rcu(ext_to_groupid, &new_entry->hlist, hash);
+	return 0;
+}
+
+static int insert_userid_exclude_entry_locked(const struct qstr *key, userid_t value)
+{
+	struct hashtable_entry *hash_cur;
+	struct hashtable_entry *new_entry;
+	unsigned int hash = key->hash;
+
+	/* Only insert if not already present */
+	hash_for_each_possible_rcu(package_to_userid, hash_cur, hlist, hash) {
+		if (atomic_read(&hash_cur->value) == value &&
+				qstr_case_eq(key, &hash_cur->key))
+			return 0;
+	}
+	new_entry = alloc_hashtable_entry(key, value);
+	if (!new_entry)
+		return -ENOMEM;
+	hash_add_rcu(package_to_userid, &new_entry->hlist, hash);
+	return 0;
+}
+
+static void fixup_all_perms_name(const struct qstr *key)
+{
+	struct sdcardfs_sb_info *sbinfo;
+	struct limit_search limit = {
+		.flags = BY_NAME,
+		.name = QSTR_INIT(key->name, key->len),
+	};
+	list_for_each_entry(sbinfo, &sdcardfs_super_list, list) {
+		if (sbinfo_has_sdcard_magic(sbinfo))
+			fixup_perms_recursive(sbinfo->sb->s_root, &limit);
+	}
+}
+
+static void fixup_all_perms_name_userid(const struct qstr *key, userid_t userid)
+{
+	struct sdcardfs_sb_info *sbinfo;
+	struct limit_search limit = {
+		.flags = BY_NAME | BY_USERID,
+		.name = QSTR_INIT(key->name, key->len),
+		.userid = userid,
+	};
+	list_for_each_entry(sbinfo, &sdcardfs_super_list, list) {
+		if (sbinfo_has_sdcard_magic(sbinfo))
+			fixup_perms_recursive(sbinfo->sb->s_root, &limit);
+	}
+}
+
+static void fixup_all_perms_userid(userid_t userid)
+{
+	struct sdcardfs_sb_info *sbinfo;
+	struct limit_search limit = {
+		.flags = BY_USERID,
+		.userid = userid,
+	};
+	list_for_each_entry(sbinfo, &sdcardfs_super_list, list) {
+		if (sbinfo_has_sdcard_magic(sbinfo))
+			fixup_perms_recursive(sbinfo->sb->s_root, &limit);
+	}
+}
+
+static int insert_packagelist_entry(const struct qstr *key, appid_t value)
+{
+	int err;
+
+	mutex_lock(&sdcardfs_super_list_lock);
+	err = insert_packagelist_appid_entry_locked(key, value);
+	if (!err)
+		fixup_all_perms_name(key);
+	mutex_unlock(&sdcardfs_super_list_lock);
+
+	return err;
+}
+
+static int insert_ext_gid_entry(const struct qstr *key, appid_t value)
+{
+	int err;
+
+	mutex_lock(&sdcardfs_super_list_lock);
+	err = insert_ext_gid_entry_locked(key, value);
+	mutex_unlock(&sdcardfs_super_list_lock);
+
+	return err;
+}
+
+static int insert_userid_exclude_entry(const struct qstr *key, userid_t value)
+{
+	int err;
+
+	mutex_lock(&sdcardfs_super_list_lock);
+	err = insert_userid_exclude_entry_locked(key, value);
+	if (!err)
+		fixup_all_perms_name_userid(key, value);
+	mutex_unlock(&sdcardfs_super_list_lock);
+
+	return err;
+}
+
+static void free_hashtable_entry(struct hashtable_entry *entry)
+{
+	kfree(entry->key.name);
+	kmem_cache_free(hashtable_entry_cachep, entry);
+}
+
+static void remove_packagelist_entry_locked(const struct qstr *key)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = key->hash;
+	struct hlist_node *h_t;
+	HLIST_HEAD(free_list);
+
+	hash_for_each_possible_rcu(package_to_userid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key)) {
+			hash_del_rcu(&hash_cur->hlist);
+			hlist_add_head(&hash_cur->dlist, &free_list);
+		}
+	}
+	hash_for_each_possible_rcu(package_to_appid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key)) {
+			hash_del_rcu(&hash_cur->hlist);
+			hlist_add_head(&hash_cur->dlist, &free_list);
+			break;
+		}
+	}
+	synchronize_rcu();
+	hlist_for_each_entry_safe(hash_cur, h_t, &free_list, dlist)
+		free_hashtable_entry(hash_cur);
+}
+
+static void remove_packagelist_entry(const struct qstr *key)
+{
+	mutex_lock(&sdcardfs_super_list_lock);
+	remove_packagelist_entry_locked(key);
+	fixup_all_perms_name(key);
+	mutex_unlock(&sdcardfs_super_list_lock);
+}
+
+static void remove_ext_gid_entry_locked(const struct qstr *key, gid_t group)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = key->hash;
+
+	hash_for_each_possible_rcu(ext_to_groupid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key) && atomic_read(&hash_cur->value) == group) {
+			hash_del_rcu(&hash_cur->hlist);
+			synchronize_rcu();
+			free_hashtable_entry(hash_cur);
+			break;
+		}
+	}
+}
+
+static void remove_ext_gid_entry(const struct qstr *key, gid_t group)
+{
+	mutex_lock(&sdcardfs_super_list_lock);
+	remove_ext_gid_entry_locked(key, group);
+	mutex_unlock(&sdcardfs_super_list_lock);
+}
+
+static void remove_userid_all_entry_locked(userid_t userid)
+{
+	struct hashtable_entry *hash_cur;
+	struct hlist_node *h_t;
+	HLIST_HEAD(free_list);
+	int i;
+
+	hash_for_each_rcu(package_to_userid, i, hash_cur, hlist) {
+		if (atomic_read(&hash_cur->value) == userid) {
+			hash_del_rcu(&hash_cur->hlist);
+			hlist_add_head(&hash_cur->dlist, &free_list);
+		}
+	}
+	synchronize_rcu();
+	hlist_for_each_entry_safe(hash_cur, h_t, &free_list, dlist) {
+		free_hashtable_entry(hash_cur);
+	}
+}
+
+static void remove_userid_all_entry(userid_t userid)
+{
+	mutex_lock(&sdcardfs_super_list_lock);
+	remove_userid_all_entry_locked(userid);
+	fixup_all_perms_userid(userid);
+	mutex_unlock(&sdcardfs_super_list_lock);
+}
+
+static void remove_userid_exclude_entry_locked(const struct qstr *key, userid_t userid)
+{
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = key->hash;
+
+	hash_for_each_possible_rcu(package_to_userid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(key, &hash_cur->key) &&
+				atomic_read(&hash_cur->value) == userid) {
+			hash_del_rcu(&hash_cur->hlist);
+			synchronize_rcu();
+			free_hashtable_entry(hash_cur);
+			break;
+		}
+	}
+}
+
+static void remove_userid_exclude_entry(const struct qstr *key, userid_t userid)
+{
+	mutex_lock(&sdcardfs_super_list_lock);
+	remove_userid_exclude_entry_locked(key, userid);
+	fixup_all_perms_name_userid(key, userid);
+	mutex_unlock(&sdcardfs_super_list_lock);
+}
+
+static void packagelist_destroy(void)
+{
+	struct hashtable_entry *hash_cur;
+	struct hlist_node *h_t;
+	HLIST_HEAD(free_list);
+	int i;
+
+	mutex_lock(&sdcardfs_super_list_lock);
+	hash_for_each_rcu(package_to_appid, i, hash_cur, hlist) {
+		hash_del_rcu(&hash_cur->hlist);
+		hlist_add_head(&hash_cur->dlist, &free_list);
+	}
+	hash_for_each_rcu(package_to_userid, i, hash_cur, hlist) {
+		hash_del_rcu(&hash_cur->hlist);
+		hlist_add_head(&hash_cur->dlist, &free_list);
+	}
+	synchronize_rcu();
+	hlist_for_each_entry_safe(hash_cur, h_t, &free_list, dlist)
+		free_hashtable_entry(hash_cur);
+	mutex_unlock(&sdcardfs_super_list_lock);
+	pr_info("sdcardfs: destroyed packagelist pkgld\n");
+}
+
+#define SDCARDFS_CONFIGFS_ATTR(_pfx, _name)			\
+static struct configfs_attribute _pfx##attr_##_name = {	\
+	.ca_name	= __stringify(_name),		\
+	.ca_mode	= S_IRUGO | S_IWUGO,		\
+	.ca_owner	= THIS_MODULE,			\
+	.show		= _pfx##_name##_show,		\
+	.store		= _pfx##_name##_store,		\
+}
+
+#define SDCARDFS_CONFIGFS_ATTR_RO(_pfx, _name)			\
+static struct configfs_attribute _pfx##attr_##_name = {	\
+	.ca_name	= __stringify(_name),		\
+	.ca_mode	= S_IRUGO,			\
+	.ca_owner	= THIS_MODULE,			\
+	.show		= _pfx##_name##_show,		\
+}
+
+#define SDCARDFS_CONFIGFS_ATTR_WO(_pfx, _name)			\
+static struct configfs_attribute _pfx##attr_##_name = {	\
+	.ca_name	= __stringify(_name),		\
+	.ca_mode	= S_IWUGO,			\
+	.ca_owner	= THIS_MODULE,			\
+	.store		= _pfx##_name##_store,		\
+}
+
+struct package_details {
+	struct config_item item;
+	struct qstr name;
+};
+
+static inline struct package_details *to_package_details(struct config_item *item)
+{
+	return item ? container_of(item, struct package_details, item) : NULL;
+}
+
+static ssize_t package_details_appid_show(struct config_item *item, char *page)
+{
+	return scnprintf(page, PAGE_SIZE, "%u\n", __get_appid(&to_package_details(item)->name));
+}
+
+static ssize_t package_details_appid_store(struct config_item *item,
+				       const char *page, size_t count)
+{
+	unsigned int tmp;
+	int ret;
+
+	ret = kstrtouint(page, 10, &tmp);
+	if (ret)
+		return ret;
+
+	ret = insert_packagelist_entry(&to_package_details(item)->name, tmp);
+
+	if (ret)
+		return ret;
+
+	return count;
+}
+
+static ssize_t package_details_excluded_userids_show(struct config_item *item,
+				      char *page)
+{
+	struct package_details *package_details = to_package_details(item);
+	struct hashtable_entry *hash_cur;
+	unsigned int hash = package_details->name.hash;
+	int count = 0;
+
+	rcu_read_lock();
+	hash_for_each_possible_rcu(package_to_userid, hash_cur, hlist, hash) {
+		if (qstr_case_eq(&package_details->name, &hash_cur->key))
+			count += scnprintf(page + count, PAGE_SIZE - count,
+					"%d ", atomic_read(&hash_cur->value));
+	}
+	rcu_read_unlock();
+	if (count)
+		count--;
+	count += scnprintf(page + count, PAGE_SIZE - count, "\n");
+	return count;
+}
+
+static ssize_t package_details_excluded_userids_store(struct config_item *item,
+				       const char *page, size_t count)
+{
+	unsigned int tmp;
+	int ret;
+
+	ret = kstrtouint(page, 10, &tmp);
+	if (ret)
+		return ret;
+
+	ret = insert_userid_exclude_entry(&to_package_details(item)->name, tmp);
+
+	if (ret)
+		return ret;
+
+	return count;
+}
+
+static ssize_t package_details_clear_userid_store(struct config_item *item,
+				       const char *page, size_t count)
+{
+	unsigned int tmp;
+	int ret;
+
+	ret = kstrtouint(page, 10, &tmp);
+	if (ret)
+		return ret;
+	remove_userid_exclude_entry(&to_package_details(item)->name, tmp);
+	return count;
+}
+
+static void package_details_release(struct config_item *item)
+{
+	struct package_details *package_details = to_package_details(item);
+
+	pr_info("sdcardfs: removing %s\n", package_details->name.name);
+	remove_packagelist_entry(&package_details->name);
+	kfree(package_details->name.name);
+	kfree(package_details);
+}
+
+SDCARDFS_CONFIGFS_ATTR(package_details_, appid);
+SDCARDFS_CONFIGFS_ATTR(package_details_, excluded_userids);
+SDCARDFS_CONFIGFS_ATTR_WO(package_details_, clear_userid);
+
+static struct configfs_attribute *package_details_attrs[] = {
+	&package_details_attr_appid,
+	&package_details_attr_excluded_userids,
+	&package_details_attr_clear_userid,
+	NULL,
+};
+
+static struct configfs_item_operations package_details_item_ops = {
+	.release = package_details_release,
+};
+
+static struct config_item_type package_appid_type = {
+	.ct_item_ops	= &package_details_item_ops,
+	.ct_attrs	= package_details_attrs,
+	.ct_owner	= THIS_MODULE,
+};
+
+struct extensions_value {
+	struct config_group group;
+	unsigned int num;
+};
+
+struct extension_details {
+	struct config_item item;
+	struct qstr name;
+	unsigned int num;
+};
+
+static inline struct extensions_value *to_extensions_value(struct config_item *item)
+{
+	return item ? container_of(to_config_group(item), struct extensions_value, group) : NULL;
+}
+
+static inline struct extension_details *to_extension_details(struct config_item *item)
+{
+	return item ? container_of(item, struct extension_details, item) : NULL;
+}
+
+static void extension_details_release(struct config_item *item)
+{
+	struct extension_details *extension_details = to_extension_details(item);
+
+	pr_info("sdcardfs: No longer mapping %s files to gid %d\n",
+			extension_details->name.name, extension_details->num);
+	remove_ext_gid_entry(&extension_details->name, extension_details->num);
+	kfree(extension_details->name.name);
+	kfree(extension_details);
+}
+
+static struct configfs_item_operations extension_details_item_ops = {
+	.release = extension_details_release,
+};
+
+static struct config_item_type extension_details_type = {
+	.ct_item_ops = &extension_details_item_ops,
+	.ct_owner = THIS_MODULE,
+};
+
+static struct config_item *extension_details_make_item(struct config_group *group, const char *name)
+{
+	struct extensions_value *extensions_value = to_extensions_value(&group->cg_item);
+	struct extension_details *extension_details = kzalloc(sizeof(struct extension_details), GFP_KERNEL);
+	const char *tmp;
+	int ret;
+
+	if (!extension_details)
+		return ERR_PTR(-ENOMEM);
+
+	tmp = kstrdup(name, GFP_KERNEL);
+	if (!tmp) {
+		kfree(extension_details);
+		return ERR_PTR(-ENOMEM);
+	}
+	qstr_init(&extension_details->name, tmp);
+	extension_details->num = extensions_value->num;
+	ret = insert_ext_gid_entry(&extension_details->name, extensions_value->num);
+
+	if (ret) {
+		kfree(extension_details->name.name);
+		kfree(extension_details);
+		return ERR_PTR(ret);
+	}
+	config_item_init_type_name(&extension_details->item, name, &extension_details_type);
+
+	return &extension_details->item;
+}
+
+static struct configfs_group_operations extensions_value_group_ops = {
+	.make_item = extension_details_make_item,
+};
+
+static struct config_item_type extensions_name_type = {
+	.ct_group_ops	= &extensions_value_group_ops,
+	.ct_owner	= THIS_MODULE,
+};
+
+static struct config_group *extensions_make_group(struct config_group *group, const char *name)
+{
+	struct extensions_value *extensions_value;
+	unsigned int tmp;
+	int ret;
+
+	extensions_value = kzalloc(sizeof(struct extensions_value), GFP_KERNEL);
+	if (!extensions_value)
+		return ERR_PTR(-ENOMEM);
+	ret = kstrtouint(name, 10, &tmp);
+	if (ret) {
+		kfree(extensions_value);
+		return ERR_PTR(ret);
+	}
+
+	extensions_value->num = tmp;
+	config_group_init_type_name(&extensions_value->group, name,
+						&extensions_name_type);
+	return &extensions_value->group;
+}
+
+static void extensions_drop_group(struct config_group *group, struct config_item *item)
+{
+	struct extensions_value *value = to_extensions_value(item);
+
+	pr_info("sdcardfs: No longer mapping any files to gid %d\n", value->num);
+	kfree(value);
+}
+
+static struct configfs_group_operations extensions_group_ops = {
+	.make_group	= extensions_make_group,
+	.drop_item	= extensions_drop_group,
+};
+
+static struct config_item_type extensions_type = {
+	.ct_group_ops	= &extensions_group_ops,
+	.ct_owner	= THIS_MODULE,
+};
+
+struct config_group extension_group = {
+	.cg_item = {
+		.ci_namebuf = "extensions",
+		.ci_type = &extensions_type,
+	},
+};
+
+static struct config_item *packages_make_item(struct config_group *group, const char *name)
+{
+	struct package_details *package_details;
+	const char *tmp;
+
+	package_details = kzalloc(sizeof(struct package_details), GFP_KERNEL);
+	if (!package_details)
+		return ERR_PTR(-ENOMEM);
+	tmp = kstrdup(name, GFP_KERNEL);
+	if (!tmp) {
+		kfree(package_details);
+		return ERR_PTR(-ENOMEM);
+	}
+	qstr_init(&package_details->name, tmp);
+	config_item_init_type_name(&package_details->item, name,
+						&package_appid_type);
+
+	return &package_details->item;
+}
+
+static ssize_t packages_list_show(struct config_item *item, char *page)
+{
+	struct hashtable_entry *hash_cur_app;
+	struct hashtable_entry *hash_cur_user;
+	int i;
+	int count = 0, written = 0;
+	const char errormsg[] = "<truncated>\n";
+	unsigned int hash;
+
+	rcu_read_lock();
+	hash_for_each_rcu(package_to_appid, i, hash_cur_app, hlist) {
+		written = scnprintf(page + count, PAGE_SIZE - sizeof(errormsg) - count, "%s %d\n",
+					hash_cur_app->key.name, atomic_read(&hash_cur_app->value));
+		hash = hash_cur_app->key.hash;
+		hash_for_each_possible_rcu(package_to_userid, hash_cur_user, hlist, hash) {
+			if (qstr_case_eq(&hash_cur_app->key, &hash_cur_user->key)) {
+				written += scnprintf(page + count + written - 1,
+					PAGE_SIZE - sizeof(errormsg) - count - written + 1,
+					" %d\n", atomic_read(&hash_cur_user->value)) - 1;
+			}
+		}
+		if (count + written == PAGE_SIZE - sizeof(errormsg) - 1) {
+			count += scnprintf(page + count, PAGE_SIZE - count, errormsg);
+			break;
+		}
+		count += written;
+	}
+	rcu_read_unlock();
+
+	return count;
+}
+
+static ssize_t packages_remove_userid_store(struct config_item *item,
+				       const char *page, size_t count)
+{
+	unsigned int tmp;
+	int ret;
+
+	ret = kstrtouint(page, 10, &tmp);
+	if (ret)
+		return ret;
+	remove_userid_all_entry(tmp);
+	return count;
+}
+
+static struct configfs_attribute packages_attr_packages_gid_list = {
+	.ca_name	= "packages_gid.list",
+	.ca_mode	= S_IRUGO,
+	.ca_owner	= THIS_MODULE,
+	.show		= packages_list_show,
+};
+
+SDCARDFS_CONFIGFS_ATTR_WO(packages_, remove_userid);
+
+static struct configfs_attribute *packages_attrs[] = {
+	&packages_attr_packages_gid_list,
+	&packages_attr_remove_userid,
+	NULL,
+};
+
+/*
+ * Note that, since no extra work is required on ->drop_item(),
+ * no ->drop_item() is provided.
+ */
+static struct configfs_group_operations packages_group_ops = {
+	.make_item	= packages_make_item,
+};
+
+static struct config_item_type packages_type = {
+	.ct_group_ops	= &packages_group_ops,
+	.ct_attrs	= packages_attrs,
+	.ct_owner	= THIS_MODULE,
+};
+
+struct config_group *sd_default_groups[] = {
+	&extension_group,
+	NULL,
+};
+
+static struct configfs_subsystem sdcardfs_packages = {
+	.su_group = {
+		.cg_item = {
+			.ci_namebuf = "sdcardfs",
+			.ci_type = &packages_type,
+		},
+	},
+};
+
+static int configfs_sdcardfs_init(void)
+{
+	int ret, i;
+	struct configfs_subsystem *subsys = &sdcardfs_packages;
+
+	config_group_init(&subsys->su_group);
+	for (i = 0; sd_default_groups[i]; i++) {
+		config_group_init(sd_default_groups[i]);
+		configfs_add_default_group(sd_default_groups[i], &subsys->su_group);
+	}
+	mutex_init(&subsys->su_mutex);
+	ret = configfs_register_subsystem(subsys);
+	if (ret) {
+		pr_err("Error %d while registering subsystem %s\n",
+		       ret,
+		       subsys->su_group.cg_item.ci_namebuf);
+	}
+	return ret;
+}
+
+static void configfs_sdcardfs_exit(void)
+{
+	configfs_unregister_subsystem(&sdcardfs_packages);
+}
+
+int packagelist_init(void)
+{
+	hashtable_entry_cachep =
+		kmem_cache_create("packagelist_hashtable_entry",
+					sizeof(struct hashtable_entry), 0, 0, NULL);
+	if (!hashtable_entry_cachep) {
+		pr_err("sdcardfs: failed creating pkgl_hashtable entry slab cache\n");
+		return -ENOMEM;
+	}
+
+	configfs_sdcardfs_init();
+	return 0;
+}
+
+void packagelist_exit(void)
+{
+	configfs_sdcardfs_exit();
+	packagelist_destroy();
+	kmem_cache_destroy(hashtable_entry_cachep);
+}
diff --git a/fs/sdcardfs/sdcardfs.h b/fs/sdcardfs/sdcardfs.h
new file mode 100644
index 0000000..4af4f16
--- /dev/null
+++ b/fs/sdcardfs/sdcardfs.h
@@ -0,0 +1,665 @@
+/*
+ * fs/sdcardfs/sdcardfs.h
+ *
+ * The sdcardfs v2.0
+ *   This file system replaces the sdcard daemon on Android
+ *   On version 2.0, some of the daemon functions have been ported
+ *   to support the multi-user concepts of Android 4.4
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#ifndef _SDCARDFS_H_
+#define _SDCARDFS_H_
+
+#include <linux/dcache.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/aio.h>
+#include <linux/kref.h>
+#include <linux/mm.h>
+#include <linux/mount.h>
+#include <linux/namei.h>
+#include <linux/seq_file.h>
+#include <linux/statfs.h>
+#include <linux/fs_stack.h>
+#include <linux/magic.h>
+#include <linux/uaccess.h>
+#include <linux/slab.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/security.h>
+#include <linux/string.h>
+#include <linux/list.h>
+#include <linux/iversion.h>
+#include <uapi/linux/mount.h>
+#include "multiuser.h"
+
+/* the file system name */
+#define SDCARDFS_NAME "sdcardfs"
+
+/* sdcardfs root inode number */
+#define SDCARDFS_ROOT_INO     1
+
+/* useful for tracking code reachability */
+#define UDBG pr_default("DBG:%s:%s:%d\n", __FILE__, __func__, __LINE__)
+
+#define SDCARDFS_DIRENT_SIZE 256
+
+/* temporary static uid settings for development */
+#define AID_ROOT             0	/* uid for accessing /mnt/sdcard & extSdcard */
+#define AID_MEDIA_RW      1023	/* internal media storage write access */
+
+#define AID_SDCARD_RW     1015	/* external storage write access */
+#define AID_SDCARD_R      1028	/* external storage read access */
+#define AID_SDCARD_PICS   1033	/* external storage photos access */
+#define AID_SDCARD_AV     1034	/* external storage audio/video access */
+#define AID_SDCARD_ALL    1035	/* access all users external storage */
+#define AID_MEDIA_OBB     1059  /* obb files */
+
+#define AID_SDCARD_IMAGE  1057
+
+#define AID_PACKAGE_INFO  1027
+
+
+/*
+ * Permissions are handled by our permission function.
+ * We don't want anyone who happens to look at our inode value to prematurely
+ * block access, so store more permissive values. These are probably never
+ * used.
+ */
+#define fixup_tmp_permissions(x)	\
+	do {						\
+		(x)->i_uid = make_kuid(&init_user_ns,	\
+				SDCARDFS_I(x)->data->d_uid);	\
+		(x)->i_gid = make_kgid(&init_user_ns, AID_SDCARD_RW);	\
+		(x)->i_mode = ((x)->i_mode & S_IFMT) | 0775;\
+	} while (0)
+
+/* Android 5.0 support */
+
+/* Permission mode for a specific node. Controls how file permissions
+ * are derived for children nodes.
+ */
+typedef enum {
+	/* Nothing special; this node should just inherit from its parent. */
+	PERM_INHERIT,
+	/* This node is one level above a normal root; used for legacy layouts
+	 * which use the first level to represent user_id.
+	 */
+	PERM_PRE_ROOT,
+	/* This node is "/" */
+	PERM_ROOT,
+	/* This node is "/Android" */
+	PERM_ANDROID,
+	/* This node is "/Android/data" */
+	PERM_ANDROID_DATA,
+	/* This node is "/Android/obb" */
+	PERM_ANDROID_OBB,
+	/* This node is "/Android/media" */
+	PERM_ANDROID_MEDIA,
+	/* This node is "/Android/[data|media|obb]/[package]" */
+	PERM_ANDROID_PACKAGE,
+	/* This node is "/Android/[data|media|obb]/[package]/cache" */
+	PERM_ANDROID_PACKAGE_CACHE,
+} perm_t;
+
+struct sdcardfs_sb_info;
+struct sdcardfs_mount_options;
+struct sdcardfs_inode_info;
+struct sdcardfs_inode_data;
+
+/* Do not directly use this function. Use OVERRIDE_CRED() instead. */
+const struct cred *override_fsids(struct sdcardfs_sb_info *sbi,
+			struct sdcardfs_inode_data *data);
+/* Do not directly use this function, use REVERT_CRED() instead. */
+void revert_fsids(const struct cred *old_cred);
+
+/* operations vectors defined in specific files */
+extern const struct file_operations sdcardfs_main_fops;
+extern const struct file_operations sdcardfs_dir_fops;
+extern const struct inode_operations sdcardfs_main_iops;
+extern const struct inode_operations sdcardfs_dir_iops;
+extern const struct inode_operations sdcardfs_symlink_iops;
+extern const struct super_operations sdcardfs_sops;
+extern const struct dentry_operations sdcardfs_ci_dops;
+extern const struct address_space_operations sdcardfs_aops, sdcardfs_dummy_aops;
+extern const struct vm_operations_struct sdcardfs_vm_ops;
+
+extern int sdcardfs_init_inode_cache(void);
+extern void sdcardfs_destroy_inode_cache(void);
+extern int sdcardfs_init_dentry_cache(void);
+extern void sdcardfs_destroy_dentry_cache(void);
+extern int new_dentry_private_data(struct dentry *dentry);
+extern void free_dentry_private_data(struct dentry *dentry);
+extern struct dentry *sdcardfs_lookup(struct inode *dir, struct dentry *dentry,
+				unsigned int flags);
+extern struct inode *sdcardfs_iget(struct super_block *sb,
+				 struct inode *lower_inode, userid_t id);
+extern int sdcardfs_interpose(struct dentry *dentry, struct super_block *sb,
+			    struct path *lower_path, userid_t id);
+extern int sdcardfs_on_fscrypt_key_removed(struct notifier_block *nb,
+					   unsigned long action, void *data);
+
+/* file private data */
+struct sdcardfs_file_info {
+	struct file *lower_file;
+	const struct vm_operations_struct *lower_vm_ops;
+};
+
+struct sdcardfs_inode_data {
+	struct kref refcount;
+	bool abandoned;
+
+	perm_t perm;
+	userid_t userid;
+	uid_t d_uid;
+	bool under_android;
+	bool under_cache;
+	bool under_obb;
+};
+
+/* sdcardfs inode data in memory */
+struct sdcardfs_inode_info {
+	struct inode *lower_inode;
+	/* state derived based on current position in hierarchy */
+	struct sdcardfs_inode_data *data;
+
+	/* top folder for ownership */
+	spinlock_t top_lock;
+	struct sdcardfs_inode_data *top_data;
+
+	struct inode vfs_inode;
+};
+
+
+/* sdcardfs dentry data in memory */
+struct sdcardfs_dentry_info {
+	spinlock_t lock;	/* protects lower_path */
+	struct path lower_path;
+	struct path orig_path;
+};
+
+struct sdcardfs_mount_options {
+	uid_t fs_low_uid;
+	gid_t fs_low_gid;
+	userid_t fs_user_id;
+	bool multiuser;
+	bool gid_derivation;
+	bool default_normal;
+	bool unshared_obb;
+	unsigned int reserved_mb;
+	bool nocache;
+	bool debug;
+};
+
+struct sdcardfs_vfsmount_options {
+	gid_t gid;
+	mode_t mask;
+};
+
+struct sdcardfs_context_options {
+	struct sdcardfs_mount_options opts;
+	struct sdcardfs_vfsmount_options vfsopts;
+};
+
+extern int parse_options_remount(struct super_block *sb, char *options, int silent,
+		struct sdcardfs_vfsmount_options *vfsopts);
+
+/* sdcardfs super-block data in memory */
+struct sdcardfs_sb_info {
+	struct super_block *sb;
+	struct super_block *lower_sb;
+	/* derived perm policy : some of options have been added
+	 * to sdcardfs_mount_options (Android 4.4 support)
+	 */
+	struct sdcardfs_mount_options options;
+	spinlock_t lock;	/* protects obbpath */
+	char *obbpath_s;
+	struct path obbpath;
+	void *pkgl_id;
+	struct list_head list;
+	struct notifier_block fscrypt_nb;
+};
+
+/*
+ * inode to private data
+ *
+ * Since we use containers and the struct inode is _inside_ the
+ * sdcardfs_inode_info structure, SDCARDFS_I will always (given a non-NULL
+ * inode pointer), return a valid non-NULL pointer.
+ */
+static inline struct sdcardfs_inode_info *SDCARDFS_I(const struct inode *inode)
+{
+	return container_of(inode, struct sdcardfs_inode_info, vfs_inode);
+}
+
+/* dentry to private data */
+#define SDCARDFS_D(dent) ((struct sdcardfs_dentry_info *)(dent)->d_fsdata)
+
+/* superblock to private data */
+#define SDCARDFS_SB(super) ((struct sdcardfs_sb_info *)(super)->s_fs_info)
+
+/* file to private Data */
+#define SDCARDFS_F(file) ((struct sdcardfs_file_info *)((file)->private_data))
+
+/* file to lower file */
+static inline struct file *sdcardfs_lower_file(const struct file *f)
+{
+	return SDCARDFS_F(f)->lower_file;
+}
+
+static inline void sdcardfs_set_lower_file(struct file *f, struct file *val)
+{
+	SDCARDFS_F(f)->lower_file = val;
+}
+
+/* inode to lower inode. */
+static inline struct inode *sdcardfs_lower_inode(const struct inode *i)
+{
+	return SDCARDFS_I(i)->lower_inode;
+}
+
+static inline void sdcardfs_set_lower_inode(struct inode *i, struct inode *val)
+{
+	SDCARDFS_I(i)->lower_inode = val;
+}
+
+/* superblock to lower superblock */
+static inline struct super_block *sdcardfs_lower_super(
+	const struct super_block *sb)
+{
+	return SDCARDFS_SB(sb)->lower_sb;
+}
+
+static inline void sdcardfs_set_lower_super(struct super_block *sb,
+					  struct super_block *val)
+{
+	SDCARDFS_SB(sb)->lower_sb = val;
+}
+
+/* path based (dentry/mnt) macros */
+static inline void pathcpy(struct path *dst, const struct path *src)
+{
+	dst->dentry = src->dentry;
+	dst->mnt = src->mnt;
+}
+
+/* sdcardfs_get_pname functions calls path_get()
+ * therefore, the caller must call "proper" path_put functions
+ */
+#define SDCARDFS_DENT_FUNC(pname) \
+static inline void sdcardfs_get_##pname(const struct dentry *dent, \
+					struct path *pname) \
+{ \
+	spin_lock(&SDCARDFS_D(dent)->lock); \
+	pathcpy(pname, &SDCARDFS_D(dent)->pname); \
+	path_get(pname); \
+	spin_unlock(&SDCARDFS_D(dent)->lock); \
+	return; \
+} \
+static inline void sdcardfs_put_##pname(const struct dentry *dent, \
+					struct path *pname) \
+{ \
+	path_put(pname); \
+	return; \
+} \
+static inline void sdcardfs_set_##pname(const struct dentry *dent, \
+					struct path *pname) \
+{ \
+	spin_lock(&SDCARDFS_D(dent)->lock); \
+	pathcpy(&SDCARDFS_D(dent)->pname, pname); \
+	spin_unlock(&SDCARDFS_D(dent)->lock); \
+	return; \
+} \
+static inline void sdcardfs_reset_##pname(const struct dentry *dent) \
+{ \
+	spin_lock(&SDCARDFS_D(dent)->lock); \
+	SDCARDFS_D(dent)->pname.dentry = NULL; \
+	SDCARDFS_D(dent)->pname.mnt = NULL; \
+	spin_unlock(&SDCARDFS_D(dent)->lock); \
+	return; \
+} \
+static inline void sdcardfs_put_reset_##pname(const struct dentry *dent) \
+{ \
+	struct path pname; \
+	spin_lock(&SDCARDFS_D(dent)->lock); \
+	if (SDCARDFS_D(dent)->pname.dentry) { \
+		pathcpy(&pname, &SDCARDFS_D(dent)->pname); \
+		SDCARDFS_D(dent)->pname.dentry = NULL; \
+		SDCARDFS_D(dent)->pname.mnt = NULL; \
+		spin_unlock(&SDCARDFS_D(dent)->lock); \
+		path_put(&pname); \
+	} else \
+		spin_unlock(&SDCARDFS_D(dent)->lock); \
+	return; \
+}
+
+SDCARDFS_DENT_FUNC(lower_path)
+SDCARDFS_DENT_FUNC(orig_path)
+
+static inline bool sbinfo_has_sdcard_magic(struct sdcardfs_sb_info *sbinfo)
+{
+	return sbinfo && sbinfo->sb
+			&& sbinfo->sb->s_magic == SDCARDFS_SUPER_MAGIC;
+}
+
+static inline struct sdcardfs_inode_data *data_get(
+		struct sdcardfs_inode_data *data)
+{
+	if (data)
+		kref_get(&data->refcount);
+	return data;
+}
+
+static inline struct sdcardfs_inode_data *top_data_get(
+		struct sdcardfs_inode_info *info)
+{
+	struct sdcardfs_inode_data *top_data;
+
+	spin_lock(&info->top_lock);
+	top_data = data_get(info->top_data);
+	spin_unlock(&info->top_lock);
+	return top_data;
+}
+
+extern void data_release(struct kref *ref);
+
+static inline void data_put(struct sdcardfs_inode_data *data)
+{
+	kref_put(&data->refcount, data_release);
+}
+
+static inline void release_own_data(struct sdcardfs_inode_info *info)
+{
+	/*
+	 * This happens exactly once per inode. At this point, the inode that
+	 * originally held this data is about to be freed, and all references
+	 * to it are held as a top value, and will likely be released soon.
+	 */
+	info->data->abandoned = true;
+	data_put(info->data);
+}
+
+static inline void set_top(struct sdcardfs_inode_info *info,
+			struct sdcardfs_inode_info *top_owner)
+{
+	struct sdcardfs_inode_data *old_top;
+	struct sdcardfs_inode_data *new_top = NULL;
+
+	if (top_owner)
+		new_top = top_data_get(top_owner);
+
+	spin_lock(&info->top_lock);
+	old_top = info->top_data;
+	info->top_data = new_top;
+	if (old_top)
+		data_put(old_top);
+	spin_unlock(&info->top_lock);
+}
+
+static inline int get_gid(struct vfsmount *mnt,
+		struct super_block *sb,
+		struct sdcardfs_inode_data *data)
+{
+	struct sdcardfs_vfsmount_options *vfsopts = mnt->data;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(sb);
+
+	if (vfsopts->gid == AID_SDCARD_RW && !sbi->options.default_normal)
+		/* As an optimization, certain trusted system components only run
+		 * as owner but operate across all users. Since we're now handing
+		 * out the sdcard_rw GID only to trusted apps, we're okay relaxing
+		 * the user boundary enforcement for the default view. The UIDs
+		 * assigned to app directories are still multiuser aware.
+		 */
+		return AID_SDCARD_RW;
+	else
+		return multiuser_get_uid(data->userid, vfsopts->gid);
+}
+
+static inline int get_mode(struct vfsmount *mnt,
+		struct sdcardfs_inode_info *info,
+		struct sdcardfs_inode_data *data)
+{
+	int owner_mode;
+	int filtered_mode;
+	struct sdcardfs_vfsmount_options *opts = mnt->data;
+	int visible_mode = 0775 & ~opts->mask;
+
+
+	if (data->perm == PERM_PRE_ROOT) {
+		/* Top of multi-user view should always be visible to ensure
+		* secondary users can traverse inside.
+		*/
+		visible_mode = 0711;
+	} else if (data->under_android) {
+		/* Block "other" access to Android directories, since only apps
+		* belonging to a specific user should be in there; we still
+		* leave +x open for the default view.
+		*/
+		if (opts->gid == AID_SDCARD_RW)
+			visible_mode = visible_mode & ~0006;
+		else
+			visible_mode = visible_mode & ~0007;
+	}
+	owner_mode = info->lower_inode->i_mode & 0700;
+	filtered_mode = visible_mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
+	return filtered_mode;
+}
+
+static inline int has_graft_path(const struct dentry *dent)
+{
+	int ret = 0;
+
+	spin_lock(&SDCARDFS_D(dent)->lock);
+	if (SDCARDFS_D(dent)->orig_path.dentry != NULL)
+		ret = 1;
+	spin_unlock(&SDCARDFS_D(dent)->lock);
+
+	return ret;
+}
+
+static inline void sdcardfs_get_real_lower(const struct dentry *dent,
+						struct path *real_lower)
+{
+	/* in case of a local obb dentry
+	 * the orig_path should be returned
+	 */
+	if (has_graft_path(dent))
+		sdcardfs_get_orig_path(dent, real_lower);
+	else
+		sdcardfs_get_lower_path(dent, real_lower);
+}
+
+static inline void sdcardfs_put_real_lower(const struct dentry *dent,
+						struct path *real_lower)
+{
+	if (has_graft_path(dent))
+		sdcardfs_put_orig_path(dent, real_lower);
+	else
+		sdcardfs_put_lower_path(dent, real_lower);
+}
+
+extern struct mutex sdcardfs_super_list_lock;
+extern struct list_head sdcardfs_super_list;
+
+/* for packagelist.c */
+extern appid_t get_appid(const char *app_name);
+extern appid_t get_ext_gid(const char *app_name);
+extern appid_t is_excluded(const char *app_name, userid_t userid);
+extern int check_caller_access_to_name(struct inode *parent_node, const struct qstr *name);
+extern int packagelist_init(void);
+extern void packagelist_exit(void);
+
+/* for derived_perm.c */
+#define BY_NAME		(1 << 0)
+#define BY_USERID	(1 << 1)
+struct limit_search {
+	unsigned int flags;
+	struct qstr name;
+	userid_t userid;
+};
+
+extern void setup_derived_state(struct inode *inode, perm_t perm,
+			userid_t userid, uid_t uid);
+extern void get_derived_permission(struct dentry *parent, struct dentry *dentry);
+extern void get_derived_permission_new(struct dentry *parent, struct dentry *dentry, const struct qstr *name);
+extern void fixup_perms_recursive(struct dentry *dentry, struct limit_search *limit);
+
+extern void update_derived_permission_lock(struct dentry *dentry);
+void fixup_lower_ownership(struct dentry *dentry, const char *name);
+extern int need_graft_path(struct dentry *dentry);
+extern int is_base_obbpath(struct dentry *dentry);
+extern int is_obbpath_invalid(struct dentry *dentry);
+extern int setup_obb_dentry(struct dentry *dentry, struct path *lower_path);
+
+/* locking helpers */
+static inline struct dentry *lock_parent(struct dentry *dentry)
+{
+	struct dentry *dir = dget_parent(dentry);
+
+	inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
+	return dir;
+}
+
+static inline void unlock_dir(struct dentry *dir)
+{
+	inode_unlock(d_inode(dir));
+	dput(dir);
+}
+
+static inline int prepare_dir(const char *path_s, uid_t uid, gid_t gid, mode_t mode)
+{
+	int err;
+	struct dentry *dent;
+	struct iattr attrs;
+	struct path parent;
+
+	dent = kern_path_locked(path_s, &parent);
+	if (IS_ERR(dent)) {
+		err = PTR_ERR(dent);
+		if (err == -EEXIST)
+			err = 0;
+		goto out_unlock;
+	}
+
+	err = vfs_mkdir2(parent.mnt, d_inode(parent.dentry), dent, mode);
+	if (err) {
+		if (err == -EEXIST)
+			err = 0;
+		goto out_dput;
+	}
+
+	attrs.ia_uid = make_kuid(&init_user_ns, uid);
+	attrs.ia_gid = make_kgid(&init_user_ns, gid);
+	attrs.ia_valid = ATTR_UID | ATTR_GID;
+	inode_lock(d_inode(dent));
+	notify_change2(parent.mnt, dent, &attrs, NULL);
+	inode_unlock(d_inode(dent));
+
+out_dput:
+	dput(dent);
+
+out_unlock:
+	/* parent dentry locked by lookup_create */
+	inode_unlock(d_inode(parent.dentry));
+	path_put(&parent);
+	return err;
+}
+
+/*
+ * Return 1, if a disk has enough free space, otherwise 0.
+ * We assume that any files can not be overwritten.
+ */
+static inline int check_min_free_space(struct dentry *dentry, size_t size, int dir)
+{
+	int err;
+	struct path lower_path;
+	struct kstatfs statfs;
+	u64 avail;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+
+	if (sbi->options.reserved_mb) {
+		/* Get fs stat of lower filesystem. */
+		sdcardfs_get_lower_path(dentry, &lower_path);
+		err = vfs_statfs(&lower_path, &statfs);
+		sdcardfs_put_lower_path(dentry, &lower_path);
+
+		if (unlikely(err))
+			return 0;
+
+		/* Invalid statfs informations. */
+		if (unlikely(statfs.f_bsize == 0))
+			return 0;
+
+		/* if you are checking directory, set size to f_bsize. */
+		if (unlikely(dir))
+			size = statfs.f_bsize;
+
+		/* available size */
+		avail = statfs.f_bavail * statfs.f_bsize;
+
+		/* not enough space */
+		if ((u64)size > avail)
+			return 0;
+
+		/* enough space */
+		if ((avail - size) > (sbi->options.reserved_mb * 1024 * 1024))
+			return 1;
+
+		return 0;
+	} else
+		return 1;
+}
+
+/*
+ * Copies attrs and maintains sdcardfs managed attrs
+ * Since our permission check handles all special permissions, set those to be open
+ */
+static inline void sdcardfs_copy_and_fix_attrs(struct inode *dest, const struct inode *src)
+{
+	dest->i_mode = (src->i_mode  & S_IFMT) | S_IRWXU | S_IRWXG |
+			S_IROTH | S_IXOTH; /* 0775 */
+	dest->i_uid = make_kuid(&init_user_ns, SDCARDFS_I(dest)->data->d_uid);
+	dest->i_gid = make_kgid(&init_user_ns, AID_SDCARD_RW);
+	dest->i_rdev = src->i_rdev;
+	dest->i_atime = src->i_atime;
+	dest->i_mtime = src->i_mtime;
+	dest->i_ctime = src->i_ctime;
+	dest->i_blkbits = src->i_blkbits;
+	dest->i_flags = src->i_flags;
+	set_nlink(dest, src->i_nlink);
+}
+
+static inline bool str_case_eq(const char *s1, const char *s2)
+{
+	return !strcasecmp(s1, s2);
+}
+
+static inline bool str_n_case_eq(const char *s1, const char *s2, size_t len)
+{
+	return !strncasecmp(s1, s2, len);
+}
+
+static inline bool qstr_case_eq(const struct qstr *q1, const struct qstr *q2)
+{
+	return q1->len == q2->len && str_n_case_eq(q1->name, q2->name, q2->len);
+}
+
+#define QSTR_LITERAL(string) QSTR_INIT(string, sizeof(string)-1)
+
+#endif	/* not _SDCARDFS_H_ */
diff --git a/fs/sdcardfs/super.c b/fs/sdcardfs/super.c
new file mode 100644
index 0000000..3d8762e
--- /dev/null
+++ b/fs/sdcardfs/super.c
@@ -0,0 +1,314 @@
+/*
+ * fs/sdcardfs/super.c
+ *
+ * Copyright (c) 2013 Samsung Electronics Co. Ltd
+ *   Authors: Daeho Jeong, Woojoong Lee, Seunghwan Hyun,
+ *               Sunghwan Yun, Sungjong Seo
+ *
+ * This program has been developed as a stackable file system based on
+ * the WrapFS which written by
+ *
+ * Copyright (c) 1998-2011 Erez Zadok
+ * Copyright (c) 2009     Shrikar Archak
+ * Copyright (c) 2003-2011 Stony Brook University
+ * Copyright (c) 2003-2011 The Research Foundation of SUNY
+ *
+ * This file is dual licensed.  It may be redistributed and/or modified
+ * under the terms of the Apache 2.0 License OR version 2 of the GNU
+ * General Public License.
+ */
+
+#include <linux/fs_context.h>
+
+#include "sdcardfs.h"
+
+/*
+ * The inode cache is used with alloc_inode for both our inode info and the
+ * vfs inode.
+ */
+static struct kmem_cache *sdcardfs_inode_cachep;
+
+/*
+ * To support the top references, we must track some data separately.
+ * An sdcardfs_inode_info always has a reference to its data, and once set up,
+ * also has a reference to its top. The top may be itself, in which case it
+ * holds two references to its data. When top is changed, it takes a ref to the
+ * new data and then drops the ref to the old data.
+ */
+static struct kmem_cache *sdcardfs_inode_data_cachep;
+
+void data_release(struct kref *ref)
+{
+	struct sdcardfs_inode_data *data =
+		container_of(ref, struct sdcardfs_inode_data, refcount);
+
+	kmem_cache_free(sdcardfs_inode_data_cachep, data);
+}
+
+/* final actions when unmounting a file system */
+static void sdcardfs_put_super(struct super_block *sb)
+{
+	struct sdcardfs_sb_info *spd;
+	struct super_block *s;
+
+	spd = SDCARDFS_SB(sb);
+	if (!spd)
+		return;
+
+	if (spd->obbpath_s) {
+		kfree(spd->obbpath_s);
+		path_put(&spd->obbpath);
+	}
+
+	/* decrement lower super references */
+	s = sdcardfs_lower_super(sb);
+	sdcardfs_set_lower_super(sb, NULL);
+	atomic_dec(&s->s_active);
+
+	kfree(spd);
+	sb->s_fs_info = NULL;
+}
+
+static int sdcardfs_statfs(struct dentry *dentry, struct kstatfs *buf)
+{
+	int err;
+	struct path lower_path;
+	u32 min_blocks;
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
+
+	sdcardfs_get_lower_path(dentry, &lower_path);
+	err = vfs_statfs(&lower_path, buf);
+	sdcardfs_put_lower_path(dentry, &lower_path);
+
+	if (sbi->options.reserved_mb) {
+		/* Invalid statfs informations. */
+		if (buf->f_bsize == 0) {
+			pr_err("Returned block size is zero.\n");
+			return -EINVAL;
+		}
+
+		min_blocks = ((sbi->options.reserved_mb * 1024 * 1024)/buf->f_bsize);
+		buf->f_blocks -= min_blocks;
+
+		if (buf->f_bavail > min_blocks)
+			buf->f_bavail -= min_blocks;
+		else
+			buf->f_bavail = 0;
+
+		/* Make reserved blocks invisiable to media storage */
+		buf->f_bfree = buf->f_bavail;
+	}
+
+	/* set return buf to our f/s to avoid confusing user-level utils */
+	buf->f_type = SDCARDFS_SUPER_MAGIC;
+
+	return err;
+}
+
+static void *sdcardfs_clone_mnt_data(void *data)
+{
+	struct sdcardfs_vfsmount_options *opt = kmalloc(sizeof(struct sdcardfs_vfsmount_options), GFP_KERNEL);
+	struct sdcardfs_vfsmount_options *old = data;
+
+	if (!opt)
+		return NULL;
+	opt->gid = old->gid;
+	opt->mask = old->mask;
+	return opt;
+}
+
+static void sdcardfs_copy_mnt_data(void *data, void *newdata)
+{
+	struct sdcardfs_vfsmount_options *old = data;
+	struct sdcardfs_vfsmount_options *new = newdata;
+
+	old->gid = new->gid;
+	old->mask = new->mask;
+}
+
+static void sdcardfs_update_mnt_data(void *data, struct fs_context *fc)
+{
+	struct sdcardfs_vfsmount_options *opts = data;
+	struct sdcardfs_context_options *fcopts = fc->fs_private;
+
+	opts->gid = fcopts->vfsopts.gid;
+	opts->mask = fcopts->vfsopts.mask;
+}
+
+/*
+ * Called by iput() when the inode reference count reached zero
+ * and the inode is not hashed anywhere.  Used to clear anything
+ * that needs to be, before the inode is completely destroyed and put
+ * on the inode free list.
+ */
+static void sdcardfs_evict_inode(struct inode *inode)
+{
+	struct inode *lower_inode;
+
+	truncate_inode_pages(&inode->i_data, 0);
+	set_top(SDCARDFS_I(inode), NULL);
+	clear_inode(inode);
+	/*
+	 * Decrement a reference to a lower_inode, which was incremented
+	 * by our read_inode when it was created initially.
+	 */
+	lower_inode = sdcardfs_lower_inode(inode);
+	sdcardfs_set_lower_inode(inode, NULL);
+	iput(lower_inode);
+}
+
+static struct inode *sdcardfs_alloc_inode(struct super_block *sb)
+{
+	struct sdcardfs_inode_info *i;
+	struct sdcardfs_inode_data *d;
+
+	i = kmem_cache_alloc(sdcardfs_inode_cachep, GFP_KERNEL);
+	if (!i)
+		return NULL;
+
+	/* memset everything up to the inode to 0 */
+	memset(i, 0, offsetof(struct sdcardfs_inode_info, vfs_inode));
+
+	d = kmem_cache_alloc(sdcardfs_inode_data_cachep,
+					GFP_KERNEL | __GFP_ZERO);
+	if (!d) {
+		kmem_cache_free(sdcardfs_inode_cachep, i);
+		return NULL;
+	}
+
+	i->data = d;
+	kref_init(&d->refcount);
+	i->top_data = d;
+	spin_lock_init(&i->top_lock);
+	kref_get(&d->refcount);
+
+	inode_set_iversion(&i->vfs_inode, 1);
+	return &i->vfs_inode;
+}
+
+static void i_callback(struct rcu_head *head)
+{
+	struct inode *inode = container_of(head, struct inode, i_rcu);
+
+	release_own_data(SDCARDFS_I(inode));
+	kmem_cache_free(sdcardfs_inode_cachep, SDCARDFS_I(inode));
+}
+
+static void sdcardfs_destroy_inode(struct inode *inode)
+{
+	call_rcu(&inode->i_rcu, i_callback);
+}
+
+/* sdcardfs inode cache constructor */
+static void init_once(void *obj)
+{
+	struct sdcardfs_inode_info *i = obj;
+
+	inode_init_once(&i->vfs_inode);
+}
+
+int sdcardfs_init_inode_cache(void)
+{
+	sdcardfs_inode_cachep =
+		kmem_cache_create("sdcardfs_inode_cache",
+				  sizeof(struct sdcardfs_inode_info), 0,
+				  SLAB_RECLAIM_ACCOUNT, init_once);
+
+	if (!sdcardfs_inode_cachep)
+		return -ENOMEM;
+
+	sdcardfs_inode_data_cachep =
+		kmem_cache_create("sdcardfs_inode_data_cache",
+				  sizeof(struct sdcardfs_inode_data), 0,
+				  SLAB_RECLAIM_ACCOUNT, NULL);
+	if (!sdcardfs_inode_data_cachep) {
+		kmem_cache_destroy(sdcardfs_inode_cachep);
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+/* sdcardfs inode cache destructor */
+void sdcardfs_destroy_inode_cache(void)
+{
+	kmem_cache_destroy(sdcardfs_inode_data_cachep);
+	kmem_cache_destroy(sdcardfs_inode_cachep);
+}
+
+/*
+ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
+ * code can actually succeed and won't leave tasks that need handling.
+ */
+static void sdcardfs_umount_begin(struct super_block *sb)
+{
+	struct super_block *lower_sb;
+
+	lower_sb = sdcardfs_lower_super(sb);
+	if (lower_sb && lower_sb->s_op && lower_sb->s_op->umount_begin)
+		lower_sb->s_op->umount_begin(lower_sb);
+}
+
+static int sdcardfs_show_options(struct vfsmount *mnt, struct seq_file *m,
+			struct dentry *root)
+{
+	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(root->d_sb);
+	struct sdcardfs_mount_options *opts = &sbi->options;
+	struct sdcardfs_vfsmount_options *vfsopts = mnt->data;
+
+	if (opts->fs_low_uid != 0)
+		seq_printf(m, ",fsuid=%u", opts->fs_low_uid);
+	if (opts->fs_low_gid != 0)
+		seq_printf(m, ",fsgid=%u", opts->fs_low_gid);
+	if (vfsopts->gid != 0)
+		seq_printf(m, ",gid=%u", vfsopts->gid);
+	if (opts->multiuser)
+		seq_puts(m, ",multiuser");
+	if (vfsopts->mask)
+		seq_printf(m, ",mask=%u", vfsopts->mask);
+	if (opts->fs_user_id)
+		seq_printf(m, ",userid=%u", opts->fs_user_id);
+	if (opts->gid_derivation)
+		seq_puts(m, ",derive_gid");
+	if (opts->default_normal)
+		seq_puts(m, ",default_normal");
+	if (opts->reserved_mb != 0)
+		seq_printf(m, ",reserved=%uMB", opts->reserved_mb);
+	if (opts->nocache)
+		seq_printf(m, ",nocache");
+	if (opts->unshared_obb)
+		seq_printf(m, ",unshared_obb");
+
+	return 0;
+};
+
+int sdcardfs_on_fscrypt_key_removed(struct notifier_block *nb,
+				    unsigned long action, void *data)
+{
+	struct sdcardfs_sb_info *sbi = container_of(nb, struct sdcardfs_sb_info,
+						    fscrypt_nb);
+
+	/*
+	 * Evict any unused sdcardfs dentries (and hence any unused sdcardfs
+	 * inodes, since sdcardfs doesn't cache unpinned inodes by themselves)
+	 * so that the lower filesystem's encrypted inodes can be evicted.
+	 * This is needed to make the FS_IOC_REMOVE_ENCRYPTION_KEY ioctl
+	 * properly "lock" the files underneath the sdcardfs mount.
+	 */
+	shrink_dcache_sb(sbi->sb);
+	return NOTIFY_OK;
+}
+
+const struct super_operations sdcardfs_sops = {
+	.put_super	= sdcardfs_put_super,
+	.statfs		= sdcardfs_statfs,
+	.clone_mnt_data	= sdcardfs_clone_mnt_data,
+	.copy_mnt_data	= sdcardfs_copy_mnt_data,
+	.update_mnt_data = sdcardfs_update_mnt_data,
+	.evict_inode	= sdcardfs_evict_inode,
+	.umount_begin	= sdcardfs_umount_begin,
+	.show_options2	= sdcardfs_show_options,
+	.alloc_inode	= sdcardfs_alloc_inode,
+	.destroy_inode	= sdcardfs_destroy_inode,
+	.drop_inode	= generic_delete_inode,
+};
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 @@
 				      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..cc475d8 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>
@@ -220,6 +220,7 @@
 	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 6c0e19f..f3c96d9 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -81,7 +81,7 @@
 	struct ubifs_inode *ui;
 	bool encrypted = false;
 
-	if (ubifs_crypt_is_encrypted(dir)) {
+	if (IS_ENCRYPTED(dir)) {
 		err = fscrypt_get_encryption_info(dir);
 		if (err) {
 			ubifs_err(c, "fscrypt_get_encryption_info failed: %i", err);
@@ -196,6 +196,7 @@
 	return 0;
 }
 
+static void ubifs_set_d_ops(struct inode *dir, struct dentry *dentry);
 static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 				   unsigned int flags)
 {
@@ -209,6 +210,7 @@
 	dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
 
 	err = fscrypt_prepare_lookup(dir, dentry, &nm);
+	ubifs_set_d_ops(dir, dentry);
 	if (err == -ENOENT)
 		return d_splice_alias(NULL, dentry);
 	if (err)
@@ -225,9 +227,7 @@
 		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 +263,7 @@
 		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",
@@ -501,7 +501,7 @@
 	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);
 
@@ -514,7 +514,7 @@
 
 	if (encrypted) {
 		err = fscrypt_get_encryption_info(dir);
-		if (err && err != -ENOKEY)
+		if (err)
 			return err;
 
 		err = fscrypt_fname_alloc_buffer(dir, UBIFS_MAX_NLEN, &fstr);
@@ -1620,7 +1620,7 @@
 
 static int ubifs_dir_open(struct inode *dir, struct file *file)
 {
-	if (ubifs_crypt_is_encrypted(dir))
+	if (IS_ENCRYPTED(dir))
 		return fscrypt_get_encryption_info(dir) ? -EACCES : 0;
 
 	return 0;
@@ -1657,3 +1657,19 @@
 	.compat_ioctl   = ubifs_compat_ioctl,
 #endif
 };
+
+#ifdef CONFIG_FS_ENCRYPTION
+static const struct dentry_operations ubifs_encrypted_dentry_ops = {
+	.d_revalidate = fscrypt_d_revalidate,
+};
+#endif
+
+static void ubifs_set_d_ops(struct inode *dir, struct dentry *dentry)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	if (dentry->d_flags & DCACHE_ENCRYPTED_NAME) {
+		d_set_d_op(dentry, &ubifs_encrypted_dentry_ops);
+		return;
+	}
+#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 @@
 
 	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 @@
 			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 @@
 	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 @@
 	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 a6ae2428..32750b6 100644
--- a/fs/ubifs/journal.c
+++ b/fs/ubifs/journal.c
@@ -588,7 +588,7 @@
 
 	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 @@
 	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 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 ",
@@ -1451,7 +1451,7 @@
 	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;
@@ -1467,7 +1467,7 @@
 		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 @@
 	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 @@
 
 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 9aefbb6..26e1a74 100644
--- a/fs/ubifs/xattr.c
+++ b/fs/ubifs/xattr.c
@@ -669,7 +669,8 @@
 
 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..90656b9 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 @@
 	}
 	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 c;
+		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..ebf17d7 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -912,7 +912,8 @@
 					 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 +1465,8 @@
 		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 +1628,8 @@
 		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;
diff --git a/fs/utimes.c b/fs/utimes.c
index 0907393..283793d 100644
--- a/fs/utimes.c
+++ b/fs/utimes.c
@@ -57,7 +57,7 @@
 	}
 retry_deleg:
 	inode_lock(inode);
-	error = notify_change(path->dentry, &newattrs, &delegated_inode);
+	error = notify_change2(path->mnt, path->dentry, &newattrs, &delegated_inode);
 	inode_unlock(inode);
 	if (delegated_inode) {
 		error = break_deleg_wait(&delegated_inode);
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
index eabc6ac..d734ceb 100644
--- a/fs/verity/enable.c
+++ b/fs/verity/enable.c
@@ -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 @@
 		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 @@
 
 		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 @@
 				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 @@
 }
 
 /*
- * 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 @@
 		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 @@
 	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 @@
 	err = 0;
 out:
 	kfree(pending_hashes);
-	ahash_request_free(req);
+	fsverity_free_hash_request(params->hash_alg, req);
 	return err;
 }
 
@@ -175,8 +216,7 @@
 
 	/* 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 @@
 
 	/* 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 @@
 	 */
 	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 @@
 
 /**
  * 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.
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index e74c79b..e96d99d 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 @@
 	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 @@
 	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,7 +61,7 @@
 	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
@@ -114,20 +117,24 @@
 
 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..c37e186 100644
--- a/fs/verity/hash_algs.c
+++ b/fs/verity/hash_algs.c
@@ -24,6 +24,8 @@
 	},
 };
 
+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 @@
  *
  * 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 @@
 	}
 	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 @@
 			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 @@
 	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 @@
  * 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 @@
 	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 @@
 	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 @@
  *
  * 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 @@
 	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 @@
 
 	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/measure.c b/fs/verity/measure.c
index 05049b6..df409a5 100644
--- a/fs/verity/measure.c
+++ b/fs/verity/measure.c
@@ -11,6 +11,8 @@
 
 /**
  * fsverity_ioctl_measure() - get a verity file's measurement
+ * @filp: file to get measurement 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
diff --git a/fs/verity/open.c b/fs/verity/open.c
index 63d1004..bfe0280 100644
--- a/fs/verity/open.c
+++ b/fs/verity/open.c
@@ -31,7 +31,7 @@
 				     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 @@
 		/* 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;
@@ -126,7 +127,7 @@
  * Compute the file measurement 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,
+static int compute_file_measurement(struct fsverity_hash_alg *hash_alg,
 				    struct fsverity_descriptor *desc,
 				    u8 *measurement)
 {
@@ -220,11 +221,20 @@
 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 @@
 
 /**
  * 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.
  */
diff --git a/fs/verity/signature.c b/fs/verity/signature.c
index c8b2552..b14ed96 100644
--- a/fs/verity/signature.c
+++ b/fs/verity/signature.c
@@ -28,6 +28,9 @@
 
 /**
  * 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.
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index 3e8f2de..a8b68c6 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -84,7 +84,8 @@
  * 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 @@
 		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 @@
 
 /**
  * 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 @@
 	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 @@
 #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 @@
 {
 	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..6b45eea 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -131,7 +131,7 @@
 			return -EPERM;
 	}
 
-	return inode_permission(inode, mask);
+	return inode_permission2(ERR_PTR(-EOPNOTSUPP), inode, mask);
 }
 
 int
@@ -318,7 +318,7 @@
 		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 @@
 		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 @@
 		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/libxfs/xfs_trans_inode.c b/fs/xfs/libxfs/xfs_trans_inode.c
index 6c7354a..0ba7368 100644
--- a/fs/xfs/libxfs/xfs_trans_inode.c
+++ b/fs/xfs/libxfs/xfs_trans_inode.c
@@ -100,9 +100,9 @@
 	 * to log the timestamps, or will clear already cleared fields in the
 	 * worst case.
 	 */
-	if (inode->i_state & (I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED)) {
+	if (inode->i_state & I_DIRTY_TIME) {
 		spin_lock(&inode->i_lock);
-		inode->i_state &= ~(I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED);
+		inode->i_state &= ~I_DIRTY_TIME;
 		spin_unlock(&inode->i_lock);
 	}
 
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/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index f050039..ef257c1 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -63,11 +63,15 @@
  * .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 TEXT_CFI_MAIN .text.[0-9a-zA-Z_]*.cfi
 #define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..LPBX*
 #define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
 #define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]*
@@ -75,6 +79,7 @@
 #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
@@ -521,7 +526,9 @@
 #define TEXT_TEXT							\
 		ALIGN_FUNCTION();					\
 		*(.text.hot TEXT_MAIN .text.fixup .text.unlikely)	\
+		*(TEXT_CFI_MAIN)					\
 		*(.text..refcount)					\
+		*(.text..ftrace)					\
 		*(.ref.text)						\
 	MEM_KEEP(init.text*)						\
 	MEM_KEEP(exit.text*)						\
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 @@
 		   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/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 @@
 		     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/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_property;
 struct drm_property_blob;
 struct drm_printer;
+struct drm_panel;
 struct edid;
 struct i2c_adapter;
 
@@ -281,6 +282,10 @@
 /* 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 @@
 	 * 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 @@
 
 	/** @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_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 @@
 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 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 @@
 #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 @@
 	u8 channel;
 	u8 type;
 	u16 flags;
+	u32 ctrl;
+	u32 wait_ms;
 
 	size_t tx_len;
 	const void *tx_buf;
@@ -131,6 +139,10 @@
 #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 @@
 	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 @@
 	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 @@
 	 * 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 @@
 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 @@
 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/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..c0d3abb
--- /dev/null
+++ b/include/linux/android_vendor.h
@@ -0,0 +1,32 @@
+/* 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]
+
+#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 @@
 	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 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_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..8a3002f
--- /dev/null
+++ b/include/linux/blk-crypto.h
@@ -0,0 +1,166 @@
+/* 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);
+
+void __bio_crypt_clone(struct bio *dst, struct bio *src, gfp_t gfp_mask);
+static inline void 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))
+		__bio_crypt_clone(dst, src, gfp_mask);
+}
+
+#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 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 @@
 	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_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 @@
 	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 @@
 	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 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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	/*
 	 * 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 @@
 	 * 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 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 @@
 	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 @@
 {
 	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 @@
 
 #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 @@
 	/* 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/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 @@
  *		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_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 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 @@
 #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 333a669..b7eea16 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -42,3 +42,19 @@
  * compilers, like ICC.
  */
 #define barrier() __asm__ __volatile__("" : : : "memory")
+
+#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 72393a8..40d7f89 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -104,7 +104,7 @@
 	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
@@ -202,6 +202,18 @@
 # 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 @@
 	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 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 @@
 	 * 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_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_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..efade9a7 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 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,11 @@
 	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;
 
 /*
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h
index 58424eb..798f0b9b 100644
--- a/include/linux/debugfs.h
+++ b/include/linux/debugfs.h
@@ -54,6 +54,8 @@
 	.llseek  = no_llseek,						\
 }
 
+typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
+
 #if defined(CONFIG_DEBUG_FS)
 
 struct dentry *debugfs_lookup(const char *name, struct dentry *parent);
@@ -75,7 +77,6 @@
 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
 				      const char *dest);
 
-typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
 struct dentry *debugfs_create_automount(const char *name,
 					struct dentry *parent,
 					debugfs_automount_t f,
@@ -203,7 +204,7 @@
 
 static inline struct dentry *debugfs_create_automount(const char *name,
 					struct dentry *parent,
-					struct vfsmount *(*f)(void *),
+					debugfs_automount_t f,
 					void *data)
 {
 	return ERR_PTR(-ENODEV);
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index e4e1f5c..043e6df 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_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)
@@ -316,6 +317,12 @@
 	 * whether or not its underlying devices have support.
 	 */
 	bool discards_supported:1;
+
+	/*
+	 * Set if inline crypto capabilities from this target's underlying
+	 * device(s) can be exposed via the device-mapper device.
+	 */
+	bool may_passthrough_inline_crypto:1;
 };
 
 /* Each target can link one of these into the table */
@@ -423,10 +430,23 @@
 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="
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 @@
  *		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 @@
 	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 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 @@
  * @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 @@
 	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 @@
 	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 @@
 	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 @@
  * 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 @@
 #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 @@
  * 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 @@
  * @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 @@
 	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 @@
 	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 *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 @@
 #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 @@
 	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..fe97c0b 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -179,6 +179,41 @@
 	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 @@
 	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 @@
 
 	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);
 };
 
 /**
@@ -328,6 +414,8 @@
  * @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.
  *
  * 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 +433,7 @@
 	struct sg_table *sgt;
 	enum dma_data_direction dir;
 	void *priv;
+	unsigned long dma_map_attrs;
 };
 
 /**
@@ -412,8 +501,14 @@
 				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 +516,7 @@
 		 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-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_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 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..3828573 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 @@
 	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)
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 @@
  * 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 @@
 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 @@
 
 
 
-#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 901bda3..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 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 @@
 	/* 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_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 @@
 #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 @@
 {
 	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..a5dbb57 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 @@
 			__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_padding;		/* padding */
 			__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_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 @@
 
 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 4c82683..b62805c 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>
@@ -407,6 +408,11 @@
 	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 +468,11 @@
 	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 +517,11 @@
 	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 +752,9 @@
 #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);
@@ -1030,6 +1049,9 @@
 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 +1062,9 @@
 	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 +1138,10 @@
 			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 +1400,7 @@
 #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 +1413,12 @@
 #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_enc_strict_mode(sb) \
+	(sb->s_encoding_flags & SB_ENC_STRICT_MODE_FL)
+
 /*
  *	Umount options
  */
@@ -1451,6 +1487,10 @@
 #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;
@@ -1549,6 +1589,11 @@
 
 	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
@@ -1710,13 +1755,21 @@
  * VFS helper functions..
  */
 extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
+extern int vfs_create2(struct vfsmount *, struct inode *, struct dentry *, umode_t, bool);
 extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
+extern int vfs_mkdir2(struct vfsmount *, struct inode *, struct dentry *, umode_t);
 extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
+extern int vfs_mknod2(struct vfsmount *, struct inode *, struct dentry *, umode_t, dev_t);
 extern int vfs_symlink(struct inode *, struct dentry *, const char *);
+extern int vfs_symlink2(struct vfsmount *, struct inode *, struct dentry *, const char *);
 extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
+extern int vfs_link2(struct vfsmount *, struct dentry *, struct inode *, struct dentry *, struct inode **);
 extern int vfs_rmdir(struct inode *, struct dentry *);
+extern int vfs_rmdir2(struct vfsmount *, struct inode *, struct dentry *);
 extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
+extern int vfs_unlink2(struct vfsmount *, struct inode *, struct dentry *, struct inode **);
 extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
+extern int vfs_rename2(struct vfsmount *, struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
 extern int vfs_whiteout(struct inode *, struct dentry *);
 
 extern struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode,
@@ -1725,6 +1778,9 @@
 int vfs_mkobj(struct dentry *, umode_t,
 		int (*f)(struct dentry *, umode_t, void *),
 		void *);
+int vfs_mkobj2(struct vfsmount *, struct dentry *, umode_t,
+		int (*f)(struct dentry *, umode_t, void *),
+		void *);
 
 extern long vfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
 
@@ -1859,12 +1915,18 @@
 				   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 {
 	struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
 	const char * (*get_link) (struct dentry *, struct inode *, struct delayed_call *);
 	int (*permission) (struct inode *, int);
+	int (*permission2) (struct vfsmount *, struct inode *, int);
 	struct posix_acl * (*get_acl)(struct inode *, int);
 
 	int (*readlink) (struct dentry *, char __user *,int);
@@ -1879,7 +1941,8 @@
 	int (*rename) (struct inode *, struct dentry *,
 			struct inode *, struct dentry *, unsigned int);
 	int (*setattr) (struct dentry *, struct iattr *);
-	int (*getattr) (const struct path *, struct kstat *, u32, unsigned int);
+	int (*setattr2) (struct vfsmount *, struct dentry *, struct iattr *);
+        int (*getattr) (const struct path *, struct kstat *, u32, unsigned int);
 	ssize_t (*listxattr) (struct dentry *, char *, size_t);
 	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
 		      u64 len);
@@ -1889,6 +1952,11 @@
 			   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,
@@ -1957,9 +2025,13 @@
 	int (*unfreeze_fs) (struct super_block *);
 	int (*statfs) (struct dentry *, struct kstatfs *);
 	int (*remount_fs) (struct super_block *, int *, char *);
+	void *(*clone_mnt_data) (void *);
+	void (*copy_mnt_data) (void *, void *);
+	void (*update_mnt_data) (void *, struct fs_context *);
 	void (*umount_begin) (struct super_block *);
 
 	int (*show_options)(struct seq_file *, struct dentry *);
+	int (*show_options2)(struct vfsmount *,struct seq_file *, struct dentry *);
 	int (*show_devname)(struct seq_file *, struct dentry *);
 	int (*show_path)(struct seq_file *, struct dentry *);
 	int (*show_stats)(struct seq_file *, struct dentry *);
@@ -1973,6 +2045,11 @@
 				  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);
 };
 
 /*
@@ -2161,7 +2238,6 @@
 #define I_DIO_WAKEUP		(1 << __I_DIO_WAKEUP)
 #define I_LINKABLE		(1 << 10)
 #define I_DIRTY_TIME		(1 << 11)
-#define I_DIRTY_TIME_EXPIRED	(1 << 12)
 #define I_WB_SWITCH		(1 << 13)
 #define I_OVL_INUSE		(1 << 14)
 #define I_CREATING		(1 << 15)
@@ -2232,6 +2308,7 @@
 	const struct fs_parameter_description *parameters;
 	struct dentry *(*mount) (struct file_system_type *, int,
 		       const char *, void *);
+	void *(*alloc_mnt_data) (void);
 	void (*kill_sb) (struct super_block *);
 	struct module *owner;
 	struct file_system_type * next;
@@ -2245,6 +2322,11 @@
 	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)
@@ -2531,6 +2613,8 @@
 extern long vfs_truncate(const struct path *, loff_t);
 extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
 		       struct file *filp);
+extern int do_truncate2(struct vfsmount *, struct dentry *, loff_t start,
+			unsigned int time_attrs, struct file *filp);
 extern int vfs_fallocate(struct file *file, int mode, loff_t offset,
 			loff_t len);
 extern long do_sys_open(int dfd, const char __user *filename, int flags,
@@ -2878,7 +2962,9 @@
 extern sector_t bmap(struct inode *, sector_t);
 #endif
 extern int notify_change(struct dentry *, struct iattr *, struct inode **);
+extern int notify_change2(struct vfsmount *, struct dentry *, struct iattr *, struct inode **);
 extern int inode_permission(struct inode *, int);
+extern int inode_permission2(struct vfsmount *, struct inode *, int);
 extern int generic_permission(struct inode *, int);
 extern int __check_sticky(struct inode *dir, struct inode *inode);
 
@@ -3349,6 +3435,20 @@
 
 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);
+extern bool needs_casefold(const struct inode *dir);
+#else
+static inline bool needs_casefold(const struct inode *dir)
+{
+	return 0;
+}
+#endif
+extern void generic_set_encrypted_ci_d_ops(struct inode *dir,
+					   struct dentry *dentry);
+
 #ifdef CONFIG_MIGRATION
 extern int buffer_migrate_page(struct address_space *,
 				struct page *, struct page *,
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index f622f74..f6757a2 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -15,13 +15,15 @@
 
 #include <linux/fs.h>
 #include <linux/mm.h>
+#include <linux/parser.h>
 #include <linux/slab.h>
 #include <uapi/linux/fscrypt.h>
 
 #define FS_CRYPTO_BLOCK_SIZE		16
 
-struct fscrypt_ctx;
+union fscrypt_context;
 struct fscrypt_info;
+struct seq_file;
 
 struct fscrypt_str {
 	unsigned char *name;
@@ -57,35 +59,54 @@
 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_context *(*get_dummy_context)(
+		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_get_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);
+}
+
+static inline const union fscrypt_context *
+fscrypt_get_dummy_context(struct super_block *sb)
+{
+	if (!sb->s_cop->get_dummy_context)
+		return NULL;
+	return sb->s_cop->get_dummy_context(sb);
 }
 
 /*
@@ -101,24 +122,21 @@
 }
 
 /* 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)
 {
@@ -130,145 +148,93 @@
 	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);
+int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags);
 
 /* 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_inherit_context(struct inode *parent, struct inode *child,
+			    void *fs_data, bool preload);
+
+struct fscrypt_dummy_context {
+	const union fscrypt_context *ctx;
+};
+
+int fscrypt_set_test_dummy_encryption(struct super_block *sb,
+				      const substring_t *arg,
+				      struct fscrypt_dummy_context *dummy_ctx);
+void fscrypt_show_test_dummy_encryption(struct seq_file *seq, char sep,
+					struct super_block *sb);
+static inline void
+fscrypt_free_dummy_context(struct fscrypt_dummy_context *dummy_ctx)
+{
+	kfree(dummy_ctx->ctx);
+	dummy_ctx->ctx = 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);
+int fscrypt_register_key_removal_notifier(struct notifier_block *nb);
+int fscrypt_unregister_key_removal_notifier(struct notifier_block *nb);
 
 /* 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_get_encryption_info(struct inode *inode);
+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(const struct inode *inode, 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);
 
 /* 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_setflags(struct inode *inode,
+			     unsigned int oldflags, unsigned int flags);
+int __fscrypt_prepare_symlink(struct inode *dir, 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)
 {
@@ -276,14 +242,20 @@
 }
 #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 NULL;
+}
+
+static inline bool fscrypt_needs_contents_encryption(const struct inode *inode)
 {
 	return false;
 }
 
-static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
+static inline const union fscrypt_context *
+fscrypt_get_dummy_context(struct super_block *sb)
 {
-	return false;
+	return NULL;
 }
 
 static inline void fscrypt_handle_d_move(struct dentry *dentry)
@@ -295,16 +267,6 @@
 {
 }
 
-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,
@@ -370,6 +332,11 @@
 	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)
 {
@@ -383,6 +350,20 @@
 	return -EOPNOTSUPP;
 }
 
+struct fscrypt_dummy_context {
+};
+
+static inline void fscrypt_show_test_dummy_encryption(struct seq_file *seq,
+						      char sep,
+						      struct super_block *sb)
+{
+}
+
+static inline void
+fscrypt_free_dummy_context(struct fscrypt_dummy_context *dummy_ctx)
+{
+}
+
 /* keyring.c */
 static inline void fscrypt_sb_free(struct super_block *sb)
 {
@@ -410,6 +391,18 @@
 	return -EOPNOTSUPP;
 }
 
+static inline int fscrypt_register_key_removal_notifier(
+						struct notifier_block *nb)
+{
+	return 0;
+}
+
+static inline int fscrypt_unregister_key_removal_notifier(
+						struct notifier_block *nb)
+{
+	return 0;
+}
+
 /* keysetup.c */
 static inline int fscrypt_get_encryption_info(struct inode *inode)
 {
@@ -462,7 +455,7 @@
 	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)
@@ -479,13 +472,15 @@
 	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)
+/* bio.c */
+static inline void fscrypt_decrypt_bio(struct bio *bio)
 {
 }
 
@@ -526,6 +521,13 @@
 	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,
 					    unsigned int len,
 					    unsigned int max_len,
@@ -558,8 +560,134 @@
 
 #endif	/* !CONFIG_FS_ENCRYPTION */
 
+/* inline_crypt.c */
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+
+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);
+
+int fscrypt_limit_dio_pages(const struct inode *inode, loff_t pos,
+			    int nr_pages);
+
+#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 int fscrypt_limit_dio_pages(const struct inode *inode, loff_t pos,
+					  int nr_pages)
+{
+	return nr_pages;
+}
+#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_require_key - require an inode's encryption key
+ * 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_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_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.
@@ -585,7 +713,8 @@
 }
 
 /**
- * fscrypt_prepare_link - prepare to link an inode into a possibly-encrypted directory
+ * 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
@@ -612,7 +741,8 @@
 }
 
 /**
- * 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
@@ -645,7 +775,8 @@
 }
 
 /**
- * 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
@@ -656,8 +787,9 @@
  * 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.
  *
- * 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.
+ * After calling this function, a filesystem should ensure that it's dentry
+ * operations contain fscrypt_d_revalidate if DCACHE_ENCRYPTED_NAME was set,
+ * so that the dentry can be invalidated if the 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
@@ -678,7 +810,8 @@
 }
 
 /**
- * fscrypt_prepare_setattr - prepare to change a possibly-encrypted inode's attributes
+ * 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
  *
@@ -703,7 +836,7 @@
 }
 
 /**
- * fscrypt_prepare_symlink - prepare to create a possibly-encrypted symlink
+ * 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
@@ -731,7 +864,7 @@
 					  unsigned int max_len,
 					  struct fscrypt_str *disk_link)
 {
-	if (IS_ENCRYPTED(dir) || fscrypt_dummy_context_enabled(dir))
+	if (IS_ENCRYPTED(dir) || fscrypt_get_dummy_context(dir->i_sb) != NULL)
 		return __fscrypt_prepare_symlink(dir, len, max_len, disk_link);
 
 	disk_link->name = (unsigned char *)target;
@@ -742,7 +875,7 @@
 }
 
 /**
- * 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..e018872 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -262,6 +262,7 @@
 static inline void fsnotify_open(struct file *file)
 {
 	const struct path *path = &file->f_path;
+	struct path lower_path;
 	struct inode *inode = file_inode(file);
 	__u32 mask = FS_OPEN;
 
@@ -270,6 +271,12 @@
 	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 @@
 	 *
 	 * @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 @@
 	 * 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 @@
 
 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 @@
 
 /**
  * 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 @@
  * 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 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 @@
  *			       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 @@
 	(*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 @@
 		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 62a2ec9..b3dc87b 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 @@
 #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 @@
 	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 @@
 	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 @@
 #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 @@
 #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 @@
 #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_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 @@
 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 @@
 	u8				is_rel;
 	u8				is_soft;
 	u8				is_hard;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
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 @@
 #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 @@
 	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 @@
 	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 @@
 	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 @@
 	__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 @@
 	    ".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 @@
 #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/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 @@
 	 */
 	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..a10efdf6 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -245,6 +245,7 @@
  * @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);
@@ -308,6 +309,7 @@
 			     struct iommu_page_response *msg);
 
 	unsigned long pgsize_bitmap;
+	struct module *owner;
 };
 
 /**
@@ -376,12 +378,19 @@
 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)
 {
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 @@
 	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 @@
 						   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 @@
 	__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 @@
 	__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 @@
 #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 e85f714..20b263d 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 @@
 	DOMAIN_BUS_IPI,
 	DOMAIN_BUS_FSL_MC_MSI,
 	DOMAIN_BUS_TI_SCI_INTA_MSI,
+	DOMAIN_BUS_WAKEUP,
 };
 
 /**
@@ -176,6 +178,11 @@
 	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/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 @@
 	(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 @@
 		      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 @@
 #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..3910fb8
--- /dev/null
+++ b/include/linux/keyslot-manager.h
@@ -0,0 +1,142 @@
+/* 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),
+};
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+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);
+
+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);
+
+void blk_ksm_intersect_modes(struct blk_keyslot_manager *parent,
+			     const struct blk_keyslot_manager *child);
+
+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_init_passthrough(struct blk_keyslot_manager *ksm);
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+#endif /* __LINUX_KEYSLOT_MANAGER_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 @@
 	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 @@
 	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 @@
 	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/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 @@
 	}
 }
 
-/*
- * 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 @@
 	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 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 @@
 
 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..714cab1 100644
--- a/include/linux/mfd/syscon.h
+++ b/include/linux/mfd/syscon.h
@@ -23,6 +23,11 @@
 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 @@
 {
 	return ERR_PTR(-ENOTSUPP);
 }
+
+static 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 3285dae0..2f821ac 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;
@@ -450,6 +452,10 @@
 					 * 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() */
@@ -524,6 +530,11 @@
 	 */
 	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);
 };
 
 static inline void vma_init(struct vm_area_struct *vma, struct mm_struct *mm)
@@ -1655,19 +1666,28 @@
 	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 */
@@ -2285,7 +2305,7 @@
 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);
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 @@
 	/*
 	 * 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 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 @@
 		atomic_long_t hugetlb_usage;
 #endif
 		struct work_struct async_put_work;
+		ANDROID_VENDOR_DATA(1);
 	} __randomize_layout;
 
 	/*
@@ -754,4 +770,13 @@
 	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 e459b38..24ada1e 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -48,6 +48,7 @@
 	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/host.h b/include/linux/mmc/host.h
index 4c5eb3a..906bc6e 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -92,6 +92,9 @@
 			    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
@@ -463,6 +466,9 @@
 	bool			cqe_enabled;
 	bool			cqe_on;
 
+	/* 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 @@
  */
 
 #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 @@
 
 #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 *(*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 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 85804ba..91f14f9 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 @@
 	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 @@
 	 */
 	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 @@
 #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 @@
 	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 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 @@
 	/* 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..996e81a 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 @@
 	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;
@@ -389,10 +395,12 @@
 	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 +515,10 @@
 	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 {}
diff --git a/include/linux/mount.h b/include/linux/mount.h
index bf8cc41..40714c6 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,11 @@
 	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);
+	void *data;
 } __randomize_layout;
 
 struct file; /* forward dec */
diff --git a/include/linux/namei.h b/include/linux/namei.h
index 397a08a..5f04b407 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -55,10 +55,13 @@
 extern struct dentry *user_path_create(int, const char __user *, struct path *, unsigned int);
 extern void done_path_create(struct path *, struct dentry *);
 extern struct dentry *kern_path_locked(const char *, struct path *);
+extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
+			   const char *, unsigned int, struct path *);
 extern int kern_path_mountpoint(int, const char *, struct path *, unsigned int);
 
 extern struct dentry *try_lookup_one_len(const char *, struct dentry *, int);
 extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
+extern struct dentry *lookup_one_len2(const char *, struct vfsmount *mnt, struct dentry *, int);
 extern struct dentry *lookup_one_len_unlocked(const char *, struct dentry *, int);
 
 extern int follow_down_one(struct path *);
diff --git a/include/linux/net.h b/include/linux/net.h
index 9cafb5f..1d73cfc 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -21,6 +21,7 @@
 #include <linux/rcupdate.h>
 #include <linux/once.h>
 #include <linux/fs.h>
+#include <linux/android_kabi.h>
 
 #include <uapi/linux/net.h>
 
@@ -202,6 +203,11 @@
 	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)	\
@@ -263,7 +269,8 @@
 	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/netdevice.h b/include/linux/netdevice.h
index ec3081a..9c7d937 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 @@
 				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 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 @@
 #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 @@
 #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 @@
 	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 @@
 	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 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)
 
@@ -2367,6 +2410,11 @@
 					    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 {
@@ -4753,7 +4801,8 @@
 #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);		\
@@ -4823,7 +4872,8 @@
 #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 @@
 	const __be32 *end;
 	int np;
 	int pna;
+	bool dma;
 };
 
 struct of_pci_range {
@@ -55,8 +56,6 @@
 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 @@
 	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 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/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 @@
 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 f39f22f..1bb6b7c 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
@@ -468,6 +469,11 @@
 	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)
@@ -601,6 +607,11 @@
 	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)
@@ -838,6 +849,11 @@
 	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 @@
 #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_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 @@
 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 @@
 
 	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 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/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 @@
 #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 @@
 	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 @@
 	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 @@
 	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 @@
 }
 #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 @@
 			 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 @@
 	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..1d5a48d 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -61,6 +61,10 @@
 	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 +143,7 @@
 	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 +163,9 @@
 	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 +185,7 @@
 	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 +334,11 @@
 	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 +363,8 @@
 	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 +375,21 @@
 #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 +406,9 @@
 				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 @@
 /*
  * 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 @@
 
 
 /* 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 @@
 #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 @@
 
 #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/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 @@
  * current PWM hardware state.
  */
 struct pwm_args {
-	unsigned int period;
+	u64 period;
 	enum pwm_polarity polarity;
 };
 
@@ -48,6 +48,17 @@
 	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 @@
  * @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 @@
 	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 @@
 		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 @@
 	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 @@
  * @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 @@
 		     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 @@
  * @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_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 @@
 	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 @@
 	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 @@
 				  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_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_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 @@
 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 @@
 	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 @@
 	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 @@
 	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 @@
 #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/rwsem.h b/include/linux/rwsem.h
index 00d6054..cf27ef6 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 @@
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 	struct lockdep_map	dep_map;
 #endif
+	ANDROID_VENDOR_DATA(1);
 };
 
 /*
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5710b80..a99ebd8 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_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 @@
 	/* 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 {
@@ -841,6 +853,10 @@
 	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 +1221,8 @@
 #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 +1234,12 @@
 
 	/* 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 +1292,17 @@
 	unsigned long			prev_lowest_stack;
 #endif
 
+	ANDROID_VENDOR_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 8805025..f7d3466 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -10,6 +10,7 @@
 #include <linux/cred.h>
 #include <linux/refcount.h>
 #include <linux/posix-timers.h>
+#include <linux/android_kabi.h>
 
 /*
  * Types defining task->signal and task->sighand and APIs using them:
@@ -225,6 +226,10 @@
 	struct mutex cred_guard_mutex;	/* guard against foreign influences on
 					 * credential calculations
 					 * (notably. ptrace) */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /*
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_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 @@
 
 	/* 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 @@
 {
 	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_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..c5572fd
--- /dev/null
+++ b/include/linux/scs.h
@@ -0,0 +1,57 @@
+/* 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
+
+/*
+ * 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
+#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/security.h b/include/linux/security.h
index fd02276..3e8d4ba 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -1897,5 +1897,42 @@
 #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 @@
 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 955e137..542d881 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...
@@ -874,6 +875,9 @@
 	__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;
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 @@
 	 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 @@
 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_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 @@
 	const char *serial_number;
 	const char *soc_id;
 	const void *data;
+	const struct attribute_group *custom_attr_group;
 };
 
 /**
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 @@
 	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 @@
 	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 @@
  * 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 0a1f302..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 1912548..c9dcb3e 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 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 @@
 #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_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 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_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 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 @@
 	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 @@
 	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 @@
 	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 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 @@
 	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 @@
 	 * (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 @@
 	/* 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 @@
 	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 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 @@
  * @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_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 @@
 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 @@
 #		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 @@
 	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 @@
 #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 07875cc..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 @@
 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 @@
 
 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 @@
 	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);
@@ -150,7 +137,8 @@
 
 void virtio_transport_destruct(struct vsock_sock *vsk);
 
-void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt);
+void virtio_transport_recv_pkt(struct virtio_transport *t,
+			       struct virtio_vsock_pkt *pkt);
 void virtio_transport_free_pkt(struct virtio_vsock_pkt *pkt);
 void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct virtio_vsock_pkt *pkt);
 u32 virtio_transport_get_credit(struct virtio_vsock_sock *vvs, u32 wanted);
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_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 @@
 #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 @@
 	/* 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 @@
 	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 @@
 	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 @@
 /* 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 @@
  */
 struct v4l2_format_info {
 	u32 format;
+	u8 pixel_enc;
 	u8 mem_planes;
 	u8 comp_planes;
 	u8 bpp[4];
@@ -478,8 +495,22 @@
 	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 @@
  * @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 @@
 	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 @@
  *		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 @@
 		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 @@
  * @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 @@
 	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 @@
 					       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 @@
 	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 @@
 	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_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 @@
 	/* 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_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_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 @@
 		       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 @@
 				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 @@
  * @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 @@
 	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 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 @@
 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 @@
 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 @@
 	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 @@
 	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_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 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 @@
  * 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 @@
 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 @@
  *
  * @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_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 @@
  *	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 @@
 	u32 center_freq1;
 	u32 center_freq2;
 	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
 };
 
 /**
@@ -648,6 +675,7 @@
 	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 @@
  * @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 @@
 	u8 he_capa_len;
 	u16 airtime_weight;
 	struct sta_txpwr txpwr;
+	const struct ieee80211_he_6ghz_capa *he_6ghz_capa;
 };
 
 /**
@@ -5008,29 +5038,106 @@
  */
 
 /**
+ * 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_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/ip.h b/include/net/ip.h
index 4b15cc1..c0db1e7 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -346,6 +346,13 @@
 	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 @@
 	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/ndisc.h b/include/net/ndisc.h
index b5ebeb3..5ffba5a 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -41,6 +41,7 @@
 	ND_OPT_DNSSL = 31,		/* RFC6106 */
 	ND_OPT_6CO = 34,		/* RFC6775 */
 	ND_OPT_CAPTIVE_PORTAL = 37,	/* RFC7710 */
+	ND_OPT_PREF64 = 38,		/* RFC-ietf-6man-ra-pref64-09 */
 	__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 @@
 
 #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 6d9c1131..fb048b2 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 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 0a065bd..c5b77e1 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>
@@ -308,6 +309,12 @@
 	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/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/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 @@
 __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 @@
 #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 @@
 	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 @@
 				     * 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 @@
 	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 @@
 	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 @@
 	 */
 	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 @@
 #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 @@
 	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 @@
 	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 @@
 	/* 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 @@
 	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/f2fs.h b/include/trace/events/f2fs.h
index 1796ff9..c163189 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -49,6 +49,8 @@
 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,						\
@@ -124,13 +126,15 @@
 		{ 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 +152,13 @@
 		{ 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 +1721,239 @@
 		__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 @@
 		__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/ufs.h b/include/trace/events/ufs.h
index 5f30073..84841b3 100644
--- a/include/trace/events/ufs.h
+++ b/include/trace/events/ufs.h
@@ -249,6 +249,37 @@
 	)
 );
 
+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
+	)
+);
+
 TRACE_EVENT(ufshcd_upiu,
 	TP_PROTO(const char *dev_name, const char *str, void *hdr, void *tsf),
 
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
index 6743427..6f427f7 100644
--- a/include/trace/events/writeback.h
+++ b/include/trace/events/writeback.h
@@ -20,7 +20,6 @@
 		{I_CLEAR,		"I_CLEAR"},		\
 		{I_SYNC,		"I_SYNC"},		\
 		{I_DIRTY_TIME,		"I_DIRTY_TIME"},	\
-		{I_DIRTY_TIME_EXPIRED,	"I_DIRTY_TIME_EXPIRED"}, \
 		{I_REFERENCED,		"I_REFERENCED"}		\
 	)
 
diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h
new file mode 100644
index 0000000..48ef1eb
--- /dev/null
+++ b/include/trace/hooks/binder.h
@@ -0,0 +1,33 @@
+/* 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
+ */
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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));
+#else
+#define trace_android_vh_binder_transaction_init(t)
+#define trace_android_vh_binder_set_priority(t, task)
+#define trace_android_vh_binder_restore_priority(t, task)
+#endif
+#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..d312764
--- /dev/null
+++ b/include/trace/hooks/debug.h
@@ -0,0 +1,32 @@
+/* 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))
+
+struct input_dev;
+DECLARE_HOOK(android_vh_input_handle_event,
+	TP_PROTO(struct input_dev *dev, unsigned int type,
+		unsigned int code, int value),
+	TP_ARGS(dev, type, code, value))
+#else
+#define trace_android_vh_ipi_stop(regs)
+#define trace_android_vh_input_handle_event(dev, type, code, value)
+#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..f4fafbf
--- /dev/null
+++ b/include/trace/hooks/dtask.h
@@ -0,0 +1,53 @@
+/* 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
+ */
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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));
+#else
+#define trace_android_vh_mutex_wait_start(lock)
+#define trace_android_vh_mutex_wait_finish(lock)
+#define trace_android_vh_rwsem_read_wait_start(sem)
+#define trace_android_vh_rwsem_read_wait_finish(sem)
+#define trace_android_vh_rwsem_write_wait_start(sem)
+#define trace_android_vh_rwsem_write_wait_finish(sem)
+#define trace_android_vh_sched_show_task(task)
+#endif
+
+#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..cbf6abb
--- /dev/null
+++ b/include/trace/hooks/futex.h
@@ -0,0 +1,26 @@
+/* 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
+ */
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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));
+#else
+#define trace_android_vh_alter_futex_plist_add(node, head, already_on_hb)
+#endif
+#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..fee1e84
--- /dev/null
+++ b/include/trace/hooks/net.h
@@ -0,0 +1,27 @@
+/* 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>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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));
+#else
+#define trace_android_vh_ptype_head(pt, vendor_pt)
+#define trace_android_vh_kfree_skb(skb)
+#endif
+#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..7c7a1f78
--- /dev/null
+++ b/include/trace/hooks/rwsem.h
@@ -0,0 +1,38 @@
+/* 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
+ */
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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));
+#else
+#define trace_android_vh_rwsem_init(sem)
+#define trace_android_vh_rwsem_wake(sem)
+#define trace_android_vh_rwsem_write_finished(sem)
+#define trace_android_vh_alter_rwsem_list_add(waiter, sem, already_on_list)
+#endif
+#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..6ac7dd6
--- /dev/null
+++ b/include/trace/hooks/sched.h
@@ -0,0 +1,85 @@
+/* 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
+ */
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+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);
+#else
+#define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu)
+#define trace_android_rvh_select_task_rq_rt(p, prev_cpu, sd_flag, wake_flags, new_cpu)
+#define trace_android_rvh_select_fallback_rq(cpu, p, dest_cpu)
+#define trace_android_vh_scheduler_tick(rq)
+#define trace_android_rvh_enqueue_task(rq, p)
+#define trace_android_rvh_dequeue_task(rq, p)
+#define trace_android_rvh_can_migrate_task(p, dst_cpu, can_migrate)
+#define trace_android_rvh_find_lowest_rq(p, local_cpu_mask, lowest_cpu)
+#define trace_android_rvh_prepare_prio_fork(p)
+#define trace_android_rvh_finish_prio_fork(p)
+#define trace_android_rvh_rtmutex_prepare_setprio(p, pi_task)
+#define trace_android_rvh_set_user_nice(p, nice)
+#define trace_android_rvh_setscheduler(p)
+#endif
+#endif /* _TRACE_HOOK_SCHED_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..65ee196
--- /dev/null
+++ b/include/trace/hooks/topology.h
@@ -0,0 +1,27 @@
+/* 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>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+
+DECLARE_HOOK(android_vh_arch_set_freq_scale,
+	TP_PROTO(unsigned long freq, unsigned long max, unsigned long *scale),
+	TP_ARGS(freq, max, scale));
+
+#else
+
+#define trace_android_vh_arch_set_freq_scale(freq, max, scale)
+
+#endif
+
+#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..8a3fdb9
--- /dev/null
+++ b/include/trace/hooks/vendor_hooks.h
@@ -0,0 +1,76 @@
+/* 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>
+
+#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 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 */
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 @@
  */
 #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 @@
  * 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 @@
 #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 @@
 				 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 @@
 
 #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 2832134..11babae 100644
--- a/include/uapi/linux/android/binder.h
+++ b/include/uapi/linux/android/binder.h
@@ -38,11 +38,59 @@
 	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..0cdef67 100644
--- a/include/uapi/linux/blkzoned.h
+++ b/include/uapi/linux/blkzoned.h
@@ -120,9 +120,11 @@
 };
 
 /**
- * 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 +141,19 @@
  *                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 77c6be9..ca8cc0b 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -3005,6 +3005,7 @@
 	__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/fscrypt.h b/include/uapi/linux/fscrypt.h
index 39ccfe9..b11faee 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,7 +18,9 @@
 #define FSCRYPT_POLICY_FLAGS_PAD_32		0x03
 #define FSCRYPT_POLICY_FLAGS_PAD_MASK		0x03
 #define FSCRYPT_POLICY_FLAG_DIRECT_KEY		0x04
-#define FSCRYPT_POLICY_FLAGS_VALID		0x07
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64	0x08
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32	0x10
+#define FSCRYPT_POLICY_FLAGS_VALID		0x1F
 
 /* Encryption algorithms */
 #define FSCRYPT_MODE_AES_256_XTS		1
@@ -108,11 +111,25 @@
 	} 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[];
 };
 
@@ -150,6 +167,7 @@
 #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])
 
 /**********************************************************************/
 
diff --git a/include/uapi/linux/incrementalfs.h b/include/uapi/linux/incrementalfs.h
new file mode 100644
index 0000000..71efcf3d
--- /dev/null
+++ b/include/uapi/linux/incrementalfs.h
@@ -0,0 +1,334 @@
+/* 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_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 */
+#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)
+
+enum incfs_compression_alg {
+	COMPRESSION_NONE = 0,
+	COMPRESSION_LZ4 = 1
+};
+
+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.
+ */
+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 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;
+};
+
+#endif /* _UAPI_LINUX_INCREMENTALFS_H */
diff --git a/drivers/staging/android/uapi/ion.h b/include/uapi/linux/ion.h
similarity index 60%
rename from drivers/staging/android/uapi/ion.h
rename to include/uapi/linux/ion.h
index 46c93fc..371e446 100644
--- a/drivers/staging/android/uapi/ion.h
+++ b/include/uapi/linux/ion.h
@@ -12,30 +12,46 @@
 #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
+ * 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,
-	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
-			       */
+	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,
 };
 
-#define ION_NUM_HEAP_IDS		(sizeof(unsigned int) * 8)
+/**
+ * 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
@@ -46,7 +62,7 @@
  * mappings of this buffer should be cached, ion will do cache maintenance
  * when the buffer is mapped for dma
  */
-#define ION_FLAG_CACHED 1
+#define ION_FLAG_CACHED		1
 
 /**
  * DOC: Ion Userspace API
@@ -124,4 +140,11 @@
 #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 @@
 #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 @@
 	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 @@
 	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 @@
 	__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 @@
 #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/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 @@
  *	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 @@
 	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 @@
  *     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 @@
 	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 @@
 #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 @@
  * 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/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 @@
 #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/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 @@
 	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 @@
 	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 @@
 #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 530638d..239bbd7 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
 
 /*
@@ -422,6 +422,11 @@
 	__u32   denominator;
 };
 
+struct v4l2_area {
+	__u32   width;
+	__u32   height;
+};
+
 /**
   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
   *
@@ -915,11 +920,12 @@
 };
 
 /* 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
@@ -935,7 +941,9 @@
  *			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
@@ -950,6 +958,7 @@
 		__s32		fd;
 	} m;
 	__u32			data_offset;
+	/* reserved fields used by few userspace clients and drivers */
 	__u32			reserved[11];
 };
 
@@ -1041,6 +1050,8 @@
 #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 */
@@ -1675,6 +1686,7 @@
 		__u8 __user *p_u8;
 		__u16 __user *p_u16;
 		__u32 __user *p_u32;
+		struct v4l2_area __user *p_area;
 		void __user *ptr;
 	};
 } __attribute__ ((packed));
@@ -1720,6 +1732,7 @@
 	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 */
@@ -1975,6 +1988,7 @@
 #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/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 @@
  */
 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 6db3e31..e829c23 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -20,6 +20,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))
@@ -1196,6 +1199,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
@@ -2175,11 +2190,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
@@ -2221,3 +2249,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..55bd26d
--- /dev/null
+++ b/init/Kconfig.gki
@@ -0,0 +1,220 @@
+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_QCOM_CLKS_CONFIGS
+	bool "QCOM clk drivers needed for GKI due to powerdomain restrictions"
+	select QCOM_RPMHPD	if (ARCH_QCOM)
+	help
+	  This config option selects various QCOM clk drivers that
+	  cannot be built as a module currently due to power-domain
+	  deferred probing limitations.
+	  See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e01afc32502555beb2057ddd74401be38475d851
+
+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_QCOM_CLKS_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..30aa8ab 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)" "$(CC) $(KBUILD_CFLAGS)" "$(LD)"
diff --git a/init/init_task.c b/init/init_task.c
index 9e5cbe5..cbd4046 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>
@@ -184,6 +185,13 @@
 };
 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 8c7d6b8..4181be4 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>
@@ -136,8 +137,19 @@
 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;
@@ -245,6 +257,218 @@
 
 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)
@@ -374,22 +598,51 @@
  */
 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);
+	}
 }
 
 /*
@@ -525,14 +778,16 @@
 {
 	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";
 
@@ -596,6 +851,7 @@
 	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();
@@ -605,7 +861,7 @@
 	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();
@@ -616,6 +872,9 @@
 	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
@@ -992,13 +1251,12 @@
 	"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);
@@ -1011,9 +1269,20 @@
 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/ipc/mqueue.c b/ipc/mqueue.c
index 2ea0c08..b1722cb 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -785,7 +785,7 @@
 	info->notify_user_ns = NULL;
 }
 
-static int prepare_open(struct dentry *dentry, int oflag, int ro,
+static int prepare_open(struct vfsmount *mnt, struct dentry *dentry, int oflag, int ro,
 			umode_t mode, struct filename *name,
 			struct mq_attr *attr)
 {
@@ -799,7 +799,7 @@
 		if (ro)
 			return ro;
 		audit_inode_parent_hidden(name, dentry->d_parent);
-		return vfs_mkobj(dentry, mode & ~current_umask(),
+		return vfs_mkobj2(mnt, dentry, mode & ~current_umask(),
 				  mqueue_create_attr, attr);
 	}
 	/* it already existed */
@@ -809,7 +809,7 @@
 	if ((oflag & O_ACCMODE) == (O_RDWR | O_WRONLY))
 		return -EINVAL;
 	acc = oflag2acc[oflag & O_ACCMODE];
-	return inode_permission(d_inode(dentry), acc);
+	return inode_permission2(mnt, d_inode(dentry), acc);
 }
 
 static int do_mq_open(const char __user *u_name, int oflag, umode_t mode,
@@ -833,13 +833,13 @@
 
 	ro = mnt_want_write(mnt);	/* we'll drop it in any case */
 	inode_lock(d_inode(root));
-	path.dentry = lookup_one_len(name->name, root, strlen(name->name));
+	path.dentry = lookup_one_len2(name->name, mnt, root, strlen(name->name));
 	if (IS_ERR(path.dentry)) {
 		error = PTR_ERR(path.dentry);
 		goto out_putfd;
 	}
 	path.mnt = mntget(mnt);
-	error = prepare_open(path.dentry, oflag, ro, mode, name, attr);
+	error = prepare_open(path.mnt, path.dentry, oflag, ro, mode, name, attr);
 	if (!error) {
 		struct file *file = dentry_open(&path, oflag, current_cred());
 		if (!IS_ERR(file))
@@ -889,7 +889,7 @@
 	if (err)
 		goto out_name;
 	inode_lock_nested(d_inode(mnt->mnt_root), I_MUTEX_PARENT);
-	dentry = lookup_one_len(name->name, mnt->mnt_root,
+	dentry = lookup_one_len2(name->name, mnt, mnt->mnt_root,
 				strlen(name->name));
 	if (IS_ERR(dentry)) {
 		err = PTR_ERR(dentry);
@@ -901,7 +901,7 @@
 		err = -ENOENT;
 	} else {
 		ihold(inode);
-		err = vfs_unlink(d_inode(dentry->d_parent), dentry, NULL);
+		err = vfs_unlink2(mnt, d_inode(dentry->d_parent), dentry, NULL);
 	}
 	dput(dentry);
 
diff --git a/kernel/Makefile b/kernel/Makefile
index 42557f2..7962e6e 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/
@@ -102,6 +105,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 ef0e1e3..f72cc06 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -792,6 +792,14 @@
 	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 @@
 	/* 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));
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 5e28718..3d23c94 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -148,7 +148,7 @@
 
 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,
 };
 
diff --git a/kernel/cfi.c b/kernel/cfi.c
new file mode 100644
index 0000000..db99714
--- /dev/null
+++ b/kernel/cfi.c
@@ -0,0 +1,307 @@
+// 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/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)
+{
+	struct module *mod;
+
+	preempt_disable();
+	mod = __module_address((unsigned long)ptr);
+	preempt_enable();
+
+	if (mod)
+		return mod->cfi_check;
+
+	return CFI_CHECK_FN;
+}
+
+static inline cfi_check_fn find_cfi_check(void *ptr)
+{
+#ifdef CONFIG_CFI_CLANG_SHADOW
+	cfi_check_fn f;
+
+	if (!rcu_access_pointer(cfi_shadow))
+		return CFI_CHECK_FN; /* No loaded modules */
+
+	/* Look up the __cfi_check function to use */
+	rcu_read_lock();
+	f = ptr_to_check_fn(rcu_dereference(cfi_shadow), (unsigned long)ptr);
+	rcu_read_unlock();
+
+	if (f)
+		return f;
+
+	/*
+	 * Fall back to find_module_cfi_check, which works also for a larger
+	 * module address space, but is slower.
+	 */
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+	return find_module_cfi_check(ptr);
+}
+
+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 f684c82..7b9ee48 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -514,7 +514,8 @@
 	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 c87ee64..72aa7ee 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -334,17 +334,6 @@
  */
 
 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 7527825..27d7201 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1297,6 +1297,7 @@
 void enable_nonboot_cpus(void)
 {
 	int cpu, error;
+	struct device *cpu_device;
 
 	/* Allow everyone to use the CPU hotplug again */
 	cpu_maps_update_begin();
@@ -1314,6 +1315,12 @@
 		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/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 @@
 
 	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 @@
 		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 @@
 	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 @@
 		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 @@
 	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 db1f5aa..2e70dd9 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4242,8 +4242,9 @@
 
 	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;
@@ -4552,6 +4553,8 @@
 
 	unaccount_event(event);
 
+	security_perf_event_free(event);
+
 	if (event->rb) {
 		/*
 		 * Can happen when we close an event with re-directed output.
@@ -5005,6 +5008,10 @@
 	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);
@@ -5269,6 +5276,11 @@
 	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);
@@ -5732,6 +5744,10 @@
 	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) {
@@ -5865,7 +5881,7 @@
 	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 @@
 		}
 	}
 
+	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 @@
 			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 @@
 	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 @@
 	}
 
 	/* 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/fork.c b/kernel/fork.c
index 9180f44..e0a1e11 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 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,
@@ -834,6 +839,8 @@
 			  NULL, free_vm_stack_cache);
 #endif
 
+	scs_init();
+
 	lockdep_init_task(&init_task);
 	uprobes_init();
 }
@@ -893,6 +900,10 @@
 	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
@@ -1848,6 +1859,8 @@
 	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
@@ -2359,6 +2372,8 @@
 	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 5660c02..d3867d6 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!
@@ -2346,6 +2347,7 @@
 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
@@ -2358,7 +2360,9 @@
 	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 @@
 	 * 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 @@
 #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 @@
 
 	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 @@
 
 	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 c776b8e..20bf08a 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -296,6 +296,7 @@
 
 	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..a4f6dd5a 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -174,7 +174,6 @@
 	}
 	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 +192,6 @@
 	}
 	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,
@@ -271,6 +269,24 @@
 	       !!__bpf_address_lookup(addr, symbolsize, offset, namebuf);
 }
 
+#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 void cleanup_symbol_name(char *s)
+{
+	char *res;
+
+	res = strrchr(s, '$');
+	if (res)
+		*res = '\0';
+}
+#else
+static inline void cleanup_symbol_name(char *s) {}
+#endif
+
 /*
  * Lookup an address
  * - modname is set to NULL if it's in the kernel.
@@ -297,7 +313,9 @@
 				       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 +328,16 @@
 	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 +348,23 @@
 		/* 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 +376,16 @@
 		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 @@
 	 * 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 @@
 	 * 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 @@
 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_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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 {
 	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 @@
 	.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/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 @@
 	 * 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 @@
 
 		/* 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 @@
 
 	waiter.task = current;
 
+	trace_android_vh_mutex_wait_start(lock);
 	set_current_state(state);
 	for (;;) {
 		/*
@@ -1057,6 +1060,7 @@
 	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 @@
 
 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 baafa1d..302870f 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 @@
 #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 @@
 	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 @@
 		}
 		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 @@
 		    (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 @@
 	}
 
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_read_wait_finish(sem);
 	lockevent_inc(rwsem_rlock);
 	return sem;
 
@@ -1115,6 +1127,7 @@
 	}
 	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 @@
 	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 @@
 	/* 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 @@
 	}
 
 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 @@
 		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 @@
 
 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);
 
@@ -1584,6 +1606,7 @@
 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);
@@ -1594,6 +1617,7 @@
 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 819c5d3..301a32e 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2205,6 +2205,8 @@
 {
 }
 
+static void cfi_cleanup(struct module *mod);
+
 /* Free a module, remove from lists, etc. */
 static void free_module(struct module *mod)
 {
@@ -2244,6 +2246,9 @@
 	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);
@@ -3494,6 +3499,8 @@
 	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. */
@@ -3506,6 +3513,9 @@
 	/* 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);
 }
@@ -4309,6 +4319,24 @@
 }
 #endif /* CONFIG_KALLSYMS */
 
+static void cfi_init(struct module *mod)
+{
+#ifdef CONFIG_CFI_CLANG
+	rcu_read_lock();
+	mod->cfi_check = (cfi_check_fn)find_kallsyms_symbol_value(mod,
+						CFI_CHECK_FN_NAME);
+	rcu_read_unlock();
+	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)
 
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 @@
 	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 @@
  * @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 @@
 		}
 
 		pm_wakeup_clear(false);
+		clear_wakeup_reasons();
 
 		s2idle_enter();
 	}
@@ -361,6 +363,7 @@
 	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 @@
  */
 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 @@
 
 	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 @@
 
 	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 @@
 	}
 
 	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 @@
 	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/reboot.c b/kernel/reboot.c
index c4d472b..b1fbc22 100644
--- a/kernel/reboot.c
+++ b/kernel/reboot.c
@@ -32,7 +32,9 @@
 #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 352239c..3616ae6 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.
@@ -938,17 +945,17 @@
 	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;
 }
 
 /*
@@ -1382,6 +1389,8 @@
 
 	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 +1405,8 @@
 
 	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 +2127,11 @@
 	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 +2951,7 @@
 	 * 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 +2984,7 @@
 		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,
@@ -3696,6 +3713,8 @@
 	rq->idle_balance = idle_cpu(cpu);
 	trigger_load_balance(rq);
 #endif
+
+	trace_android_vh_scheduler_tick(rq);
 }
 
 #ifdef CONFIG_NO_HZ_FULL
@@ -4465,6 +4484,7 @@
 	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);
 
@@ -4596,6 +4616,7 @@
 	 */
 	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
@@ -4819,6 +4840,8 @@
 		p->sched_class = &rt_sched_class;
 	else
 		p->sched_class = &fair_sched_class;
+
+	trace_android_rvh_setscheduler(p);
 }
 
 /*
@@ -4947,9 +4970,6 @@
 			return retval;
 	}
 
-	if (pi)
-		cpuset_read_lock();
-
 	/*
 	 * Make sure no PI-waiters arrive (or leave) while we are
 	 * changing the priority of the task:
@@ -5024,8 +5044,6 @@
 	if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
 		policy = oldpolicy = -1;
 		task_rq_unlock(rq, p, &rf);
-		if (pi)
-			cpuset_read_unlock();
 		goto recheck;
 	}
 
@@ -5086,10 +5104,8 @@
 	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);
@@ -5099,8 +5115,6 @@
 
 unlock:
 	task_rq_unlock(rq, p, &rf);
-	if (pi)
-		cpuset_read_unlock();
 	return retval;
 }
 
@@ -5185,14 +5199,9 @@
 	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;
 }
@@ -6031,6 +6040,7 @@
 		(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);
 }
@@ -6118,6 +6128,7 @@
 	idle->se.exec_start = sched_clock();
 	idle->flags |= PF_IDLE;
 
+	scs_task_reset(idle);
 	kasan_unpoison_task_stack(idle);
 
 #ifdef CONFIG_SMP
@@ -7443,6 +7454,27 @@
 	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
@@ -7811,6 +7843,12 @@
 		.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 */
 };
@@ -7992,6 +8030,12 @@
 		.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..dc6835b 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -238,7 +238,7 @@
 	 */
 	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 +913,7 @@
 {
 	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 @@
 	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 @@
  *
  * 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 @@
 };
 
 #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..fc49c1e 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 @@
 
 	/* 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 @@
 
 	/* Account for system time used */
 	acct_account_cputime(p);
+
+	/* Account power usage for system time */
+	cpufreq_acct_update_power(p, cputime);
 }
 
 /*
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 20bf1f6..1847651 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:
@@ -3707,6 +3708,20 @@
 	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)
 {
@@ -3806,7 +3821,7 @@
 
 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)
@@ -6013,6 +6028,40 @@
 }
 
 /*
+ * 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)
@@ -6020,6 +6069,28 @@
 	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;
 
@@ -6206,33 +6277,6 @@
 }
 
 /*
- * 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.
  */
@@ -6361,12 +6405,17 @@
  * 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;
 
@@ -6375,6 +6424,13 @@
 	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.
@@ -6389,6 +6445,10 @@
 	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;
@@ -6402,14 +6462,23 @@
 			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 - 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);
@@ -6419,15 +6488,38 @@
 			 * 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) {
@@ -6439,6 +6531,9 @@
 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.
@@ -6477,19 +6572,24 @@
 	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();
@@ -7136,6 +7236,7 @@
 	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;
 
@@ -7250,9 +7351,14 @@
 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
@@ -7780,10 +7886,9 @@
 	};
 }
 
-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;
 
@@ -7803,12 +7908,47 @@
 	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;
@@ -7912,7 +8052,7 @@
 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));
 }
 
@@ -8315,6 +8455,8 @@
 	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;
 
@@ -8443,7 +8585,22 @@
 	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;
 }
 
@@ -8512,8 +8669,18 @@
 		(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);
 	}
@@ -8791,6 +8958,9 @@
 	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);
 }
 
@@ -9009,7 +9179,8 @@
 		 * 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/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 @@
 	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 @@
 {
 	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 @@
 	 *
 	 * 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 @@
 		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
+
+out_unlock:
 	rcu_read_unlock();
 
 out:
@@ -1458,8 +1521,8 @@
 	 * 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 @@
 	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 @@
 	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 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 9f2a9e3..c830e7a 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -405,6 +405,8 @@
 	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
 
 };
@@ -723,6 +725,12 @@
 	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. */
@@ -781,7 +789,8 @@
 	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
@@ -791,6 +800,7 @@
 };
 
 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);
@@ -1345,8 +1355,6 @@
 	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
@@ -1995,6 +2003,15 @@
 }
 #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
 
@@ -2319,7 +2336,7 @@
 #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.
@@ -2339,11 +2356,11 @@
  * 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;
@@ -2367,9 +2384,9 @@
 	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;
 }
 
 /*
@@ -2385,14 +2402,15 @@
 	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)
@@ -2401,6 +2419,25 @@
 }
 #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 @@
 
 	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 @@
 	 * 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 @@
 	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 @@
 	/* 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 @@
 	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/sys.c b/kernel/sys.c
index a611d1d..7066086 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>
@@ -2259,6 +2261,153 @@
 	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)
 {
@@ -2471,6 +2620,9 @@
 			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/sysctl.c b/kernel/sysctl.c
index 7066593..93be3f1 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -111,6 +111,7 @@
 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;
@@ -1525,6 +1526,14 @@
 		.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/trace/Kconfig b/kernel/trace/Kconfig
index f3f2fc8..778fa28 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/ftrace.c b/kernel/trace/ftrace.c
index 705852c..de52764 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5571,9 +5571,9 @@
 	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(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 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 @@
 
 	/* 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 @@
 	 * ...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 1a0c224..81d9990 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -1627,7 +1627,9 @@
 	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));
 
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 6118d99..c3f1a24 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"
diff --git a/lib/Makefile b/lib/Makefile
index c589280..0ffac844 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -86,6 +86,7 @@
 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
@@ -180,7 +181,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 +226,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
 
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/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 __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 @@
 	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 @@
 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/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 @@
 		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 @@
 
 		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 @@
  * @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 @@
 	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 @@
 								\
 	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 @@
 	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 @@
 }
 #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 @@
 	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 @@
 		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 @@
 	 * 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 @@
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -133,12 +127,13 @@
 		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 @@
 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 @@
 	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 @@
 	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 @@
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -246,10 +236,11 @@
 		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 @@
 	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 @@
 {
 	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 @@
 		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/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 @@
 {
 	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 @@
 	pr_debug("%s(): returned %p\n", __func__, page);
 	return page;
 }
+EXPORT_SYMBOL_GPL(cma_alloc);
 
 /**
  * cma_release() - release allocated pages
@@ -526,6 +529,7 @@
 
 	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 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(cma_for_each_area);
diff --git a/mm/madvise.c b/mm/madvise.c
index d8cfc3a..360a2d4 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -134,7 +134,7 @@
 	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;
diff --git a/mm/memory.c b/mm/memory.c
index cb7c940..c221940 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>
@@ -140,6 +142,23 @@
 }
 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)
 
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 787c5fc..4c60ba5 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -759,7 +759,8 @@
 			((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;
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 @@
 	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 a3584a9..8a7afe6 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1009,7 +1009,8 @@
  */
 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 @@
 		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 @@
 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 @@
 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 @@
 }
 
 /*
- * 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 @@
 			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 @@
 			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 @@
 				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 @@
 			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 @@
 	 * 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;
 
@@ -3043,7 +3052,7 @@
 
 	/* 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;
 
@@ -3242,7 +3251,7 @@
 		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
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 @@
 	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/page_alloc.c b/mm/page_alloc.c
index 67a9943..07f59c1 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -293,10 +293,10 @@
 	"Unmovable",
 	"Movable",
 	"Reclaimable",
-	"HighAtomic",
 #ifdef CONFIG_CMA
 	"CMA",
 #endif
+	"HighAtomic",
 #ifdef CONFIG_MEMORY_ISOLATION
 	"Isolate",
 #endif
@@ -313,6 +313,11 @@
 #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
@@ -331,6 +336,13 @@
 #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;
@@ -2722,19 +2734,37 @@
 
 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.
@@ -2748,8 +2778,19 @@
 
 	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;
 
@@ -2784,6 +2825,28 @@
 	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
@@ -3213,16 +3276,28 @@
 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;
 		}
 
@@ -3240,14 +3315,13 @@
 			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);
@@ -3283,14 +3357,22 @@
 
 	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;
@@ -5362,6 +5444,9 @@
 			" managed:%lukB"
 			" mlocked:%lukB"
 			" kernel_stack:%lukB"
+#ifdef CONFIG_SHADOW_CALL_STACK
+			" shadow_call_stack:%lukB"
+#endif
 			" pagetables:%lukB"
 			" bounce:%lukB"
 			" free_pcp:%lukB"
@@ -5383,6 +5468,9 @@
 			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),
@@ -7744,6 +7832,7 @@
 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;
@@ -7755,11 +7844,13 @@
 	}
 
 	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
@@ -7792,8 +7883,10 @@
 			    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);
@@ -7877,7 +7970,7 @@
 /*
  * 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)
@@ -8427,6 +8520,9 @@
 	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
@@ -8508,6 +8604,9 @@
 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 @@
 	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 @@
 		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 @@
 		}
 
 		count_vm_event(PSWPIN);
-		return 0;
+		goto out;
 	}
 
 	ret = 0;
@@ -418,6 +428,7 @@
 	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_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/swapfile.c b/mm/swapfile.c
index 891a3ef..a7de923 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -3155,7 +3155,6 @@
 		error = -EBUSY;
 		goto bad_swap_unlock_inode;
 	}
-
 	/*
 	 * Read the swap header.
 	 */
@@ -3166,7 +3165,7 @@
 	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 @@
 	"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 25858f1..724ae5d 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 @@
 
 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
diff --git a/net/core/filter.c b/net/core/filter.c
index 5c490d4..55f5fda 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3148,8 +3148,9 @@
 
 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,
@@ -6159,6 +6160,8 @@
 		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:
@@ -7224,6 +7227,27 @@
 	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,
@@ -7546,26 +7570,21 @@
 		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 f80b699..e7b631f 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"
 
@@ -693,6 +694,7 @@
 	if (!skb_unref(skb))
 		return;
 
+	trace_android_vh_kfree_skb(skb);
 	trace_kfree_skb(skb, __builtin_return_address(0));
 	__kfree_skb(skb);
 }
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 @@
 		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/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 @@
 		.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 @@
 
 	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 @@
 {
 	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 ab53582..ea036bd 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;
 
@@ -4481,6 +4482,7 @@
 
 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/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6e1d200..0f4a3c6 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -217,6 +217,7 @@
 	.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 @@
 	.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 @@
 		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 @@
 		      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 @@
 	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)
@@ -6678,6 +6700,13 @@
 #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 @@
 		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/ndisc.c b/net/ipv6/ndisc.c
index 53caf59..945ef37 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -197,6 +197,7 @@
 	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 @@
 					   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 @@
 		.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 @@
 				     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 @@
 				     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 @@
 	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/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 05406e9..e79cf1f 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -2109,7 +2109,7 @@
 	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,
@@ -2149,6 +2149,8 @@
 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..4d7d23e 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -587,6 +587,13 @@
 	return 0;
 }
 
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+			    struct sk_buff *skb)
+{
+	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 +773,7 @@
 		   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 +893,7 @@
 	    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 @@
 		       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 @@
 			    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 @@
 		    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 @@
 				      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 @@
 			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 @@
 }
 
 /* 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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 
 	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..a27f7aa 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1630,7 +1630,20 @@
 	}
 }
 
-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 @@
 					 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 @@
 		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 @@
 	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 @@
 
 	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 @@
 		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,50 @@
 	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;
+
+	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 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 @@
 {
 	struct idletimer_tg *timer;
 	unsigned long expires = 0;
+	unsigned long now = jiffies;
 
 	mutex_lock(&list_mutex);
 
@@ -71,11 +180,15 @@
 
 	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 @@
 						  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 @@
 	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 @@
 {
 	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 @@
 
 	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 @@
 	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 @@
 					 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 @@
 	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 @@
 	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 @@
 	}
 
 	mutex_unlock(&list_mutex);
+
 	return 0;
 }
 
@@ -235,13 +465,14 @@
 
 		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 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_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 58fe655..110755c 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -399,6 +399,9 @@
 		}
 	}
 
+	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 @@
 		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 d1a0264..72e5dfb 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -300,7 +300,8 @@
 
 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 7bd6c81..0074d01 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -126,19 +126,18 @@
  */
 #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 @@
 	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 @@
 
 	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 @@
 {
 	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 @@
 }
 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 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_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 @@
 	/* 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 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 @@
 		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 = capable(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 @@
 		/* 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 @@
 {
 	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 @@
 	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);
 
@@ -879,6 +975,7 @@
 			mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
 
 	} else if (sock->type == SOCK_STREAM) {
+		const struct vsock_transport *transport = vsk->transport;
 		lock_sock(sk);
 
 		/* Listening sockets that have connections in their accept
@@ -889,7 +986,7 @@
 			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(
@@ -954,6 +1051,7 @@
 	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;
@@ -962,6 +1060,7 @@
 	err = 0;
 	sk = sock->sk;
 	vsk = vsock_sk(sk);
+	transport = vsk->transport;
 
 	lock_sock(sk);
 
@@ -1046,8 +1145,8 @@
 	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;
 	}
@@ -1063,7 +1162,9 @@
 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 = {
@@ -1089,6 +1190,8 @@
 
 static int vsock_transport_cancel_pkt(struct vsock_sock *vsk)
 {
+	const struct vsock_transport *transport = vsk->transport;
+
 	if (!transport->cancel_pkt)
 		return -EOPNOTSUPP;
 
@@ -1125,6 +1228,7 @@
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	struct sockaddr_vm *remote_addr;
 	long timeout;
 	DEFINE_WAIT(wait);
@@ -1159,19 +1263,26 @@
 			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;
@@ -1366,6 +1477,23 @@
 	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,
@@ -1375,6 +1503,7 @@
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	u64 val;
 
 	if (level != AF_VSOCK)
@@ -1395,23 +1524,26 @@
 	err = 0;
 	sk = sock->sk;
 	vsk = vsock_sk(sk);
+	transport = vsk->transport;
 
 	lock_sock(sk);
 
 	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: {
@@ -1478,17 +1610,17 @@
 
 	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;
 
@@ -1519,6 +1651,7 @@
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	ssize_t total_written;
 	long timeout;
 	int err;
@@ -1527,6 +1660,7 @@
 
 	sk = sock->sk;
 	vsk = vsock_sk(sk);
+	transport = vsk->transport;
 	total_written = 0;
 	err = 0;
 
@@ -1548,7 +1682,7 @@
 		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;
@@ -1658,6 +1792,7 @@
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	int err;
 	size_t target;
 	ssize_t copied;
@@ -1668,11 +1803,12 @@
 
 	sk = sock->sk;
 	vsk = vsock_sk(sk);
+	transport = vsk->transport;
 	err = 0;
 
 	lock_sock(sk);
 
-	if (sk->sk_state != TCP_ESTABLISHED) {
+	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
@@ -1846,6 +1982,10 @@
 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;
 
@@ -1865,7 +2005,23 @@
 
 	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 = {
@@ -1878,11 +2034,20 @@
 			       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;
 
@@ -1922,24 +2087,13 @@
 	.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) {
@@ -1960,7 +2114,6 @@
 		goto err_unregister_proto;
 	}
 
-	mutex_unlock(&vsock_register_mutex);
 	return 0;
 
 err_unregister_proto:
@@ -1968,44 +2121,86 @@
 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 463cefc..27d1a7c 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -150,6 +150,8 @@
 	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 @@
 		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 @@
 		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 @@
 		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;
 
@@ -793,37 +801,9 @@
 	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,
@@ -856,14 +836,13 @@
 	.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)
 {
@@ -912,7 +891,7 @@
 	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;
@@ -923,7 +902,7 @@
 
 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 861ec9a..cd5e3c9 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -86,33 +86,6 @@
 	return ret;
 }
 
-static void virtio_transport_loopback_work(struct work_struct *work)
-{
-	struct virtio_vsock *vsock =
-		container_of(work, struct virtio_vsock, loopback_work);
-	LIST_HEAD(pkts);
-
-	spin_lock_bh(&vsock->loopback_list_lock);
-	list_splice_init(&vsock->loopback_list, &pkts);
-	spin_unlock_bh(&vsock->loopback_list_lock);
-
-	mutex_lock(&vsock->rx_lock);
-
-	if (!vsock->rx_run)
-		goto out;
-
-	while (!list_empty(&pkts)) {
-		struct virtio_vsock_pkt *pkt;
-
-		pkt = list_first_entry(&pkts, struct virtio_vsock_pkt, list);
-		list_del_init(&pkt->list);
-
-		virtio_transport_recv_pkt(pkt);
-	}
-out:
-	mutex_unlock(&vsock->rx_lock);
-}
-
 static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock,
 					      struct virtio_vsock_pkt *pkt)
 {
@@ -370,59 +343,6 @@
 	return val < virtqueue_get_vring_size(vq);
 }
 
-static void virtio_transport_rx_work(struct work_struct *work)
-{
-	struct virtio_vsock *vsock =
-		container_of(work, struct virtio_vsock, rx_work);
-	struct virtqueue *vq;
-
-	vq = vsock->vqs[VSOCK_VQ_RX];
-
-	mutex_lock(&vsock->rx_lock);
-
-	if (!vsock->rx_run)
-		goto out;
-
-	do {
-		virtqueue_disable_cb(vq);
-		for (;;) {
-			struct virtio_vsock_pkt *pkt;
-			unsigned int len;
-
-			if (!virtio_transport_more_replies(vsock)) {
-				/* Stop rx until the device processes already
-				 * pending replies.  Leave rx virtqueue
-				 * callbacks disabled.
-				 */
-				goto out;
-			}
-
-			pkt = virtqueue_get_buf(vq, &len);
-			if (!pkt) {
-				break;
-			}
-
-			vsock->rx_buf_nr--;
-
-			/* Drop short/long packets */
-			if (unlikely(len < sizeof(pkt->hdr) ||
-				     len > sizeof(pkt->hdr) + pkt->len)) {
-				virtio_transport_free_pkt(pkt);
-				continue;
-			}
-
-			pkt->len = len - sizeof(pkt->hdr);
-			virtio_transport_deliver_tap_pkt(pkt);
-			virtio_transport_recv_pkt(pkt);
-		}
-	} while (!virtqueue_enable_cb(vq));
-
-out:
-	if (vsock->rx_buf_nr < vsock->rx_buf_max_nr / 2)
-		virtio_vsock_rx_fill(vsock);
-	mutex_unlock(&vsock->rx_lock);
-}
-
 /* event_lock must be held */
 static int virtio_vsock_event_fill_one(struct virtio_vsock *vsock,
 				       struct virtio_vsock_event *event)
@@ -542,6 +462,8 @@
 
 static struct virtio_transport virtio_transport = {
 	.transport = {
+		.module                   = THIS_MODULE,
+
 		.get_local_cid            = virtio_transport_get_local_cid,
 
 		.init                     = virtio_transport_do_socket_init,
@@ -574,18 +496,92 @@
 		.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,
 };
 
+static void virtio_transport_loopback_work(struct work_struct *work)
+{
+	struct virtio_vsock *vsock =
+		container_of(work, struct virtio_vsock, loopback_work);
+	LIST_HEAD(pkts);
+
+	spin_lock_bh(&vsock->loopback_list_lock);
+	list_splice_init(&vsock->loopback_list, &pkts);
+	spin_unlock_bh(&vsock->loopback_list_lock);
+
+	mutex_lock(&vsock->rx_lock);
+
+	if (!vsock->rx_run)
+		goto out;
+
+	while (!list_empty(&pkts)) {
+		struct virtio_vsock_pkt *pkt;
+
+		pkt = list_first_entry(&pkts, struct virtio_vsock_pkt, list);
+		list_del_init(&pkt->list);
+
+		virtio_transport_recv_pkt(&virtio_transport, pkt);
+	}
+out:
+	mutex_unlock(&vsock->rx_lock);
+}
+
+static void virtio_transport_rx_work(struct work_struct *work)
+{
+	struct virtio_vsock *vsock =
+		container_of(work, struct virtio_vsock, rx_work);
+	struct virtqueue *vq;
+
+	vq = vsock->vqs[VSOCK_VQ_RX];
+
+	mutex_lock(&vsock->rx_lock);
+
+	if (!vsock->rx_run)
+		goto out;
+
+	do {
+		virtqueue_disable_cb(vq);
+		for (;;) {
+			struct virtio_vsock_pkt *pkt;
+			unsigned int len;
+
+			if (!virtio_transport_more_replies(vsock)) {
+				/* Stop rx until the device processes already
+				 * pending replies.  Leave rx virtqueue
+				 * callbacks disabled.
+				 */
+				goto out;
+			}
+
+			pkt = virtqueue_get_buf(vq, &len);
+			if (!pkt) {
+				break;
+			}
+
+			vsock->rx_buf_nr--;
+
+			/* Drop short/long packets */
+			if (unlikely(len < sizeof(pkt->hdr) ||
+				     len > sizeof(pkt->hdr) + pkt->len)) {
+				virtio_transport_free_pkt(pkt);
+				continue;
+			}
+
+			pkt->len = len - sizeof(pkt->hdr);
+			virtio_transport_deliver_tap_pkt(pkt);
+			virtio_transport_recv_pkt(&virtio_transport, pkt);
+		}
+	} while (!virtqueue_enable_cb(vq));
+
+out:
+	if (vsock->rx_buf_nr < vsock->rx_buf_max_nr / 2)
+		virtio_vsock_rx_fill(vsock);
+	mutex_unlock(&vsock->rx_lock);
+}
+
 static int virtio_vsock_probe(struct virtio_device *vdev)
 {
 	vq_callback_t *callbacks[] = {
@@ -776,7 +772,8 @@
 	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 @@
 	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 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 fb2060df..5a5bbd5 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 @@
 }
 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 @@
 
 	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 @@
 
 	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 @@
 }
 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 @@
 
 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);
 
@@ -696,9 +653,9 @@
 /* Normally packets are associated with a socket.  There may be no socket if an
  * attempt was made to connect to a socket that does not exist.
  */
-static int virtio_transport_reset_no_sock(struct virtio_vsock_pkt *pkt)
+static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
+					  struct virtio_vsock_pkt *pkt)
 {
-	const struct virtio_transport *t;
 	struct virtio_vsock_pkt *reply;
 	struct virtio_vsock_pkt_info info = {
 		.op = VIRTIO_VSOCK_OP_RST,
@@ -718,7 +675,6 @@
 	if (!reply)
 		return -ENOMEM;
 
-	t = virtio_transport_get_ops();
 	if (!t) {
 		virtio_transport_free_pkt(reply);
 		return -ENOTCONN;
@@ -994,28 +950,53 @@
 	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;
 	}
 
@@ -1031,6 +1012,20 @@
 	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);
@@ -1041,26 +1036,11 @@
 	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.
  */
-void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt)
+void virtio_transport_recv_pkt(struct virtio_transport *t,
+			       struct virtio_vsock_pkt *pkt)
 {
 	struct sockaddr_vm src, dst;
 	struct vsock_sock *vsk;
@@ -1082,7 +1062,7 @@
 					le32_to_cpu(pkt->hdr.fwd_cnt));
 
 	if (le16_to_cpu(pkt->hdr.type) != VIRTIO_VSOCK_TYPE_STREAM) {
-		(void)virtio_transport_reset_no_sock(pkt);
+		(void)virtio_transport_reset_no_sock(t, pkt);
 		goto free_pkt;
 	}
 
@@ -1093,7 +1073,7 @@
 	if (!sk) {
 		sk = vsock_find_bound_socket(&dst);
 		if (!sk) {
-			(void)virtio_transport_reset_no_sock(pkt);
+			(void)virtio_transport_reset_no_sock(t, pkt);
 			goto free_pkt;
 		}
 	}
@@ -1112,7 +1092,7 @@
 
 	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:
@@ -1130,6 +1110,7 @@
 		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 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 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 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 
 	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 @@
 	} 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 @@
 	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 @@
 	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 @@
 	.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 @@
 		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 @@
 		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 @@
 		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..b7b0721 100644
--- a/net/vmw_vsock/vmci_transport.h
+++ b/net/vmw_vsock/vmci_transport.h
@@ -108,9 +108,6 @@
 	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 @@
 		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 @@
 	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 @@
 {
 	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 @@
 {
 	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 @@
 	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 @@
 			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 @@
 			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 @@
 	 * 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 @@
 	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 @@
 	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 @@
 	 * 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 @@
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 ee5bb8d..e52fd39 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 @@
 	/* 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 @@
 			    !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 @@
 				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 ec559db..046e2293 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -628,6 +628,10 @@
 					.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_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 @@
 			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 @@
 			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;
@@ -5779,6 +5790,10 @@
 			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]);
@@ -5910,6 +5925,10 @@
 			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 =
@@ -5954,10 +5973,14 @@
 		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 1a8218f..0d8ab9e 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1656,22 +1656,23 @@
 					  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 @@
 
 	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 @@
 		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 @@
 	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 @@
 	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 {
@@ -3335,8 +3336,8 @@
 	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;
 }
@@ -3365,9 +3366,10 @@
 	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 @@
 		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 8481e9a..73d4a1b 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -72,7 +72,7 @@
 }
 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 @@
 	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 */
+		/* see 802.11ax D6.1 27.3.23.2 */
+		if (chan == 2)
+			return MHZ_TO_KHZ(5935);
 		if (chan <= 253)
-			return 5940 + chan * 5;
+			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;
@@ -116,19 +121,22 @@
 		return (freq - 2407) / 5;
 	else if (freq >= 4910 && freq <= 4980)
 		return (freq - 4000) / 5;
-	else if (freq < 5945)
+	else if (freq < 5925)
 		return (freq - 5000) / 5;
+	else if (freq == 5935)
+		return 2;
 	else if (freq <= 45000) /* DMG band lower limit */
-		/* see 802.11ax D4.1 27.3.22.2 */
-		return (freq - 5940) / 5;
+		/* see 802.11ax D6.1 27.3.22.2 */
+		return (freq - 5950) / 5;
 	else if (freq >= 58320 && freq <= 70200)
 		return (freq - 56160) / 2160;
 	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;
@@ -141,14 +149,16 @@
 			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/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 @@
 
 	.uinfo = {
 		.auth = {
-			.icv_truncbits = 96,
+			.icv_truncbits = 128,
 			.icv_fullbits = 256,
 		}
 	},
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index f342356..787105c 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2268,9 +2268,6 @@
 	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);
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index fbb7d9d0..8e4fb35 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -2642,9 +2642,6 @@
 	const struct xfrm_link *link;
 	int type, err;
 
-	if (in_compat_syscall())
-		return -EOPNOTSUPP;
-
 	type = nlh->nlmsg_type;
 	if (type > XFRM_MSG_MAX)
 		return -EINVAL;
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 @@
 {
 	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 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 3e86b30..543603e 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -31,6 +31,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 24a33c0..708ea47 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
 
@@ -374,6 +395,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)
 #
@@ -382,8 +417,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
@@ -403,16 +441,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 -;\
@@ -430,8 +478,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 6fcc66a..2cbeae6 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/clang-android.sh b/scripts/clang-android.sh
new file mode 100755
index 0000000..9186c4f
--- /dev/null
+++ b/scripts/clang-android.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+
+$* -dM -E - </dev/null 2>&1 | grep -q __ANDROID__ && echo "y"
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/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..528edd0 100755
--- a/scripts/mkcompile_h
+++ b/scripts/mkcompile_h
@@ -7,6 +7,7 @@
 PREEMPT=$4
 PREEMPT_RT=$5
 CC=$6
+LD=$7
 
 vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
 
@@ -74,7 +75,10 @@
   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:]]*$//'`\"
+  CC_VERSION=$($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 52f1152..ca1acb7 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -146,6 +146,9 @@
 		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;
@@ -2000,6 +2003,10 @@
 		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 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 @@
 		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/setlocalversion b/scripts/setlocalversion
index a2998b1..28237d8 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 --short 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 0ca31c8..aee4eb3 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -297,7 +297,8 @@
 	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;
 }
 
@@ -586,7 +587,8 @@
 
 	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/inode.c b/security/inode.c
index 6c32693..2895046 100644
--- a/security/inode.c
+++ b/security/inode.c
@@ -128,7 +128,7 @@
 	dir = d_inode(parent);
 
 	inode_lock(dir);
-	dentry = lookup_one_len(name, parent, strlen(name));
+	dentry = lookup_one_len2(name, mount, parent, strlen(name));
 	if (IS_ERR(dentry))
 		goto out;
 
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
index a2c393385..cfea3eb 100644
--- a/security/integrity/evm/evm_main.c
+++ b/security/integrity/evm/evm_main.c
@@ -100,7 +100,8 @@
 		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..008e797 100644
--- a/security/security.c
+++ b/security/security.c
@@ -1101,6 +1101,7 @@
 		return 0;
 	return call_int_hook(path_chown, 0, path, uid, gid);
 }
+EXPORT_SYMBOL_GPL(security_path_chown);
 
 int security_path_chroot(const struct path *path)
 {
@@ -2404,3 +2405,30 @@
 	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/hooks.c b/security/selinux/hooks.c
index 552e73d..9609612 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -554,7 +554,8 @@
 			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 @@
 
 	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 @@
 		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 @@
 
 		context[len] = '\0';
 		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
-				    context, len);
+				    context, len, XATTR_NOSECURITY);
 	}
 	if (rc < 0) {
 		kfree(context);
@@ -6827,6 +6831,67 @@
 	.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),
@@ -7064,6 +7129,14 @@
 	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 @@
 	  { 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 @@
 	  {"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 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 @@
 	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 @@
 	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 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 @@
 	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 @@
 
 	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 e6c7643..83f1b19 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -1486,6 +1486,32 @@
 	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,
@@ -1603,6 +1629,37 @@
 	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)
 {
@@ -1967,6 +2024,14 @@
 	}
 
 	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 @@
 	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 @@
 		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 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 @@
 		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 @@
 			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 @@
 	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 @@
 /* The policy database */
 struct policydb {
 	int mls_enabled;
+	int android_netlink_route;
 
 	/* symbol tables */
 	struct symtab symtab[SYM_NUM];
@@ -320,6 +321,7 @@
 #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..e352ce1e 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1257,6 +1257,17 @@
 
 #include "initial_sid_to_string.h"
 
+int security_sidtab_hash_stats(struct selinux_state *state, char *page)
+{
+	int rc;
+
+	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 +1460,42 @@
 	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 +1548,7 @@
 		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 +1852,7 @@
 			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 +2004,7 @@
 			context_init(newc);
 			newc->str = s;
 			newc->len = oldc->len;
+			newc->hash = oldc->hash;
 			return 0;
 		}
 		kfree(s);
@@ -2033,6 +2081,10 @@
 			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 +2094,7 @@
 	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 +2119,9 @@
 			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 +2336,7 @@
 
 	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 +2361,12 @@
 			 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 +2380,7 @@
 
 	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 +2427,7 @@
 
 	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 +2468,11 @@
 
 	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 +2513,12 @@
 		      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 +2560,7 @@
 
 	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 +2644,17 @@
 		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 +2725,6 @@
 				       u32 *sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = state->ss->sidtab;
 	int len;
 	u16 sclass;
 	struct genfs *genfs;
@@ -2707,7 +2759,7 @@
 		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 +2822,7 @@
 	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 +3082,7 @@
 			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 +3675,7 @@
 		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_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 @@
 
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 
 	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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 @@
 		}
 		cond_resched();
 	}
+
 	return 0;
 }
 
@@ -435,7 +412,7 @@
 	/* 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 @@
 		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 @@
 
 	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_isid_entry {
 	int set;
-	struct context context;
+	struct sidtab_entry_leaf leaf;
 };
 
 struct sidtab_convert_params {
@@ -66,7 +69,8 @@
 	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_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 @@
 
 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 @@
 	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 @@
 			} 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 @@
 	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 ec501fb..ddb2194 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1214,6 +1214,7 @@
 	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 @@
 }
 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 cc4e9aa..8892bf9 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 @@
 	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 @@
 
 	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 @@
 	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 @@
 	}
 	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 @@
 
 	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;
 }
@@ -2876,6 +2929,7 @@
 	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;
@@ -2965,6 +3019,22 @@
 		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 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 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 @@
 	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 @@
 
 	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 @@
 	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 @@
 	}
 	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 @@
 
 	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 @@
 
 	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 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 b118cf9..9a97d78 100644
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -642,8 +642,13 @@
 	 * 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 7b41f97..38f4735 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -134,6 +134,71 @@
 			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;
 }
@@ -563,6 +628,10 @@
 		}
 		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);
 	}
 
@@ -590,6 +659,74 @@
 	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:
@@ -896,6 +1033,10 @@
 	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;
@@ -932,6 +1073,17 @@
 		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;
@@ -1341,6 +1493,11 @@
 	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;
@@ -1369,6 +1526,11 @@
 	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);
 
@@ -1376,6 +1538,12 @@
 	    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 @@
 		       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 d01edd5..db5e99d 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -67,9 +67,13 @@
 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 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 @@
 
 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/testing/selftests/filesystems/incfs/.gitignore b/tools/testing/selftests/filesystems/incfs/.gitignore
new file mode 100644
index 0000000..4cba9c21
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/.gitignore
@@ -0,0 +1 @@
+incfs_test
\ No newline at end of file
diff --git a/tools/testing/selftests/filesystems/incfs/Makefile b/tools/testing/selftests/filesystems/incfs/Makefile
new file mode 100644
index 0000000..5b2e627
--- /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 -D_GNU_SOURCE -Wall
+CFLAGS += -I../.. -I../../../../..
+
+LDLIBS := -llz4 -lcrypto
+EXTRA_SOURCES := utils.c
+TEST_GEN_PROGS := incfs_test
+
+$(TEST_GEN_PROGS): $(EXTRA_SOURCES)
+
+include ../../lib.mk
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..c9bccc7
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c
@@ -0,0 +1,2764 @@
+// 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 <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.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_MAX_MTREE_LEVELS 8
+
+#define INCFS_ROOT_INODE 0
+
+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 }
+	};
+	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);
+}
+
+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 ||
+	    errno != EPERM) {
+		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(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));
+}
+
+static int emit_test_blocks(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 = (file->index + block_index) % 2 == 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) {
+			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 (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(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(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(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(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(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(char *mount_dir, struct test_file *file)
+{
+	return validate_test_file_content_with_seed(mount_dir, file, 0);
+}
+
+static int data_producer(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 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(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 = 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;
+	}
+
+	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(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},
+		{".index", 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(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(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(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(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(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(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(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(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];
+
+		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_producer(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(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(char *mount_dir, int log_fd, struct test_file *file,
+			 enum expected_log expected_log)
+{
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+	struct incfs_pending_read_info prs[2048] = {};
+	int prs_size = ARRAY_SIZE(prs);
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int expected_read_block_cnt;
+	int res;
+	int read_count;
+	int i, j;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	free(filename);
+	if (fd <= 0)
+		return TEST_FAILURE;
+
+	if (block_cnt > prs_size)
+		block_cnt = prs_size;
+	expected_read_block_cnt = block_cnt;
+
+	for (i = 0; i < block_cnt; i++) {
+		res = pread(fd, data, sizeof(data),
+			    INCFS_DATA_FILE_BLOCK_SIZE * i);
+
+		/* Make some read logs of type SAME_FILE_NEXT_BLOCK */
+		if (i % 10 == 0)
+			usleep(20000);
+
+		/* Skip some blocks to make logs of type SAME_FILE */
+		if (i % 10 == 5) {
+			++i;
+			--expected_read_block_cnt;
+		}
+
+		if (res <= 0)
+			goto failure;
+	}
+
+	read_count = wait_for_pending_reads(
+		log_fd, expected_log == NO_LOG ? 10 : 0, prs, prs_size);
+	if (expected_log == NO_LOG) {
+		if (read_count == 0)
+			goto success;
+		if (read_count < 0)
+			ksft_print_msg("Error reading logged reads %s.\n",
+				       strerror(-read_count));
+		else
+			ksft_print_msg("Somehow read empty logs.\n");
+		goto failure;
+	}
+
+	if (read_count < 0) {
+		ksft_print_msg("Error reading logged reads %s.\n",
+			       strerror(-read_count));
+		goto failure;
+	}
+
+	i = 0;
+	if (expected_log == PARTIAL_LOG) {
+		if (read_count == 0) {
+			ksft_print_msg("No logs %s.\n", file->name);
+			goto failure;
+		}
+
+		for (i = 0, j = 0; j < expected_read_block_cnt - read_count;
+		     i++, j++)
+			if (i % 10 == 5)
+				++i;
+
+	} else if (read_count != expected_read_block_cnt) {
+		ksft_print_msg("Bad log read count %s %d %d.\n", file->name,
+			       read_count, expected_read_block_cnt);
+		goto failure;
+	}
+
+	for (j = 0; j < read_count; i++, j++) {
+		struct incfs_pending_read_info *read = &prs[j];
+
+		if (!same_id(&read->file_id, &file->id)) {
+			ksft_print_msg("Bad log read ino %s\n", file->name);
+			goto failure;
+		}
+
+		if (read->block_index != i) {
+			ksft_print_msg("Bad log read ino %s %d %d.\n",
+				       file->name, read->block_index, i);
+			goto failure;
+		}
+
+		if (j != 0) {
+			unsigned long psn = prs[j - 1].serial_number;
+
+			if (read->serial_number != psn + 1) {
+				ksft_print_msg("Bad log read sn %s %d %d.\n",
+					       file->name, read->serial_number,
+					       psn);
+				goto failure;
+			}
+		}
+
+		if (read->timestamp_us == 0) {
+			ksft_print_msg("Bad log read timestamp %s.\n",
+				       file->name);
+			goto failure;
+		}
+
+		if (i % 10 == 5)
+			++i;
+	}
+
+success:
+	close(fd);
+	return TEST_SUCCESS;
+
+failure:
+	close(fd);
+	return TEST_FAILURE;
+}
+
+static int read_log_test(char *mount_dir)
+{
+	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, drop_caches = -1;
+	char *backing_dir;
+
+	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;
+
+	log_fd = open_log_file(mount_dir);
+	if (log_fd < 0)
+		ksft_print_msg("Can't open log file.\n");
+
+	/* 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_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Validate data */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_logs(mount_dir, log_fd, file, FULL_LOG))
+			goto failure;
+	}
+
+	/* Unmount and mount again, to see that logs work after remount. */
+	close(cmd_fd);
+	close(log_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		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;
+
+	log_fd = open_log_file(mount_dir);
+	if (log_fd < 0)
+		ksft_print_msg("Can't open log file.\n");
+
+	/* Validate data again */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_logs(mount_dir, log_fd, file, FULL_LOG))
+			goto failure;
+	}
+
+	/*
+	 * Unmount and mount again with no read log to make sure poll
+	 * doesn't crash
+	 */
+	close(cmd_fd);
+	close(log_fd);
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=0",
+			 false) != 0)
+		goto failure;
+
+	log_fd = open_log_file(mount_dir);
+	if (log_fd < 0)
+		ksft_print_msg("Can't open log file.\n");
+
+	/* Validate data again - note should fail this time */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_logs(mount_dir, log_fd, file, NO_LOG))
+			goto failure;
+	}
+
+	/*
+	 * Remount and check that logs start working again
+	 */
+	drop_caches = open("/proc/sys/vm/drop_caches", O_WRONLY | O_CLOEXEC);
+	if (drop_caches == -1)
+		goto failure;
+	i = write(drop_caches, "3", 1);
+	close(drop_caches);
+	if (i != 1)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=1",
+			 true) != 0)
+		goto failure;
+
+	/* Validate data again */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_logs(mount_dir, log_fd, file, PARTIAL_LOG))
+			goto failure;
+	}
+
+	/*
+	 * Remount and check that logs start working again
+	 */
+	drop_caches = open("/proc/sys/vm/drop_caches", O_WRONLY | O_CLOEXEC);
+	if (drop_caches == -1)
+		goto failure;
+	i = write(drop_caches, "3", 1);
+	close(drop_caches);
+	if (i != 1)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=4",
+			 true) != 0)
+		goto failure;
+
+	/* Validate data again */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_logs(mount_dir, log_fd, file, FULL_LOG))
+			goto failure;
+	}
+
+	/* Final unmount */
+	close(log_fd);
+	free(backing_dir);
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	close(log_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int emit_partial_test_file_data(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;
+
+	if (file->size == 0)
+		return 0;
+
+	/* 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;
+		}
+	}
+out:
+	free(block_indexes);
+	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(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(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_blocks.count == 0)
+		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(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(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;
+
+	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);
+	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 main(int argc, char *argv[])
+{
+	char *mount_dir = NULL;
+	int fails = 0;
+	int i;
+	int fd, count;
+
+	// 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 {
+		int (*pfunc)(char *dir);
+		const char *name;
+	} 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),
+	};
+#undef MAKE_TEST
+
+	ksft_set_plan(ARRAY_SIZE(cases));
+
+	for (i = 0; i < ARRAY_SIZE(cases); ++i) {
+		ksft_print_msg("Running %s\n", cases[i].name);
+		if (cases[i].pfunc(mount_dir) == TEST_SUCCESS)
+			ksft_test_result_pass("%s\n", cases[i].name);
+		else {
+			ksft_test_result_fail("%s\n", cases[i].name);
+			fails++;
+		}
+	}
+
+	umount2(mount_dir, MNT_FORCE);
+	rmdir(mount_dir);
+
+	if (fails > 0)
+		ksft_exit_fail();
+	else
+		ksft_exit_pass();
+	return 0;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/utils.c b/tools/testing/selftests/filesystems/incfs/utils.c
new file mode 100644
index 0000000..e194f63
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.c
@@ -0,0 +1,297 @@
+// 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
+
+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 cmd_file[255];
+	int cmd_fd;
+
+	snprintf(cmd_file, ARRAY_SIZE(cmd_file), "%s/.log", mount_dir);
+	cmd_fd = open(cmd_file, O_RDWR | O_CLOEXEC);
+	if (cmd_fd < 0)
+		perror("Can't open log file");
+	return cmd_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);
+}
+
+char *concat_file_name(const char *dir, 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..9af63e4
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.h
@@ -0,0 +1,57 @@
+/* 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
+
+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 wait_for_pending_reads(int fd, int timeout_ms,
+	struct incfs_pending_read_info *prs, int prs_count);
+
+char *concat_file_name(const char *dir, 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);