diff --git a/repos/dde_linux/intel_fb.list b/repos/dde_linux/intel_fb.list index d74d9ac37f..113e616316 100644 --- a/repos/dde_linux/intel_fb.list +++ b/repos/dde_linux/intel_fb.list @@ -1,84 +1,128 @@ -linux-3.14.5/drivers/char/agp/intel-gtt.c -linux-3.14.5/drivers/char/agp/intel-agp.h -linux-3.14.5/drivers/char/agp/agp.h -linux-3.14.5/drivers/char/agp/generic.c -linux-3.14.5/drivers/char/agp/backend.c -linux-3.14.5/drivers/i2c/i2c-core.c -linux-3.14.5/drivers/i2c/i2c-core.h -linux-3.14.5/drivers/i2c/i2c-boardinfo.c -linux-3.14.5/drivers/i2c/algos/i2c-algo-bit.c -linux-3.14.5/drivers/gpu/drm/drm_mm.c -linux-3.14.5/drivers/gpu/drm/drm_crtc.c -linux-3.14.5/drivers/gpu/drm/drm_crtc_helper.c -linux-3.14.5/drivers/gpu/drm/drm_edid.c -linux-3.14.5/drivers/gpu/drm/drm_modes.c -linux-3.14.5/drivers/gpu/drm/drm_dp_helper.c -linux-3.14.5/drivers/gpu/drm/drm_fb_helper.c -linux-3.14.5/drivers/gpu/drm/i915/i915_dma.c -linux-3.14.5/drivers/gpu/drm/i915/i915_drv.c -linux-3.14.5/drivers/gpu/drm/i915/i915_drv.h -linux-3.14.5/drivers/gpu/drm/i915/i915_gem.c -linux-3.14.5/drivers/gpu/drm/i915/i915_gem_stolen.c -linux-3.14.5/drivers/gpu/drm/i915/i915_reg.h -linux-3.14.5/drivers/gpu/drm/i915/i915_gem_gtt.c -linux-3.14.5/drivers/gpu/drm/i915/i915_irq.c -linux-3.14.5/drivers/gpu/drm/i915/intel_bios.h -linux-3.14.5/drivers/gpu/drm/i915/intel_bios.c -linux-3.14.5/drivers/gpu/drm/i915/intel_crt.c -linux-3.14.5/drivers/gpu/drm/i915/intel_ddi.c -linux-3.14.5/drivers/gpu/drm/i915/intel_dp.c -linux-3.14.5/drivers/gpu/drm/i915/intel_drv.h -linux-3.14.5/drivers/gpu/drm/i915/intel_fbdev.c -linux-3.14.5/drivers/gpu/drm/i915/intel_hdmi.c -linux-3.14.5/drivers/gpu/drm/i915/intel_ringbuffer.h -linux-3.14.5/drivers/gpu/drm/i915/intel_display.c -linux-3.14.5/drivers/gpu/drm/i915/intel_panel.c -linux-3.14.5/drivers/gpu/drm/i915/intel_uncore.c -linux-3.14.5/drivers/gpu/drm/i915/intel_lvds.c -linux-3.14.5/drivers/gpu/drm/i915/intel_i2c.c -linux-3.14.5/drivers/gpu/drm/i915/intel_overlay.c -linux-3.14.5/drivers/gpu/drm/i915/intel_pm.c -linux-3.14.5/drivers/gpu/drm/i915/intel_modes.c -linux-3.14.5/drivers/gpu/drm/i915/intel_sideband.c -linux-3.14.5/drivers/gpu/drm/i915/intel_sdvo.c -linux-3.14.5/drivers/gpu/drm/i915/intel_sdvo_regs.h -linux-3.14.5/drivers/video/fbcmap.c -linux-3.14.5/include/asm-generic/atomic64.h -linux-3.14.5/include/asm-generic/ioctl.h -linux-3.14.5/include/asm-generic/getorder.h -linux-3.14.5/include/asm-generic/bitops/__ffs.h -linux-3.14.5/include/asm-generic/bitops/__fls.h -linux-3.14.5/include/asm-generic/bitops/ffs.h -linux-3.14.5/include/asm-generic/bitops/fls.h -linux-3.14.5/include/asm-generic/bitops/fls64.h -linux-3.14.5/include/asm-generic/bitops/non-atomic.h -linux-3.14.5/include/linux/agp_backend.h -linux-3.14.5/include/linux/list.h -linux-3.14.5/include/linux/list_sort.h -linux-3.14.5/include/linux/log2.h -linux-3.14.5/include/linux/pci_ids.h -linux-3.14.5/include/linux/hdmi.h -linux-3.14.5/include/linux/i2c-algo-bit.h -linux-3.14.5/include/linux/i2c.h -linux-3.14.5/include/linux/pm_runtime.h -linux-3.14.5/include/drm/intel-gtt.h -linux-3.14.5/include/drm/i915_pciids.h -linux-3.14.5/include/drm/i915_drm.h -linux-3.14.5/include/drm/drm_dp_helper.h -linux-3.14.5/include/drm/drm_fb_helper.h -linux-3.14.5/include/drm/drm_mm.h -linux-3.14.5/include/drm/drm_crtc.h -linux-3.14.5/include/drm/drm_crtc_helper.h -linux-3.14.5/include/drm/drm_edid.h -linux-3.14.5/include/uapi/drm/i915_drm.h -linux-3.14.5/include/uapi/drm/drm.h -linux-3.14.5/include/uapi/linux/pci_regs.h -linux-3.14.5/include/uapi/linux/i2c.h -linux-3.14.5/include/uapi/asm-generic/ioctl.h -linux-3.14.5/include/uapi/drm/drm_fourcc.h -linux-3.14.5/include/uapi/drm/drm_mode.h -linux-3.14.5/include/uapi/linux/byteorder/little_endian.h -linux-3.14.5/include/uapi/linux/swab.h -linux-3.14.5/include/uapi/linux/fb.h -linux-3.14.5/arch/x86/include/asm/agp.h -linux-3.14.5/lib/list_sort.c +linux-4.4.3/arch/x86/include/asm/agp.h +linux-4.4.3/drivers/char/agp/agp.h +linux-4.4.3/drivers/char/agp/backend.c +linux-4.4.3/drivers/char/agp/generic.c +linux-4.4.3/drivers/char/agp/intel-agp.h +linux-4.4.3/drivers/char/agp/intel-gtt.c +linux-4.4.3/drivers/gpu/drm/drm_atomic_helper.c +linux-4.4.3/drivers/gpu/drm/drm_atomic.c +linux-4.4.3/drivers/gpu/drm/drm_crtc.c +linux-4.4.3/drivers/gpu/drm/drm_crtc_helper.c +linux-4.4.3/drivers/gpu/drm/drm_crtc_internal.h +linux-4.4.3/drivers/gpu/drm/drm_dp_helper.c +linux-4.4.3/drivers/gpu/drm/drm_edid.c +linux-4.4.3/drivers/gpu/drm/drm_internal.h +linux-4.4.3/drivers/gpu/drm/drm_irq.c +linux-4.4.3/drivers/gpu/drm/drm_mm.c +linux-4.4.3/drivers/gpu/drm/drm_modes.c +linux-4.4.3/drivers/gpu/drm/drm_modeset_lock.c +linux-4.4.3/drivers/gpu/drm/drm_plane_helper.c +linux-4.4.3/drivers/gpu/drm/drm_probe_helper.c +linux-4.4.3/drivers/gpu/drm/drm_rect.c +linux-4.4.3/drivers/gpu/drm/i915/i915_dma.c +linux-4.4.3/drivers/gpu/drm/i915/i915_drv.c +linux-4.4.3/drivers/gpu/drm/i915/i915_drv.h +linux-4.4.3/drivers/gpu/drm/i915/i915_gem.c +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_batch_pool.h +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_context.c +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_fence.c +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_gtt.c +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_gtt.h +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_render_state.h +linux-4.4.3/drivers/gpu/drm/i915/i915_gem_stolen.c +linux-4.4.3/drivers/gpu/drm/i915/i915_guc_reg.h +linux-4.4.3/drivers/gpu/drm/i915/i915_irq.c +linux-4.4.3/drivers/gpu/drm/i915/i915_reg.h +linux-4.4.3/drivers/gpu/drm/i915/i915_vgpu.c +linux-4.4.3/drivers/gpu/drm/i915/i915_vgpu.h +linux-4.4.3/drivers/gpu/drm/i915/intel_atomic.c +linux-4.4.3/drivers/gpu/drm/i915/intel_atomic_plane.c +linux-4.4.3/drivers/gpu/drm/i915/intel_bios.c +linux-4.4.3/drivers/gpu/drm/i915/intel_bios.h +linux-4.4.3/drivers/gpu/drm/i915/intel_crt.c +linux-4.4.3/drivers/gpu/drm/i915/intel_ddi.c +linux-4.4.3/drivers/gpu/drm/i915/intel_display.c +linux-4.4.3/drivers/gpu/drm/i915/intel_dp.c +linux-4.4.3/drivers/gpu/drm/i915/intel_drv.h +linux-4.4.3/drivers/gpu/drm/i915/intel_fbc.c +linux-4.4.3/drivers/gpu/drm/i915/intel_fifo_underrun.c +linux-4.4.3/drivers/gpu/drm/i915/intel_frontbuffer.c +linux-4.4.3/drivers/gpu/drm/i915/intel_guc.h +linux-4.4.3/drivers/gpu/drm/i915/intel_guc_fwif.h +linux-4.4.3/drivers/gpu/drm/i915/intel_hdmi.c +linux-4.4.3/drivers/gpu/drm/i915/intel_hotplug.c +linux-4.4.3/drivers/gpu/drm/i915/intel_i2c.c +linux-4.4.3/drivers/gpu/drm/i915/intel_lrc.h +linux-4.4.3/drivers/gpu/drm/i915/intel_lvds.c +linux-4.4.3/drivers/gpu/drm/i915/intel_modes.c +linux-4.4.3/drivers/gpu/drm/i915/intel_overlay.c +linux-4.4.3/drivers/gpu/drm/i915/intel_panel.c +linux-4.4.3/drivers/gpu/drm/i915/intel_pm.c +linux-4.4.3/drivers/gpu/drm/i915/intel_psr.c +linux-4.4.3/drivers/gpu/drm/i915/intel_ringbuffer.c +linux-4.4.3/drivers/gpu/drm/i915/intel_ringbuffer.h +linux-4.4.3/drivers/gpu/drm/i915/intel_runtime_pm.c +linux-4.4.3/drivers/gpu/drm/i915/intel_sdvo.c +linux-4.4.3/drivers/gpu/drm/i915/intel_sdvo_regs.h +linux-4.4.3/drivers/gpu/drm/i915/intel_sideband.c +linux-4.4.3/drivers/gpu/drm/i915/intel_sprite.c +linux-4.4.3/drivers/gpu/drm/i915/intel_uncore.c +linux-4.4.3/drivers/i2c/algos/i2c-algo-bit.c +linux-4.4.3/drivers/i2c/i2c-boardinfo.c +linux-4.4.3/drivers/i2c/i2c-core.c +linux-4.4.3/drivers/i2c/i2c-core.h +linux-4.4.3/drivers/video/hdmi.c +linux-4.4.3/include/asm-generic/atomic64.h +linux-4.4.3/include/asm-generic/bitops/__ffs.h +linux-4.4.3/include/asm-generic/bitops/__fls.h +linux-4.4.3/include/asm-generic/bitops/ffs.h +linux-4.4.3/include/asm-generic/bitops/fls.h +linux-4.4.3/include/asm-generic/bitops/fls64.h +linux-4.4.3/include/asm-generic/bitops/non-atomic.h +linux-4.4.3/include/asm-generic/getorder.h +linux-4.4.3/include/asm-generic/ioctl.h +linux-4.4.3/include/drm/drmP.h +linux-4.4.3/include/drm/drm_agpsupport.h +linux-4.4.3/include/drm/drm_atomic.h +linux-4.4.3/include/drm/drm_atomic_helper.h +linux-4.4.3/include/drm/drm_crtc.h +linux-4.4.3/include/drm/drm_crtc_helper.h +linux-4.4.3/include/drm/drm_displayid.h +linux-4.4.3/include/drm/drm_dp_helper.h +linux-4.4.3/include/drm/drm_dp_mst_helper.h +linux-4.4.3/include/drm/drm_edid.h +linux-4.4.3/include/drm/drm_gem.h +linux-4.4.3/include/drm/drm_global.h +linux-4.4.3/include/drm/drm_hashtab.h +linux-4.4.3/include/drm/drm_legacy.h +linux-4.4.3/include/drm/drm_mm.h +linux-4.4.3/include/drm/drm_modes.h +linux-4.4.3/include/drm/drm_modeset_lock.h +linux-4.4.3/include/drm/drm_plane_helper.h +linux-4.4.3/include/drm/drm_rect.h +linux-4.4.3/include/drm/i915_drm.h +linux-4.4.3/include/drm/i915_pciids.h +linux-4.4.3/include/drm/intel-gtt.h +linux-4.4.3/include/linux/agp_backend.h +linux-4.4.3/include/linux/hdmi.h +linux-4.4.3/include/linux/i2c-algo-bit.h +linux-4.4.3/include/linux/i2c.h +linux-4.4.3/include/linux/list.h +linux-4.4.3/include/linux/list_sort.h +linux-4.4.3/include/linux/log2.h +linux-4.4.3/include/linux/pci_ids.h +linux-4.4.3/include/linux/pm_runtime.h +linux-4.4.3/include/linux/pm_wakeirq.h +linux-4.4.3/include/uapi/asm-generic/ioctl.h +linux-4.4.3/include/uapi/drm/drm.h +linux-4.4.3/include/uapi/drm/drm_fourcc.h +linux-4.4.3/include/uapi/drm/drm_mode.h +linux-4.4.3/include/uapi/drm/i915_drm.h +linux-4.4.3/include/uapi/linux/byteorder/little_endian.h +linux-4.4.3/include/uapi/linux/fb.h +linux-4.4.3/include/uapi/linux/i2c.h +linux-4.4.3/include/uapi/linux/pci_regs.h +linux-4.4.3/include/uapi/linux/swab.h +linux-4.4.3/include/video/display_timing.h +linux-4.4.3/include/video/videomode.h +linux-4.4.3/lib/list_sort.c diff --git a/repos/dde_linux/lib/import/import-intel_fb_include.mk b/repos/dde_linux/lib/import/import-intel_fb_include.mk index fbe67c972a..e414b01320 100644 --- a/repos/dde_linux/lib/import/import-intel_fb_include.mk +++ b/repos/dde_linux/lib/import/import-intel_fb_include.mk @@ -3,7 +3,7 @@ SRC_DIR := $(REP_DIR)/src/drivers/framebuffer/intel # architecture-dependent includes ifeq ($(filter-out $(SPECS),x86),) - ARCH_SRC_INC_DIR += $(REP_DIR)/src/include/x86 \ + ARCH_SRC_INC_DIR += $(REP_DIR)/src/include/spec/x86 \ $(LX_CONTRIB_DIR)/arch/x86/include ifeq ($(filter-out $(SPECS),32bit),) ARCH_SRC_INC_DIR += $(REP_DIR)/src/include/spec/x86_32 diff --git a/repos/dde_linux/lib/mk/intel_fb_drv.mk b/repos/dde_linux/lib/mk/intel_fb_drv.mk index f1df2b8f41..470c179f03 100644 --- a/repos/dde_linux/lib/mk/intel_fb_drv.mk +++ b/repos/dde_linux/lib/mk/intel_fb_drv.mk @@ -10,6 +10,7 @@ SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/i2c/algos/*.c)) SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/drivers/gpu/drm/*.c)) 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)) # @@ -17,7 +18,8 @@ SRC_C += $(notdir $(wildcard $(LX_CONTRIB_DIR)/lib/*.c)) # CC_WARN = -Wall -Wno-uninitialized -Wno-unused-but-set-variable \ -Wno-unused-variable -Wno-unused-function \ - -Wno-pointer-arith -Wno-pointer-sign + -Wno-pointer-arith -Wno-pointer-sign \ + -Wno-int-to-pointer-cast vpath %.c $(LX_CONTRIB_DIR)/drivers/char/agp vpath %.c $(LX_CONTRIB_DIR)/drivers/i2c @@ -25,5 +27,6 @@ vpath %.c $(LX_CONTRIB_DIR)/drivers/i2c/algos vpath %.c $(LX_CONTRIB_DIR)/drivers/gpu/drm/i915 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 diff --git a/repos/dde_linux/lib/mk/intel_fb_include.mk b/repos/dde_linux/lib/mk/intel_fb_include.mk index bc4fd59f87..77001c70eb 100644 --- a/repos/dde_linux/lib/mk/intel_fb_include.mk +++ b/repos/dde_linux/lib/mk/intel_fb_include.mk @@ -9,7 +9,7 @@ ifeq ($(called_from_lib_mk),yes) LX_CONTRIB_DIR := $(call select_from_ports,dde_linux)/src/drivers/framebuffer/intel LX_EMUL_H := $(REP_DIR)/src/drivers/framebuffer/intel/include/lx_emul.h -GEN_INCLUDES := $(shell grep -rh "^\#include .*\/" $(LX_CONTRIB_DIR) |\ +GEN_INCLUDES := $(shell grep -rh "^\#include .*" $(LX_CONTRIB_DIR) |\ sed "s/^\#include [^<\"]*[<\"]\([^>\"]*\)[>\"].*/\1/" | sort | uniq) # diff --git a/repos/dde_linux/patches/intel_fb_16bit.patch b/repos/dde_linux/patches/intel_fb_16bit.patch deleted file mode 100644 index 1f88d92f47..0000000000 --- a/repos/dde_linux/patches/intel_fb_16bit.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c -index 39eac99..3e67601 100644 ---- a/drivers/gpu/drm/i915/intel_fbdev.c -+++ b/drivers/gpu/drm/i915/intel_fbdev.c -@@ -293,7 +293,7 @@ void intel_fbdev_initial_config(struct drm_device *dev) - struct drm_i915_private *dev_priv = dev->dev_private; - - /* Due to peculiar init order wrt to hpd handling this is separate. */ -- drm_fb_helper_initial_config(&dev_priv->fbdev->helper, 32); -+ drm_fb_helper_initial_config(&dev_priv->fbdev->helper, 16); - } - - void intel_fbdev_fini(struct drm_device *dev) diff --git a/repos/dde_linux/patches/intel_fb_edp.patch b/repos/dde_linux/patches/intel_fb_edp.patch deleted file mode 100644 index 6198136de2..0000000000 --- a/repos/dde_linux/patches/intel_fb_edp.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c -index 2688f6d..ca178a2 100644 ---- a/drivers/gpu/drm/i915/intel_dp.c -+++ b/drivers/gpu/drm/i915/intel_dp.c -@@ -811,7 +811,9 @@ intel_dp_compute_config(struct intel_encoder *encoder, - struct intel_crtc *intel_crtc = encoder->new_crtc; - struct intel_connector *intel_connector = intel_dp->attached_connector; - int lane_count, clock; -+ int min_lane_count = 1; - int max_lane_count = drm_dp_max_lane_count(intel_dp->dpcd); -+ int min_clock = 0; - int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0; - int bpp, mode_rate; - static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 }; -@@ -844,19 +846,33 @@ intel_dp_compute_config(struct intel_encoder *encoder, - /* Walk through all bpp values. Luckily they're all nicely spaced with 2 - * bpc in between. */ - bpp = pipe_config->pipe_bpp; -- if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp && -- dev_priv->vbt.edp_bpp < bpp) { -- DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n", -- dev_priv->vbt.edp_bpp); -- bpp = dev_priv->vbt.edp_bpp; -+ if (is_edp(intel_dp)) { -+ if (dev_priv->vbt.edp_bpp && dev_priv->vbt.edp_bpp < bpp) { -+ DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n", -+ dev_priv->vbt.edp_bpp); -+ bpp = dev_priv->vbt.edp_bpp; -+ } -+ -+ if (dev_priv->vbt.edp_lanes) { -+ min_lane_count = min(dev_priv->vbt.edp_lanes, -+ max_lane_count); -+ DRM_DEBUG_KMS("using min %u lanes per VBT\n", -+ min_lane_count); -+ } -+ -+ if (dev_priv->vbt.edp_rate) { -+ min_clock = min(dev_priv->vbt.edp_rate >> 3, max_clock); -+ DRM_DEBUG_KMS("using min %02x link bw per VBT\n", -+ bws[min_clock]); -+ } - } - - for (; bpp >= 6*3; bpp -= 2*3) { - mode_rate = intel_dp_link_required(adjusted_mode->crtc_clock, - bpp); - -- for (clock = 0; clock <= max_clock; clock++) { -- for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) { -+ for (lane_count = min_lane_count; lane_count <= max_lane_count; lane_count <<= 1) { -+ for (clock = min_clock; clock <= max_clock; clock++) { - link_clock = drm_dp_bw_code_to_link_rate(bws[clock]); - link_avail = intel_dp_max_data_rate(link_clock, - lane_count); diff --git a/repos/dde_linux/patches/intel_fb_export_api.patch b/repos/dde_linux/patches/intel_fb_export_api.patch new file mode 100644 index 0000000000..4b5fc0fd1b --- /dev/null +++ b/repos/dde_linux/patches/intel_fb_export_api.patch @@ -0,0 +1,16 @@ +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 * ++dde_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(dde_c_intel_framebuffer_create); diff --git a/repos/dde_linux/patches/intel_fb_report.patch b/repos/dde_linux/patches/intel_fb_report.patch deleted file mode 100644 index 0231c82c07..0000000000 --- a/repos/dde_linux/patches/intel_fb_report.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c -index 98a0363..b00c6b7 100644 ---- a/drivers/gpu/drm/drm_fb_helper.c -+++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -1505,6 +1505,7 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper) - modeset->mode = NULL; - } - } -+ update_genode_report(); - out: - kfree(crtcs); - kfree(modes); diff --git a/repos/dde_linux/patches/intel_fb_update.patch b/repos/dde_linux/patches/intel_fb_update.patch deleted file mode 100644 index a73f5af9c9..0000000000 --- a/repos/dde_linux/patches/intel_fb_update.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 963639d..f926f21 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -9867,6 +9867,11 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set, - config->mode_changed = true; - } - -+ /** -+ * Adaption made for Genode context: ensure connector always uses a new fb -+ */ -+ config->fb_changed = true; -+ - DRM_DEBUG_KMS("computed changes for [CRTC:%d], mode_changed=%d, fb_changed=%d\n", - set->crtc->base.id, config->mode_changed, config->fb_changed); - } -diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c -index 3b7d32d..637f713 100644 ---- a/drivers/gpu/drm/drm_crtc.c -+++ b/drivers/gpu/drm/drm_crtc.c -@@ -487,7 +487,7 @@ static void drm_framebuffer_free_bug(struct kref *kref) - static void __drm_framebuffer_unreference(struct drm_framebuffer *fb) - { - DRM_DEBUG("FB ID: %d\n", fb->base.id); -- kref_put(&fb->refcount, drm_framebuffer_free_bug); -+ /*kref_put(&fb->refcount, drm_framebuffer_free_bug);*/ - } - - /* dev->mode_config.fb_lock must be held! */ diff --git a/repos/dde_linux/ports/dde_linux.hash b/repos/dde_linux/ports/dde_linux.hash index 55a42b516c..c75bdb3fc9 100644 --- a/repos/dde_linux/ports/dde_linux.hash +++ b/repos/dde_linux/ports/dde_linux.hash @@ -1 +1 @@ -c63f9c4df89a087251bafa448b8fd99f04334564 +a226766f99897d980fa70f8bf24e09ad0c1d39ee diff --git a/repos/dde_linux/ports/dde_linux.port b/repos/dde_linux/ports/dde_linux.port index 1105f69e98..f64aa55d0d 100644 --- a/repos/dde_linux/ports/dde_linux.port +++ b/repos/dde_linux/ports/dde_linux.port @@ -50,9 +50,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 := 3.14.5 -URL(intel_fb) := http://www.kernel.org/pub/linux/kernel/v3.x/linux-$(VERSION_INTEL_FB).tar.gz -SHA(intel_fb) := 675bb3446cbf0889d59a048f6af177ca0a7aacb5 +VERSION_INTEL_FB := 4.4.3 +URL(intel_fb) := https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_INTEL_FB).tar.xz +SHA(intel_fb) := 336d66925a15ce9077cbf2c38acbdc6c2644e33f DIR(intel_fb) := $(SRC_DIR_INTEL_FB) TAR_OPT(intel_fb) := --strip-components=1 --files-from $(REP_DIR)/intel_fb.list HASH_INPUT += $(REP_DIR)/intel_fb.list @@ -160,6 +160,7 @@ PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/libnl*.pa PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/lxip*.patch))) PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/intel*.patch))) PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/usb*.patch))) +PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/intel*.patch))) #IP stack LXIP_OPT = -p1 -d$(SRC_DIR_LXIP) @@ -182,13 +183,6 @@ PATCH_OPT(patches/libnl.patch) := -p1 -d ${DIR(libnl)} # WPA supplicant PATCH_OPT(patches/wpa_supplicant.patch) := -p1 -d ${DIR(wpa_supplicant)} -# Intel fb -PATCH_OPT(patches/intel_fb_16bit.patch) := -p1 -d ${DIR(intel_fb)} -PATCH_OPT(patches/intel_fb_edp.patch) := -p1 -d ${DIR(intel_fb)} -PATCH_OPT(patches/intel_fb_update.patch) := -p1 -d ${DIR(intel_fb)} -PATCH_OPT(patches/intel_fb_x201.patch) := -p1 -d ${DIR(intel_fb)} -PATCH_OPT(patches/intel_fb_report.patch) := -p1 -d ${DIR(intel_fb)} - # USB USB_OPT = -p1 -d$(SRC_DIR_USB) PATCH_OPT(patches/usb_ax88179.patch) := $(USB_OPT) @@ -197,4 +191,7 @@ PATCH_OPT(patches/usb_evdev.patch) := $(USB_OPT) PATCH_OPT(patches/usb_mem.patch) := $(USB_OPT) PATCH_OPT(patches/usb_usbnet.patch) := $(USB_OPT) +# INTEL FB +PATCH_OPT(patches/intel_fb_export_api.patch) := -p1 -d$(SRC_DIR_INTEL_FB) + # vi: set ft=make : diff --git a/repos/dde_linux/run/intel_fb.run b/repos/dde_linux/run/intel_fb.run index 887e25814b..508de4c100 100644 --- a/repos/dde_linux/run/intel_fb.run +++ b/repos/dde_linux/run/intel_fb.run @@ -8,6 +8,8 @@ set build_components { drivers/framebuffer/intel test/framebuffer server/report_rom + server/ram_fs + server/fs_rom } source ${genode_dir}/repos/base/run/platform_drv.inc @@ -22,7 +24,7 @@ create_boot_directory # append config { - + @@ -45,7 +47,8 @@ append config { - + + @@ -83,13 +86,15 @@ append config { + + - + @@ -98,7 +103,7 @@ append config { - + } diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummies.h b/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c similarity index 59% rename from repos/dde_linux/src/drivers/framebuffer/intel/gen_dummies.h rename to repos/dde_linux/src/drivers/framebuffer/intel/dummies.c index 263649cbc6..3b19eb4199 100644 --- a/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummies.h +++ b/repos/dde_linux/src/drivers/framebuffer/intel/dummies.c @@ -1,20 +1,76 @@ +#include "lx_emul_private.h" +#include +#include +#include +#include +#include +#include + bool access_ok(int access, void *addr, size_t size) { TRACE_AND_STOP; return -1; } +int acpi_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *ev) +{ + TRACE_AND_STOP; + return -1; +} + +bool acpi_driver_match_device(struct device *dev, const struct device_driver *drv) +{ + TRACE_AND_STOP; + return -1; +} + +int acpi_lid_notifier_unregister(struct notifier_block *nb) +{ + TRACE_AND_STOP; + return -1; +} + +int acpi_lid_open(void) +{ + TRACE_AND_STOP; + return -1; +} + void acpi_video_unregister(void) { TRACE_AND_STOP; } -void add_wait_queue(wait_queue_head_t *, wait_queue_t *) +int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...) +{ + TRACE_AND_STOP; + 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 atomic_set_mask(unsigned int mask, atomic_t *v) +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; } @@ -47,6 +103,11 @@ size_t copy_to_user(void *dst, void const *src, size_t len) return -1; } +void cpufreq_cpu_put(struct cpufreq_policy *policy) +{ + TRACE_AND_STOP; +} + void destroy_timer_on_stack(struct timer_list *timer) { TRACE_AND_STOP; @@ -57,40 +118,80 @@ void destroy_workqueue(struct workqueue_struct *wq) TRACE_AND_STOP; } -int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs) +void *dev_get_drvdata(const struct device *dev) +{ + TRACE_AND_STOP; + 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; + return NULL; +} + int dma_set_coherent_mask(struct device *dev, u64 mask) { TRACE_AND_STOP; return -1; } -void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs) +void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction) { TRACE_AND_STOP; } -int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, int *max_error, struct timeval *vblank_time, unsigned flags, const struct drm_crtc *refcrtc, const struct drm_display_mode *mode) +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; } -void drm_clflush_pages(struct page *pages[], unsigned long num_pages) +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_clflush_sg(struct sg_table *st) -{ - TRACE_AND_STOP; -} - -void drm_clflush_virt_range(char *addr, unsigned long length) +void drm_free_large(void *ptr) { TRACE_AND_STOP; } @@ -107,11 +208,6 @@ int drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, uint32_t return -1; } -void drm_gem_free_mmap_offset(struct drm_gem_object *obj) -{ - TRACE_AND_STOP; -} - int drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep) { TRACE_AND_STOP; @@ -124,33 +220,12 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) return -1; } -int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size) -{ - 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; } -void drm_gem_object_reference(struct drm_gem_object *obj) -{ - TRACE_AND_STOP; -} - -void drm_gem_object_release(struct drm_gem_object *obj) -{ - TRACE_AND_STOP; -} - -void drm_gem_object_unreference(struct drm_gem_object *obj) -{ - TRACE_AND_STOP; -} - 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; @@ -173,28 +248,16 @@ void drm_gem_vm_open(struct vm_area_struct *vma) TRACE_AND_STOP; } -struct drm_local_map *drm_getsarea(struct drm_device *dev) -{ - TRACE_AND_STOP; - return NULL; -} - -bool drm_handle_vblank(struct drm_device *dev, int crtc) -{ - TRACE_AND_STOP; - return -1; -} - long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { TRACE_AND_STOP; return -1; } -int drm_irq_uninstall(struct drm_device *dev) +void *drm_malloc_ab(size_t nmemb, size_t size) { TRACE_AND_STOP; - return -1; + return NULL; } int drm_noop(struct drm_device *dev, void *data, struct drm_file *file_priv) @@ -209,13 +272,13 @@ int drm_open(struct inode *inode, struct file *filp) return -1; } -drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, size_t align) +struct drm_dma_handle *drm_pci_alloc(struct drm_device *dev, size_t size, size_t align) { TRACE_AND_STOP; return NULL; } -void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah) +void drm_pci_free(struct drm_device *dev, struct drm_dma_handle * dmah) { TRACE_AND_STOP; } @@ -248,27 +311,6 @@ int drm_release(struct inode *inode, struct file *filp) return -1; } -void drm_send_vblank_event(struct drm_device *dev, int crtc, struct drm_pending_vblank_event *e) -{ - TRACE_AND_STOP; -} - -void drm_vblank_cleanup(struct drm_device *dev) -{ - TRACE_AND_STOP; -} - -int drm_vblank_get(struct drm_device *dev, int crtc) -{ - TRACE_AND_STOP; - return -1; -} - -void drm_vblank_put(struct drm_device *dev, int crtc) -{ - TRACE_AND_STOP; -} - bool drm_vma_node_has_offset(struct drm_vma_offset_node *node) { TRACE_AND_STOP; @@ -298,7 +340,12 @@ int fault_in_multipages_writeable(char __user *uaddr, int size) return -1; } -struct inode *file_inode(struct file *f) +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; return NULL; @@ -319,11 +366,6 @@ void __free_pages(struct page *page, unsigned int order) TRACE_AND_STOP; } -void free_pages(unsigned long addr, unsigned int order) -{ - TRACE_AND_STOP; -} - unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) { TRACE_AND_STOP; @@ -336,63 +378,88 @@ unsigned long get_seconds(void) return -1; } -void i915_capture_error_state(struct drm_device *dev) +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; +} + +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) +{ + TRACE_AND_STOP; + return -1; +} + void i915_destroy_error_state(struct drm_device *dev) { TRACE_AND_STOP; } -void i915_gem_context_close(struct drm_device *dev, struct drm_file *file) +void i915_gem_batch_pool_fini(struct i915_gem_batch_pool *pool) { TRACE_AND_STOP; } -int i915_gem_context_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file) +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) { TRACE_AND_STOP; return -1; } -int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data, struct drm_file *file) +int i915_gem_execbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) { TRACE_AND_STOP; return -1; } -void i915_gem_context_fini(struct drm_device *dev) -{ - TRACE_AND_STOP; -} - -void i915_gem_context_free(struct kref *ctx_ref) -{ - TRACE_AND_STOP; -} - -int i915_gem_evict_everything(struct drm_device *dev) +int i915_gem_execbuffer2(struct drm_device *dev, void *data, struct drm_file *file_priv) { TRACE_AND_STOP; return -1; } -int __must_check i915_gem_evict_something(struct drm_device *dev, struct i915_address_space *vm, int min_size, unsigned alignment, unsigned cache_level, bool mappable, bool nonblock) +int i915_gem_get_tiling(struct drm_device *dev, void *data, struct drm_file *file) { TRACE_AND_STOP; return -1; } -void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj) -{ - TRACE_AND_STOP; -} - -void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj) +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) @@ -407,6 +474,30 @@ 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) +{ + TRACE_AND_STOP; + return -1; +} + +unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv) +{ + TRACE_AND_STOP; + return -1; +} + +int i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file) +{ + TRACE_AND_STOP; + return -1; +} + void i915_get_extra_instdone(struct drm_device *dev, uint32_t *instdone) { TRACE_AND_STOP; @@ -424,26 +515,40 @@ int i915_save_state(struct drm_device *dev) return -1; } -int i915_switch_context(struct intel_ring_buffer *ring, struct drm_file *file, int to_id) -{ - TRACE_AND_STOP; - return -1; -} - void i915_teardown_sysfs(struct drm_device *dev_priv) { TRACE_AND_STOP; } -void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring) +void idr_destroy(struct idr *idp) { TRACE_AND_STOP; } -bool intel_dsi_init(struct drm_device *dev) +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; +} + +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; - return -1; } void intel_dvo_init(struct drm_device *dev) @@ -451,77 +556,64 @@ void intel_dvo_init(struct drm_device *dev) TRACE_AND_STOP; } -void intel_plane_disable(struct drm_plane *plane) +void intel_execlists_retire_requests(struct intel_engine_cs *ring) { TRACE_AND_STOP; } -void intel_plane_restore(struct drm_plane *plane) -{ - TRACE_AND_STOP; -} - -int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size) +int intel_execlists_submission(struct i915_execbuffer_params *params, struct drm_i915_gem_execbuffer2 *args, struct list_head *vmas) { TRACE_AND_STOP; return -1; } -void __intel_ring_advance(struct intel_ring_buffer *ring) -{ - TRACE_AND_STOP; -} - -int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n) +int intel_guc_resume(struct drm_device *dev) { TRACE_AND_STOP; return -1; } -int __must_check intel_ring_cacheline_align(struct intel_ring_buffer *ring) +int intel_guc_suspend(struct drm_device *dev) { TRACE_AND_STOP; return -1; } -int intel_ring_flush_all_caches(struct intel_ring_buffer *ring) +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; } -u32 intel_ring_get_active_head(struct intel_ring_buffer *ring) +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; } -int __must_check intel_ring_idle(struct intel_ring_buffer *ring) -{ - TRACE_AND_STOP; - return -1; -} - -void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno) +void intel_logical_ring_stop(struct intel_engine_cs *ring) { TRACE_AND_STOP; } -void intel_ring_setup_status_page(struct intel_ring_buffer *ring) +void intel_lrc_irq_handler(struct intel_engine_cs *ring) { TRACE_AND_STOP; } -int intel_sprite_get_colorkey(struct drm_device *dev, void *data, struct drm_file *file_priv) +void intel_lr_context_unpin(struct drm_i915_gem_request *req) { TRACE_AND_STOP; - return -1; -} - -int intel_sprite_set_colorkey(struct drm_device *dev, void *data, struct drm_file *file_priv) -{ - TRACE_AND_STOP; - return -1; } void intel_tv_init(struct drm_device *dev) @@ -540,6 +632,17 @@ void *io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) 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; @@ -550,7 +653,13 @@ void io_schedule(void) TRACE_AND_STOP; } -void kmem_cache_destroy(struct kmem_cache *) +unsigned int jiffies_to_usecs(const unsigned long j) +{ + TRACE_AND_STOP; + return -1; +} + +void kmem_cache_destroy(struct kmem_cache *cache) { TRACE_AND_STOP; } @@ -561,35 +670,88 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *e return -1; } -gfp_t mapping_gfp_mask(struct address_space * mapping) +int kref_get_unless_zero(struct kref *kref) { TRACE_AND_STOP; return -1; } -void mapping_set_gfp_mask(struct address_space *m, gfp_t mask) +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; } -void mark_page_accessed(struct page *) +void ndelay(unsigned long ns) { TRACE_AND_STOP; } +bool need_resched(void) +{ + TRACE_AND_STOP; + return -1; +} + loff_t noop_llseek(struct file *file, loff_t offset, int whence) { TRACE_AND_STOP; return -1; } -dma_addr_t page_to_pfn(struct page *page) +extern u64 nsecs_to_jiffies64(u64 n) { TRACE_AND_STOP; return -1; } -resource_size_t pcibios_align_resource(void *, const struct resource *, resource_size_t, resource_size_t) +int of_alias_get_id(struct device_node *np, const char *stem) +{ + TRACE_AND_STOP; + return -1; +} + +int of_driver_match_device(struct device *dev, const struct device_driver *drv) +{ + TRACE_AND_STOP; + return -1; +} + +int of_irq_get(struct device_node *dev, int index) +{ + TRACE_AND_STOP; + return -1; +} + +int of_irq_get_byname(struct device_node *dev, const char *name) +{ + TRACE_AND_STOP; + return -1; +} + +void of_node_clear_flag(struct device_node *n, unsigned long flag) +{ + TRACE_AND_STOP; +} + +resource_size_t pcibios_align_resource(void * p, const struct resource *r, resource_size_t s1, resource_size_t s2) { TRACE_AND_STOP; return -1; @@ -645,17 +807,68 @@ void pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, size_t size, TRACE_AND_STOP; } +pgprot_t pgprot_writecombine(pgprot_t prot) +{ + TRACE_AND_STOP; + return prot; +} + void pm_qos_remove_request(struct pm_qos_request *req) { TRACE_AND_STOP; } -void put_page(struct page *page) +void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, int rowsize, int groupsize, const void *buf, size_t len, bool ascii) { TRACE_AND_STOP; } -bool queue_work(struct workqueue_struct *wq, struct work_struct *work) +int PTR_ERR_OR_ZERO(__force const void *ptr) +{ + TRACE_AND_STOP; + return -1; +} + +void put_pid(struct pid *pid) +{ + TRACE_AND_STOP; +} + +int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) +{ + TRACE_AND_STOP; + return -1; +} + +void pwm_disable(struct pwm_device *pwm) +{ + TRACE_AND_STOP; +} + +int pwm_enable(struct pwm_device *pwm) +{ + TRACE_AND_STOP; + return -1; +} + +struct pwm_device *pwm_get(struct device *dev, const char *con_id) +{ + TRACE_AND_STOP; + return NULL; +} + +unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm) +{ + TRACE_AND_STOP; + return -1; +} + +void pwm_put(struct pwm_device *pwm) +{ + TRACE_AND_STOP; +} + +int register_reboot_notifier(struct notifier_block *nb) { TRACE_AND_STOP; return -1; @@ -667,29 +880,18 @@ int release_resource(struct resource *r) return -1; } -void remove_wait_queue(wait_queue_head_t *, wait_queue_t *) -{ - TRACE_AND_STOP; -} - -int request_resource(struct resource *root, struct resource *) +int request_resource(struct resource *root, struct resource *r) { TRACE_AND_STOP; return -1; } -unsigned long round_jiffies_up(unsigned long j) -{ - TRACE_AND_STOP; - return -1; -} - -void __set_current_state(int state) +void seq_printf(struct seq_file *m, const char *fmt, ...) { TRACE_AND_STOP; } -void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec) +void seq_puts(struct seq_file *m, const char *s) { TRACE_AND_STOP; } @@ -706,20 +908,10 @@ int set_pages_wb(struct page *page, int numpages) return -1; } -void sg_free_table(struct sg_table *) -{ - TRACE_AND_STOP; -} - -struct page *sg_page_iter_page(struct sg_page_iter *piter) -{ - TRACE_AND_STOP; - return NULL; -} - -void sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset) +int sg_nents(struct scatterlist *sg) { TRACE_AND_STOP; + return -1; } struct page *shmem_read_mapping_page( struct address_space *mapping, pgoff_t index) @@ -728,42 +920,46 @@ struct page *shmem_read_mapping_page( struct address_space *mapping, pgoff_t ind return NULL; } -struct page *shmem_read_mapping_page_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask) -{ - TRACE_AND_STOP; - return NULL; -} - void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end) { TRACE_AND_STOP; } -int signal_pending(struct task_struct *p) +int signal_pending_state(long state, struct task_struct *p) { TRACE_AND_STOP; return -1; } -unsigned long timespec_to_jiffies(const struct timespec *value) +int strcmp(const char *s1, const char *s2) { TRACE_AND_STOP; return -1; } -s64 timespec_to_ns(const struct timespec *ts) +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; } -bool timespec_valid(const struct timespec *ts) +int unregister_reboot_notifier(struct notifier_block *nb) { TRACE_AND_STOP; return -1; } -void unregister_shrinker(struct shrinker *) +void unregister_shrinker(struct shrinker *s) +{ + TRACE_AND_STOP; +} + +void up_read(struct rw_semaphore *sem) { TRACE_AND_STOP; } @@ -785,13 +981,32 @@ phys_addr_t virt_to_phys(volatile void *address) return -1; } +pgprot_t vm_get_page_prot(unsigned long vm_flags) +{ + pgprot_t prot; + TRACE_AND_STOP; + 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 *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) +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; @@ -808,222 +1023,151 @@ void wbinvd_on_all_cpus() TRACE_AND_STOP; } -void idr_destroy(struct idr *idp) -{ - TRACE_AND_STOP; -} - -int acpi_lid_notifier_unregister(struct notifier_block *nb) -{ - TRACE_AND_STOP; - return -1; -} - -int acpi_lid_open(void) -{ - TRACE_AND_STOP; - return -1; -} - -void *memchr_inv(const void *s, int c, size_t n) -{ - TRACE_AND_STOP; - return NULL; -} - -void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, int rowsize, int groupsize, const void *buf, size_t len, bool ascii) -{ - TRACE_AND_STOP; -} - -int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *) -{ - TRACE_AND_STOP; - return -1; -} - -int acpi_dev_pm_attach(struct device *dev, bool power_on) -{ - TRACE_AND_STOP; - return -1; -} - -void acpi_dev_pm_detach(struct device *dev, bool power_off) -{ - TRACE_AND_STOP; -} - -bool acpi_driver_match_device(struct device *dev, const struct device_driver *drv) -{ - TRACE_AND_STOP; - return -1; -} - -int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...) -{ - TRACE_AND_STOP; - return -1; -} - -bool device_can_wakeup(struct device *dev) -{ - TRACE_AND_STOP; - return -1; -} - -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; -} - -const char *dev_name(const struct device *dev) -{ - TRACE_AND_STOP; - return NULL; -} - -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; -} - -void ndelay(unsigned long) -{ - TRACE_AND_STOP; -} - -int of_alias_get_id(struct device_node *np, const char *stem) -{ - TRACE_AND_STOP; - return -1; -} - -int of_driver_match_device(struct device *dev, const struct device_driver *drv) -{ - TRACE_AND_STOP; - return -1; -} - -int strcmp(const char *s1, const char *s2) -{ - TRACE_AND_STOP; - return -1; -} - -size_t strlcpy(char *dest, const char *src, size_t size) -{ - TRACE_AND_STOP; - return -1; -} - -void up_read(struct rw_semaphore *sem) -{ - TRACE_AND_STOP; -} - -void bus_unregister(struct bus_type *bus) -{ - TRACE_AND_STOP; -} - - void yield(void) { TRACE_AND_STOP; } - -int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame) +void bus_unregister(struct bus_type *bus) { - TRACE; - return -1; + TRACE_AND_STOP; } - -int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame) +int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master) { TRACE_AND_STOP; return -1; } -int hdmi_spd_infoframe_init(struct hdmi_spd_infoframe *frame, const char *vendor, const char *product) -{ - TRACE; - return -1; -} - -ssize_t hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer, size_t size) +enum csr_state intel_csr_load_status_get(struct drm_i915_private *dev_priv) { TRACE_AND_STOP; return -1; } -void io_mapping_unmap(void __iomem *vaddr) +void assert_csr_loaded(struct drm_i915_private *dev_priv) { TRACE_AND_STOP; } -void memcpy_toio(volatile void __iomem *dst, const void *src, size_t count) +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; } -void __iomem * io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) +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) +{ + TRACE_AND_STOP; +} + +int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) +{ + TRACE_AND_STOP; + return -1; +} + +void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) +{ + 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; +} + +int ww_mutex_lock_slow_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx) +{ + TRACE_AND_STOP; + return -1; +} + +int ww_mutex_trylock(struct ww_mutex *lock) +{ + TRACE_AND_STOP; + return -1; +} + +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 cpufreq_cpu_put(struct cpufreq_policy *policy) +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) +{ + TRACE_AND_STOP; + return NULL; +} + +void ClearPageReserved(struct page *page) { TRACE_AND_STOP; } -void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area) -{ - TRACE_AND_STOP; -} - -void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) -{ - TRACE_AND_STOP; -} - -void cfb_imageblit(struct fb_info *info, const struct fb_image *image) -{ - TRACE_AND_STOP; -} - -void fb_set_suspend(struct fb_info *info, int state) +const char *acpi_dev_name(struct acpi_device *adev) { TRACE_AND_STOP; + return NULL; } diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/dummies.cc b/repos/dde_linux/src/drivers/framebuffer/intel/dummies.cc deleted file mode 100644 index 885584492a..0000000000 --- a/repos/dde_linux/src/drivers/framebuffer/intel/dummies.cc +++ /dev/null @@ -1,136 +0,0 @@ -/* - * \brief Dummy functions - * \author Norman Feske - * \date 2015-08-18 - */ - -/* - * Copyright (C) 2015 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU General Public License version 2. - */ - -#include "lx_emul_private.h" - -extern "C" { - -#include -#include - -/* - * Incorporate dummy implemementations semi-automaticall generated via the - * 'gen_dummy' script. - */ - -#include "gen_dummies.h" - -/* - * Manually defined dummies (because they are not covered by the heuristics - * of the 'gen_dummy' script). - */ - -struct timespec timespec_sub(struct timespec lhs, struct timespec rhs) -{ - TRACE_AND_STOP; - return { 0, 0 }; -} - -struct timespec ns_to_timespec(const s64 nsec) -{ - TRACE_AND_STOP; - return { 0, 0 }; -} - -bool capable(int cap) -{ - TRACE_AND_STOP; - return false; -} - -int i915_gem_execbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) -{ - TRACE_AND_STOP; - return -1; -} - -int i915_gem_execbuffer2(struct drm_device *dev, void *data, struct drm_file *file_priv) -{ - 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; -} - -int i915_gem_get_tiling(struct drm_device *dev, void *data, struct drm_file *file) -{ - TRACE_AND_STOP; - return -1; -} - -bool flush_delayed_work(struct delayed_work *dwork) -{ - TRACE_AND_STOP; - return false; -} - -void down_read(struct rw_semaphore *sem) -{ - TRACE_AND_STOP; -} - -void device_unregister(struct device *dev) -{ - TRACE_AND_STOP; -} - -int i2c_algo_bit_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) -{ - TRACE_AND_STOP; - return -1; -} - -u32 i2c_algo_bit_func(struct i2c_adapter *adap) -{ - TRACE_AND_STOP; - return 0; -} - -void i915_setup_sysfs(struct drm_device *dev_priv) -{ - TRACE; -} - -int acpi_video_register(void) -{ - TRACE; - return 0; -} - -void ips_link_to_i915_driver(void) -{ - TRACE; -} - -void spin_lock(spinlock_t *lock) -{ - TRACE; -} - -void drm_sysfs_hotplug_event(struct drm_device *dev) -{ - TRACE; -} - -const char *acpi_dev_name(struct acpi_device *) -{ - TRACE_AND_STOP; - return 0; -} - -} /* extern "C" */ - diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummy b/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummy index 6084c730b3..0037573468 100755 --- a/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummy +++ b/repos/dde_linux/src/drivers/framebuffer/intel/gen_dummy @@ -17,7 +17,7 @@ # with the signature of the declarated function. # -set symbol $argv +set symbol [lindex $argv 0] # determine contrib directory of dde_linux set lx_drv_path [exec ../../../../../../tool/ports/current dde_linux] diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c b/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c new file mode 100644 index 0000000000..9ed3945c2b --- /dev/null +++ b/repos/dde_linux/src/drivers/framebuffer/intel/i915_params.c @@ -0,0 +1,35 @@ +#include <../drivers/gpu/drm/i915/i915_drv.h> + +struct i915_params i915 = { + .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_fbc = -1, + .enable_execlists = -1, + .enable_hangcheck = false, + .enable_ppgtt = -1, + .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, + .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, +}; + 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 93f6f60127..5f62a86b46 100644 --- a/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h +++ b/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h @@ -25,64 +25,102 @@ #include #include +struct drm_display_mode; +struct drm_connector; +struct drm_framebuffer; + namespace Framebuffer { + class Driver; class Session_component; class Root; - - extern Root * root; - Genode::Dataspace_capability framebuffer_dataspace(); } +class Framebuffer::Driver +{ + private: + + Session_component &_session; + int _height = 0; + int _width = 0; + static constexpr unsigned _bytes_per_pixel = 2; + void *_new_fb_ds_base = nullptr; + void *_cur_fb_ds_base = nullptr; + Genode::uint64_t _cur_fb_ds_size = 0; + drm_framebuffer *_new_fb = nullptr; + drm_framebuffer *_cur_fb = nullptr; + + drm_display_mode * _preferred_mode(drm_connector *connector); + + public: + + Driver(Session_component &session) : _session(session) {} + + int width() const { return _width; } + int height() const { return _height; } + unsigned bpp() const { return _bytes_per_pixel; } + + Genode::size_t size() const { + return _width * _height * _bytes_per_pixel; } + + void finish_initialization(); + bool mode_changed(); + void generate_report(); + void free_framebuffer(); + Genode::Dataspace_capability dataspace(); +}; + + class Framebuffer::Session_component : public Genode::Rpc_object { private: template using Lazy = Genode::Lazy_volatile_object; - int _height; - int _width; + Driver _driver; Genode::Signal_context_capability _mode_sigh; Timer::Connection _timer; bool const _buffered; Lazy _fb_ds; Lazy _bb_ds; bool _in_update = false; - static constexpr unsigned _bytes_per_pixel = 2; void _refresh_buffered(int x, int y, int w, int h) { using namespace Genode; + + int width = _driver.width(), height = _driver.height(); + unsigned bpp = _driver.bpp(); + /* clip specified coordinates against screen boundaries */ - int x2 = min(x + w - 1, (int)_width - 1), - y2 = min(y + h - 1, (int)_height - 1); + int x2 = min(x + w - 1, width - 1), + y2 = min(y + h - 1, height - 1); int x1 = max(x, 0), y1 = max(y, 0); if (x1 > x2 || y1 > y2) return; - int const bpp = _bytes_per_pixel; - /* copy pixels from back buffer to physical frame buffer */ - char *src = _bb_ds->local_addr() + bpp*(_width*y1 + x1), - *dst = _fb_ds->local_addr() + bpp*(_width*y1 + x1); + char *src = _bb_ds->local_addr() + bpp*(width*y1 + x1), + *dst = _fb_ds->local_addr() + bpp*(width*y1 + x1); - blit(src, bpp*_width, dst, bpp*_width, + blit(src, bpp*width, dst, bpp*width, bpp*(x2 - x1 + 1), y2 - y1 + 1); } public: Session_component(bool buffered) - : _height(0), _width(0), _buffered(buffered) {} + : _driver(*this), _buffered(buffered) {} - void update(int height, int width) + Driver & driver() { return _driver; } + + void config_changed() { _in_update = true; - _height = height; - _width = width; - - if (_mode_sigh.valid()) + if (_driver.mode_changed() && _mode_sigh.valid()) Genode::Signal_transmitter(_mode_sigh).submit(); + else + _in_update = false; } @@ -97,14 +135,16 @@ class Framebuffer::Session_component : public Genode::Rpc_object if (_fb_ds.constructed()) _fb_ds.destruct(); - _fb_ds.construct(framebuffer_dataspace()); - if (!_fb_ds.constructed()) + _fb_ds.construct(_driver.dataspace()); + if (!_fb_ds.is_constructed()) PERR("framebuffer dataspace not initialized"); if (_buffered) { - _bb_ds.construct(Genode::env()->ram_session(), - _width * _height * _bytes_per_pixel); - if (!_bb_ds.constructed()) { + if (_bb_ds.is_constructed()) + _bb_ds.destruct(); + + _bb_ds.construct(Genode::env()->ram_session(), _driver.size()); + if (!_bb_ds.is_constructed()) { PERR("buffered mode enabled, but buffer not initialized"); return Genode::Dataspace_capability(); } @@ -115,7 +155,7 @@ class Framebuffer::Session_component : public Genode::Rpc_object } Mode mode() const override { - return Mode(_width, _height, Mode::RGB565); } + return Mode(_driver.width(), _driver.height(), Mode::RGB565); } void mode_sigh(Genode::Signal_context_capability sigh) override { _mode_sigh = sigh; } @@ -131,27 +171,18 @@ class Framebuffer::Session_component : public Genode::Rpc_object }; -class Framebuffer::Root -: public Genode::Root_component +struct Framebuffer::Root +: Genode::Root_component { - private: + Session_component session; /* single session */ - Session_component _single_session; + Session_component *_create_session(const char *args) override { + return &session; } - Session_component *_create_session(const char *args) override { - return &_single_session; } - - public: - - Root(Genode::Rpc_entrypoint *session_ep, Genode::Allocator *md_alloc, - bool buffered) - : Genode::Root_component(session_ep, md_alloc), - _single_session(buffered) { } - - void update(int height, int width) { - _single_session.update(height, width); } + Root(Genode::Rpc_entrypoint *ep, Genode::Allocator *alloc, bool buffered) + : Genode::Root_component(ep, alloc), + session(buffered) { } }; #endif /* __COMPONENT_H__ */ diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/include/drm/drmP.h b/repos/dde_linux/src/drivers/framebuffer/intel/include/drm/drmP.h deleted file mode 100644 index 1a50d693d4..0000000000 --- a/repos/dde_linux/src/drivers/framebuffer/intel/include/drm/drmP.h +++ /dev/null @@ -1,713 +0,0 @@ -/* - * \brief Platform interface of DRM code - * \author Norman Feske - * \date 2015-08-19 - */ - -#ifndef _DRMP_H_ -#define _DRMP_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* local includes */ -#include - -/* - * Unfortunately, DRM headers use certain C++ keywords as variable names. - * To enable the inclusion of 'drmP.h' from C++ source codes, we have to - * rename these identifiers. - */ -#ifdef __cplusplus -#define new _new -#define virtual _virtual -#define private _private -#endif /* __cplusplus */ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -#undef virtual -#undef new -#undef private -#endif /* __cplusplus */ - -extern unsigned int drm_debug; - - -/******************* - ** DRM constants ** - *******************/ - -enum { - DRM_MINOR_CONTROL = 2, -// DRM_MINOR_RENDER = 3, -// DRM_MAGIC_HASH_ORDER = 4, -}; - -enum { - DRM_AUTH = 0x1, - DRM_MASTER = 0x2, - DRM_ROOT_ONLY = 0x4, - DRM_CONTROL_ALLOW = 0x8, - DRM_UNLOCKED = 0x10, - DRM_RENDER_ALLOW = 0x20, -}; - -enum { - DRIVER_USE_AGP = 0x1, - DRIVER_REQUIRE_AGP = 0x2, - DRIVER_HAVE_IRQ = 0x40, - DRIVER_IRQ_SHARED = 0x80, - DRIVER_GEM = 0x1000, - DRIVER_MODESET = 0x2000, - DRIVER_PRIME = 0x4000, - DRIVER_RENDER = 0x8000, -}; - -//enum { DRM_HZ = HZ }; - -enum { - DRM_SCANOUTPOS_VALID = (1 << 0), - DRM_SCANOUTPOS_INVBL = (1 << 1), - DRM_SCANOUTPOS_ACCURATE = (1 << 2), -}; - -enum { DRM_CALLED_FROM_VBLIRQ = 1 }; - -//enum { -// DRM_CONNECTOR_POLL_HPD = 1 << 0, -// DRM_CONNECTOR_POLL_CONNECT = 1 << 1, -// DRM_CONNECTOR_POLL_DISCONNECT = 1 << 2, -//}; - - -/**************** - ** DRM macros ** - ****************/ - -#define obj_to_crtc(x) container_of(x, struct drm_crtc, base) - -///* -// * Type and function mappings -// */ -//#define DRM_IRQ_ARGS void *arg -//#define DRM_ARRAY_SIZE ARRAY_SIZE -//#define DRM_WAKEUP wake_up -//#define DRM_INIT_WAITQUEUE init_waitqueue_head -//#define DRM_AGP_KERN struct agp_kern_info -//#define DRM_AGP_MEM struct agp_memory -//#define DRM_COPY_TO_USER copy_to_user -// -///* -// * Debug macros -// */ -#define DRM_VERBOSE 0 - -#if DRM_VERBOSE -#define DRM_INFO(fmt, arg...) do { \ - lx_printfln("[" DRM_NAME ":%s] *INFO* " fmt , __func__ , ##arg); } while (0) - -#define DRM_ERROR(fmt, arg...) do { \ - lx_printfln("[" DRM_NAME ":%s] *ERROR* " fmt , __func__ , ##arg); } while (0) - -#define DRM_DEBUG(fmt, arg...) do { \ - lx_printfln("[" DRM_NAME ":%s] *DEBUG* " fmt , __func__ , ##arg); } while (0) - -#define DRM_DEBUG_DRIVER(fmt, arg...) do { \ - lx_printfln("[" DRM_NAME ":%s] *DRIVER* " fmt , __func__ , ##arg); } while (0) - -#define DRM_DEBUG_KMS(fmt, arg...) do { \ - lx_printfln("[" DRM_NAME ":%s] *KMS* " fmt , __func__ , ##arg); } while (0) -#else -#define DRM_INFO(fmt, arg...) do { } while (0) -#define DRM_ERROR(fmt, arg...) do { } while (0) -#define DRM_DEBUG(fmt, arg...) do { } while (0) -#define DRM_DEBUG_DRIVER(fmt, arg...) do { } while (0) -#define DRM_DEBUG_KMS(fmt, arg...) do { } while (0) -#endif - -#define DRM_ARRAY_SIZE(x) ARRAY_SIZE(x) - -#define DRM_UT_KMS 0x04 - - -///*************** -// ** DRM types ** -// ***************/ -// -///* -// * Forward type declarations -// */ -struct drm_device; -struct drm_mm_node; -struct drm_master; -struct drm_file; -struct drm_crtc; -struct drm_plane; -struct drm_display_mode; -struct drm_connector; -struct drm_mode_create_dumb; -struct drm_mode_fb_cmd2; -struct drm_cmdline_mode; - - -/** - * Ioctl handler function - */ -typedef int drm_ioctl_t(struct drm_device *dev, void *data, - struct drm_file *file_priv); - -/** - * Ioctl representation - */ -struct drm_ioctl_desc { - unsigned int cmd; - int flags; - drm_ioctl_t *func; - unsigned int cmd_drv; - const char *name; -}; - -#define DRM_IOCTL_NR(n) (n & 0xff) - -#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \ - [DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl, .name = #ioctl} - -#if 0 -#define DRM_IOCTL_DEF(ioctl, _func, _flags) \ - [ioctl & 0xff] = {.cmd = ioctl, .func = _func, .flags = _flags} -#endif - - -struct drm_gem_object; - - -struct drm_driver { - u32 driver_features; - const struct vm_operations_struct *gem_vm_ops; - const struct drm_ioctl_desc *ioctls; - int num_ioctls; - const struct file_operations *fops; - int major; - int minor; - int patchlevel; - char *name; - char *desc; - char *date; - - int (*load) (struct drm_device *, unsigned long flags); - int (*unload) (struct drm_device *); - int (*open) (struct drm_device *, struct drm_file *); - void (*lastclose) (struct drm_device *); - void (*preclose) (struct drm_device *, struct drm_file *file_priv); - void (*postclose) (struct drm_device *, struct drm_file *); - - int (*suspend) (struct drm_device *, pm_message_t state); - int (*resume) (struct drm_device *); - - int (*device_is_agp) (struct drm_device *dev); - int (*master_create)(struct drm_device *dev, struct drm_master *master); - void (*master_destroy)(struct drm_device *dev, struct drm_master *master); - void (*gem_free_object) (struct drm_gem_object *obj); - - int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv, - uint32_t handle, uint32_t flags, int *prime_fd); - int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv, - int prime_fd, uint32_t *handle); - struct dma_buf * (*gem_prime_export)(struct drm_device *dev, - struct drm_gem_object *obj, int flags); - struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, - struct dma_buf *dma_buf); - - int (*dumb_create)(struct drm_file *file_priv, - struct drm_device *dev, - struct drm_mode_create_dumb *args); - int (*dumb_map_offset)(struct drm_file *file_priv, - struct drm_device *dev, uint32_t handle, - uint64_t *offset); - int (*dumb_destroy)(struct drm_file *file_priv, - struct drm_device *dev, - uint32_t handle); - int (*get_vblank_timestamp) (struct drm_device *dev, int crtc, - int *max_error, - struct timeval *vblank_time, - unsigned flags); - u32 (*get_vblank_counter) (struct drm_device *dev, int crtc); - int (*get_scanout_position) (struct drm_device *dev, int crtc, - unsigned int flags, - int *vpos, int *hpos, ktime_t *stime, - ktime_t *etime); - irqreturn_t(*irq_handler) (int irq, void *arg); - void (*irq_preinstall) (struct drm_device *dev); - int (*irq_postinstall) (struct drm_device *dev); - void (*irq_uninstall) (struct drm_device *dev); - int (*enable_vblank) (struct drm_device *dev, int crtc); - void (*disable_vblank) (struct drm_device *dev, int crtc); -}; - - -///* needed by drm_agpsupport.c */ -//struct drm_agp_mem { -// unsigned long handle; -// DRM_AGP_MEM *memory; -// unsigned long bound; -// int pages; -// struct list_head head; -//}; -// -//struct drm_agp_head { -// DRM_AGP_KERN agp_info; -// unsigned long base; -// -// /* -// * Members used by drm_agpsupport.c -// */ -// int acquired; -// struct agp_bridge_data *bridge; -// int enabled; -// unsigned long mode; -// struct list_head memory; -// int cant_use_aperture; -// unsigned long page_mask; -//}; - -#define DRM_SWITCH_POWER_ON 0 -#define DRM_SWITCH_POWER_OFF 1 -#define DRM_SWITCH_POWER_CHANGING 2 - -struct drm_i915_private; - -struct drm_vblank_crtc { - u32 last; -}; - -struct drm_device { -// int pci_device; - struct pci_dev *pdev; - struct mutex struct_mutex; - struct drm_driver *driver; - struct drm_i915_private *dev_private; -// struct drm_gem_mm *mm_private; -// enum drm_stat_type types[15]; -// unsigned long counters; - struct address_space *dev_mapping; - struct drm_agp_head *agp; - int irq_enabled; /* needed for i915_dma.c */ - spinlock_t count_lock; - struct drm_mode_config mode_config; - int open_count; - int vblank_disable_allowed; - u32 max_vblank_count; - struct drm_minor *primary; /* needed by i915_dma.c */ -// atomic_t object_count; -// atomic_t object_memory; -// atomic_t pin_count; -// atomic_t pin_memory; -// atomic_t gtt_count; -// atomic_t gtt_memory; -// uint32_t gtt_total; -// uint32_t invalidate_domains; -// uint32_t flush_domains; - int switch_power_state; - spinlock_t event_lock; - struct device *dev; /* i915_gem_stolen.c */ - struct drm_vblank_crtc *vblank; /* needed by intel_pm.c */ - spinlock_t vbl_lock; /* needed by intel_pm.c */ - struct timer_list vblank_disable_timer; -}; - -// -//struct drm_map_list { -// struct drm_hash_item hash; -// struct drm_local_map *map; -// struct drm_mm_node *file_offset_node; -//}; - - -/*************************** - ** drm/drm_vma_manager.h ** - ***************************/ - -struct drm_vma_offset_node { - int dummy; -}; - - -struct drm_gem_object { - -// /** Related drm device */ - struct drm_device *dev; -// -// /** File representing the shmem storage */ - struct file *filp; -// -// /** -// * Size of the object, in bytes. Immutable over the object's -// * lifetime. -// */ - size_t size; -// -// /** -// * Global name for this object, starts at 1. 0 means unnamed. -// * Access is covered by the object_name_lock in the related drm_device -// */ -// int name; -// -// /* Mapping info for this object */ -// struct drm_map_list map_list; -// -// /** -// * Memory domains. These monitor which caches contain read/write data -// * related to the object. When transitioning from one set of domains -// * to another, the driver is called to ensure that caches are suitably -// * flushed and invalidated -// */ - uint32_t read_domains; - uint32_t write_domain; -// -// /** -// * While validating an exec operation, the -// * new read/write domain values are computed here. -// * They will be transferred to the above values -// * at the point that any cache flushing occurs -// */ -// uint32_t pending_read_domains; -// uint32_t pending_write_domain; -// -// void *driver_private; - struct drm_vma_offset_node vma_node; - struct dma_buf_attachment *import_attach; -}; - -typedef struct drm_dma_handle { - void *vaddr; - size_t size; - dma_addr_t busaddr; /* needed by i915_drv.h */ -} drm_dma_handle_t; - -typedef struct drm_local_map { - size_t offset; /* Requested physical address (0 for SAREA)*/ - unsigned long size; /* Requested physical size (bytes) */ -// enum drm_map_type type; /* Type of memory to map */ -// enum drm_map_flags flags; /* Flags */ - void *handle; /* User-space: "Handle" to pass to mmap() */ - /* Kernel-space: kernel-virtual address */ - int mtrr; /* MTRR slot used */ -} drm_local_map_t; - -//struct drm_gem_mm { -// struct drm_mm offset_manager; -// struct drm_open_hash offset_hash; -//}; -// -struct drm_lock_data { - struct drm_hw_lock *hw_lock; /* for i915_dma.c */ - struct drm_file *file_priv; /* for i915_dma.c */ -}; -// -struct drm_master { - struct drm_lock_data lock; /* needed for i915_dma.c */ - void *driver_priv; /* needed for i915_dma.c */ - struct drm_minor *minor; -}; - -struct drm_file { - void *driver_priv; - struct drm_minor *minor; /* needed for drm_agpsupport.c */ - struct drm_master *master; /* needed for i915_dma.c */ - struct list_head fbs; - struct mutex fbs_lock; - unsigned stereo_allowed :1; - unsigned is_master :1; /* this file private is a master for a minor */ - int event_space; -}; -// - -#define DRM_MINOR_LEGACY 1 - -///* -// * needed for drm_agpsupport.c -// */ -struct drm_minor { - struct device *kdev; /* needed by i915_irq.c */ - struct drm_device *dev; - struct drm_master *master; /* needed for i915_dma.c */ - int index; /**< Minor device number */ - struct drm_mode_group mode_group; - int type; /**< Control or render */ -}; -// -///* -// * needed for drm_crtc_helper.h, included by i915_dma.c -// */ -//struct drm_encoder { void *helper_private; }; -//struct drm_mode_set { }; - - -#define DRM_MODE_OBJECT_CRTC 0xcccccccc -//#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 -//#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0 -#define DRM_MODE_OBJECT_MODE 0xdededede -//#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0 -//#define DRM_MODE_OBJECT_FB 0xfbfbfbfb -//#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb -//#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee -//#define DRM_MODE_OBJECT_BRIDGE 0xbdbdbdbd - -#define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \ - .name = nm, .status = 0, .type = (t), .clock = (c), \ - .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \ - .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \ - .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \ - .vscan = (vs), .flags = (f), \ - .base.type = DRM_MODE_OBJECT_MODE - -#define CRTC_STEREO_DOUBLE (1 << 1) /* adjust timings for stereo modes */ - - -struct drm_pending_vblank_event; - - -#include - - -/*************************** - ** drm/drm_crtc_helper.h ** - ***************************/ - -struct drm_pending_event { - struct drm_event *event; -// struct list_head link; - struct drm_file *file_priv; -// pid_t pid; /* pid of requester, no guarantee it's valid by the time -// we deliver the event, for tracing only */ - void (*destroy)(struct drm_pending_event *event); -}; - -struct drm_pending_vblank_event { - int dummy; - struct drm_pending_event base; -// int pipe; - struct drm_event_vblank event; -}; - - -/*************************** - ** drm/drm_crtc_helper.h ** - ***************************/ - -struct drm_cmdline_mode -{ - bool specified; - bool refresh_specified; - bool bpp_specified; - int xres, yres; - int bpp; - int refresh; - bool rb; - bool interlace; - bool cvt; - bool margins; - enum drm_connector_force force; -}; - - -/****************** - ** Misc helpers ** - ******************/ - -/* normally found in drm_os_linux.h */ -#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ -do { \ - DECLARE_WAITQUEUE(entry, current); \ - unsigned long end = jiffies + (timeout); \ - add_wait_queue(&(queue), &entry); \ - \ - for (;;) { \ - __set_current_state(TASK_INTERRUPTIBLE); \ - if (condition) \ - break; \ - if (time_after_eq(jiffies, end)) { \ - ret = -EBUSY; \ - break; \ - } \ - schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \ - if (signal_pending(current)) { \ - ret = -EINTR; \ - break; \ - } \ - } \ - __set_current_state(TASK_RUNNING); \ - remove_wait_queue(&(queue), &entry); \ -} while (0) - - -/* normally found in Linux drmP.h */ -#define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \ -do { \ - if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \ - _file_priv->master->lock.file_priv != _file_priv) { \ - DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ - __func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\ - _file_priv->master->lock.file_priv, _file_priv); \ - return -EINVAL; \ - } \ -} while (0) - - -static inline int drm_core_check_feature(struct drm_device *dev, int feature) { - return ((dev->driver->driver_features & feature) ? 1 : 0); } - -#if 0 - -static inline int drm_core_has_AGP(struct drm_device *dev) { - return drm_core_check_feature(dev, DRIVER_USE_AGP); } - -/* - * Functions normally provided by drm_bufs.c - */ -static inline resource_size_t -drm_get_resource_start(struct drm_device *dev, unsigned int rsc) { - return pci_resource_start(dev->pdev, rsc); } - -static inline resource_size_t -drm_get_resource_len(struct drm_device *dev, unsigned int rsc) { - return pci_resource_len(dev->pdev, rsc); } - -#endif - -static __inline__ bool drm_can_sleep(void) { return true; } - -extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); -extern int drm_noop(struct drm_device *dev, void *data, struct drm_file *file_priv); -extern int drm_irq_install(struct drm_device *dev); -extern int drm_irq_uninstall(struct drm_device *dev); -extern struct drm_local_map *drm_getsarea(struct drm_device *dev); -extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); -extern void drm_vblank_cleanup(struct drm_device *dev); -extern void drm_kms_helper_poll_disable(struct drm_device *dev); -extern void drm_kms_helper_poll_init(struct drm_device *dev); -extern void drm_mm_takedown(struct drm_mm *mm); -extern bool drm_helper_hpd_irq_event(struct drm_device *dev); -extern void drm_modeset_lock_all(struct drm_device *dev); -extern void drm_mode_config_reset(struct drm_device *dev); -extern void drm_modeset_unlock_all(struct drm_device *dev); -extern void drm_kms_helper_poll_enable(struct drm_device *dev); -extern int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent, struct drm_driver *driver); -extern void drm_put_dev(struct drm_device *dev); -extern void drm_gem_vm_open(struct vm_area_struct *vma); -extern void drm_gem_vm_close(struct vm_area_struct *vma); -extern int drm_open(struct inode *inode, struct file *filp); -extern int drm_release(struct inode *inode, struct file *filp); -extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); -extern long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); -extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); -extern ssize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset); -extern int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); -extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); -extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle); -extern int drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, uint32_t handle); -extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver); -extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver); -extern void drm_vblank_off(struct drm_device *dev, int crtc); -extern void drm_encoder_cleanup(struct drm_encoder *encoder); -extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); -extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc); -extern struct drm_connector *drm_select_eld(struct drm_encoder *encoder, struct drm_display_mode *mode); -extern int drm_av_sync_delay(struct drm_connector *connector, struct drm_display_mode *mode); -extern struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, struct drm_file *filp, u32 handle); -extern void drm_gem_object_unreference(struct drm_gem_object *obj); -extern void drm_gem_object_unreference_unlocked(struct drm_gem_object *obj); -extern uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth); -extern void drm_framebuffer_unregister_private(struct drm_framebuffer *fb); -extern void drm_framebuffer_unreference(struct drm_framebuffer *fb); -extern void drm_mode_set_name(struct drm_display_mode *mode); -extern void drm_crtc_cleanup(struct drm_crtc *crtc); -extern void drm_send_vblank_event(struct drm_device *dev, int crtc, struct drm_pending_vblank_event *e); -extern void drm_vblank_put(struct drm_device *dev, int crtc); -extern int drm_vblank_get(struct drm_device *dev, int crtc); -extern void drm_gem_object_reference(struct drm_gem_object *obj); -extern void drm_mode_debug_printmodeline(const struct drm_display_mode *mode); -extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src); -extern void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags); -extern int drm_object_property_set_value(struct drm_mode_object *obj, struct drm_property *property, uint64_t val); -extern void drm_calc_timestamping_constants(struct drm_crtc *crtc, const struct drm_display_mode *mode); -extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); -extern bool drm_encoder_crtc_ok(struct drm_encoder *encoder, struct drm_crtc *crtc); -extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, int gamma_size); -extern void drm_crtc_helper_add(struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs); -extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type); -extern void drm_helper_move_panel_connectors_to_head(struct drm_device *); -extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb); -extern int drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep); -extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb, struct drm_mode_fb_cmd2 *mode_cmd); -extern int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_framebuffer_funcs *funcs); -extern void drm_mode_config_init(struct drm_device *dev); -extern void drm_kms_helper_poll_fini(struct drm_device *dev); -extern void drm_sysfs_connector_remove(struct drm_connector *connector); -extern void drm_mode_config_cleanup(struct drm_device *dev); -extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, struct drm_encoder *encoder); -extern bool drm_dp_enhanced_frame_cap(const u8 dpcd[DP_RECEIVER_CAP_SIZE]); -extern int drm_encoder_init(struct drm_device *dev, struct drm_encoder *encoder, const struct drm_encoder_funcs *funcs, int encoder_type); -extern int drm_dp_bw_code_to_link_rate(u8 link_bw); -extern u8 drm_dp_max_lane_count(const u8 dpcd[DP_RECEIVER_CAP_SIZE]); -extern u8 drm_match_cea_mode(const struct drm_display_mode *to_match); -extern bool drm_probe_ddc(struct i2c_adapter *adapter); -extern struct edid *drm_edid_duplicate(const struct edid *edid); -extern struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter); -extern bool drm_detect_monitor_audio(struct edid *edid); -extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, const struct drm_display_mode *mode); -extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); -extern void drm_connector_cleanup(struct drm_connector *connector); -extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); -extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); -extern void drm_object_attach_property(struct drm_mode_object *obj, struct drm_property *property, uint64_t init_val); -extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); -extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid); -extern void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid); -extern int drm_connector_init(struct drm_device *dev, struct drm_connector *connector, const struct drm_connector_funcs *funcs, int connector_type); -extern int drm_sysfs_connector_add(struct drm_connector *connector); -extern void drm_clflush_virt_range(char *addr, unsigned long length); -extern void drm_vma_node_unmap(struct drm_vma_offset_node *node, struct address_space *file_mapping); -extern bool drm_vma_node_has_offset(struct drm_vma_offset_node *node); -extern int drm_gem_create_mmap_offset(struct drm_gem_object *obj); -extern void drm_gem_free_mmap_offset(struct drm_gem_object *obj); -extern __u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node); -extern bool drm_mm_node_allocated(struct drm_mm_node *node); -extern void drm_mm_remove_node(struct drm_mm_node *node); -extern void drm_clflush_sg(struct sg_table *st); -extern int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size); -extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); -extern void drm_gem_object_release(struct drm_gem_object *obj); -extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, size_t align); -extern void drm_clflush_pages(struct page *pages[], unsigned long num_pages); -extern void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode); -extern const char *drm_get_connector_name(const struct drm_connector *connector); -extern const char *drm_get_encoder_name(const struct drm_encoder *encoder); -extern const char *drm_get_format_name(uint32_t format); -extern void drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size); -extern int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node); -extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, int *max_error, struct timeval *vblank_time, unsigned flags, const struct drm_crtc *refcrtc, const struct drm_display_mode *mode); -extern const char *drm_get_connector_status_name(enum drm_connector_status status); -extern void drm_kms_helper_hotplug_event(struct drm_device *dev); -extern bool drm_handle_vblank(struct drm_device *dev, int crtc); -extern void drm_gem_private_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size); -extern void drm_sysfs_hotplug_event(struct drm_device *dev); -extern bool drm_mode_parse_command_line_for_connector(const char *mode_option, struct drm_connector *connector, struct drm_cmdline_mode *mode); -extern struct drm_display_mode * drm_mode_create_from_cmdline_mode(struct drm_device *dev, struct drm_cmdline_mode *cmd); - -#ifdef __cplusplus -} -#endif /* extern "C" */ - -#endif /* _DRMP_H_ */ diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/include/i915_trace.h b/repos/dde_linux/src/drivers/framebuffer/intel/include/i915_trace.h deleted file mode 100644 index 8e1a48a237..0000000000 --- a/repos/dde_linux/src/drivers/framebuffer/intel/include/i915_trace.h +++ /dev/null @@ -1 +0,0 @@ -#include 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 9c1789cb96..b29e3cc5b6 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 @@ -29,7 +29,11 @@ enum { HZ = 100UL }; #include #include +static inline void atomic_or(int i, atomic_t *v) { + v->counter = v->counter | i; } + #define smp_mb__before_atomic_inc() barrier() +#define smp_mb__before_atomic() barrier() void atomic_set_mask(unsigned int mask, atomic_t *v); @@ -39,6 +43,9 @@ void atomic_set_mask(unsigned int mask, atomic_t *v); typedef unsigned long kernel_ulong_t; typedef unsigned int u_int; +#define DECLARE_BITMAP(name,bits) \ + unsigned long name[BITS_TO_LONGS(bits)] + /************************ ** uapi/linux/types.h ** @@ -60,8 +67,8 @@ typedef __u64 __be64; enum { DUMP_PREFIX_NONE, }; void print_hex_dump(const char *level, const char *prefix_str, - int prefix_type, int rowsize, int groupsize, - const void *buf, size_t len, bool ascii); + int prefix_type, int rowsize, int groupsize, + const void *buf, size_t len, bool ascii); #define printk_once(fmt, ...) ({}) @@ -100,9 +107,6 @@ enum { struct page { -// unsigned long flags; -// int pfmemalloc; -// int mapping; atomic_t _count; void *addr; dma_addr_t paddr; @@ -115,18 +119,29 @@ dma_addr_t page_to_phys(struct page *page); #include -unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size); +extern unsigned long find_next_bit(const unsigned long *addr, unsigned long + size, unsigned long offset); +extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned + long size, unsigned long offset); +#define find_first_bit(addr, size) find_next_bit((addr), (size), 0) +#define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) #define __const_hweight8(w) \ - ( (!!((w) & (1ULL << 0))) + \ - (!!((w) & (1ULL << 1))) + \ - (!!((w) & (1ULL << 2))) + \ - (!!((w) & (1ULL << 3))) + \ - (!!((w) & (1ULL << 4))) + \ - (!!((w) & (1ULL << 5))) + \ - (!!((w) & (1ULL << 6))) + \ - (!!((w) & (1ULL << 7))) ) + ( (!!((w) & (1ULL << 0))) + \ + (!!((w) & (1ULL << 1))) + \ + (!!((w) & (1ULL << 2))) + \ + (!!((w) & (1ULL << 3))) + \ + (!!((w) & (1ULL << 4))) + \ + (!!((w) & (1ULL << 5))) + \ + (!!((w) & (1ULL << 6))) + \ + (!!((w) & (1ULL << 7))) ) +#define hweight8(w) __const_hweight8(w) #define hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8 )) +#define hweight32(w) (hweight16(w) + hweight16((w) >> 16)) +#define hweight64(w) (hweight32(w) + hweight32((w) >> 32)) + +#define GENMASK(h, l) \ + (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) #include @@ -143,52 +158,86 @@ void *memchr_inv(const void *s, int c, size_t n); #include #include +#define SIZE_MAX (~(size_t)0) +#define U64_MAX ((u64)~0ULL) + extern long simple_strtol(const char *,char **,unsigned int); typedef __kernel_time_t time_t; extern int oops_in_progress; -#define pr_debug(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) -#define pr_info(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) -#define pr_err(fmt, ...) printk(KERN_ERR fmt, ##__VA_ARGS__) -#define pr_warn(fmt, ...) printk(KERN_ERR fmt, ##__VA_ARGS__) -#define pr_info_once(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) +#define pr_debug(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) +#define pr_info(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) +#define pr_err(fmt, ...) printk(KERN_ERR fmt, ##__VA_ARGS__) +#define pr_warn(fmt, ...) printk(KERN_ERR fmt, ##__VA_ARGS__) +#define pr_info_once(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) +#define pr_notice(fmt, ...) printk(KERN_NOTICE fmt, ##__VA_ARGS__) + int sprintf(char *buf, const char *fmt, ...); int snprintf(char *buf, size_t size, const char *fmt, ...); int sscanf(const char *, const char *, ...); +int vscnprintf(char *buf, size_t size, const char *fmt, va_list args); + enum { SPRINTF_STR_LEN = 64 }; #define kasprintf(gfp, fmt, ...) ({ \ - void *buf = kmalloc(SPRINTF_STR_LEN, 0); \ - sprintf(buf, fmt, __VA_ARGS__); \ - buf; \ -}) + void *buf = kmalloc(SPRINTF_STR_LEN, 0); \ + sprintf(buf, fmt, __VA_ARGS__); \ + buf; \ + }) #define DIV_ROUND_UP_ULL(ll,d) \ ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; }) -#define mult_frac(x, numer, denom) ({ \ - typeof(x) quot = (x) / (denom); \ - typeof(x) rem = (x) % (denom); \ - (quot * (numer)) + ((rem * (numer)) / (denom)); \ - }) +#define DIV_ROUND_CLOSEST_ULL(x, divisor)( \ + { \ + typeof(divisor) __d = divisor; \ + unsigned long long _tmp = (x) + (__d) / 2; \ + do_div(_tmp, __d); \ + _tmp; \ + } \ + ) + +#define mult_frac(x, numer, denom) ({ \ + typeof(x) quot = (x) / (denom); \ + typeof(x) rem = (x) % (denom); \ + (quot * (numer)) + ((rem * (numer)) / (denom)); \ + }) extern int panic_timeout; extern struct atomic_notifier_head panic_notifier_list; +#define min(x, y) ({ \ + typeof(x) _min1 = (x); \ + typeof(y) _min2 = (y); \ + (void) (&_min1 == &_min2); \ + _min1 < _min2 ? _min1 : _min2; }) + +#define max(x, y) ({ \ + typeof(x) _max1 = (x); \ + typeof(y) _max2 = (y); \ + (void) (&_max1 == &_max2); \ + _max1 > _max2 ? _max1 : _max2; }) + +#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) + /* linux/i2c.h */ #define __deprecated +#define rounddown(x, y) ( \ + { \ + typeof(x) __x = (x); \ + __x - (__x % (y)); \ + } \ + ) /************************ ** linux/page-flags.h ** ************************/ -//void SetPageDirty(struct page *page); - /* needed by agp/generic.c */ void SetPageReserved(struct page *page); void ClearPageReserved(struct page *page); @@ -229,6 +278,9 @@ bool in_atomic(); /* needed bu i2c-core.c */ bool irqs_disabled(); +void local_irq_enable(); +void local_irq_disable(); + /********************* ** linux/jiffies.h ** @@ -240,9 +292,11 @@ bool irqs_disabled(); #define time_before_eq(a,b) time_after_eq(b,a) #define time_in_range(a,b,c) \ - (time_after_eq(a,b) && \ + (time_after_eq(a,b) && \ time_before_eq(a,c)) +extern u64 nsecs_to_jiffies64(u64 n); +unsigned int jiffies_to_usecs(const unsigned long j); #include @@ -257,6 +311,8 @@ 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) + /********************* ** linux/rtmutex.h ** @@ -269,6 +325,23 @@ void mutex_lock_nest_lock(struct mutex *, struct mutex *); #define rt_mutex_unlock(m) mutex_unlock(m) +/********************* + ** linux/ww_mutex.h ** + *********************/ + +struct ww_acquire_ctx { unsigned dummy; }; +struct ww_class { int dummy; }; +struct ww_mutex { + bool locked; + struct ww_acquire_ctx *ctx; +}; + +#define DEFINE_WW_CLASS(classname) \ + struct ww_class classname; +#define DEFINE_WW_MUTEX(mutexname, ww_class) \ + struct ww_mutex mutexname; + + /****************** ** linux/time.h ** ******************/ @@ -289,6 +362,8 @@ s64 timespec_to_ns(const struct timespec *ts); ** linux/timer.h ** *******************/ +typedef int clockid_t; + #include #define del_singleshot_timer_sync(t) del_timer_sync(t) @@ -308,17 +383,22 @@ 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); + /******************* ** linux/sched.h ** *******************/ +enum { TASK_COMM_LEN = 16 }; + enum { TASK_RUNNING, TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE }; struct mm_struct; struct task_struct { struct mm_struct *mm; char comm[16]; /* needed by agp/generic.c, only for debug output */ + unsigned pid; }; signed long schedule_timeout(signed long timeout); @@ -330,20 +410,36 @@ void io_schedule(void); /* 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() /* normally defined in asm/current.h, included by sched.h */ extern struct task_struct *current; void yield(void); +extern signed long schedule_timeout_uninterruptible(signed long timeout); + +extern u64 local_clock(void); +extern bool need_resched(void); +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() + /************************ ** linux/completion.h ** ************************/ -struct completion { unsigned done; }; +struct completion { + unsigned done; + void * task; +}; -void __wait_completion(struct completion *work); +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 *); @@ -354,6 +450,7 @@ void wait_for_completion(struct completion *); *********************/ void cpu_relax(void); /* i915_dma.c */ +#define cpu_relax_lowlatency() cpu_relax() /******************* @@ -380,7 +477,8 @@ 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; }; @@ -392,6 +490,11 @@ 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 ** @@ -409,17 +512,10 @@ void sg_mark_end(struct scatterlist *sg); dma_addr_t sg_page_iter_dma_address(struct sg_page_iter *piter); - #include enum kobject_action { -// KOBJ_ADD, -// KOBJ_REMOVE, KOBJ_CHANGE, -// KOBJ_MOVE, -// KOBJ_ONLINE, -// KOBJ_OFFLINE, -// KOBJ_MAX }; int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *envp[]); @@ -441,11 +537,16 @@ int fault_in_multipages_readable(const char __user *uaddr, int size); #define page_cache_release(page) put_page(page) -struct address_space; +struct address_space { + unsigned long flags; + struct page * my_page; +}; gfp_t mapping_gfp_mask(struct address_space * mapping); void mapping_set_gfp_mask(struct address_space *m, gfp_t mask); +gfp_t mapping_gfp_constraint(struct address_space *mapping, gfp_t gfp_mask); + /****************** ** linux/swap.h ** @@ -454,12 +555,26 @@ void mapping_set_gfp_mask(struct address_space *m, gfp_t mask); void mark_page_accessed(struct page *); +/*************************** + ** linux/pgtable_types.h ** + ***************************/ + +typedef unsigned long pgprotval_t; +struct pgprot { pgprotval_t pgprot; }; +typedef struct pgprot pgprot_t; + +extern pgprot_t pgprot_writecombine(pgprot_t prot); + + /********************** ** linux/mm_types.h ** **********************/ 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; }; @@ -491,8 +606,6 @@ void unregister_shrinker(struct shrinker *); ** linux/mm.h ** ****************/ -//extern unsigned long totalram_pages; -// enum { VM_FAULT_OOM = 0x001, VM_FAULT_SIGBUS = 0x002, @@ -500,10 +613,10 @@ enum { }; enum { FAULT_FLAG_WRITE = 0x1 }; -// + enum { DEFAULT_SEEKS = 2 }; -// -//#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) + +#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) #define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) @@ -511,39 +624,14 @@ struct vm_fault { void *virtual_address; unsigned int flags; }; -// -//struct file; -struct address_space; -// -//unsigned long do_mmap(struct file *file, unsigned long addr, -// unsigned long len, unsigned long prot, -// unsigned long flag, unsigned long offset); -// -//void unmap_mapping_range(struct address_space *mapping, -// loff_t const holebegin, loff_t const holelen, -// int even_cows); -// + int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr, - unsigned long pfn); + unsigned long pfn); int set_page_dirty(struct page *page); void get_page(struct page *page); void put_page(struct page *page); -// -//int get_user_pages(void *tsk, struct mm_struct *mm, -// unsigned long start, int nr_pages, int write, int force, -// struct page **pages, struct vm_area_struct **vmas); -// -//void *page_address(struct page *page); -// -//struct shrinker { -// int (*shrink)(int nr_to_scan, gfp_t gfp_mask); -// int seeks; -//}; -// -//void register_shrinker(struct shrinker *); -//void unregister_shrinker(struct shrinker *); extern unsigned long totalram_pages; @@ -563,12 +651,19 @@ extern unsigned long vm_mmap(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); -static inline void *page_address(struct page *page) { return page->addr; }; +static inline void *page_address(struct page *page) { return page ? page->addr : 0; }; int is_vmalloc_addr(const void *x); void free_pages(unsigned long addr, unsigned int order); +extern void kvfree(const void *addr); + +extern struct page * nth_page(struct page * page, int n); + +extern struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr); + +pgprot_t vm_get_page_prot(unsigned long vm_flags); #include @@ -585,17 +680,11 @@ void wbinvd_on_all_cpus(); ** linux/vmalloc.h ** *********************/ -//enum { VM_IOREMAP = 0x1 }; - /* needed by agp/generic.c */ void *vmalloc(unsigned long size); void *vzalloc(unsigned long size); void vfree(const void *addr); -///* needed by drm_memory.c */ -//void vunmap(const void *addr); -//void *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot); - /************************ ** uapi/linux/const.h ** @@ -638,10 +727,6 @@ int set_pages_uc(struct page *page, int numpages); enum { SLAB_HWCACHE_ALIGN = 0x00002000ul, -// SLAB_CACHE_DMA = 0x00004000ul, -// SLAB_PANIC = 0x00040000ul, -// -// SLAB_LX_DMA = 0x80000000ul, }; void *kzalloc(size_t size, gfp_t flags); @@ -649,6 +734,7 @@ void kfree(const void *); void *kcalloc(size_t n, size_t size, gfp_t flags); void *kmalloc(size_t size, gfp_t flags); void *krealloc(const void *, size_t, gfp_t); +void *kmalloc_array(size_t n, size_t size, gfp_t flags); struct kmem_cache; struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, unsigned long, void (*)(void *)); @@ -716,6 +802,14 @@ void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL) +extern dma_addr_t dma_map_page(struct device *dev, struct page *page, + unsigned long offset, size_t size, + enum dma_data_direction direction); +extern void dma_unmap_page(struct device *dev, dma_addr_t dma_address, + size_t size, enum dma_data_direction direction); + +extern int dma_mapping_error(struct device *dev, dma_addr_t dma_addr); + /********************* ** linux/dma-buf.h ** @@ -755,13 +849,24 @@ int device_init_wakeup(struct device *dev, bool val); struct attribute { int dummy; }; struct attribute_group { -// const char *name; -// umode_t (*is_visible)(struct kobject *, -// struct attribute *, int); struct attribute **attrs; -// struct bin_attribute **bin_attrs; }; +#define __ATTRIBUTE_GROUPS(_name) \ + static const struct attribute_group *_name##_groups[] = { \ + &_name##_group, \ + NULL, \ + } + +#define ATTRIBUTE_GROUPS(_name) \ + static const struct attribute_group _name##_group = { \ + .attrs = _name##_attrs, \ + }; \ +__ATTRIBUTE_GROUPS(_name) + +int sysfs_create_link(struct kobject *kobj, struct kobject *target, const char *name); +void sysfs_remove_link(struct kobject *kobj, const char *name); + /**************** ** linux/pm.h ** @@ -784,6 +889,14 @@ enum rpm_status { }; +/*********************** + ** linux/pm_domain.h ** + ***********************/ + +static inline int dev_pm_domain_attach(struct device *dev, bool power_on) { + return -ENODEV; } +static inline void dev_pm_domain_detach(struct device *dev, bool power_off) {} + /******************** ** linux/device.h ** ********************/ @@ -813,7 +926,12 @@ struct device_type void (*release)(struct device *dev); }; -struct dev_archdata { int dummy; }; +struct dev_archdata +{ + struct dma_map_ops *dma_ops; +}; + +struct fwnode_handle { int dummy; }; struct device { struct device *parent; @@ -828,14 +946,11 @@ struct device { struct dev_archdata archdata; struct bus_type *bus; struct device_node *of_node; + struct fwnode_handle *fwnode; }; struct device_attribute { struct attribute attr; -// ssize_t (*show)(struct device *dev, struct device_attribute *attr, -// char *buf); -// ssize_t (*store)(struct device *dev, struct device_attribute *attr, -// const char *buf, size_t count); }; #define DEVICE_ATTR(_name, _mode, _show, _store) \ @@ -856,18 +971,16 @@ struct device_attribute { #define dev_dbg(dev, format, arg...) \ lx_printf("dev_dbg: " format, ## arg) +#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 char *mod_name; -// const struct of_device_id *of_match_table; -// const struct acpi_device_id *acpi_match_table; -// int (*probe) (struct device *dev); -// int (*remove) (struct device *dev); -// const struct dev_pm_ops *pm; }; @@ -909,6 +1022,7 @@ struct acpi_dev_node { struct acpi_device *companion; }; #define writel(value, addr) (*(volatile uint32_t *)(addr) = (value)) #define readl(addr) (*(volatile uint32_t *)(addr)) +#define writel_relaxed(v, a) writel(v, a) #define iowrite32(v, addr) writel((v), (addr)) #define ioread32(addr) readl(addr) @@ -1097,6 +1211,9 @@ dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page, unsigned long int pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr); +int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction); +void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction); + /***************************** ** asm-generic/pci_iomap.h ** @@ -1112,6 +1229,20 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *p); #include +/******************** + ** linux/of_irq.h ** + ********************/ + +extern int of_irq_get(struct device_node *dev, int index); +extern int of_irq_get_byname(struct device_node *dev, const char *name); + + +/********************* + ** linux/hardirq.h ** + *********************/ + +extern void synchronize_irq(unsigned int irq); + /************************ ** linux/capability.h ** @@ -1145,8 +1276,8 @@ enum { }; int vga_client_register(struct pci_dev *pdev, void *cookie, - void (*irq_set_state)(void *cookie, bool state), - unsigned int (*set_vga_decode)(void *cookie, bool state)); + void (*irq_set_state)(void *cookie, bool state), + unsigned int (*set_vga_decode)(void *cookie, bool state)); int vga_get_uninterruptible(struct pci_dev *pdev, unsigned int rsrc); @@ -1222,31 +1353,25 @@ void acpi_video_unregister(void); #include -/********************* - ** linux/console.h ** - *********************/ - -void console_lock(void); -void console_unlock(void); -int console_trylock(void); - - - - /**************** ** linux/fs.h ** ****************/ -struct file; -struct poll_table_struct; -struct inode; -struct inode_operations { void (*truncate) (struct inode *); }; - struct inode { const struct inode_operations *i_op; struct address_space *i_mapping; }; +struct file +{ + atomic_long_t f_count; + struct inode *f_inode; +}; + +struct poll_table_struct; +struct inode; +struct inode_operations { void (*truncate) (struct inode *); }; + /* i915_drv.c */ struct file_operations { struct module *owner; @@ -1267,6 +1392,9 @@ loff_t noop_llseek(struct file *file, loff_t offset, int whence); struct inode *file_inode(struct file *f); +unsigned long invalidate_mapping_pages(struct address_space *mapping, + pgoff_t start, pgoff_t end); + /********************** ** linux/shmem_fs.h ** @@ -1275,9 +1403,7 @@ struct inode *file_inode(struct file *f); 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_gfp(struct address_space *mapping, -// pgoff_t index, gfp_t gfp_mask); + pgoff_t index, gfp_t gfp_mask); extern struct page *shmem_read_mapping_page( struct address_space *mapping, pgoff_t index); @@ -1287,32 +1413,51 @@ extern struct page *shmem_read_mapping_page( struct address_space *mapping, pgof 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; +} /***************************** ** linux/mod_devicetable.h ** *****************************/ enum dmi_field { -// DMI_NONE, -// DMI_BIOS_VENDOR, -// DMI_BIOS_VERSION, -// DMI_BIOS_DATE, DMI_SYS_VENDOR, DMI_PRODUCT_NAME, DMI_PRODUCT_VERSION, -// DMI_PRODUCT_SERIAL, -// DMI_PRODUCT_UUID, DMI_BOARD_VENDOR, DMI_BOARD_NAME, -// DMI_BOARD_VERSION, -// DMI_BOARD_SERIAL, -// DMI_BOARD_ASSET_TAG, -// DMI_CHASSIS_VENDOR, -// DMI_CHASSIS_TYPE, -// DMI_CHASSIS_VERSION, -// DMI_CHASSIS_SERIAL, -// DMI_CHASSIS_ASSET_TAG, -// DMI_STRING_MAX, }; struct dmi_strmatch { @@ -1356,16 +1501,38 @@ extern struct boot_cpu_data boot_cpu_data; ** linux/backlight.h ** ***********************/ -/* intel_panel.c */ +enum backlight_type { + BACKLIGHT_RAW = 1, + BACKLIGHT_PLATFORM, + BACKLIGHT_FIRMWARE, + BACKLIGHT_TYPE_MAX, +}; struct backlight_properties { int brightness; + int max_brightness; + int power; + enum backlight_type type; }; struct backlight_device { struct backlight_properties props; }; +extern void* bl_get_data(struct backlight_device *bl_dev); + +struct fb_info; +struct backlight_ops { + unsigned int options; + int (*update_status)(struct backlight_device *); + int (*get_brightness)(struct backlight_device *); + int (*check_fb)(struct backlight_device *, struct fb_info *); +}; + +extern struct backlight_device *backlight_device_register(const char *name, + struct device *dev, void *devdata, const struct backlight_ops *ops, + const struct backlight_properties *props); +extern void backlight_device_unregister(struct backlight_device *bd); /***************** ** linux/i2c.h ** @@ -1374,8 +1541,7 @@ struct backlight_device { struct i2c_adapter; struct i2c_msg; -#include - +enum i2c_slave_event { DUMMY }; /**************** @@ -1410,6 +1576,7 @@ int acpi_device_modalias(struct device *, char *, int); #define ACPI_COMPANION_SET(dev, adev) do { } while (0) const char *acpi_dev_name(struct acpi_device *adev); +int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index); /****************** @@ -1471,6 +1638,14 @@ extern unsigned int tsc_khz; void ips_link_to_i915_driver(void); +/************************************** + ** drivers/gpu/drm/i915/intel_drv.h ** + **************************************/ + +struct drm_device; +bool intel_has_pending_fb_unpin(struct drm_device *dev); + + /****************** ** linux/kgdb.h ** ******************/ @@ -1483,12 +1658,12 @@ void ips_link_to_i915_driver(void); *************************/ #define do_div(n,base) ({ \ - unsigned long __base = (base); \ - unsigned long __rem; \ - __rem = ((uint64_t)(n)) % __base; \ - (n) = ((uint64_t)(n)) / __base; \ - __rem; \ -}) + unsigned long __base = (base); \ + unsigned long __rem; \ + __rem = ((uint64_t)(n)) % __base; \ + (n) = ((uint64_t)(n)) / __base; \ + __rem; \ + }) /************************************** @@ -1511,72 +1686,8 @@ enum { FBINFO_DEFAULT = 0, }; -struct fb_cmap_user { - __u32 start; - __u32 len; - __u16 __user *red; - __u16 __user *green; - __u16 __user *blue; - __u16 __user *transp; -}; - -struct aperture { - resource_size_t base; - resource_size_t size; -}; - -struct apertures_struct { - unsigned int count; - struct aperture ranges[0]; -}; - -struct fb_info { - int node; - int flags; - struct fb_var_screeninfo var; /* Current var */ - struct fb_fix_screeninfo fix; /* Current fix */ - struct fb_cmap cmap; - struct fb_ops *fbops; - char __iomem *screen_base; - unsigned long screen_size; - void *pseudo_palette; - void * par; - struct apertures_struct *apertures; - bool skip_vt_switch; -}; - -struct fb_ops { - struct module *owner; - int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); - int (*fb_set_par)(struct fb_info *info); - int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, struct fb_info *info); - int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info); - int (*fb_blank)(int blank, struct fb_info *info); - int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info); - void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect); - void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region); - void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image); - int (*fb_debug_enter)(struct fb_info *info); - int (*fb_debug_leave)(struct fb_info *info); -}; - extern int fb_get_options(const char *name, char **option); -extern int register_framebuffer(struct fb_info *fb_info); -extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect); -extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area); -extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image); -extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev); -extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp); -extern struct apertures_struct *alloc_apertures(unsigned int max_num); -extern int unregister_framebuffer(struct fb_info *fb_info); -extern void fb_dealloc_cmap(struct fb_cmap *cmap); -extern void framebuffer_release(struct fb_info *info); -extern void fb_set_suspend(struct fb_info *info, int state); -extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to); -extern const struct fb_cmap *fb_default_cmap(int len); -extern int lock_fb_info(struct fb_info *info); -extern void unlock_fb_info(struct fb_info *info); + /*************************** ** linux vgaswitcheroo.h ** @@ -1595,16 +1706,314 @@ int register_sysrq_key(int key, struct sysrq_key_op *op); int unregister_sysrq_key(int key, struct sysrq_key_op *op); +/******************* + ** linux/sysrq.h ** + *******************/ + +struct fence; +void fence_put(struct fence *fence); +signed long fence_wait(struct fence *fence, bool intr); + + +/**************************** + ** drm/drm_modeset_lock.h ** + ****************************/ + +#include