diff --git a/repos/base/run/platform_drv.inc b/repos/base/run/platform_drv.inc
index d9fb37c63f..2c3c9ccf1d 100644
--- a/repos/base/run/platform_drv.inc
+++ b/repos/base/run/platform_drv.inc
@@ -137,7 +137,7 @@ proc platform_drv_policy {} {
-
+
diff --git a/repos/dde_linux/intel_fb.list b/repos/dde_linux/intel_fb.list
index 8a7a830cb2..a3872ee24e 100644
--- a/repos/dde_linux/intel_fb.list
+++ b/repos/dde_linux/intel_fb.list
@@ -1,76 +1,161 @@
linux-x.x.x/arch/x86/include/asm/agp.h
+linux-x.x.x/arch/x86/include/asm/iosf_mbi.h
+linux-x.x.x/arch/x86/include/asm/pci-direct.h
+linux-x.x.x/arch/x86/kernel/early-quirks.c
linux-x.x.x/drivers/char/agp/agp.h
linux-x.x.x/drivers/char/agp/backend.c
linux-x.x.x/drivers/char/agp/generic.c
linux-x.x.x/drivers/char/agp/intel-agp.h
linux-x.x.x/drivers/char/agp/intel-gtt.c
+linux-x.x.x/drivers/dma-buf/dma-fence.c
+linux-x.x.x/drivers/dma-buf/dma-fence-array.c
linux-x.x.x/drivers/gpu/drm/drm_atomic_helper.c
linux-x.x.x/drivers/gpu/drm/drm_atomic.c
+linux-x.x.x/drivers/gpu/drm/drm_blend.c
+linux-x.x.x/drivers/gpu/drm/drm_bridge.c
+linux-x.x.x/drivers/gpu/drm/drm_cache.c
+linux-x.x.x/drivers/gpu/drm/drm_connector.c
+linux-x.x.x/drivers/gpu/drm/drm_color_mgmt.c
linux-x.x.x/drivers/gpu/drm/drm_crtc.c
linux-x.x.x/drivers/gpu/drm/drm_crtc_helper.c
+linux-x.x.x/drivers/gpu/drm/drm_crtc_helper_internal.h
linux-x.x.x/drivers/gpu/drm/drm_crtc_internal.h
+linux-x.x.x/drivers/gpu/drm/drm_dp_dual_mode_helper.c
linux-x.x.x/drivers/gpu/drm/drm_dp_helper.c
+linux-x.x.x/drivers/gpu/drm/drm_dp_mst_topology.c
linux-x.x.x/drivers/gpu/drm/drm_edid.c
+linux-x.x.x/drivers/gpu/drm/drm_encoder.c
+linux-x.x.x/drivers/gpu/drm/drm_fourcc.c
+linux-x.x.x/drivers/gpu/drm/drm_framebuffer.c
+linux-x.x.x/drivers/gpu/drm/drm_gem.c
linux-x.x.x/drivers/gpu/drm/drm_internal.h
linux-x.x.x/drivers/gpu/drm/drm_irq.c
linux-x.x.x/drivers/gpu/drm/drm_mm.c
+linux-x.x.x/drivers/gpu/drm/drm_mode_config.c
+linux-x.x.x/drivers/gpu/drm/drm_mode_object.c
linux-x.x.x/drivers/gpu/drm/drm_modes.c
+linux-x.x.x/drivers/gpu/drm/drm_modeset_helper.c
linux-x.x.x/drivers/gpu/drm/drm_modeset_lock.c
+linux-x.x.x/drivers/gpu/drm/drm_plane.c
linux-x.x.x/drivers/gpu/drm/drm_plane_helper.c
linux-x.x.x/drivers/gpu/drm/drm_probe_helper.c
+linux-x.x.x/drivers/gpu/drm/drm_property.c
linux-x.x.x/drivers/gpu/drm/drm_rect.c
-linux-x.x.x/drivers/gpu/drm/i915/i915_dma.c
+linux-x.x.x/drivers/gpu/drm/drm_vblank.c
+linux-x.x.x/drivers/gpu/drm/drm_vma_manager.c
linux-x.x.x/drivers/gpu/drm/i915/i915_drv.c
linux-x.x.x/drivers/gpu/drm/i915/i915_drv.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_vma.c
linux-x.x.x/drivers/gpu/drm/i915/i915_gem.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gemfs.h
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_batch_pool.h
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_context.c
-linux-x.x.x/drivers/gpu/drm/i915/i915_gem_fence.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_context.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_clflush.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_clflush.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_fence_reg.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_fence_reg.h
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_gtt.c
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_gtt.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_internal.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_object.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_render_state.c
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_render_state.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_request.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_request.h
linux-x.x.x/drivers/gpu/drm/i915/i915_gem_stolen.c
-linux-x.x.x/drivers/gpu/drm/i915/i915_guc_reg.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_tiling.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_timeline.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_gem_timeline.h
linux-x.x.x/drivers/gpu/drm/i915/i915_irq.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_params.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_pci.c
+linux-x.x.x/drivers/gpu/drm/i915/i915_pmu.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_pvinfo.h
linux-x.x.x/drivers/gpu/drm/i915/i915_reg.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_selftest.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_sw_fence.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_syncmap.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_utils.h
+linux-x.x.x/drivers/gpu/drm/i915/i915_vma.h
linux-x.x.x/drivers/gpu/drm/i915/i915_vgpu.c
linux-x.x.x/drivers/gpu/drm/i915/i915_vgpu.h
linux-x.x.x/drivers/gpu/drm/i915/intel_atomic.c
linux-x.x.x/drivers/gpu/drm/i915/intel_atomic_plane.c
linux-x.x.x/drivers/gpu/drm/i915/intel_bios.c
linux-x.x.x/drivers/gpu/drm/i915/intel_bios.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_cdclk.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_color.c
linux-x.x.x/drivers/gpu/drm/i915/intel_crt.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_device_info.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_device_info.h
linux-x.x.x/drivers/gpu/drm/i915/intel_ddi.c
linux-x.x.x/drivers/gpu/drm/i915/intel_display.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_display.h
linux-x.x.x/drivers/gpu/drm/i915/intel_dp.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dp_aux_backlight.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dp_link_training.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dp_mst.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dpio_phy.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dpll_mgr.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dpll_mgr.h
linux-x.x.x/drivers/gpu/drm/i915/intel_drv.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_dsi_pll.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_dsi.h
linux-x.x.x/drivers/gpu/drm/i915/intel_fbc.c
linux-x.x.x/drivers/gpu/drm/i915/intel_fifo_underrun.c
linux-x.x.x/drivers/gpu/drm/i915/intel_frontbuffer.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_frontbuffer.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc.c
linux-x.x.x/drivers/gpu/drm/i915/intel_guc.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_ct.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_fw.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_fw.h
linux-x.x.x/drivers/gpu/drm/i915/intel_guc_fwif.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_log.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_reg.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_guc_submission.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_gvt.h
linux-x.x.x/drivers/gpu/drm/i915/intel_hdmi.c
linux-x.x.x/drivers/gpu/drm/i915/intel_hotplug.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_huc.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_huc.h
linux-x.x.x/drivers/gpu/drm/i915/intel_i2c.c
linux-x.x.x/drivers/gpu/drm/i915/intel_lrc.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_lspcon.c
linux-x.x.x/drivers/gpu/drm/i915/intel_lvds.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_mocs.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_mocs.h
linux-x.x.x/drivers/gpu/drm/i915/intel_modes.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_opregion.h
linux-x.x.x/drivers/gpu/drm/i915/intel_overlay.c
linux-x.x.x/drivers/gpu/drm/i915/intel_panel.c
linux-x.x.x/drivers/gpu/drm/i915/intel_pm.c
linux-x.x.x/drivers/gpu/drm/i915/intel_psr.c
-linux-x.x.x/drivers/gpu/drm/i915/intel_ringbuffer.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_renderstate.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_renderstate_gen6.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_renderstate_gen7.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_renderstate_gen8.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_renderstate_gen9.c
linux-x.x.x/drivers/gpu/drm/i915/intel_ringbuffer.h
linux-x.x.x/drivers/gpu/drm/i915/intel_runtime_pm.c
linux-x.x.x/drivers/gpu/drm/i915/intel_sdvo.c
linux-x.x.x/drivers/gpu/drm/i915/intel_sdvo_regs.h
linux-x.x.x/drivers/gpu/drm/i915/intel_sideband.c
linux-x.x.x/drivers/gpu/drm/i915/intel_sprite.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_uc.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_uc.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_uc_fw.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_uc_fw.h
linux-x.x.x/drivers/gpu/drm/i915/intel_uncore.c
+linux-x.x.x/drivers/gpu/drm/i915/intel_uncore.h
+linux-x.x.x/drivers/gpu/drm/i915/intel_vbt_defs.h
linux-x.x.x/drivers/i2c/algos/i2c-algo-bit.c
linux-x.x.x/drivers/i2c/i2c-boardinfo.c
-linux-x.x.x/drivers/i2c/i2c-core.c
linux-x.x.x/drivers/i2c/i2c-core.h
+linux-x.x.x/drivers/i2c/i2c-core-base.c
+linux-x.x.x/drivers/i2c/i2c-core-smbus.c
linux-x.x.x/drivers/video/hdmi.c
linux-x.x.x/include/asm-generic/atomic64.h
linux-x.x.x/include/asm-generic/bitops/__ffs.h
@@ -85,34 +170,85 @@ linux-x.x.x/include/drm/drmP.h
linux-x.x.x/include/drm/drm_agpsupport.h
linux-x.x.x/include/drm/drm_atomic.h
linux-x.x.x/include/drm/drm_atomic_helper.h
+linux-x.x.x/include/drm/drm_auth.h
+linux-x.x.x/include/drm/drm_blend.h
+linux-x.x.x/include/drm/drm_bridge.h
+linux-x.x.x/include/drm/drm_cache.h
+linux-x.x.x/include/drm/drm_connector.h
+linux-x.x.x/include/drm/drm_color_mgmt.h
linux-x.x.x/include/drm/drm_crtc.h
linux-x.x.x/include/drm/drm_crtc_helper.h
+linux-x.x.x/include/drm/drm_debugfs_crc.h
+linux-x.x.x/include/drm/drm_device.h
linux-x.x.x/include/drm/drm_displayid.h
+linux-x.x.x/include/drm/drm_dp_dual_mode_helper.h
linux-x.x.x/include/drm/drm_dp_helper.h
linux-x.x.x/include/drm/drm_dp_mst_helper.h
+linux-x.x.x/include/drm/drm_drv.h
linux-x.x.x/include/drm/drm_edid.h
+linux-x.x.x/include/drm/drm_encoder.h
+linux-x.x.x/include/drm/drm_file.h
+linux-x.x.x/include/drm/drm_fixed.h
+linux-x.x.x/include/drm/drm_fourcc.h
+linux-x.x.x/include/drm/drm_framebuffer.h
linux-x.x.x/include/drm/drm_gem.h
linux-x.x.x/include/drm/drm_global.h
linux-x.x.x/include/drm/drm_hashtab.h
+linux-x.x.x/include/drm/drm_ioctl.h
+linux-x.x.x/include/drm/drm_irq.h
linux-x.x.x/include/drm/drm_legacy.h
linux-x.x.x/include/drm/drm_mm.h
+linux-x.x.x/include/drm/drm_mipi_dsi.h
+linux-x.x.x/include/drm/drm_mode_config.h
+linux-x.x.x/include/drm/drm_mode_object.h
linux-x.x.x/include/drm/drm_modes.h
+linux-x.x.x/include/drm/drm_modeset_helper.h
+linux-x.x.x/include/drm/drm_modeset_helper_vtables.h
linux-x.x.x/include/drm/drm_modeset_lock.h
+linux-x.x.x/include/drm/drm_pci.h
+linux-x.x.x/include/drm/drm_plane.h
linux-x.x.x/include/drm/drm_plane_helper.h
+linux-x.x.x/include/drm/drm_print.h
+linux-x.x.x/include/drm/drm_prime.h
+linux-x.x.x/include/drm/drm_property.h
linux-x.x.x/include/drm/drm_rect.h
+linux-x.x.x/include/drm/drm_scdc_helper.h
+linux-x.x.x/include/drm/drm_utils.h
+linux-x.x.x/include/drm/drm_vma_manager.h
+linux-x.x.x/include/drm/drm_vblank.h
linux-x.x.x/include/drm/i915_drm.h
linux-x.x.x/include/drm/i915_pciids.h
linux-x.x.x/include/drm/intel-gtt.h
linux-x.x.x/include/linux/agp_backend.h
+linux-x.x.x/include/linux/circ_buf.h
+linux-x.x.x/include/linux/dma-fence.h
+linux-x.x.x/include/linux/dma-fence-array.h
linux-x.x.x/include/linux/hdmi.h
+linux-x.x.x/include/linux/firmware.h
+linux-x.x.x/include/linux/gpio/consumer.h
linux-x.x.x/include/linux/i2c-algo-bit.h
linux-x.x.x/include/linux/i2c.h
+linux-x.x.x/include/linux/idr.h
+linux-x.x.x/include/linux/interval_tree.h
+linux-x.x.x/include/linux/interval_tree_generic.h
+linux-x.x.x/include/linux/irqhandler.h
+linux-x.x.x/include/linux/io-mapping.h
linux-x.x.x/include/linux/list.h
linux-x.x.x/include/linux/list_sort.h
+linux-x.x.x/include/linux/llist.h
+linux-x.x.x/include/linux/math64.h
linux-x.x.x/include/linux/log2.h
+linux-x.x.x/include/linux/pagevec.h
linux-x.x.x/include/linux/pci_ids.h
linux-x.x.x/include/linux/pm_runtime.h
linux-x.x.x/include/linux/pm_wakeirq.h
+linux-x.x.x/include/linux/ratelimit.h
+linux-x.x.x/include/linux/radix-tree.h
+linux-x.x.x/include/linux/rbtree.h
+linux-x.x.x/include/linux/rbtree_augmented.h
+linux-x.x.x/include/linux/scatterlist.h
+linux-x.x.x/include/linux/sort.h
+linux-x.x.x/include/linux/vga_switcheroo.h
linux-x.x.x/include/uapi/asm-generic/ioctl.h
linux-x.x.x/include/uapi/drm/drm.h
linux-x.x.x/include/uapi/drm/drm_fourcc.h
@@ -125,4 +261,10 @@ linux-x.x.x/include/uapi/linux/pci_regs.h
linux-x.x.x/include/uapi/linux/swab.h
linux-x.x.x/include/video/display_timing.h
linux-x.x.x/include/video/videomode.h
+linux-x.x.x/lib/div64.c
+linux-x.x.x/lib/idr.c
linux-x.x.x/lib/list_sort.c
+linux-x.x.x/lib/llist.c
+linux-x.x.x/lib/radix-tree.c
+linux-x.x.x/lib/rbtree.c
+linux-x.x.x/lib/scatterlist.c
diff --git a/repos/dde_linux/lib/mk/spec/x86/intel_fb_drv.mk b/repos/dde_linux/lib/mk/spec/x86/intel_fb_drv.mk
index 7057064b2b..1de9388ce6 100644
--- a/repos/dde_linux/lib/mk/spec/x86/intel_fb_drv.mk
+++ b/repos/dde_linux/lib/mk/spec/x86/intel_fb_drv.mk
@@ -5,6 +5,7 @@ LIBS += intel_fb_include
SRC_C :=
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/char/agp/*.c))
+SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/dma-buf/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/i2c/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/i2c/algos/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/gpu/drm/*.c))
@@ -12,6 +13,7 @@ SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/gpu/drm/i915/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/video/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/video/fbdev/core/*.c))
SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/lib/*.c))
+SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/arch/x86/kernel/*.c))
#
# Linux sources are C89 with GNU extensions
@@ -27,6 +29,7 @@ CC_WARN = -Wall -Wno-uninitialized -Wno-unused-but-set-variable \
-Wno-int-to-pointer-cast
vpath %.c $(LX_CONTRIB_DIR)/drivers/char/agp
+vpath %.c $(LX_CONTRIB_DIR)/drivers/dma-buf
vpath %.c $(LX_CONTRIB_DIR)/drivers/i2c
vpath %.c $(LX_CONTRIB_DIR)/drivers/i2c/algos
vpath %.c $(LX_CONTRIB_DIR)/drivers/gpu/drm/i915
@@ -34,6 +37,7 @@ vpath %.c $(LX_CONTRIB_DIR)/drivers/gpu/drm
vpath %.c $(LX_CONTRIB_DIR)/drivers/video
vpath %.c $(LX_CONTRIB_DIR)/drivers/video/fbdev/core
vpath %.c $(LX_CONTRIB_DIR)/lib
+vpath %.c $(LX_CONTRIB_DIR)/arch/x86/kernel
CC_CXX_WARN_STRICT =
diff --git a/repos/dde_linux/patches/intel_fb_backlight.patch b/repos/dde_linux/patches/intel_fb_backlight.patch
index a9cb413488..4960e7469b 100644
--- a/repos/dde_linux/patches/intel_fb_backlight.patch
+++ b/repos/dde_linux/patches/intel_fb_backlight.patch
@@ -4,7 +4,7 @@
panel->backlight.present = true;
-+ intel_panel_set_backlight(intel_connector, panel->backlight.max*75/100, panel->backlight.max);
++ intel_panel_set_backlight(connector->state, panel->backlight.max*75/100, panel->backlight.max);
DRM_DEBUG_KMS("Connector %s backlight initialized, %s, brightness %u/%u\n",
connector->name,
panel->backlight.enabled ? "enabled" : "disabled",
diff --git a/repos/dde_linux/patches/intel_fb_drm.patch b/repos/dde_linux/patches/intel_fb_drm.patch
new file mode 100644
index 0000000000..6d53e5a0b9
--- /dev/null
+++ b/repos/dde_linux/patches/intel_fb_drm.patch
@@ -0,0 +1,244 @@
+--- a/drivers/gpu/drm/i915/i915_gem_object.h
+--- b/drivers/gpu/drm/i915/i915_gem_object.h
+@@ -26,6 +26,7 @@
+ #define __I915_GEM_OBJECT_H__
+
+ #include
++#include
+
+ #include
+ #include
+--- a/drivers/gpu/drm/drm_connector.c
++++ b/drivers/gpu/drm/drm_connector.c
+@@ -544,7 +544,9 @@
+ {
+ iter->dev = dev;
+ iter->conn = NULL;
++#ifdef CONFIG_LOCKDEP
+ lock_acquire_shared_recursive(&connector_list_iter_dep_map, 0, 1, NULL, _RET_IP_);
++#endif
+ }
+ EXPORT_SYMBOL(drm_connector_list_iter_begin);
+
+@@ -625,7 +627,9 @@
+ __drm_connector_put_safe(iter->conn);
+ spin_unlock_irqrestore(&config->connector_list_lock, flags);
+ }
++#ifdef CONFIG_LOCKDEP
+ lock_release(&connector_list_iter_dep_map, 0, _RET_IP_);
++#endif
+ }
+ EXPORT_SYMBOL(drm_connector_list_iter_end);
+
+--- a/include/drm/drm_mm.h
++++ b/include/drm/drm_mm.h
+@@ -423,7 +423,7 @@
+ struct drm_mm_node *node,
+ u64 size)
+ {
+- return drm_mm_insert_node_generic(mm, node, size, 0, 0, 0);
++ return drm_mm_insert_node_generic(mm, node, size, 0, 0, DRM_MM_INSERT_BEST);
+ }
+
+ void drm_mm_remove_node(struct drm_mm_node *node);
+--- a/include/drm/drm_print.h
++++ b/include/drm/drm_print.h
+@@ -122,10 +122,9 @@
+ */
+ static inline struct drm_printer drm_debug_printer(const char *prefix)
+ {
+- struct drm_printer p = {
+- .printfn = __drm_printfn_debug,
+- .prefix = prefix
+- };
++ struct drm_printer p;
++ p.printfn = __drm_printfn_debug;
++ p.prefix = prefix;
+ return p;
+ }
+ #endif /* DRM_PRINT_H_ */
+--- a/drivers/gpu/drm/i915/intel_guc.c
++++ b/drivers/gpu/drm/i915/intel_guc.c
+@@ -24,6 +24,7 @@
+
+ #include "intel_guc.h"
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ static void gen8_guc_raise_irq(struct intel_guc *guc)
+ {
+--- a/drivers/gpu/drm/i915/intel_uc.c
++++ b/drivers/gpu/drm/i915/intel_uc.c
+@@ -26,6 +26,7 @@
+ #include "intel_guc_submission.h"
+ #include "intel_guc.h"
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ /* Reset GuC providing us with fresh state for both GuC and HuC.
+ */
+--- a/drivers/gpu/drm/i915/intel_guc_fw.c
++++ b/drivers/gpu/drm/i915/intel_guc_fw.c
+@@ -29,6 +29,7 @@
+
+ #include "intel_guc_fw.h"
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ #define SKL_FW_MAJOR 6
+ #define SKL_FW_MINOR 1
+--- a/drivers/gpu/drm/i915/i915_gem_fence_reg.c
++++ b/drivers/gpu/drm/i915/i915_gem_fence_reg.c
+@@ -24,6 +24,7 @@
+ #include
+ #include
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ /**
+ * DOC: fence register handling
+--- a/drivers/gpu/drm/i915/intel_huc.c
++++ b/drivers/gpu/drm/i915/intel_huc.c
+@@ -26,6 +26,7 @@
+
+ #include "intel_huc.h"
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ /**
+ * DOC: HuC Firmware
+--- a/drivers/gpu/drm/i915/i915_gem_request.c
++++ b/drivers/gpu/drm/i915/i915_gem_request.c
+@@ -29,6 +29,7 @@
+ #include
+
+ #include "i915_drv.h"
++#include "intel_drv.h"
+
+ static const char *i915_fence_get_driver_name(struct dma_fence *fence)
+ {
+--- a/drivers/gpu/drm/i915/i915_vma.c
++++ b/drivers/gpu/drm/i915/i915_vma.c
+@@ -27,6 +27,7 @@
+ #include "i915_drv.h"
+ #include "intel_ringbuffer.h"
+ #include "intel_frontbuffer.h"
++#include "intel_drv.h"
+
+ #include
+
+--- a/drivers/i2c/i2c-core-base.c
++++ b/drivers/i2c/i2c-core-base.c
+@@ -1276,9 +1276,11 @@
+ goto out_list;
+ }
+
++#if IS_ENABLED(CONFIG_I2C_SMBUS) && IS_ENABLED(CONFIG_OF)
+ res = of_i2c_setup_smbus_alert(adap);
+ if (res)
+ goto out_reg;
++#endif
+
+ dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
+
+@@ -1311,7 +1313,9 @@
+
+ return 0;
+
++#if IS_ENABLED(CONFIG_I2C_SMBUS) && IS_ENABLED(CONFIG_OF)
+ out_reg:
++#endif
+ init_completion(&adap->dev_released);
+ device_unregister(&adap->dev);
+ wait_for_completion(&adap->dev_released);
+--- a/include/drm/intel-gtt.h
++++ b/include/drm/intel-gtt.h
+@@ -4,6 +4,8 @@
+ #ifndef _DRM_INTEL_GTT_H
+ #define _DRM_INTEL_GTT_H
+
++#include
++
+ void intel_gtt_get(u64 *gtt_total,
+ u32 *stolen_size,
+ phys_addr_t *mappable_base,
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -1022,11 +1022,11 @@
+
+ intel_uc_init_mmio(dev_priv);
+
+- ret = intel_engines_init_mmio(dev_priv);
++// ret = intel_engines_init_mmio(dev_priv);
+ if (ret)
+ goto err_uncore;
+
+- i915_gem_init_mmio(dev_priv);
++// i915_gem_init_mmio(dev_priv);
+
+ return 0;
+
+--- a/drivers/gpu/drm/i915/i915_gem_context.c
++++ b/drivers/gpu/drm/i915/i915_gem_context.c
+@@ -487,9 +487,11 @@
+ }
+ dev_priv->preempt_context = ctx;
+
++/*
+ DRM_DEBUG_DRIVER("%s context support initialized\n",
+ dev_priv->engine[RCS]->context_size ? "logical" :
+ "fake");
++*/
+ return 0;
+
+ err_kernel_context:
+--- a/drivers/gpu/drm/drm_framebuffer.c
+--- b/drivers/gpu/drm/drm_framebuffer.c
+@@ -675,7 +675,8 @@
+ INIT_LIST_HEAD(&fb->filp_head);
+
+ fb->funcs = funcs;
+- strcpy(fb->comm, current->comm);
++ if (current) /* used for debugging */
++ strcpy(fb->comm, current->comm);
+
+ ret = __drm_mode_object_add(dev, &fb->base, DRM_MODE_OBJECT_FB,
+ false, drm_framebuffer_free);
+--- a/drivers/gpu/drm/i915/intel_display.c
+--- b/drivers/gpu/drm/i915/intel_display.c
+@@ -12199,7 +12199,7 @@
+ u64 put_domains[I915_MAX_PIPES] = {};
+ int i;
+
+- intel_atomic_commit_fence_wait(intel_state);
++// intel_atomic_commit_fence_wait(intel_state);
+
+ drm_atomic_helper_wait_for_dependencies(state);
+
+@@ -12479,13 +12479,14 @@
+ dev_priv->cdclk.actual = intel_state->cdclk.actual;
+ }
+
+- drm_atomic_state_get(state);
+ INIT_WORK(&state->commit_work, intel_atomic_commit_work);
+
+ i915_sw_fence_commit(&intel_state->commit_ready);
+ if (nonblock && intel_state->modeset) {
++ drm_atomic_state_get(state);
+ queue_work(dev_priv->modeset_wq, &state->commit_work);
+ } else if (nonblock) {
++ drm_atomic_state_get(state);
+ queue_work(system_unbound_wq, &state->commit_work);
+ } else {
+ if (intel_state->modeset)
+--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
++++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
+@@ -154,7 +158,7 @@
+ * We don't allow disabling PPGTT for gen9+ as it's a requirement for
+ * execlists, the sole mechanism available to submit work.
+ */
+- if (enable_ppgtt == 0 && INTEL_GEN(dev_priv) < 9)
++ if (enable_ppgtt == 0) // && INTEL_GEN(dev_priv) < 9)
+ return 0;
+
+ if (enable_ppgtt == 1)
diff --git a/repos/dde_linux/patches/intel_fb_drm_remove.patch b/repos/dde_linux/patches/intel_fb_drm_remove.patch
deleted file mode 100644
index 21372bfafc..0000000000
--- a/repos/dde_linux/patches/intel_fb_drm_remove.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -13567,6 +13568,10 @@
- intel_crtc = to_intel_crtc(crtc);
-
- plane->fb = fb;
-+
-+ if (!crtc)
-+ return;
-+
- crtc->x = src->x1 >> 16;
- crtc->y = src->y1 >> 16;
-
diff --git a/repos/dde_linux/patches/intel_fb_early.patch b/repos/dde_linux/patches/intel_fb_early.patch
new file mode 100644
index 0000000000..92aee52314
--- /dev/null
+++ b/repos/dde_linux/patches/intel_fb_early.patch
@@ -0,0 +1,52 @@
+--- a/arch/x86/kernel/early-quirks.c
++++ b/arch/x86/kernel/early-quirks.c
+@@ -28,6 +28,11 @@
+ #include
+ #include
+
++#define __initconst
++#define __ro_after_init
++
++#if 0
++
+ #define dev_err(msg) pr_err("pci 0000:%02x:%02x.%d: %s", bus, slot, func, msg)
+
+ static void __init fix_hypertransport_config(int num, int slot, int func)
+@@ -230,6 +235,8 @@
+ set_irq_remapping_broken();
+ }
+
++#endif /*#if 0*/
++
+ /*
+ * Systems with Intel graphics controllers set aside memory exclusively
+ * for gfx driver use. This memory is not marked in the E820 as reserved
+@@ -558,11 +565,13 @@
+ &intel_graphics_stolen_res);
+
+ /* Mark this space as reserved */
++#if 0
+ e820__range_add(base, size, E820_TYPE_RESERVED);
+ e820__update_table(e820_table);
++#endif
+ }
+
+-static void __init intel_graphics_quirks(int num, int slot, int func)
++void __init intel_graphics_quirks(int num, int slot, int func)
+ {
+ const struct intel_early_ops *early_ops;
+ u16 device;
+@@ -584,6 +593,8 @@
+ }
+ }
+
++#if 0
++
+ static void __init force_disable_hpet(int num, int slot, int func)
+ {
+ #ifdef CONFIG_HPET_TIMER
+@@ -774,3 +785,4 @@
+
+ early_pci_scan_bus(0);
+ }
++#endif /*#if 0*/
diff --git a/repos/dde_linux/patches/intel_fb_export_api.patch b/repos/dde_linux/patches/intel_fb_export_api.patch
deleted file mode 100644
index 87e0626086..0000000000
--- a/repos/dde_linux/patches/intel_fb_export_api.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 32cf973..ec1d558 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -15816,3 +15816,11 @@ void intel_modeset_preclose(struct drm_device *dev, struct drm_file *file)
- spin_unlock_irq(&dev->event_lock);
- }
- }
-+
-+struct drm_framebuffer *
-+lx_c_intel_framebuffer_create(struct drm_device *dev,
-+ struct drm_mode_fb_cmd2 *mode_cmd,
-+ struct drm_i915_gem_object *obj) {
-+ return intel_framebuffer_create(dev, mode_cmd, obj);
-+}
-+EXPORT_SYMBOL(lx_c_intel_framebuffer_create);
diff --git a/repos/dde_linux/patches/intel_fb_hotplug.patch b/repos/dde_linux/patches/intel_fb_hotplug.patch
new file mode 100644
index 0000000000..ee0e391a84
--- /dev/null
+++ b/repos/dde_linux/patches/intel_fb_hotplug.patch
@@ -0,0 +1,97 @@
+--- a/drivers/gpu/drm/i915/intel_hotplug.c
++++ b/drivers/gpu/drm/i915/intel_hotplug.c
+@@ -336,11 +336,10 @@
+ /*
+ * Handle hotplug events outside the interrupt handler proper.
+ */
+-static void i915_hotplug_work_func(struct work_struct *work)
++static void i915_hotplug_work_func_x(struct work_struct *work,
++ struct drm_i915_private *dev_priv,
++ struct drm_device *dev)
+ {
+- struct drm_i915_private *dev_priv =
+- container_of(work, struct drm_i915_private, hotplug.hotplug_work);
+- struct drm_device *dev = &dev_priv->drm;
+ struct intel_connector *intel_connector;
+ struct intel_encoder *intel_encoder;
+ struct drm_connector *connector;
+@@ -353,7 +352,7 @@
+
+ spin_lock_irq(&dev_priv->irq_lock);
+
+- hpd_event_bits = dev_priv->hotplug.event_bits;
++ hpd_event_bits = dev_priv->hotplug.event_bits | dev_priv->hotplug.recheck_event_bits;
+ dev_priv->hotplug.event_bits = 0;
+
+ /* Disable hotplug on connectors that hit an irq storm. */
+@@ -379,8 +378,40 @@
+ drm_connector_list_iter_end(&conn_iter);
+ mutex_unlock(&dev->mode_config.mutex);
+
+- if (changed)
++ if (changed) {
++ dev_priv->hotplug.recheck_event_bits = 0;
+ drm_kms_helper_hotplug_event(dev);
++ } else {
++ if (hpd_event_bits && !dev_priv->hotplug.recheck_event_bits) {
++ unsigned long delay = msecs_to_jiffies(2000);
++ schedule_delayed_work(&dev_priv->hotplug.recheck_hotplug, delay);
++ }
++
++ if (hpd_event_bits != dev_priv->hotplug.recheck_event_bits)
++ dev_priv->hotplug.recheck_event_bits |= hpd_event_bits;
++ }
++}
++
++static void i915_hotplug_work_func(struct work_struct *work)
++{
++ struct drm_i915_private *dev_priv =
++ container_of(work, struct drm_i915_private, hotplug.hotplug_work);
++ struct drm_device *dev = &dev_priv->drm;
++
++ i915_hotplug_work_func_x(work, dev_priv, dev);
++}
++
++static void i915_hotplug_recheck_func(struct work_struct *work)
++{
++ struct drm_i915_private *dev_priv =
++ container_of(work, typeof(*dev_priv),
++ hotplug.recheck_hotplug.work);
++ struct drm_device *dev = &dev_priv->drm;
++
++ i915_hotplug_work_func_x(work, dev_priv, dev);
++
++ /* re-try just once */
++ dev_priv->hotplug.recheck_event_bits = 0;
+ }
+
+
+@@ -604,6 +635,8 @@
+ INIT_WORK(&dev_priv->hotplug.poll_init_work, i915_hpd_poll_init_work);
+ INIT_DELAYED_WORK(&dev_priv->hotplug.reenable_work,
+ intel_hpd_irq_storm_reenable_work);
++ INIT_DELAYED_WORK(&dev_priv->hotplug.recheck_hotplug,
++ i915_hotplug_recheck_func);
+ }
+
+ void intel_hpd_cancel_work(struct drm_i915_private *dev_priv)
+@@ -620,6 +653,7 @@
+ cancel_work_sync(&dev_priv->hotplug.hotplug_work);
+ cancel_work_sync(&dev_priv->hotplug.poll_init_work);
+ cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work);
++ cancel_delayed_work_sync(&dev_priv->hotplug.recheck_hotplug);
+ }
+
+ bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin)
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -278,7 +278,9 @@
+ } state;
+ } stats[HPD_NUM_PINS];
+ u32 event_bits;
++ u32 recheck_event_bits;
+ struct delayed_work reenable_work;
++ struct delayed_work recheck_hotplug;
+
+ struct intel_digital_port *irq_port[I915_MAX_PORTS];
+ u32 long_port_mask;
diff --git a/repos/dde_linux/ports/dde_linux.hash b/repos/dde_linux/ports/dde_linux.hash
index fc80707b5b..47fb679ddd 100644
--- a/repos/dde_linux/ports/dde_linux.hash
+++ b/repos/dde_linux/ports/dde_linux.hash
@@ -1 +1 @@
-dbe07ce4380f2028e3b9d5fccaedff6b831b9a0e
+d2628a8fe8df14dd00d5fa8ef6bbea527d319bee
diff --git a/repos/dde_linux/ports/dde_linux.port b/repos/dde_linux/ports/dde_linux.port
index fb066194a6..fd50ea3c9a 100644
--- a/repos/dde_linux/ports/dde_linux.port
+++ b/repos/dde_linux/ports/dde_linux.port
@@ -41,9 +41,9 @@ DIR(dwc_otg) := $(SRC_DIR_USB)/drivers/usb/host/dwc_otg
# Intel framebuffer driver
#
SRC_DIR_INTEL_FB := src/drivers/framebuffer/intel
-VERSION_INTEL_FB := 4.4.3
+VERSION_INTEL_FB := 4.16.3
URL(intel_fb) := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_INTEL_FB).tar.xz
-SHA(intel_fb) := 0b379cb19bbd7e38fc5a9a000ea927db55cce519a7400ec7fa705c581a6491dd
+SHA(intel_fb) := 0d6971a81da97e38b974c5eba31a74803bfe41aabc46d406c3acda56306c81a3
DIR(intel_fb) := $(SRC_DIR_INTEL_FB)
TAR_OPT(intel_fb) := --strip-components=1 --files-from - < <(sed 's/-x.x.x/-$(VERSION_INTEL_FB)/g' $(REP_DIR)/intel_fb.list)
HASH_INPUT += $(REP_DIR)/intel_fb.list
@@ -197,9 +197,11 @@ PATCH_OPT(patches/usb_rndis.patch) := $(USB_OPT)
PATCH_OPT(patches/usb_tv64.patch) := $(USB_OPT)
# INTEL FB
-PATCH_OPT(patches/intel_fb_export_api.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
-PATCH_OPT(patches/intel_fb_drm_remove.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
-PATCH_OPT(patches/intel_fb_backlight.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
+PATCH_OPT(patches/intel_fb_backlight.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
+PATCH_OPT(patches/intel_fb_drm.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
+PATCH_OPT(patches/intel_fb_early.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
+# drop it when https://bugs.freedesktop.org/show_bug.cgi?id=107125 gets fixed
+PATCH_OPT(patches/intel_fb_hotplug.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
# Freescale NIC
PATCH_OPT(patches/fec_skbuff_cast.patch) := -p1 -d$(SRC_DIR_FEC)
diff --git a/repos/dde_linux/run/intel_fb.run b/repos/dde_linux/run/intel_fb.run
index a91087f747..ba5aef8478 100644
--- a/repos/dde_linux/run/intel_fb.run
+++ b/repos/dde_linux/run/intel_fb.run
@@ -10,6 +10,7 @@ set build_components {
server/report_rom
server/ram_fs
server/fs_rom
+ app/top
}
source ${genode_dir}/repos/base/run/platform_drv.inc
@@ -24,7 +25,7 @@ create_boot_directory
#
append config {
-
+
@@ -34,6 +35,7 @@ append config {
+
@@ -48,64 +50,105 @@ append config {
-
+
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
}
install_config $config
@@ -118,6 +161,7 @@ install_config $config
set boot_modules {
core ld.lib.so init timer intel_fb_drv intel_fb_controller
test-framebuffer report_rom ram_fs fs_rom
+ top
}
append_platform_drv_boot_modules
diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/README b/repos/dde_linux/src/drivers/framebuffer/intel/README
index 05b6c9ab1f..92e758ea78 100644
--- a/repos/dde_linux/src/drivers/framebuffer/intel/README
+++ b/repos/dde_linux/src/drivers/framebuffer/intel/README
@@ -18,7 +18,7 @@ Each of the connector can be configured explicitly in terms of resolution and
whether it should be enabled or not. This looks like the following:
!
-!
+!
!
When the configuration changes during run-time, the driver will adapt to it. In
@@ -26,6 +26,9 @@ this case it will also change the current virtual resolution to the maximum of
the configured resolutions in width and height, and it will inform its client
about the change in resolution.
+The brightness value is in percentage and takes effect only if supported by
+the hardware.
+
If you experience problems like hotplugging of connectors does not work, you
can force the driver to poll frequently for hotplug events by defining a period
in milliseconds like this:
@@ -46,10 +49,13 @@ configured too, like in the following:
The exported report has the following format:
!
-!
+!
!
! ...
!
-! ...
+!
+!
!
+The brightness attribute is soley reported if the hardware supports it.
+
diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c b/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c
index 27147c6ffd..90a8c7c6f3 100644
--- a/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c
+++ b/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c
@@ -1,11 +1,11 @@
#include
#include
#include
-#include
#include
#include
#include
+
bool access_ok(int access, void *addr, size_t size)
{
TRACE_AND_STOP;
@@ -47,50 +47,12 @@ int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)
return -1;
}
-
-int bitmap_weight(const unsigned long *src, unsigned int nbits)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
bool capable(int cap)
{
TRACE_AND_STOP;
return false;
}
-void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
-{
- TRACE_AND_STOP;
-}
-
-void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
-{
- TRACE_AND_STOP;
-}
-
-void cfb_imageblit(struct fb_info *info, const struct fb_image *image)
-{
- TRACE_AND_STOP;
-}
-
-void console_lock(void)
-{
- TRACE_AND_STOP;
-}
-
-int console_trylock(void)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void console_unlock(void)
-{
- TRACE_AND_STOP;
-}
-
size_t copy_from_user(void *to, void const *from, size_t len)
{
TRACE_AND_STOP;
@@ -108,11 +70,6 @@ void cpufreq_cpu_put(struct cpufreq_policy *policy)
TRACE_AND_STOP;
}
-void destroy_timer_on_stack(struct timer_list *timer)
-{
- TRACE_AND_STOP;
-}
-
void destroy_workqueue(struct workqueue_struct *wq)
{
TRACE_AND_STOP;
@@ -124,23 +81,12 @@ void *dev_get_drvdata(const struct device *dev)
return NULL;
}
-int device_for_each_child(struct device *dev, void *data, int (*fn)(struct device *dev, void *data))
-{
- TRACE_AND_STOP;
- return -1;
-}
-
int device_init_wakeup(struct device *dev, bool val)
{
TRACE_AND_STOP;
return -1;
}
-void device_unregister(struct device *dev)
-{
- TRACE_AND_STOP;
-}
-
const char *dev_name(const struct device *dev)
{
TRACE_AND_STOP;
@@ -155,7 +101,8 @@ int dma_set_coherent_mask(struct device *dev, u64 mask)
void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction)
{
- TRACE_AND_STOP;
+ printk("%s %llx+%x\n", __func__, dma_address, size);
+ TRACE; //_AND_STOP;
}
void down_read(struct rw_semaphore *sem)
@@ -163,69 +110,6 @@ void down_read(struct rw_semaphore *sem)
TRACE_AND_STOP;
}
-void drm_clflush_virt_range(void *addr, unsigned long length)
-{
- TRACE_AND_STOP;
-}
-
-int drm_dp_mst_hpd_irq(struct drm_dp_mst_topology_mgr *mgr, u8 *esi, bool *handled)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool mst_state)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr)
-{
- TRACE_AND_STOP;
-}
-
-void drm_free_large(void *ptr)
-{
- TRACE_AND_STOP;
-}
-
-int drm_gem_create_mmap_offset(struct drm_gem_object *obj)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, uint32_t handle)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, struct drm_file *filp, u32 handle)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle)
{
TRACE_AND_STOP;
@@ -238,28 +122,12 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_pri
return -1;
}
-void drm_gem_vm_close(struct vm_area_struct *vma)
-{
- TRACE_AND_STOP;
-}
-
-void drm_gem_vm_open(struct vm_area_struct *vma)
-{
- TRACE_AND_STOP;
-}
-
long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
TRACE_AND_STOP;
return -1;
}
-void *drm_malloc_ab(size_t nmemb, size_t size)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
int drm_noop(struct drm_device *dev, void *data, struct drm_file *file_priv)
{
TRACE_AND_STOP;
@@ -294,11 +162,6 @@ void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg)
TRACE_AND_STOP;
}
-void drm_put_dev(struct drm_device *dev)
-{
- TRACE_AND_STOP;
-}
-
ssize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset)
{
TRACE_AND_STOP;
@@ -311,40 +174,6 @@ int drm_release(struct inode *inode, struct file *filp)
return -1;
}
-bool drm_vma_node_has_offset(struct drm_vma_offset_node *node)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-__u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void drm_vma_node_unmap(struct drm_vma_offset_node *node, struct address_space *file_mapping)
-{
- TRACE_AND_STOP;
-}
-
-int fault_in_multipages_readable(const char __user *uaddr, int size)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int fault_in_multipages_writeable(char __user *uaddr, int size)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void fb_set_suspend(struct fb_info *info, int state)
-{
- TRACE_AND_STOP;
-}
-
struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
{
TRACE_AND_STOP;
@@ -356,54 +185,12 @@ void flush_scheduled_work(void)
TRACE_AND_STOP;
}
-void flush_workqueue(struct workqueue_struct *wq)
-{
- TRACE_AND_STOP;
-}
-
void __free_pages(struct page *page, unsigned int order)
{
- TRACE_AND_STOP;
-}
+ if (!page)
+ TRACE_AND_STOP;
-unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-unsigned long get_seconds(void)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void gpio_free(unsigned gpio)
-{
- TRACE_AND_STOP;
-}
-
-int gpio_get_value(unsigned int gpio)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-bool gpio_is_valid(int number)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void gpio_set_value(unsigned int gpio, int value)
-{
- TRACE_AND_STOP;
+ printk("%s %llx(%llx) order=%x\n", __func__, page->addr, page->paddr, order);
}
void ips_link_to_i915_driver(void)
@@ -411,33 +198,17 @@ void ips_link_to_i915_driver(void)
TRACE;
}
-void i915_audio_component_cleanup(struct drm_i915_private *dev_priv)
-{
- TRACE_AND_STOP;
-}
-
-void i915_capture_error_state(struct drm_device *dev, bool wedge, const char *error_msg)
-{
- TRACE_AND_STOP;
-}
-
-int i915_cmd_parser_get_version(void)
+int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv)
{
TRACE_AND_STOP;
return -1;
}
-void i915_destroy_error_state(struct drm_device *dev)
-{
- TRACE_AND_STOP;
-}
-
-void i915_gem_batch_pool_fini(struct i915_gem_batch_pool *pool)
-{
- TRACE_AND_STOP;
-}
-
-int __must_check i915_gem_evict_something(struct drm_device *dev, struct i915_address_space *vm, int min_size, unsigned alignment, unsigned cache_level, unsigned long start, unsigned long end, unsigned flags)
+int __must_check i915_gem_evict_something(struct i915_address_space *vm,
+ u64 min_size, u64 alignment,
+ unsigned cache_level,
+ u64 start, u64 end,
+ unsigned flags)
{
TRACE_AND_STOP;
return -1;
@@ -455,18 +226,6 @@ int i915_gem_execbuffer2(struct drm_device *dev, void *data, struct drm_file *fi
return -1;
}
-int i915_gem_get_tiling(struct drm_device *dev, void *data, struct drm_file *file)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int i915_gem_set_tiling(struct drm_device *dev, void *data, struct drm_file *file)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
struct dma_buf *i915_gem_prime_export(struct drm_device *dev, struct drm_gem_object *gem_obj, int flags)
{
TRACE_AND_STOP;
@@ -479,13 +238,9 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, struct dma_
return NULL;
}
-int i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params, struct drm_i915_gem_execbuffer2 *args, struct list_head *vmas)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv, unsigned long target, unsigned flags)
+unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
+ unsigned long target, unsigned long *nr_scanned,
+ unsigned flags)
{
TRACE_AND_STOP;
return -1;
@@ -503,39 +258,23 @@ int i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *
return -1;
}
-void i915_get_extra_instdone(struct drm_device *dev, uint32_t *instdone)
-{
- TRACE_AND_STOP;
-}
-
-int i915_restore_state(struct drm_device *dev)
+int i915_restore_state(struct drm_i915_private *dev_priv)
{
TRACE_AND_STOP;
return -1;
}
-int i915_save_state(struct drm_device *dev)
+int i915_save_state(struct drm_i915_private *dev_priv)
{
TRACE_AND_STOP;
return -1;
}
-void i915_teardown_sysfs(struct drm_device *dev_priv)
+void i915_teardown_sysfs(struct drm_i915_private *dev_priv)
{
TRACE_AND_STOP;
}
-void idr_destroy(struct idr *idp)
-{
- TRACE_AND_STOP;
-}
-
-void *idr_get_next(struct idr *idp, int *nextid)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
void intel_csr_load_program(struct drm_device *dev)
{
TRACE_AND_STOP;
@@ -546,72 +285,28 @@ void intel_csr_ucode_fini(struct drm_device *dev)
TRACE_AND_STOP;
}
-void intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port)
-{
- TRACE_AND_STOP;
-}
-
-void intel_dsi_init(struct drm_device *dev)
-{
- TRACE_AND_STOP;
-}
-
void intel_dvo_init(struct drm_device *dev)
{
TRACE_AND_STOP;
}
-void intel_execlists_retire_requests(struct intel_engine_cs *ring)
+int intel_guc_enable_ct(struct intel_guc *guc)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_guc_disable_ct(struct intel_guc *guc)
{
TRACE_AND_STOP;
}
-int intel_execlists_submission(struct i915_execbuffer_params *params, struct drm_i915_gem_execbuffer2 *args, struct list_head *vmas)
+void i915_guc_log_register(struct drm_i915_private *dev_priv)
{
- TRACE_AND_STOP;
- return -1;
+ TRACE;
}
-int intel_guc_resume(struct drm_device *dev)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int intel_guc_suspend(struct drm_device *dev)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void intel_guc_ucode_fini(struct drm_device *dev)
-{
- TRACE_AND_STOP;
-}
-
-int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void intel_logical_ring_cleanup(struct intel_engine_cs *ring)
-{
- TRACE_AND_STOP;
-}
-
-int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void intel_logical_ring_stop(struct intel_engine_cs *ring)
-{
- TRACE_AND_STOP;
-}
-
-void intel_lr_context_unpin(struct drm_i915_gem_request *req)
+void i915_guc_log_unregister(struct drm_i915_private *dev_priv)
{
TRACE_AND_STOP;
}
@@ -621,74 +316,12 @@ void intel_tv_init(struct drm_device *dev)
TRACE_AND_STOP;
}
-void io_mapping_free(struct io_mapping *mapping)
-{
- TRACE_AND_STOP;
-}
-
-void *io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
-void __iomem * io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
-void io_mapping_unmap(void __iomem *vaddr)
-{
- TRACE_AND_STOP;
-}
-
-void io_mapping_unmap_atomic(void *vaddr)
-{
- TRACE_AND_STOP;
-}
-
-void io_schedule(void)
-{
- TRACE_AND_STOP;
-}
-
-unsigned int jiffies_to_usecs(const unsigned long j)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *envp[])
{
TRACE_AND_STOP;
return -1;
}
-int kref_get_unless_zero(struct kref *kref)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-u64 local_clock(void)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int logical_ring_flush_all_caches(struct drm_i915_gem_request *req)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void *memchr_inv(const void *s, int c, size_t n)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
void memcpy_toio(volatile void __iomem *dst, const void *src, size_t count)
{
TRACE_AND_STOP;
@@ -701,8 +334,8 @@ void ndelay(unsigned long ns)
bool need_resched(void)
{
- TRACE_AND_STOP;
- return -1;
+ TRACE;
+ return false;
}
loff_t noop_llseek(struct file *file, loff_t offset, int whence)
@@ -711,7 +344,13 @@ loff_t noop_llseek(struct file *file, loff_t offset, int whence)
return -1;
}
-extern u64 nsecs_to_jiffies64(u64 n)
+u64 nsecs_to_jiffies64(u64 n)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
+u64 nsecs_to_jiffies(u64 n)
{
TRACE_AND_STOP;
return -1;
@@ -719,8 +358,8 @@ extern u64 nsecs_to_jiffies64(u64 n)
int of_alias_get_id(struct device_node *np, const char *stem)
{
- TRACE_AND_STOP;
- return -1;
+ TRACE;
+ return -ENOSYS;
}
int of_driver_match_device(struct device *dev, const struct device_driver *drv)
@@ -764,8 +403,8 @@ void pci_disable_msi(struct pci_dev *dev)
int pci_enable_device(struct pci_dev *dev)
{
- TRACE_AND_STOP;
- return -1;
+ TRACE;
+ return 0;
}
struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from)
@@ -826,7 +465,7 @@ int PTR_ERR_OR_ZERO(__force const void *ptr)
void put_pid(struct pid *pid)
{
- TRACE_AND_STOP;
+ TRACE;
}
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
@@ -893,7 +532,7 @@ void seq_puts(struct seq_file *m, const char *s)
int set_page_dirty(struct page *page)
{
- TRACE_AND_STOP;
+ TRACE;
return -1;
}
@@ -903,12 +542,6 @@ int set_pages_wb(struct page *page, int numpages)
return -1;
}
-int sg_nents(struct scatterlist *sg)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
struct page *shmem_read_mapping_page( struct address_space *mapping, pgoff_t index)
{
TRACE_AND_STOP;
@@ -920,6 +553,12 @@ void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
TRACE_AND_STOP;
}
+int signal_pending(struct task_struct *p)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
int signal_pending_state(long state, struct task_struct *p)
{
TRACE_AND_STOP;
@@ -937,39 +576,17 @@ void sysfs_remove_link(struct kobject *kobj, const char *name)
TRACE_AND_STOP;
}
-int unregister_oom_notifier(struct notifier_block *nb)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
int unregister_reboot_notifier(struct notifier_block *nb)
{
TRACE_AND_STOP;
return -1;
}
-void unregister_shrinker(struct shrinker *s)
-{
- TRACE_AND_STOP;
-}
-
void up_read(struct rw_semaphore *sem)
{
TRACE_AND_STOP;
}
-int vga_switcheroo_process_delayed_switch(void)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void vga_switcheroo_unregister_client(struct pci_dev *dev)
-{
- TRACE_AND_STOP;
-}
-
phys_addr_t virt_to_phys(volatile void *address)
{
TRACE_AND_STOP;
@@ -983,82 +600,27 @@ pgprot_t vm_get_page_prot(unsigned long vm_flags)
return prot;
}
-int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
unsigned long vm_mmap(struct file *f, unsigned long l1, unsigned long l2, unsigned long l3, unsigned long l4, unsigned long l5)
{
TRACE_AND_STOP;
return -1;
}
-int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-int __wait_completion(struct completion *work, unsigned long to)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
int wake_up_process(struct task_struct *tsk)
{
TRACE_AND_STOP;
return -1;
}
-void wbinvd_on_all_cpus()
-{
- TRACE_AND_STOP;
-}
-
void yield(void)
{
- TRACE_AND_STOP;
+ TRACE;
}
+
void bus_unregister(struct bus_type *bus)
{
TRACE_AND_STOP;
}
-int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-enum csr_state intel_csr_load_status_get(struct drm_i915_private *dev_priv)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void assert_csr_loaded(struct drm_i915_private *dev_priv)
-{
- TRACE_AND_STOP;
-}
-
-bool drm_bridge_mode_fixup(struct drm_bridge *bridge, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
-void i915_cmd_parser_fini_ring(struct intel_engine_cs *ring)
-{
- TRACE_AND_STOP;
-}
-
-unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset)
-{
- TRACE_AND_STOP;
- return -1;
-}
void kvfree(const void *addr)
{
@@ -1076,27 +638,6 @@ void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int
TRACE_AND_STOP;
}
-void *vmalloc(unsigned long size)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-void intel_lr_context_free(struct intel_context *ctx)
-{
- TRACE_AND_STOP;
-}
-
-void intel_lr_context_reset(struct drm_device *dev, struct intel_context *ctx)
-{
- TRACE_AND_STOP;
-}
-
-int idr_for_each(struct idr *idp, int (*fn)(int id, void *p, void *data), void *data)
-{
- TRACE_AND_STOP;
- return -1;
-}
-
void ww_mutex_lock_slow(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
{
TRACE_AND_STOP;
@@ -1119,50 +660,1114 @@ void free_irq(unsigned int irq, void *dev_id)
TRACE_AND_STOP;
}
-ktime_t ktime_get_real(void)
-{
- ktime_t ret;
- TRACE_AND_STOP;
- return ret;
-}
-
-ktime_t ktime_mono_to_real(ktime_t mono)
-{
- ktime_t ret;
- TRACE_AND_STOP;
- return ret;
-}
-
-void* bl_get_data(struct backlight_device *bl_dev)
-{
- TRACE_AND_STOP;
- return NULL;
-}
-
void backlight_device_unregister(struct backlight_device *bd)
{
TRACE_AND_STOP;
}
+
int ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
{
TRACE_AND_STOP;
return -1;
}
-struct page *virt_to_page(void *addr)
+void might_sleep(void)
+{
+ TRACE;
+}
+
+void rcu_read_lock(void)
+{
+ TRACE;
+}
+
+void rcu_read_unlock(void)
+{
+ TRACE;
+}
+
+void might_lock(struct mutex *m)
+{
+ TRACE;
+}
+
+void unmap_mapping_range(struct address_space *a, loff_t const b,
+ loff_t const c, int d)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_audio_init(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void intel_audio_deinit(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void write_lock(rwlock_t *l)
+{
+ TRACE;
+}
+
+void write_unlock(rwlock_t *l)
+{
+ TRACE;
+}
+
+void read_lock(rwlock_t *l)
+{
+ TRACE_AND_STOP;
+}
+
+void read_unlock(rwlock_t *l)
+{
+ TRACE_AND_STOP;
+}
+
+struct edid *drm_load_edid_firmware(struct drm_connector *connector)
+{
+ TRACE;
+ return NULL;
+}
+
+ktime_t ktime_get_raw(void)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void write_seqlock(seqlock_t *l)
+{
+ TRACE;
+}
+
+void write_sequnlock(seqlock_t *l)
+{
+ TRACE;
+}
+
+void drm_dev_fini(struct drm_device *dev)
+{
+ TRACE_AND_STOP;
+}
+
+
+unsigned read_seqbegin(const seqlock_t *s)
+{
+ TRACE;
+ return 0;
+}
+
+unsigned read_seqretry(const seqlock_t *s, unsigned x)
+{
+ TRACE;
+ return 0;
+}
+
+void *kvmalloc(size_t s, gfp_t g)
+{
+ TRACE_AND_STOP;
+}
+
+void *kvmalloc_array(size_t a, size_t b, gfp_t g)
+{
+ TRACE_AND_STOP;
+}
+
+int i915_perf_open_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void i915_perf_init(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void i915_perf_fini(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void i915_perf_register(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void i915_perf_unregister(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void cond_resched(void)
+{
+ TRACE;
+}
+
+struct page *kmap_to_page(void *p)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void vunmap(const void *a)
+{
+ TRACE_AND_STOP;
+}
+
+void reservation_object_init(struct reservation_object *obj)
+{
+ TRACE;
+}
+
+void reservation_object_fini(struct reservation_object *obj)
+{
+ TRACE;
+}
+
+bool reservation_object_test_signaled_rcu(struct reservation_object *obj,
+ bool test_all)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+int reservation_object_lock(struct reservation_object *obj,
+ struct ww_acquire_ctx *ctx)
+{
+ TRACE;
+ return 0;
+}
+
+void reservation_object_unlock(struct reservation_object *obj)
+{
+ TRACE;
+}
+
+bool reservation_object_trylock(struct reservation_object *obj)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void reservation_object_add_excl_fence(struct reservation_object *obj,
+ struct dma_fence *fence)
+{
+ TRACE_AND_STOP;
+}
+
+struct dma_fence * reservation_object_get_excl_rcu(struct reservation_object *obj)
+{
+ TRACE;
+ return obj->fence_excl;
+}
+
+int reservation_object_get_fences_rcu(struct reservation_object *obj,
+ struct dma_fence **pfence_excl,
+ unsigned *pshared_count,
+ struct dma_fence ***pshared)
+{
+ TRACE;
+ *pshared_count = 0;
+ *pfence_excl = NULL;
+ *pshared = NULL;
+ return 0;
+}
+
+void set_current_state(int state)
+{
+ switch (state) {
+ case TASK_INTERRUPTIBLE:
+ printk("%s TASK_INTERRUPTIBLE\n", __func__);
+ break;
+ case TASK_RUNNING:
+ printk("%s TASK_RUNNING\n", __func__);
+ break;
+ default:
+ printk("%s unknown %d\n", __func__, state);
+ }
+}
+
+void __set_current_state(int state)
+{
+ set_current_state(state);
+}
+
+void tasklet_enable(struct tasklet_struct *t)
+{
+ TRACE_AND_STOP;
+}
+
+void tasklet_disable(struct tasklet_struct *t)
+{
+ TRACE_AND_STOP;
+}
+
+void tasklet_kill(struct tasklet_struct *t)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_dsi_init(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+int intel_dsi_dcs_init_backlight_funcs(struct intel_connector *intel_connector)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void rwlock_init(rwlock_t *rw)
+{
+ TRACE;
+}
+
+unsigned long vma_pages(struct vm_area_struct *p)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void pwm_apply_args(struct pwm_device *p)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_guc_ct_init_early(struct intel_guc_ct *ct)
+{
+ TRACE;
+
+ enum { CTB_OWNER_HOST = 0 };
+
+ ct->host_channel.owner = CTB_OWNER_HOST;
+}
+
+void i915_gem_object_set_cache_coherency(struct drm_i915_gem_object *obj,
+ unsigned int cache_level)
+{
+ TRACE;
+}
+
+int i915_gem_evict_for_node(struct i915_address_space *vm,
+ struct drm_mm_node *node, unsigned int flags)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void i915_gem_cleanup_userptr(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_lpe_audio_irq_handler(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+}
+
+
+bool intel_engines_are_idle(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void intel_engines_park(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
+{
+ TRACE_AND_STOP;
+}
+
+bool intel_engine_has_kernel_context(const struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void intel_engine_cleanup_common(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engines_unpark(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engines_reset_default_submission(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engine_dump(struct intel_engine_cs *engine, struct drm_printer *m,
+ const char *header, ...)
+{
+ TRACE_AND_STOP;
+}
+
+bool intel_engine_is_idle(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+unsigned int intel_engines_has_context_isolation(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int logical_render_ring_init(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int logical_xcs_ring_init(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_logical_ring_cleanup(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_lr_context_resume(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+int intel_engines_init(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+ return 0;
+}
+
+int init_workarounds_ring(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int intel_ring_workarounds_emit(struct drm_i915_gem_request *req)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int intel_engine_init_common(struct intel_engine_cs *engine)
+{
+ TRACE;
+ return 0;
+}
+
+int intel_engine_create_scratch(struct intel_engine_cs *engine, int size)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int is_vmalloc_addr(const void *x)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void drm_dev_printk(const struct device *dev, const char *level,
+ unsigned int category, const char *function_name,
+ const char *prefix, const char *format, ...)
+{
+ TRACE_AND_STOP;
+}
+
+void drm_dev_unregister(struct drm_device *dev)
+{
+ TRACE_AND_STOP;
+}
+
+void drm_dev_put(struct drm_device *dev)
+{
+ TRACE_AND_STOP;
+}
+
+void init_wait_entry(struct wait_queue_entry *wq_entry, int flags)
+{
+ TRACE;
+ wq_entry->flags = flags;
+ wq_entry->private = current;
+ wq_entry->func = autoremove_wake_function;
+ INIT_LIST_HEAD(&wq_entry->entry);
+}
+
+void spin_lock_nested(spinlock_t *lock, int subclass)
+{
+ TRACE;
+}
+
+struct pid *get_task_pid(struct task_struct *t, enum pid_type p)
{
TRACE_AND_STOP;
return NULL;
}
+int set_pages_array_wb(struct page **p, int x)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void __pagevec_release(struct pagevec *pvec)
+{
+ TRACE;
+}
+
+struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, const char *name,
+ loff_t size, unsigned long flags)
+{
+ TRACE_AND_STOP;
+ return NULL;
+}
+
+int set_pages_array_wc(struct page **p, int c)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+bool static_cpu_has(long c)
+{
+ TRACE;
+
+ if (c == X86_FEATURE_CLFLUSH)
+ return true;
+
+ TRACE_AND_STOP;
+ return false;
+}
+
+void rcu_barrier(void)
+{
+ TRACE_AND_STOP;
+}
+
+int i915_gemfs_init(struct drm_i915_private *i915)
+{
+ TRACE;
+ return 0;
+}
+
+void i915_gemfs_fini(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+}
+
+pid_t pid_nr(struct pid *p)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+unsigned int work_busy(struct work_struct *w)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void enable_irq(unsigned int irq)
+{
+ TRACE_AND_STOP;
+}
+
+void disable_irq(unsigned int irq)
+{
+ TRACE_AND_STOP;
+}
+
+unsigned raw_read_seqcount(const seqcount_t *s)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int remap_io_mapping(struct vm_area_struct *vma, unsigned long addr,
+ unsigned long pfn, unsigned long size,
+ struct io_mapping *iomap)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *))
+{
+ TRACE;
+
+ func(head);
+}
+
+int read_seqcount_retry(const seqcount_t *s, unsigned x)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void synchronize_rcu(void)
+{
+ TRACE_AND_STOP;
+}
+
+gfp_t mapping_gfp_mask(struct address_space * mapping)
+{
+ TRACE;
+ return __GFP_RECLAIM;
+}
+
+int down_write_killable(struct rw_semaphore *s)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void atomic_andnot(int x, atomic_t *t)
+{
+ t->counter &= ~x;
+ TRACE;
+}
+
+unsigned int get_random_int(void)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+unsigned long get_random_long(void)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+bool boot_cpu_has(long x)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+int pagecache_write_begin(struct file *f, struct address_space *a, loff_t o,
+ unsigned w, unsigned x, struct page **y, void **z)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int pagecache_write_end(struct file *f, struct address_space *a, loff_t o,
+ unsigned w, unsigned x, struct page *y, void *z)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int drm_fb_helper_remove_conflicting_framebuffers(struct apertures_struct *a,
+ const char *b, bool c)
+{
+ TRACE;
+ return 0;
+}
+
+int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper,
+ struct drm_connector *connector)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
+ struct drm_connector *connector)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void drain_workqueue(struct workqueue_struct *w)
+{
+ TRACE_AND_STOP;
+}
+
+unsigned __read_seqcount_begin(const seqcount_t *s)
+{
+ TRACE;
+ return 0;
+}
+
+int __read_seqcount_retry(const seqcount_t *s, unsigned x)
+{
+ TRACE;
+ return 1;
+}
+
+void intel_init_audio_hooks(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void intel_hangcheck_init(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void intel_csr_ucode_suspend(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_csr_ucode_resume(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+struct page * nth_page(struct page * page, int n)
+{
+ TRACE_AND_STOP;
+}
+
+unsigned int swiotlb_max_segment(void)
+{
+ TRACE;
+ return 0;
+}
+
+void seqlock_init (seqlock_t *s)
+{
+ TRACE;
+}
+
+struct irq_domain *irq_domain_create_linear(struct fwnode_handle *f,
+ unsigned int x,
+ const struct irq_domain_ops *y,
+ void *z)
+{
+ TRACE_AND_STOP;
+ return NULL;
+}
+
+struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
+{
+ TRACE;
+ return NULL;
+}
+
+void irq_dispose_mapping(unsigned int virq)
+{
+ TRACE_AND_STOP;
+}
+
+void irq_domain_remove(struct irq_domain *d)
+{
+ TRACE_AND_STOP;
+}
+
+void i915_memcpy_init_early(struct drm_i915_private *dev_priv)
+{
+ TRACE;
+}
+
+void add_taint(unsigned i, enum lockdep_ok o)
+{
+ TRACE_AND_STOP;
+}
+
+struct timespec64 ns_to_timespec64(const s64 nsec)
+{
+ struct timespec64 ret = { 0, 0 };
+
+ TRACE;
+
+ if (!nsec)
+ return ret;
+
+ s32 rest = 0;
+ ret.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rest);
+ if (rest < 0) {
+ ret.tv_sec--;
+ rest += NSEC_PER_SEC;
+ }
+ ret.tv_nsec = rest;
+
+ return ret;
+}
+
+pgprot_t pgprot_decrypted(pgprot_t prot)
+{
+ TRACE_AND_STOP;
+ return prot;
+}
+
+void dev_pm_set_driver_flags(struct device *dev, u32 x)
+{
+ TRACE;
+}
+
+void dma_buf_put(struct dma_buf *buf)
+{
+ TRACE_AND_STOP;
+}
+
+void wake_up_bit(void *p, int x)
+{
+ TRACE_AND_STOP;
+}
+
+unsigned cache_line_size()
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void of_node_put(struct device_node *d)
+{
+ TRACE_AND_STOP;
+}
+
+int ___ratelimit(struct ratelimit_state *rs, const char *func)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+bool _drm_lease_held(struct drm_file *f, int x)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void i915_syncmap_init(struct i915_syncmap **root)
+{
+ TRACE;
+}
+
+void i915_syncmap_free(struct i915_syncmap **root)
+{
+ TRACE;
+}
+
+char *kstrdup(const char *s, gfp_t gfp)
+{
+ if (!s)
+ return NULL;
+
+ size_t const len = strlen(s);
+ char * ptr = kmalloc(len + 1, gfp);
+ if (ptr)
+ memcpy(ptr, s, len + 1);
+ return ptr;
+}
+
+bool kthread_should_park(void)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+bool kthread_should_stop(void)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+int kthread_park(struct task_struct *t)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void kthread_unpark(struct task_struct *t)
+{
+ TRACE_AND_STOP;
+}
+
+void kthread_parkme(void)
+{
+ TRACE_AND_STOP;
+}
+
+int kthread_stop(struct task_struct *k)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void pagefault_disable(void)
+{
+ TRACE_AND_STOP;
+}
+
+void pagefault_enable(void)
+{
+ TRACE_AND_STOP;
+}
+
+bool irq_work_queue(struct irq_work *work)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
+{
+ TRACE_AND_STOP;
+}
+
+long long atomic64_add_return(long long i, atomic64_t *p)
+{
+ TRACE;
+ p->counter += i;
+ return p->counter;
+}
+
+int wake_up_state(struct task_struct *tsk, unsigned int state)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void __init_waitqueue_head(struct wait_queue_head *wq_head, const char *name, struct lock_class_key *key)
+{
+ TRACE_AND_STOP;
+}
+
+int set_pages_array_uc(struct page **pages, int addrinarray)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+bool PageSlab(struct page *page)
+{
+ TRACE_AND_STOP;
+ return false;
+}
+
+void clflushopt(volatile void *p)
+{
+ TRACE;
+}
+
+int intel_guc_submission_init(struct intel_guc *guc)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int intel_guc_submission_enable(struct intel_guc *guc)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_guc_submission_disable(struct intel_guc *guc)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_guc_submission_fini(struct intel_guc *guc)
+{
+ TRACE_AND_STOP;
+}
+
+void i915_gem_shrinker_register(struct drm_i915_private *i915)
+{
+ TRACE;
+}
+
+void i915_gem_shrinker_unregister(struct drm_i915_private *i915)
+{
+ TRACE_AND_STOP;
+}
+
+ktime_t ktime_add_ns(const ktime_t kt, u64 nsec)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
+ struct i915_sw_fence *after,
+ wait_queue_entry_t *wq)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
+int i915_sw_fence_await_sw_fence_gfp(struct i915_sw_fence *fence,
+ struct i915_sw_fence *after,
+ gfp_t gfp)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
+void __i915_sw_fence_init(struct i915_sw_fence *fence,
+ i915_sw_fence_notify_t fn,
+ const char *name,
+ struct lock_class_key *key)
+{
+ TRACE;
+}
+
+void i915_sw_fence_commit(struct i915_sw_fence *fence)
+{
+ TRACE;
+}
+
+int i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence,
+ struct dma_fence *dma,
+ unsigned long timeout,
+ gfp_t gfp)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
+int i915_sw_fence_await_reservation(struct i915_sw_fence *fence,
+ struct reservation_object *resv,
+ const struct dma_fence_ops *exclude,
+ bool write,
+ unsigned long timeout,
+ gfp_t gfp)
+{
+ TRACE;
+ return 0;
+}
+
+u32 *intel_ring_begin(struct drm_i915_gem_request *req,
+ unsigned int n)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_legacy_submission_resume(struct drm_i915_private *dev_priv)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engine_cleanup(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+}
+
+int intel_ring_wait_for_space(struct intel_ring *ring, unsigned int bytes)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_ring_free(struct intel_ring *ring)
+{
+ TRACE_AND_STOP;
+}
+
+bool intel_breadcrumbs_busy(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+void intel_engine_enable_signaling(struct drm_i915_gem_request *request,
+ bool wakeup)
+{
+ TRACE_AND_STOP;
+}
+
+void intel_engine_remove_wait(struct intel_engine_cs *engine,
+ struct intel_wait *wait)
+{
+ TRACE_AND_STOP;
+}
+
+bool intel_engine_add_wait(struct intel_engine_cs *engine,
+ struct intel_wait *wait)
+{
+ TRACE_AND_STOP;
+}
+
+void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine)
+{
+ TRACE_AND_STOP;
+}
+
+struct page *virt_to_page(const void *addr)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
+int set_memory_wb(unsigned long addr, int numpages)
+{
+ TRACE_AND_STOP;
+ return -1;
+}
+
+const char *acpi_dev_name(struct acpi_device *adev)
+{
+ TRACE_AND_STOP;
+ return 0;
+}
+
void ClearPageReserved(struct page *page)
{
TRACE_AND_STOP;
}
-const char *acpi_dev_name(struct acpi_device *adev)
+int stop_machine(cpu_stop_fn_t a, void *b, const struct cpumask *c)
{
TRACE_AND_STOP;
- return NULL;
+ return -1;
}
-
diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c b/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c
index d012b1cc31..698531fe12 100644
--- a/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c
+++ b/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c
@@ -12,37 +12,40 @@
*/
#include <../drivers/gpu/drm/i915/i915_drv.h>
-
-struct i915_params i915 = {
+struct i915_params i915_modparams = {
+ .vbt_firmware = NULL,
.modeset = -1,
.panel_ignore_lid = 1,
- .semaphores = -1,
.lvds_channel_mode = 0,
.panel_use_ssc = -1,
.vbt_sdvo_panel_type = -1,
- .enable_rc6 = -1,
+ .enable_dc = -1,
.enable_fbc = -1,
- .enable_execlists = -1,
- .enable_hangcheck = false,
- .enable_ppgtt = -1,
+ .enable_ppgtt = 0,
.enable_psr = 0,
- .preliminary_hw_support = true,
.disable_power_well = -1,
- .enable_ips = 1,
- .fastboot = 0,
- .prefault_disable = 0,
- .load_detect_test = 0,
- .reset = true,
+ .enable_ips = true,
.invert_brightness = 0,
- .disable_display = 0,
- .enable_cmd_parser = 1,
- .disable_vtd_wa = 0,
- .use_mmio_flip = 0,
- .mmio_debug = 0,
- .verbose_state_checks = 1,
- .nuclear_pageflip = 0,
- .edp_vswing = 0,
- .enable_guc_submission = false,
.guc_log_level = -1,
+ .guc_firmware_path = NULL,
+ .huc_firmware_path = NULL,
+ .mmio_debug = 0,
+ .edp_vswing = 0,
+ .enable_guc = 0,
+ .reset = 0,
+ .inject_load_failure = 0,
+ .alpha_support = IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT),
+ .enable_cmd_parser = true,
+ .enable_hangcheck = false,
+ .fastboot = false,
+ .prefault_disable = false,
+ .load_detect_test = false,
+ .force_reset_modeset_test = false,
+ .error_capture = true,
+ .disable_display = false,
+ .verbose_state_checks = true,
+ .nuclear_pageflip = false,
+ .enable_dp_mst = false,
+ .enable_dpcd_backlight = false,
+ .enable_gvt = false
};
-
diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h b/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h
index 554e79bf0d..e86aa0c8d5 100644
--- a/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h
+++ b/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h
@@ -53,7 +53,10 @@ class Framebuffer::Driver
Genode::Signal_handler _poll_handler;
unsigned long _poll_ms = 0;
- drm_display_mode * _preferred_mode(drm_connector *connector);
+ Genode::Signal_context_capability _config_sigh;
+
+ drm_display_mode * _preferred_mode(drm_connector *connector,
+ unsigned &brightness);
void _poll();
@@ -74,6 +77,29 @@ class Framebuffer::Driver
void set_polling(unsigned long poll);
void update_mode();
void generate_report();
+
+ /**
+ * Register signal handler used for config updates
+ *
+ * The signal handler is artificially triggered as a side effect
+ * of connector changes.
+ */
+ void config_sigh(Genode::Signal_context_capability sigh)
+ {
+ _config_sigh = sigh;
+ }
+
+ void trigger_reconfiguration()
+ {
+ /*
+ * Trigger the reprocessing of the configuration following the
+ * same ontrol flow as used for external config changes.
+ */
+ if (_config_sigh.valid())
+ Genode::Signal_transmitter(_config_sigh).submit();
+ else
+ Genode::warning("config signal handler unexpectedly undefined");
+ }
};
diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/include/lx_emul.h b/repos/dde_linux/src/drivers/framebuffer/intel/include/lx_emul.h
index 21d2091d0a..25a34113c8 100644
--- a/repos/dde_linux/src/drivers/framebuffer/intel/include/lx_emul.h
+++ b/repos/dde_linux/src/drivers/framebuffer/intel/include/lx_emul.h
@@ -15,14 +15,13 @@
#include
-
/*****************
** asm/param.h **
*****************/
enum { HZ = 100UL };
-#define DEBUG_LINUX_PRINTK 1
+#define DEBUG_LINUX_PRINTK 0
#include
#include
@@ -31,22 +30,33 @@ enum { HZ = 100UL };
static inline void atomic_or(int i, atomic_t *v) {
v->counter = v->counter | i; }
+void atomic_andnot(int, atomic_t *);
#define smp_mb__before_atomic_inc() barrier()
#define smp_mb__before_atomic() barrier()
void atomic_set_mask(unsigned int mask, atomic_t *v);
+#define atomic_set_release(v, i) atomic_set((v), (i))
#include
#include
typedef unsigned long kernel_ulong_t;
typedef unsigned int u_int;
+typedef long ptrdiff_t;
+typedef unsigned __bitwise slab_flags_t;
#define DECLARE_BITMAP(name,bits) \
unsigned long name[BITS_TO_LONGS(bits)]
+/***************************
+ ** asm-generic/barrier.h **
+ ***************************/
+
+#define smp_load_acquire(p) *(p)
+
+
/************************
** uapi/linux/types.h **
************************/
@@ -58,6 +68,7 @@ typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;
+typedef unsigned __poll_t;
/********************
** linux/printk.h **
@@ -73,6 +84,17 @@ void print_hex_dump(const char *level, const char *prefix_str,
#define printk_once(fmt, ...) ({})
+/***********************
+ ** linux/sync_file.h **
+ ***********************/
+
+struct sync_file {
+ struct file *file;
+};
+struct dma_fence;
+struct dma_fence *sync_file_get_fence(int);
+struct sync_file *sync_file_create(struct dma_fence *);
+
/*********************
** uapi/linux/fb.h **
*********************/
@@ -113,7 +135,7 @@ struct page
} __attribute((packed));
/* needed for agp/generic.c */
-struct page *virt_to_page(void *addr);
+struct page *virt_to_page(const void *addr);
dma_addr_t page_to_phys(struct page *page);
@@ -155,11 +177,50 @@ typedef unsigned long phys_addr_t;
void *memchr_inv(const void *s, int c, size_t n);
+/**********************
+ ** linux/compiler.h **
+ **********************/
+
+#include
+
+#define prefetchw(x) __builtin_prefetch(x,1)
+
+static inline void __read_once_size(const volatile void *p, void *res, int size)
+{
+ switch (size) {
+ case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
+ case 2: *(__u16 *)res = *(volatile __u16 *)p; break;
+ case 4: *(__u32 *)res = *(volatile __u32 *)p; break;
+ case 8: *(__u64 *)res = *(volatile __u64 *)p; break;
+ default:
+ barrier();
+ __builtin_memcpy((void *)res, (const void *)p, size);
+ barrier();
+ }
+}
+
+#ifdef __cplusplus
+#define READ_ONCE(x) \
+({ \
+ barrier(); \
+ x; \
+})
+
+#else
+#define READ_ONCE(x) \
+({ \
+ union { typeof(x) __val; char __c[1]; } __u; \
+ __read_once_size(&(x), __u.__c, sizeof(x)); \
+ __u.__val; \
+})
+#endif
+
#include
#include
#define SIZE_MAX (~(size_t)0)
#define U64_MAX ((u64)~0ULL)
+#define U16_MAX ((u16)~0U)
extern long simple_strtol(const char *,char **,unsigned int);
typedef __kernel_time_t time_t;
@@ -235,15 +296,16 @@ extern struct atomic_notifier_head panic_notifier_list;
/* needed by agp/generic.c */
void SetPageReserved(struct page *page);
void ClearPageReserved(struct page *page);
+bool PageSlab(struct page *page);
/********************
** linux/printk.h **
********************/
-extern void hex_dump_to_buffer(const void *buf, size_t len,
- int rowsize, int groupsize,
- char *linebuf, size_t linebuflen, bool ascii);
+int hex_dump_to_buffer(const void *buf, size_t len,
+ int rowsize, int groupsize,
+ char *linebuf, size_t linebuflen, bool ascii);
#include
@@ -263,6 +325,8 @@ extern void hex_dump_to_buffer(const void *buf, size_t len,
/* needed bu i2c-core.c */
bool in_atomic();
+void preempt_enable(void);
+void preempt_disable(void);
/**********************
@@ -276,6 +340,42 @@ void local_irq_enable();
void local_irq_disable();
+/********************
+ ** linux/kernel.h **
+ ********************/
+
+#define min3(x, y, z) min((typeof(x))min(x, y), z)
+
+// typecheck(u64, x);
+#define u64_to_user_ptr(x) ({ \
+ (void __user *)(uintptr_t)x; \
+})
+char *kvasprintf(gfp_t, const char *, va_list);
+
+#define U32_MAX ((u32)~0U)
+
+#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
+
+#define TAINT_MACHINE_CHECK 4
+#define TAINT_WARN 9
+
+/**********************
+ ** sched/wait_bit.c **
+ **********************/
+void wake_up_bit(void *, int);
+int wait_on_bit(unsigned long *, int, unsigned);
+int wait_on_bit_timeout(unsigned long *, int, unsigned, unsigned long);
+
+
+/******************
+ ** linux/kref.h **
+ ******************/
+
+struct kref;
+unsigned int kref_read(const struct kref*);
+
+
+
/*********************
** linux/jiffies.h **
*********************/
@@ -289,9 +389,10 @@ void local_irq_disable();
(time_after_eq(a,b) && \
time_before_eq(a,c))
+u64 nsecs_to_jiffies(u64);
extern u64 nsecs_to_jiffies64(u64 n);
-unsigned int jiffies_to_usecs(const unsigned long j);
+static inline u64 get_jiffies_64(void) { return jiffies; }
#include
#include
@@ -305,7 +406,7 @@ static inline int mutex_lock_interruptible(struct mutex *lock) {
void mutex_lock_nest_lock(struct mutex *, struct mutex *);
-#define might_lock(lock) do { } while (0)
+void might_lock(struct mutex *);
/*********************
@@ -347,7 +448,6 @@ void getrawmonotonic(struct timespec *ts);
struct timespec timespec_sub(struct timespec lhs, struct timespec rhs);
bool timespec_valid(const struct timespec *ts);
void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec);
-unsigned long get_seconds(void);
struct timespec ns_to_timespec(const s64 nsec);
s64 timespec_to_ns(const struct timespec *ts);
@@ -362,6 +462,7 @@ typedef int clockid_t;
#define del_singleshot_timer_sync(t) del_timer_sync(t)
+void timer_setup(struct timer_list *, void (*func)(struct timer_list *), unsigned int);
#include
@@ -373,12 +474,40 @@ extern unsigned long timespec_to_jiffies(const struct timespec *value);
#define setup_timer_on_stack setup_timer
-void destroy_timer_on_stack(struct timer_list *timer);
-
unsigned long round_jiffies_up_relative(unsigned long j);
extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires);
+#define from_timer(var, callback_timer, timer_fieldname) \
+ container_of(callback_timer, typeof(*var), timer_fieldname)
+
+#define TIMER_IRQSAFE 0x00200000
+
+/***********************
+ ** linux/workqueue.h **
+ ***********************/
+
+enum {
+ WORK_STRUCT_PENDING_BIT = 0,
+};
+
+#define work_data_bits(work) ((unsigned long *)(&(work)->data))
+
+#define work_pending(work) \
+ test_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))
+
+#define delayed_work_pending(w) \
+ work_pending(&(w)->work)
+
+#ifndef CONFIG_DEBUG_OBJECTS_WORK
+#define INIT_WORK_ONSTACK(_work, _func) while(0) { }
+static inline void destroy_work_on_stack(struct work_struct *work) { }
+#endif
+
+void INIT_DELAYED_WORK_ONSTACK(void *, void *);
+void destroy_delayed_work_on_stack(struct delayed_work *);
+
+unsigned int work_busy(struct work_struct *);
/*******************
** linux/sched.h **
@@ -386,13 +515,22 @@ extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires);
enum { TASK_COMM_LEN = 16 };
-enum { TASK_RUNNING, TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE };
+enum {
+ TASK_RUNNING = 0x0,
+ TASK_INTERRUPTIBLE = 0x1,
+ TASK_UNINTERRUPTIBLE = 0x2,
+ TASK_NORMAL = TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE,
+};
+
+#define MAX_SCHEDULE_TIMEOUT LONG_MAX
struct mm_struct;
struct task_struct {
struct mm_struct *mm;
- char comm[16]; /* needed by agp/generic.c, only for debug output */
+ char comm[16]; /* only for debug output */
unsigned pid;
+ int prio;
+ volatile long state;
};
signed long schedule_timeout(signed long timeout);
@@ -400,12 +538,13 @@ void __set_current_state(int state);
int signal_pending(struct task_struct *p);
void schedule(void);
int wake_up_process(struct task_struct *tsk);
-void io_schedule(void);
+int wake_up_state(struct task_struct *tsk, unsigned int state);
/* normally declared in linux/smp.h, included by sched.h */
int on_each_cpu(void (*func) (void *info), void *info, int wait);
#define get_cpu() 0
#define put_cpu()
+#define smp_processor_id() 0
/* normally defined in asm/current.h, included by sched.h */
extern struct task_struct *current;
@@ -421,23 +560,31 @@ extern int signal_pending_state(long state, struct task_struct *p);
struct pid;
extern struct pid *task_pid(struct task_struct *task);
-#define cond_resched()
+void cond_resched(void);
+void set_current_state(int);
+long io_schedule_timeout(long);
+
+struct sched_param {
+ int sched_priority;
+};
+
+#define SCHED_FIFO 1
+
+int sched_setscheduler_nocheck(struct task_struct *, int, const struct sched_param *);
/************************
** linux/completion.h **
************************/
+#include
+
struct completion {
unsigned done;
void * task;
};
-int __wait_completion(struct completion *work, unsigned long);
-void complete(struct completion *); /* i2c-core.c */
-void init_completion(struct completion *x);
-void wait_for_completion(struct completion *);
-
+long __wait_completion(struct completion *work, unsigned long);
/*********************
** linux/raid/pq.h **
@@ -447,6 +594,22 @@ void cpu_relax(void); /* i915_dma.c */
#define cpu_relax_lowlatency() cpu_relax()
+/*************************
+ ** linux/bottom_half.h **
+ *************************/
+
+void local_bh_disable(void);
+void local_bh_enable(void);
+
+
+/*****************
+ ** linux/panic **
+ *****************/
+
+enum lockdep_ok { LOCKDEP_STILL_OK };
+void add_taint(unsigned, enum lockdep_ok);
+
+
/*******************
** linux/delay.h **
*******************/
@@ -459,52 +622,11 @@ void ndelay(unsigned long);
void usleep_range(unsigned long min, unsigned long max); /* intel_dp.c */
-/*****************
- ** linux/idr.h **
- *****************/
-
-/* needed by intel_drv.h */
-struct idr { int dummy; };
-
-void idr_init(struct idr *idp); /* i915_gem.c */
-int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask);
-void idr_remove(struct idr *idp, int id);
-void *idr_find(struct idr *idr, int id);
-void idr_destroy(struct idr *idp);
-void *idr_get_next(struct idr *idp, int *nextid);
-void *idr_replace(struct idr *idp, void *ptr, int id);
-
-struct ida { int dummy; };
-
-void ida_destroy(struct ida *ida);
-void ida_init(struct ida *ida);
-int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end, gfp_t gfp_mask);
-void ida_remove(struct ida *ida, int id);
-
-#define IDR_INIT(name) { .dummy = 0, }
-#define DEFINE_IDR(name) struct idr name = IDR_INIT(name)
-
-#define idr_for_each_entry(idp, entry, id) \
- for (id = 0; ((entry) = idr_get_next(idp, &(id))) != NULL; ++id)
-
-int idr_for_each(struct idr *idp, int (*fn)(int id, void *p, void *data), void *data);
-
-
/*************************
** linux/scatterlist.h **
*************************/
-#include
-
-struct page *sg_page_iter_page(struct sg_page_iter *piter);
-
-void sg_free_table(struct sg_table *);
-int sg_alloc_table(struct sg_table *, unsigned int, gfp_t);
-
-void sg_mark_end(struct scatterlist *sg);
-
-dma_addr_t sg_page_iter_dma_address(struct sg_page_iter *piter);
-
+struct scatterlist;
#include
@@ -520,15 +642,13 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *e
************************/
dma_addr_t page_to_pfn(struct page *page);
+struct page * pfn_to_page(dma_addr_t);
/*********************
** linux/pagemap.h **
*********************/
-int fault_in_multipages_writeable(char __user *uaddr, int size);
-int fault_in_multipages_readable(const char __user *uaddr, int size);
-
#define page_cache_release(page) put_page(page)
struct address_space {
@@ -557,19 +677,49 @@ typedef unsigned long pgprotval_t;
struct pgprot { pgprotval_t pgprot; };
typedef struct pgprot pgprot_t;
-extern pgprot_t pgprot_writecombine(pgprot_t prot);
+#define PAGE_KERNEL ((pgprot_t) {0}) /* XXX */
+#define PAGE_KERNEL_IO ((pgprot_t) {1}) /* XXX */
+extern pgprot_t pgprot_writecombine(pgprot_t prot);
+extern pgprot_t pgprot_decrypted(pgprot_t prot);
+
+
+/*********************
+ ** linux/kthread.h **
+ *********************/
+
+void kthread_parkme(void);
+int kthread_park(struct task_struct *);
+void kthread_unpark(struct task_struct *);
+bool kthread_should_park(void);
+bool kthread_should_stop(void);
+int kthread_stop(struct task_struct *k);
+
+struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
+ void *data,
+ int node,
+ const char namefmt[], ...);
+
+/********************
+ ** linux/mmzone.h **
+ ********************/
+
+#define MAX_ORDER 11
/**********************
** linux/mm_types.h **
**********************/
+struct vm_operations_struct;
+
struct vm_area_struct {
- unsigned long vm_start;
- unsigned long vm_end;
- pgprot_t vm_page_prot;
- unsigned long vm_flags;
- void *vm_private_data;
+ unsigned long vm_start;
+ unsigned long vm_end;
+ pgprot_t vm_page_prot;
+ unsigned long vm_flags;
+ const struct vm_operations_struct *vm_ops;
+ unsigned long vm_pgoff;
+ void *vm_private_data;
};
struct mm_struct { struct rw_semaphore mmap_sem; };
@@ -579,22 +729,7 @@ struct mm_struct { struct rw_semaphore mmap_sem; };
** linux/shrinker.h **
**********************/
-struct shrink_control {
- unsigned long nr_to_scan;
-};
-
-struct shrinker {
- int (*shrink)(int nr_to_scan, gfp_t gfp_mask);
- unsigned long (*scan_objects)(struct shrinker *, struct shrink_control *sc);
- unsigned long (*count_objects)(struct shrinker *, struct shrink_control *sc); /* i915_gem.c */
- int seeks;
-};
-
-int register_shrinker(struct shrinker *);
-void unregister_shrinker(struct shrinker *);
-
-#define SHRINK_STOP (~0UL)
-
+struct shrinker { int DUMMY; };
/****************
** linux/mm.h **
@@ -604,6 +739,11 @@ enum {
VM_FAULT_OOM = 0x001,
VM_FAULT_SIGBUS = 0x002,
VM_FAULT_NOPAGE = 0x100,
+ VM_PFNMAP = 0x00000400,
+ VM_IO = 0x00004000,
+ VM_DONTEXPAND = 0x00040000,
+ VM_NORESERVE = 0x00200000,
+ VM_DONTDUMP = 0x04000000,
};
enum { FAULT_FLAG_WRITE = 0x1 };
@@ -615,13 +755,11 @@ enum { DEFAULT_SEEKS = 2 };
#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
struct vm_fault {
- void *virtual_address;
+ struct vm_area_struct *vma;
unsigned int flags;
+ unsigned long address;
};
-int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
- unsigned long pfn);
-
int set_page_dirty(struct page *page);
void get_page(struct page *page);
@@ -631,12 +769,11 @@ extern unsigned long totalram_pages;
struct vm_area_struct;
-struct vm_fault;
struct vm_operations_struct {
void (*open)(struct vm_area_struct * area);
void (*close)(struct vm_area_struct * area);
- int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
+ int (*fault)(struct vm_fault *vmf);
};
struct file;
@@ -659,6 +796,13 @@ extern struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
pgprot_t vm_get_page_prot(unsigned long vm_flags);
+void *kvmalloc(size_t, gfp_t);
+void *kvmalloc_array(size_t, size_t, gfp_t);
+
+void unmap_mapping_range(struct address_space *, loff_t const, loff_t const, int);
+
+unsigned long vma_pages(struct vm_area_struct *);
+
#include
@@ -666,16 +810,23 @@ pgprot_t vm_get_page_prot(unsigned long vm_flags);
** asm/smp.h **
***************/
-void wbinvd();
-void wbinvd_on_all_cpus();
+static inline void wbinvd() { }
+static inline int wbinvd_on_all_cpus() { return 0; }
+/**********************************
+ ** x86/include/asm/set_memory.h **
+ **********************************/
+
+int set_memory_wb(unsigned long addr, int numpages);
+int set_memory_uc(unsigned long addr, int numpages);
+int set_pages_array_uc(struct page **pages, int addrinarray);
+
/*********************
** linux/vmalloc.h **
*********************/
-/* needed by agp/generic.c */
-void *vmalloc(unsigned long size);
+/* needed by agp/backend.c */
void *vzalloc(unsigned long size);
void vfree(const void *addr);
@@ -720,7 +871,10 @@ int set_pages_uc(struct page *page, int numpages);
******************/
enum {
- SLAB_HWCACHE_ALIGN = 0x00002000ul,
+ SLAB_HWCACHE_ALIGN = 0x00002000ul,
+ SLAB_RECLAIM_ACCOUNT = 0x00020000ul,
+ SLAB_PANIC = 0x00040000ul,
+ SLAB_TYPESAFE_BY_RCU = 0x00080000ul,
};
void *kzalloc(size_t size, gfp_t flags);
@@ -736,6 +890,23 @@ void kmem_cache_destroy(struct kmem_cache *);
void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags);
void kmem_cache_free(struct kmem_cache *, void *);
+#define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\
+ sizeof(struct __struct), __alignof__(struct __struct),\
+ (__flags), NULL)
+
+void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
+
+
+/**********************
+ ** linux/kmemleak.h **
+ **********************/
+
+#ifndef CONFIG_DEBUG_KMEMLEAK
+static inline void kmemleak_update_trace(const void *ptr) { }
+static inline void kmemleak_alloc(const void *ptr, size_t size, int min_count,
+ gfp_t gfp) { }
+static inline void kmemleak_free(const void *ptr) { }
+#endif
/**********************
** linux/byteorder/ **
@@ -757,8 +928,9 @@ void kmem_cache_free(struct kmem_cache *, void *);
static inline void *kmap(struct page *page) { return page_address(page); }
static inline void *kmap_atomic(struct page *page) { return kmap(page); }
-static inline void kunmap(struct page *page) { }
-static inline void kunmap_atomic(void *addr) { }
+static inline void kunmap(struct page *page) { return; }
+static inline void kunmap_atomic(void *addr) { return; }
+struct page *kmap_to_page(void *);
#include
@@ -773,6 +945,54 @@ struct page *alloc_pages(gfp_t gfp_mask, unsigned int order);
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
+static inline void flush_kernel_dcache_page(struct page *page) { }
+
+/*************************
+ ** linux/percpu-defs.h **
+ *************************/
+
+#define DECLARE_PER_CPU(type, name) \
+ extern typeof(type) name
+
+#define DEFINE_PER_CPU(type, name) \
+ typeof(type) name
+
+#define this_cpu_xchg(pcp, nval) \
+({ \
+ typeof(pcp) before = pcp; \
+ pcp = nval; \
+ before; \
+})
+
+#define this_cpu_ptr(ptr) ptr
+#define this_cpu_read(val) val
+#define per_cpu(var, cpu) var
+
+#define this_cpu_cmpxchg(pcp, oval, nval) \
+ cmpxchg(&pcp, oval, nval)
+
+
+#define cpuhp_setup_state_nocalls(a, b, c, d) 0
+
+/******************
+ ** linux/gfp.h **
+ ******************/
+
+#define __GFP_BITS_SHIFT (25 + IS_ENABLED(CONFIG_LOCKDEP))
+#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
+
+static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
+{
+ return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
+}
+
+unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
+
+#define __get_free_page(gfp_mask) \
+ __get_free_pages((gfp_mask), 0)
+
+void free_pages(unsigned long addr, unsigned int order);
+#define free_page(addr) free_pages((addr), 0)
/**************************************
** asm-generic/dma-mapping-common.h **
@@ -810,6 +1030,7 @@ extern int dma_mapping_error(struct device *dev, dma_addr_t dma_addr);
*********************/
struct dma_buf;
+void dma_buf_put(struct dma_buf *);
/********************
@@ -873,7 +1094,10 @@ enum {
PM_EVENT_PRETHAW = PM_EVENT_QUIESCE,
};
+struct dev_pm_domain;
+
#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
+#define DPM_FLAG_NEVER_SKIP BIT(0)
enum rpm_status {
RPM_ACTIVE = 0,
@@ -937,6 +1161,7 @@ struct device {
void *drvdata; /* not in Linux */
const struct device_type *type;
void *platform_data;
+ struct dev_pm_info power;
struct dev_archdata archdata;
struct bus_type *bus;
struct device_node *of_node;
@@ -947,6 +1172,8 @@ struct device_attribute {
struct attribute attr;
};
+struct lock_class_key { int dummy; };
+
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = { { 0 } }
@@ -968,13 +1195,14 @@ struct device_attribute {
#define dev_err_ratelimited(dev, fmt, ...) \
dev_err(dev, fmt, ##__VA_ARGS__)
-
struct device_driver
{
int dummy;
char const *name;
struct bus_type *bus;
struct module *owner;
+ const struct of_device_id*of_match_table;
+ const struct acpi_device_id *acpi_match_table;
const struct dev_pm_ops *pm;
};
@@ -1003,6 +1231,8 @@ int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
int (*fn)(struct device *dev, void *data));
+void dev_pm_set_driver_flags(struct device *, u32);
+
/* needed by linux/i2c.h */
struct acpi_device;
@@ -1051,6 +1281,33 @@ void memcpy_toio(volatile void __iomem *dst, const void *src, size_t count);
void memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count);
+/**************************************
+ ** arch/x86/include/asm/string_64.h **
+ **************************************/
+
+#ifdef __x86_64__
+static inline void *memset64(uint64_t *s, uint64_t v, size_t n)
+{
+ long d0, d1;
+ asm volatile("rep\n\t"
+ "stosq"
+ : "=&c" (d0), "=&D" (d1)
+ : "a" (v), "1" (s), "0" (n)
+ : "memory");
+ return s;
+}
+#else
+static inline void *memset64(uint64_t *s, uint64_t v, size_t count)
+{
+ uint64_t *xs = s;
+
+ while (count--)
+ *xs++ = v;
+ return s;
+}
+#endif
+
+
/*********************
** linux/uaccess.h **
*********************/
@@ -1071,6 +1328,8 @@ size_t copy_to_user(void *dst, void const *src, size_t len);
#define __copy_to_user_inatomic copy_to_user
#define __copy_from_user_inatomic_nocache copy_from_user
+void pagefault_disable(void);
+void pagefault_enable(void);
/*************************
** linux/dma-mapping.h **
@@ -1085,20 +1344,19 @@ int dma_set_coherent_mask(struct device *dev, u64 mask);
** linux/io-mapping.h **
************************/
-struct io_mapping;
-
-void *io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset);
-void io_mapping_unmap_atomic(void *vaddr);
-
-struct io_mapping *io_mapping_create_wc(resource_size_t base, unsigned long size);
-void io_mapping_free(struct io_mapping *mapping);
-
-void __iomem * io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset);
-void io_mapping_unmap(void __iomem *vaddr);
+#define pgprot_noncached(prot) prot
#include
+/********************
+ ** linux/random.h **
+ ********************/
+
+unsigned int get_random_int(void);
+unsigned long get_random_long(void);
+
+
/********************
** linux/ioport.h **
********************/
@@ -1111,12 +1369,21 @@ int request_resource(struct resource *root, struct resource *); /* intel-gtt.c *
int release_resource(struct resource *r); /* i915_dma.c */
+unsigned long resource_type(const struct resource *);
+
+#define IORESOURCE_ROM_SHADOW (1<<1)
+#define IORESOURCE_BITS 0x000000ff
/*****************
** linux/pci.h **
*****************/
-enum { DEVICE_COUNT_RESOURCE = 6 };
+enum {
+ PCI_STD_RESOURCE_END = 5,
+ PCI_ROM_RESOURCE,
+ PCI_NUM_RESOURCES,
+ DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES,
+};
struct pci_dev {
unsigned int devfn;
@@ -1229,22 +1496,44 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *p);
extern int of_irq_get(struct device_node *dev, int index);
extern int of_irq_get_byname(struct device_node *dev, const char *name);
+struct irq_data *irq_get_irq_data(unsigned int);
+/**********************
+ ** linux/irq_work.h **
+ **********************/
+
+struct irq_work { int DUMMY; };
+bool irq_work_queue(struct irq_work *work);
+void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *));
+
/*********************
** linux/hardirq.h **
*********************/
extern void synchronize_irq(unsigned int irq);
+/*****************
+ ** linux/irq.h **
+ *****************/
+
+#include
+
+struct irq_chip { int DUMMY; };
+void irqd_set_trigger_type(struct irq_data *, u32);
+void irq_set_chip_and_handler(unsigned int, struct irq_chip *,
+ irq_flow_handler_t);
+void handle_simple_irq(struct irq_desc *);
+extern struct irq_chip dummy_irq_chip;
/************************
** linux/capability.h **
************************/
-bool capable(int cap);
-
#define CAP_SYS_ADMIN 21
+#define CAP_SYS_NICE 23
+
+bool capable(int);
/*************************
@@ -1282,6 +1571,8 @@ void vga_put(struct pci_dev *pdev, unsigned int rsrc);
** linux/notifier.h **
**********************/
+#define NOTIFY_DONE 0x0000
+
/* needed by intel_lvds.c */
struct notifier_block;
@@ -1297,6 +1588,10 @@ struct atomic_notifier_head { unsigned dummy; };
extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, struct notifier_block *nb);
extern int atomic_notifier_chain_register(struct atomic_notifier_head *nh, struct notifier_block *nb);
+#define ATOMIC_INIT_NOTIFIER_HEAD(name) do { } while (0)
+
+int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
+ unsigned long val, void *v);
/*******************
** acpi/button.h **
@@ -1307,29 +1602,11 @@ int acpi_lid_notifier_register(struct notifier_block *nb);
int acpi_lid_notifier_unregister(struct notifier_block *nb);
-/****************************
- ** linux/vga_switcheroo.h **
- ****************************/
+/*********************
+ ** linux/console.h **
+ *********************/
-/*
- * needed for compiling i915_dma.c
- */
-
-enum vga_switcheroo_state { VGA_SWITCHEROO_OFF, VGA_SWITCHEROO_ON };
-
-struct vga_switcheroo_client_ops {
- void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
- void (*reprobe)(struct pci_dev *dev);
- bool (*can_switch)(struct pci_dev *dev);
-};
-
-int vga_switcheroo_register_client(struct pci_dev *dev,
- const struct vga_switcheroo_client_ops *ops,
- bool driver_power_control);
-
-void vga_switcheroo_unregister_client(struct pci_dev *dev);
-
-int vga_switcheroo_process_delayed_switch(void);
+static inline bool vgacon_text_force(void) { return false; }
/******************
@@ -1358,11 +1635,15 @@ struct inode {
struct file
{
- atomic_long_t f_count;
- struct inode *f_inode;
+ atomic_long_t f_count;
+ struct inode *f_inode;
+ struct address_space *f_mapping;
+ void *private_data;
};
struct poll_table_struct;
+typedef struct poll_table_struct poll_table;
+
struct inode;
struct inode_operations { void (*truncate) (struct inode *); };
@@ -1374,6 +1655,7 @@ struct file_operations {
unsigned int (*poll) (struct file *, struct poll_table_struct *);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
+ long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*open) (struct inode *, struct file *);
int (*release) (struct inode *, struct file *);
};
@@ -1389,6 +1671,108 @@ struct inode *file_inode(struct file *f);
unsigned long invalidate_mapping_pages(struct address_space *mapping,
pgoff_t start, pgoff_t end);
+int pagecache_write_begin(struct file *, struct address_space *, loff_t,
+ unsigned, unsigned, struct page **, void **);
+int pagecache_write_end(struct file *, struct address_space *, loff_t,
+ unsigned, unsigned, struct page *, void *);
+
+
+/******************************
+ ** include/asm/set_memory.h **
+ ******************************/
+
+int set_pages_array_wc(struct page **, int);
+int set_pages_array_wb(struct page **, int);
+
+
+/**************************
+ ** linux/stop_machine.h **
+ **************************/
+struct cpumask;
+
+typedef int (*cpu_stop_fn_t)(void *arg);
+
+int stop_machine(cpu_stop_fn_t, void *, const struct cpumask *);
+
+
+/*****
+ *
+ */
+struct rcu_head { int dummy; };
+
+void clflush(volatile void *);
+void clflushopt(volatile void *);
+
+
+/*********************
+ ** linux/vmalloc.h **
+ *********************/
+
+void vunmap(const void *);
+void *vmap(struct page **, unsigned int, unsigned long, pgprot_t);
+
+
+/*********************
+ ** linux/seqlock.h **
+ *********************/
+
+typedef unsigned seqlock_t;
+
+typedef struct seqcount {
+ unsigned DUMMY;
+} seqcount_t;
+
+void seqlock_init (seqlock_t *);
+unsigned __read_seqcount_begin(const seqcount_t *);
+int __read_seqcount_retry(const seqcount_t *, unsigned);
+unsigned raw_read_seqcount(const seqcount_t *);
+int read_seqcount_retry(const seqcount_t *, unsigned);
+void write_seqlock(seqlock_t *);
+void write_sequnlock(seqlock_t *);
+unsigned read_seqbegin(const seqlock_t *);
+unsigned read_seqretry(const seqlock_t *, unsigned);
+
+/*************************
+ ** linux/reservation.h **
+ *************************/
+
+struct reservation_object_list {
+ u32 shared_count;
+ struct dma_fence *shared[];
+};
+
+struct reservation_object {
+ seqcount_t seq;
+ struct dma_fence *fence_excl;
+ struct reservation_object_list *fence;
+};
+struct ww_acquire_ctx;
+int reservation_object_lock(struct reservation_object *, struct ww_acquire_ctx *);
+void reservation_object_unlock(struct reservation_object *);
+struct dma_fence * reservation_object_get_excl_rcu(struct reservation_object *);
+int reservation_object_get_fences_rcu(struct reservation_object *,
+ struct dma_fence **, unsigned *,
+ struct dma_fence ***);
+bool reservation_object_trylock(struct reservation_object *);
+void reservation_object_add_excl_fence(struct reservation_object *, struct dma_fence *);
+void reservation_object_init(struct reservation_object *);
+void reservation_object_fini(struct reservation_object *);
+bool reservation_object_test_signaled_rcu(struct reservation_object *, bool);
+
+
+/*******************
+ * linux/swiotlb.h *
+ *******************/
+
+unsigned int swiotlb_max_segment(void);
+
+
+/****************
+ * linux/uuid.h *
+ ****************/
+
+#define UUID_STRING_LEN 36
+
/**********************
** linux/shmem_fs.h **
@@ -1399,48 +1783,9 @@ extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
pgoff_t index, gfp_t gfp_mask);
extern struct page *shmem_read_mapping_page( struct address_space *mapping, pgoff_t index);
-
-
-/********************
- ** linux/math64.h **
- ********************/
-
-static inline u64 div_u64(u64 dividend, u32 divisor) { return dividend / divisor; }
-
-static inline s64 div_s64(s64 dividend, s32 divisor)
-{
- u64 quotient;
- if (dividend < 0) {
- quotient = div_u64(-dividend, abs(divisor));
- if (divisor > 0)
- quotient = -quotient;
- } else {
- quotient = div_u64(dividend, abs(divisor));
- if (divisor < 0)
- quotient = -quotient;
- }
- return quotient;
-}
-
-static inline u64 div64_u64(u64 dividend, u64 divisor)
-{
- u32 high = divisor >> 32;
- u64 quot;
-
- if (high == 0) {
- quot = div_u64(dividend, divisor);
- } else {
- int n = 1 + fls(high);
- quot = div_u64(dividend >> n, divisor >> n);
-
- if (quot != 0)
- quot--;
- if ((dividend - quot * divisor) >= divisor)
- quot++;
- }
-
- return quot;
-}
+struct file *shmem_file_setup(const char *, loff_t, unsigned long);
+struct vfsmount;
+struct file *shmem_file_setup_with_mnt(struct vfsmount *, const char *, loff_t, unsigned long);
/*****************************
** linux/mod_devicetable.h **
@@ -1511,9 +1856,16 @@ struct backlight_properties {
struct backlight_device {
struct backlight_properties props;
+ const struct backlight_ops * ops;
+ struct intel_connector *connector;
};
-extern void* bl_get_data(struct backlight_device *bl_dev);
+static inline struct intel_connector* bl_get_data(struct backlight_device *bl_dev)
+{
+ if (bl_dev)
+ return bl_dev->connector;
+ return NULL;
+}
struct fb_info;
struct backlight_ops {
@@ -1538,11 +1890,23 @@ struct i2c_msg;
enum i2c_slave_event { DUMMY };
+/***********************
+ ** linux/i2c-smbus.h **
+ ***********************/
+
+struct i2c_smbus_alert_setup;
+
+
/****************
** linux/of.h **
****************/
int of_alias_get_id(struct device_node *np, const char *stem);
+void of_node_put(struct device_node *);
+int of_property_match_string(const struct device_node *, const char *,
+ const char *);
+int of_property_read_u32_index(const struct device_node *, const char *, u32,
+ u32 *);
/***********************
@@ -1571,7 +1935,9 @@ int acpi_device_modalias(struct device *, char *, int);
const char *acpi_dev_name(struct acpi_device *adev);
int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index);
-
+void acpi_device_clear_enumerated(struct acpi_device *);
+int acpi_reconfig_notifier_register(struct notifier_block *);
+int acpi_reconfig_notifier_unregister(struct notifier_block *);
/******************
** linux/gpio.h **
@@ -1589,18 +1955,9 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index);
#define GPIOF_OPEN_DRAIN (1 << 3)
-/* needed bu drivers/i2c/i2c-core.c */
-int gpio_get_value(unsigned int gpio);
-void gpio_set_value(unsigned int gpio, int value);
-int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
-void gpio_free(unsigned gpio);
-bool gpio_is_valid(int number);
-
-
/* needed by drivers/gpu/drm/drm_modes.c */
#include
-
/*********************
** linux/cpufreq.h **
*********************/
@@ -1637,7 +1994,6 @@ void ips_link_to_i915_driver(void);
**************************************/
struct drm_device;
-bool intel_has_pending_fb_unpin(struct drm_device *dev);
/******************
@@ -1682,13 +2038,25 @@ enum {
extern int fb_get_options(const char *name, char **option);
+struct aperture {
+ resource_size_t base;
+ resource_size_t size;
+};
-/***************************
- ** linux vgaswitcheroo.h **
- ***************************/
-
-void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info);
+struct apertures_struct {
+ unsigned int count;
+ struct aperture ranges[0];
+};
+static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
+ void * p = kzalloc(sizeof(struct apertures_struct) + max_num *
+ sizeof(struct aperture), GFP_KERNEL);
+ struct apertures_struct *a = (struct apertures_struct *)p;
+ if (!a)
+ return NULL;
+ a->count = max_num;
+ return a;
+}
/*******************
** linux/sysrq.h **
@@ -1709,13 +2077,20 @@ void fence_put(struct fence *fence);
signed long fence_wait(struct fence *fence, bool intr);
+/*******************
+ ** drm/drm_pci.h **
+ *******************/
+
+struct drm_dma_handle *drm_pci_alloc(struct drm_device *, size_t, size_t);
+
+
/****************************
** drm/drm_modeset_lock.h **
****************************/
#include