mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-01 00:45:29 +00:00
parent
7813fca946
commit
c0560ab0cb
@ -2,17 +2,23 @@
|
||||
# Build
|
||||
#
|
||||
|
||||
set use_gpu 1
|
||||
set use_top 0
|
||||
|
||||
set build_components {
|
||||
core init timer
|
||||
drivers/framebuffer/intel
|
||||
drivers/framebuffer/intel/pc
|
||||
test/framebuffer
|
||||
server/report_rom
|
||||
server/vfs
|
||||
server/fs_rom
|
||||
app/top
|
||||
lib/vfs/import
|
||||
}
|
||||
|
||||
|
||||
append_if $use_gpu build_components { drivers/gpu/intel }
|
||||
append_if $use_top build_components { app/top }
|
||||
|
||||
source ${genode_dir}/repos/base/run/platform_drv.inc
|
||||
append_platform_drv_build_components
|
||||
|
||||
@ -81,13 +87,15 @@ append config {
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</default-route>
|
||||
<default caps="100"/>
|
||||
<report init_ram="yes" child_ram="yes" delay_ms="10000"/>
|
||||
<report init_ram="yes" child_ram="yes" delay_ms="10000"/>}
|
||||
|
||||
append_if $use_top config {
|
||||
<start name="top">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<config period_ms="40000"/>
|
||||
</start>
|
||||
</start>}
|
||||
|
||||
append config {
|
||||
<start name="report_rom" priority="-1">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<provides> <service name="Report" /> <service name="ROM" /> </provides>
|
||||
@ -124,12 +132,42 @@ append config {
|
||||
<service name="File_system"> <child name="config_fs" /> </service>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</route>
|
||||
</start>
|
||||
</start>}
|
||||
|
||||
<start name="intel_fb_drv" caps="1000">
|
||||
<binary name="legacy_intel_fb_drv"/>
|
||||
<resource name="RAM" quantum="60M"/>
|
||||
append_if $use_gpu config {
|
||||
<start name="intel_gpu_drv" caps="2000">
|
||||
<resource name="RAM" quantum="40M"/>
|
||||
<provides>
|
||||
<service name="Gpu"/>
|
||||
<service name="Platform"/>
|
||||
</provides>
|
||||
<config>
|
||||
<device vendor="0x8086" device="0x1606" generation="8" platform="broadwell" description="HD Graphics (BDW GT1 ULT)"/>
|
||||
<device vendor="0x8086" device="0x1616" generation="8" platform="broadwell" description="HD Graphics 5500 (BDW GT2 ULT)"/>
|
||||
<device vendor="0x8086" device="0x1622" generation="8" platform="broadwell" description="Iris Pro Graphics 6200 (BDW GT3e)"/>
|
||||
<device vendor="0x8086" device="0x1916" generation="9" platform="skylake" description="HD Graphics 520 (Skylake, Gen9)"/>
|
||||
<device vendor="0x8086" device="0x191b" generation="9" platform="skylake" description="HD Graphics 530 (Skylake, Gen9)"/>
|
||||
<device vendor="0x8086" device="0x5916" generation="9" platform="kabylake" description="HD Graphics 620 (Kaby Lake, Gen9p5)"/>
|
||||
<device vendor="0x8086" device="0x5917" generation="9" platform="kabylake" description="UHD Graphics 620 (Kaby Lake, Gen9p5)"/>
|
||||
<device vendor="0x8086" device="0x591b" generation="9" platform="kabylake" description="HD Graphics 630 (Kaby Lake, Gen9p5)"/>
|
||||
<device vendor="0x8086" device="0x3ea0" generation="9" platform="whiskeylake" description="UHD Graphics 620 (Whiskey Lake, Gen9p5)"/>
|
||||
</config>
|
||||
<route>
|
||||
<service name="Platform"> <parent/> </service>
|
||||
<any-service> <parent /> <any-child/> </any-service>
|
||||
</route>
|
||||
</start>}
|
||||
|
||||
append config {
|
||||
<start name="intel_fb_drv" caps="1000">
|
||||
<binary name="pc_intel_fb_drv"/>
|
||||
<resource name="RAM" quantum="60M"/>
|
||||
<route>}
|
||||
|
||||
append_if $use_gpu config {
|
||||
<service name="Platform"> <child name="intel_gpu_drv"/> </service>}
|
||||
|
||||
append config {
|
||||
<service name="ROM" label="config">
|
||||
<child name="config_rom" label="fb_drv.config"/> </service>
|
||||
<service name="Report"> <child name="report_rom"/> </service>
|
||||
@ -166,11 +204,13 @@ install_config $config
|
||||
|
||||
# generic modules
|
||||
set boot_modules {
|
||||
core ld.lib.so init timer legacy_intel_fb_drv intel_fb_controller
|
||||
core ld.lib.so init timer pc_intel_fb_drv intel_fb_controller
|
||||
test-framebuffer report_rom fs_rom vfs vfs.lib.so vfs_import.lib.so
|
||||
top
|
||||
}
|
||||
|
||||
append_if $use_gpu boot_modules { intel_gpu_drv }
|
||||
append_if $use_top boot_modules { top }
|
||||
|
||||
append_platform_drv_boot_modules
|
||||
|
||||
build_boot_image $boot_modules
|
||||
|
@ -5,7 +5,7 @@ _/src/pc_usb_host_drv
|
||||
_/src/usb_hid_drv
|
||||
_/src/usb_block_drv
|
||||
_/src/vesa_drv
|
||||
_/src/legacy_intel_fb_drv
|
||||
_/src/pc_intel_fb_drv
|
||||
_/src/intel_gpu_drv
|
||||
_/src/boot_fb_drv
|
||||
_/src/ahci_drv
|
||||
|
@ -1,5 +1,5 @@
|
||||
<config width="1024" height="768" buffered="yes">
|
||||
<config width="1024" height="768">
|
||||
<report connectors="yes"/>
|
||||
<connector name="eDP-36" width="1920" height="1080" enabled="true"/>
|
||||
<!-- <connector name="HDMI-A-56" width="1024" height="768" hz="75" enabled="true"/> -->
|
||||
<!-- <connector name="eDP-1" width="1920" height="1080" enabled="true" brightness="75"/> -->
|
||||
<!-- <connector name="HDMI-A-1" width="1024" height="768" hz="75" enabled="true"/> -->
|
||||
</config>
|
||||
|
@ -164,7 +164,7 @@ struct Driver_manager::Intel_fb_driver : Device_driver
|
||||
intel_gpu_driver.generate_start_node(xml);
|
||||
|
||||
xml.node("start", [&] () {
|
||||
_gen_common_start_node_content(xml, "intel_fb_drv", "legacy_intel_fb_drv",
|
||||
_gen_common_start_node_content(xml, "intel_fb_drv", "pc_intel_fb_drv",
|
||||
Ram_quota{42*1024*1024}, Cap_quota{800},
|
||||
Priority{0}, version);
|
||||
xml.node("heartbeat", [&] () { });
|
||||
|
13
repos/pc/recipes/src/pc_intel_fb_drv/content.mk
Normal file
13
repos/pc/recipes/src/pc_intel_fb_drv/content.mk
Normal file
@ -0,0 +1,13 @@
|
||||
MIRROR_FROM_REP_DIR := src/drivers/framebuffer/intel/pc \
|
||||
src/lib/pc/lx_emul
|
||||
|
||||
content: $(MIRROR_FROM_REP_DIR)
|
||||
|
||||
PORT_DIR := $(call port_dir,$(GENODE_DIR)/repos/dde_linux/ports/linux)
|
||||
|
||||
$(MIRROR_FROM_REP_DIR):
|
||||
$(mirror_from_rep_dir)
|
||||
|
||||
content: LICENSE
|
||||
LICENSE:
|
||||
cp $(PORT_DIR)/src/linux/COPYING $@
|
1
repos/pc/recipes/src/pc_intel_fb_drv/hash
Normal file
1
repos/pc/recipes/src/pc_intel_fb_drv/hash
Normal file
@ -0,0 +1 @@
|
||||
2022-03-18-b f8a33eb3aa079a798959ed3b6f5920239729933c
|
9
repos/pc/recipes/src/pc_intel_fb_drv/used_apis
Normal file
9
repos/pc/recipes/src/pc_intel_fb_drv/used_apis
Normal file
@ -0,0 +1,9 @@
|
||||
base
|
||||
os
|
||||
platform_session
|
||||
timer_session
|
||||
report_session
|
||||
capture_session
|
||||
blit
|
||||
genode_c_api
|
||||
pc_linux
|
59
repos/pc/src/drivers/framebuffer/intel/pc/README
Normal file
59
repos/pc/src/drivers/framebuffer/intel/pc/README
Normal file
@ -0,0 +1,59 @@
|
||||
This driver is for Intel i915 compatible graphic cards.
|
||||
|
||||
Default behaviour
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
When no configuration is provided to the driver, it will switch on all devices
|
||||
connected to the graphics card. It will use the best resolution as
|
||||
provided by the BIOS or EDID information from the display devices for each
|
||||
connector. The virtual resolution delivered to the client is the maximum in
|
||||
width and height of the different connectors. The framebuffer memory is
|
||||
directly exported to the client of the driver. When newly connected devices are
|
||||
detected by the hardware, the new connectors are enabled, probed, and again the
|
||||
'best' resolution will be chosen for the device. Nevertheless, it won't have an
|
||||
effect on the virtual resolution.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Each of the connectors can be configured explicitly in terms of resolution and
|
||||
whether it should be enabled or not. This looks like the following:
|
||||
|
||||
! <config>
|
||||
! <connector name="LVDS-11" width="1280" height="800" hz="60" brightness="75" enabled="true"/>
|
||||
! </config>
|
||||
|
||||
When the configuration changes during runtime, the driver will adapt to it. In
|
||||
this case, it will also change the current virtual resolution to the maximum of
|
||||
the configured resolutions in width and height, and it will inform its client
|
||||
about the change in resolution.
|
||||
|
||||
The brightness value is in percent and takes effect only if supported by
|
||||
the hardware.
|
||||
|
||||
The virtual resolution can be enforced by:
|
||||
|
||||
! <config force_width="1024" force_height="768">
|
||||
! </config>
|
||||
|
||||
To present all available connectors and their possible resolutions to the user,
|
||||
the driver is able to deliver a corresponding report, which can be enabled
|
||||
in the configuration as follows:
|
||||
|
||||
! <config>
|
||||
! <report connectors="yes"/>
|
||||
! </config>
|
||||
|
||||
The exported report has the following format:
|
||||
|
||||
! <connectors>
|
||||
! <connector name="LVDS-11" connected="1" brightness="50">
|
||||
! <mode width="1280" height="800" hz="60"/>
|
||||
! ...
|
||||
! </connector>
|
||||
! <connector name="HDMI-A-1" connected="false"/>
|
||||
! <connector name="DP-1" connected="false"/>
|
||||
! </connectors>
|
||||
|
||||
The brightness attribute is reported only if the hardware supports it.
|
||||
|
567
repos/pc/src/drivers/framebuffer/intel/pc/dep.list
Normal file
567
repos/pc/src/drivers/framebuffer/intel/pc/dep.list
Normal file
@ -0,0 +1,567 @@
|
||||
arch/x86/include/asm/agp.h
|
||||
arch/x86/include/asm/desc.h
|
||||
arch/x86/include/asm/dma.h
|
||||
arch/x86/include/asm/e820/api.h
|
||||
arch/x86/include/asm/e820/types.h
|
||||
arch/x86/include/asm/exec.h
|
||||
arch/x86/include/asm/fb.h
|
||||
arch/x86/include/asm/hypervisor.h
|
||||
arch/x86/include/asm/intel-mid.h
|
||||
arch/x86/include/asm/invpcid.h
|
||||
arch/x86/include/asm/io_apic.h
|
||||
arch/x86/include/asm/io.h
|
||||
arch/x86/include/asm/iomap.h
|
||||
arch/x86/include/asm/iommu.h
|
||||
arch/x86/include/asm/iosf_mbi.h
|
||||
arch/x86/include/asm/jailhouse_para.h
|
||||
arch/x86/include/asm/kvm_para.h
|
||||
arch/x86/include/asm/memtype.h
|
||||
arch/x86/include/asm/mmu_context.h
|
||||
arch/x86/include/asm/nmi.h
|
||||
arch/x86/include/asm/mwait.h
|
||||
arch/x86/include/asm/paravirt.h
|
||||
arch/x86/include/asm/pci.h
|
||||
arch/x86/include/asm/pti.h
|
||||
arch/x86/include/asm/set_memory.h
|
||||
arch/x86/include/asm/special_insns.h
|
||||
arch/x86/include/asm/timer.h
|
||||
arch/x86/include/asm/tlbflush.h
|
||||
arch/x86/include/asm/tlb.h
|
||||
arch/x86/include/asm/vga.h
|
||||
arch/x86/include/uapi/asm/kvm_para.h
|
||||
arch/x86/include/uapi/asm/mman.h
|
||||
drivers/acpi/internal.h
|
||||
drivers/base/base.h
|
||||
drivers/base/power/power.h
|
||||
drivers/base/trace.h
|
||||
drivers/char/agp/agp.h
|
||||
drivers/char/agp/intel-agp.h
|
||||
drivers/gpu/drm/drm_crtc_helper_internal.h
|
||||
drivers/gpu/drm/drm_crtc_internal.h
|
||||
drivers/gpu/drm/drm_dp_mst_topology_internal.h
|
||||
drivers/gpu/drm/drm_internal.h
|
||||
drivers/gpu/drm/drm_legacy.h
|
||||
drivers/gpu/drm/drm_trace.h
|
||||
drivers/gpu/drm/i915/display/g4x_dp.h
|
||||
drivers/gpu/drm/i915/display/g4x_hdmi.h
|
||||
drivers/gpu/drm/i915/display/i9xx_plane.h
|
||||
drivers/gpu/drm/i915/display/intel_acpi.h
|
||||
drivers/gpu/drm/i915/display/intel_atomic.h
|
||||
drivers/gpu/drm/i915/display/intel_atomic_plane.h
|
||||
drivers/gpu/drm/i915/display/intel_audio.h
|
||||
drivers/gpu/drm/i915/display/intel_bios.h
|
||||
drivers/gpu/drm/i915/display/intel_bw.h
|
||||
drivers/gpu/drm/i915/display/intel_cdclk.h
|
||||
drivers/gpu/drm/i915/display/intel_color.h
|
||||
drivers/gpu/drm/i915/display/intel_combo_phy.h
|
||||
drivers/gpu/drm/i915/display/intel_connector.h
|
||||
drivers/gpu/drm/i915/display/intel_crtc.h
|
||||
drivers/gpu/drm/i915/display/intel_crt.h
|
||||
drivers/gpu/drm/i915/display/intel_cursor.h
|
||||
drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
|
||||
drivers/gpu/drm/i915/display/intel_ddi.h
|
||||
drivers/gpu/drm/i915/display/intel_de.h
|
||||
drivers/gpu/drm/i915/display/intel_display_debugfs.h
|
||||
drivers/gpu/drm/i915/display/intel_display.h
|
||||
drivers/gpu/drm/i915/display/intel_display_power.h
|
||||
drivers/gpu/drm/i915/display/intel_display_types.h
|
||||
drivers/gpu/drm/i915/display/intel_dmc.h
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux.h
|
||||
drivers/gpu/drm/i915/display/intel_dp.h
|
||||
drivers/gpu/drm/i915/display/intel_dp_hdcp.h
|
||||
drivers/gpu/drm/i915/display/intel_dpio_phy.h
|
||||
drivers/gpu/drm/i915/display/intel_dp_link_training.h
|
||||
drivers/gpu/drm/i915/display/intel_dpll.h
|
||||
drivers/gpu/drm/i915/display/intel_dpll_mgr.h
|
||||
drivers/gpu/drm/i915/display/intel_dp_mst.h
|
||||
drivers/gpu/drm/i915/display/intel_dsb.h
|
||||
drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
|
||||
drivers/gpu/drm/i915/display/intel_dsi.h
|
||||
drivers/gpu/drm/i915/display/intel_dvo.h
|
||||
drivers/gpu/drm/i915/display/intel_fbc.h
|
||||
drivers/gpu/drm/i915/display/intel_fbdev.h
|
||||
drivers/gpu/drm/i915/display/intel_fb.h
|
||||
drivers/gpu/drm/i915/display/intel_fdi.h
|
||||
drivers/gpu/drm/i915/display/intel_fifo_underrun.h
|
||||
drivers/gpu/drm/i915/display/intel_frontbuffer.h
|
||||
drivers/gpu/drm/i915/display/intel_global_state.h
|
||||
drivers/gpu/drm/i915/display/intel_gmbus.h
|
||||
drivers/gpu/drm/i915/display/intel_hdcp.h
|
||||
drivers/gpu/drm/i915/display/intel_hdmi.h
|
||||
drivers/gpu/drm/i915/display/intel_hotplug.h
|
||||
drivers/gpu/drm/i915/display/intel_lpe_audio.h
|
||||
drivers/gpu/drm/i915/display/intel_lspcon.h
|
||||
drivers/gpu/drm/i915/display/intel_lvds.h
|
||||
drivers/gpu/drm/i915/display/intel_opregion.h
|
||||
drivers/gpu/drm/i915/display/intel_overlay.h
|
||||
drivers/gpu/drm/i915/display/intel_panel.h
|
||||
drivers/gpu/drm/i915/display/intel_pipe_crc.h
|
||||
drivers/gpu/drm/i915/display/intel_pps.h
|
||||
drivers/gpu/drm/i915/display/intel_psr.h
|
||||
drivers/gpu/drm/i915/display/intel_qp_tables.h
|
||||
drivers/gpu/drm/i915/display/intel_quirks.h
|
||||
drivers/gpu/drm/i915/display/intel_sdvo.h
|
||||
drivers/gpu/drm/i915/display/intel_sdvo_regs.h
|
||||
drivers/gpu/drm/i915/display/intel_sprite.h
|
||||
drivers/gpu/drm/i915/display/intel_tc.h
|
||||
drivers/gpu/drm/i915/display/intel_tv.h
|
||||
drivers/gpu/drm/i915/display/intel_vbt_defs.h
|
||||
drivers/gpu/drm/i915/display/intel_vdsc.h
|
||||
drivers/gpu/drm/i915/display/intel_vga.h
|
||||
drivers/gpu/drm/i915/display/intel_vrr.h
|
||||
drivers/gpu/drm/i915/display/skl_scaler.h
|
||||
drivers/gpu/drm/i915/display/skl_universal_plane.h
|
||||
drivers/gpu/drm/i915/dma_resv_utils.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_clflush.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_context.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_context_types.h
|
||||
drivers/gpu/drm/i915/gem/i915_gemfs.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_lmem.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_mman.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_object.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_object_types.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_pm.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_region.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_shrinker.h
|
||||
drivers/gpu/drm/i915/gem/i915_gem_stolen.h
|
||||
drivers/gpu/drm/i915/gt/debugfs_gt.h
|
||||
drivers/gpu/drm/i915/gt/gen8_ppgtt.h
|
||||
drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
|
||||
drivers/gpu/drm/i915/gt/intel_breadcrumbs_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_context.h
|
||||
drivers/gpu/drm/i915/gt/intel_context_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_engine.h
|
||||
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
|
||||
drivers/gpu/drm/i915/gt/intel_engine_pm.h
|
||||
drivers/gpu/drm/i915/gt/intel_engine_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_engine_user.h
|
||||
drivers/gpu/drm/i915/gt/intel_execlists_submission.h
|
||||
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.h
|
||||
drivers/gpu/drm/i915/gt/intel_gpu_commands.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_buffer_pool_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_clock_utils.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_irq.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_pm.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_pm_irq.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_requests.h
|
||||
drivers/gpu/drm/i915/gt/intel_gtt.h
|
||||
drivers/gpu/drm/i915/gt/intel_gt_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_llc.h
|
||||
drivers/gpu/drm/i915/gt/intel_llc_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_mocs.h
|
||||
drivers/gpu/drm/i915/gt/intel_rc6.h
|
||||
drivers/gpu/drm/i915/gt/intel_rc6_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_region_lmem.h
|
||||
drivers/gpu/drm/i915/gt/intel_renderstate.h
|
||||
drivers/gpu/drm/i915/gt/intel_reset.h
|
||||
drivers/gpu/drm/i915/gt/intel_reset_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_ring.h
|
||||
drivers/gpu/drm/i915/gt/intel_ring_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_rps.h
|
||||
drivers/gpu/drm/i915/gt/intel_rps_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_sseu.h
|
||||
drivers/gpu/drm/i915/gt/intel_timeline.h
|
||||
drivers/gpu/drm/i915/gt/intel_timeline_types.h
|
||||
drivers/gpu/drm/i915/gt/intel_workarounds.h
|
||||
drivers/gpu/drm/i915/gt/intel_workarounds_types.h
|
||||
drivers/gpu/drm/i915/gt/shmem_utils.h
|
||||
drivers/gpu/drm/i915/gt/sysfs_engines.h
|
||||
drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/abi/guc_errors_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_fw.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_log.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_huc_fw.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_huc.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
|
||||
drivers/gpu/drm/i915/gt/uc/intel_uc.h
|
||||
drivers/gpu/drm/i915/i915_active.h
|
||||
drivers/gpu/drm/i915/i915_active_types.h
|
||||
drivers/gpu/drm/i915/i915_debugfs.h
|
||||
drivers/gpu/drm/i915/i915_drv.h
|
||||
drivers/gpu/drm/i915/i915_fixed.h
|
||||
drivers/gpu/drm/i915/i915_gem_gtt.h
|
||||
drivers/gpu/drm/i915/i915_gem.h
|
||||
drivers/gpu/drm/i915/i915_globals.h
|
||||
drivers/gpu/drm/i915/i915_gpu_error.h
|
||||
drivers/gpu/drm/i915/i915_ioc32.h
|
||||
drivers/gpu/drm/i915/i915_irq.h
|
||||
drivers/gpu/drm/i915/i915_memcpy.h
|
||||
drivers/gpu/drm/i915/i915_mitigations.h
|
||||
drivers/gpu/drm/i915/i915_params.h
|
||||
drivers/gpu/drm/i915/i915_perf.h
|
||||
drivers/gpu/drm/i915/i915_perf_types.h
|
||||
drivers/gpu/drm/i915/i915_pmu.h
|
||||
drivers/gpu/drm/i915/i915_priolist_types.h
|
||||
drivers/gpu/drm/i915/i915_pvinfo.h
|
||||
drivers/gpu/drm/i915/i915_query.h
|
||||
drivers/gpu/drm/i915/i915_reg.h
|
||||
drivers/gpu/drm/i915/i915_request.h
|
||||
drivers/gpu/drm/i915/i915_scatterlist.h
|
||||
drivers/gpu/drm/i915/i915_scheduler.h
|
||||
drivers/gpu/drm/i915/i915_scheduler_types.h
|
||||
drivers/gpu/drm/i915/i915_selftest.h
|
||||
drivers/gpu/drm/i915/i915_suspend.h
|
||||
drivers/gpu/drm/i915/i915_sw_fence.h
|
||||
drivers/gpu/drm/i915/i915_sw_fence_work.h
|
||||
drivers/gpu/drm/i915/i915_switcheroo.h
|
||||
drivers/gpu/drm/i915/i915_syncmap.h
|
||||
drivers/gpu/drm/i915/i915_sysfs.h
|
||||
drivers/gpu/drm/i915/i915_trace.h
|
||||
drivers/gpu/drm/i915/i915_utils.h
|
||||
drivers/gpu/drm/i915/i915_vgpu.h
|
||||
drivers/gpu/drm/i915/i915_vma.h
|
||||
drivers/gpu/drm/i915/i915_vma_types.h
|
||||
drivers/gpu/drm/i915/intel_device_info.h
|
||||
drivers/gpu/drm/i915/intel_dram.h
|
||||
drivers/gpu/drm/i915/intel_gvt.h
|
||||
drivers/gpu/drm/i915/intel_memory_region.h
|
||||
drivers/gpu/drm/i915/intel_pch.h
|
||||
drivers/gpu/drm/i915/intel_pm.h
|
||||
drivers/gpu/drm/i915/intel_region_ttm.h
|
||||
drivers/gpu/drm/i915/intel_runtime_pm.h
|
||||
drivers/gpu/drm/i915/intel_sideband.h
|
||||
drivers/gpu/drm/i915/intel_step.h
|
||||
drivers/gpu/drm/i915/intel_uncore.h
|
||||
drivers/gpu/drm/i915/intel_wakeref.h
|
||||
drivers/gpu/drm/i915/intel_wopcm.h
|
||||
drivers/gpu/drm/i915/vlv_suspend.h
|
||||
drivers/gpu/drm/ttm/ttm_module.h
|
||||
drivers/i2c/i2c-core.h
|
||||
drivers/pci/pcie/portdrv.h
|
||||
drivers/pci/pci.h
|
||||
drivers/platform/x86/intel_ips.h
|
||||
include/acpi/button.h
|
||||
include/acpi/video.h
|
||||
include/asm-generic/mmu_context.h
|
||||
include/asm-generic/pci.h
|
||||
include/asm-generic/set_memory.h
|
||||
include/asm-generic/tlb.h
|
||||
include/asm-generic/unaligned.h
|
||||
include/drm/drm_aperture.h
|
||||
include/drm/drm_atomic.h
|
||||
include/drm/drm_atomic_helper.h
|
||||
include/drm/drm_atomic_state_helper.h
|
||||
include/drm/drm_atomic_uapi.h
|
||||
include/drm/drm_audio_component.h
|
||||
include/drm/drm_auth.h
|
||||
include/drm/drm_blend.h
|
||||
include/drm/drm_bridge.h
|
||||
include/drm/drm_cache.h
|
||||
include/drm/drm_client.h
|
||||
include/drm/drm_color_mgmt.h
|
||||
include/drm/drm_connector.h
|
||||
include/drm/drm_crtc.h
|
||||
include/drm/drm_crtc_helper.h
|
||||
include/drm/drm_damage_helper.h
|
||||
include/drm/drm_debugfs_crc.h
|
||||
include/drm/drm_debugfs.h
|
||||
include/drm/drm_device.h
|
||||
include/drm/drm_displayid.h
|
||||
include/drm/drm_dp_dual_mode_helper.h
|
||||
include/drm/drm_dp_helper.h
|
||||
include/drm/drm_dp_mst_helper.h
|
||||
include/drm/drm_drv.h
|
||||
include/drm/drm_dsc.h
|
||||
include/drm/drm_edid.h
|
||||
include/drm/drm_encoder.h
|
||||
include/drm/drm_fb_helper.h
|
||||
include/drm/drm_file.h
|
||||
include/drm/drm_fourcc.h
|
||||
include/drm/drm_framebuffer.h
|
||||
include/drm/drm_gem.h
|
||||
include/drm/drm_hashtab.h
|
||||
include/drm/drm_hdcp.h
|
||||
include/drm/drm_ioctl.h
|
||||
include/drm/drm_lease.h
|
||||
include/drm/drm_legacy.h
|
||||
include/drm/drm_managed.h
|
||||
include/drm/drm_mipi_dsi.h
|
||||
include/drm/drm_mm.h
|
||||
include/drm/drm_mode_config.h
|
||||
include/drm/drm_mode_object.h
|
||||
include/drm/drm_modeset_helper.h
|
||||
include/drm/drm_modeset_helper_vtables.h
|
||||
include/drm/drm_modeset_lock.h
|
||||
include/drm/drm_modes.h
|
||||
include/drm/drm_plane.h
|
||||
include/drm/drm_plane_helper.h
|
||||
include/drm/drm_prime.h
|
||||
include/drm/drm_print.h
|
||||
include/drm/drm_probe_helper.h
|
||||
include/drm/drm_property.h
|
||||
include/drm/drm_rect.h
|
||||
include/drm/drm_scdc_helper.h
|
||||
include/drm/drm_self_refresh_helper.h
|
||||
include/drm/drm_syncobj.h
|
||||
include/drm/drm_sysfs.h
|
||||
include/drm/drm_util.h
|
||||
include/drm/drm_utils.h
|
||||
include/drm/drm_vblank.h
|
||||
include/drm/drm_vblank_work.h
|
||||
include/drm/drm_vma_manager.h
|
||||
include/drm/drm_writeback.h
|
||||
include/drm/i915_component.h
|
||||
include/drm/i915_drm.h
|
||||
include/drm/i915_mei_hdcp_interface.h
|
||||
include/drm/i915_pciids.h
|
||||
include/drm/intel-gtt.h
|
||||
include/drm/intel_lpe_audio.h
|
||||
include/drm/ttm/ttm_bo_api.h
|
||||
include/drm/ttm/ttm_bo_driver.h
|
||||
include/drm/ttm/ttm_caching.h
|
||||
include/drm/ttm/ttm_device.h
|
||||
include/drm/ttm/ttm_kmap_iter.h
|
||||
include/drm/ttm/ttm_placement.h
|
||||
include/drm/ttm/ttm_pool.h
|
||||
include/drm/ttm/ttm_range_manager.h
|
||||
include/drm/ttm/ttm_resource.h
|
||||
include/drm/ttm/ttm_tt.h
|
||||
include/dt-bindings/i2c/i2c.h
|
||||
include/linux/acpi_iort.h
|
||||
include/linux/aer.h
|
||||
include/linux/agp_backend.h
|
||||
include/linux/anon_inodes.h
|
||||
include/linux/audit.h
|
||||
include/linux/average.h
|
||||
include/linux/backlight.h
|
||||
include/linux/binfmts.h
|
||||
include/linux/bitfield.h
|
||||
include/linux/bitrev.h
|
||||
include/linux/circ_buf.h
|
||||
include/linux/clk/clk-conf.h
|
||||
include/linux/component.h
|
||||
include/linux/consolemap.h
|
||||
include/linux/console_struct.h
|
||||
include/linux/context_tracking.h
|
||||
include/linux/cpuidle.h
|
||||
include/linux/cpuset.h
|
||||
include/linux/crc32.h
|
||||
include/linux/delayacct.h
|
||||
include/linux/dma-buf.h
|
||||
include/linux/dma-buf-map.h
|
||||
include/linux/dma-fence-array.h
|
||||
include/linux/dma-fence-chain.h
|
||||
include/linux/dma-fence.h
|
||||
include/linux/dma-map-ops.h
|
||||
include/linux/dmapool.h
|
||||
include/linux/dma-resv.h
|
||||
include/linux/dmar.h
|
||||
include/linux/dmi.h
|
||||
include/linux/dynamic_queue_limits.h
|
||||
include/linux/efi.h
|
||||
include/linux/etherdevice.h
|
||||
include/linux/ethtool.h
|
||||
include/linux/fault-inject.h
|
||||
include/linux/fbcon.h
|
||||
include/linux/fb.h
|
||||
include/linux/firmware.h
|
||||
include/linux/fs_parser.h
|
||||
include/linux/genetlink.h
|
||||
include/linux/gpio/machine.h
|
||||
include/linux/hdmi.h
|
||||
include/linux/hugetlb.h
|
||||
include/linux/hypervisor.h
|
||||
include/linux/i2c-algo-bit.h
|
||||
include/linux/i2c.h
|
||||
include/linux/i2c-smbus.h
|
||||
include/linux/if_ether.h
|
||||
include/linux/if_link.h
|
||||
include/linux/init_task.h
|
||||
include/linux/input.h
|
||||
include/linux/intel-iommu.h
|
||||
include/linux/interval_tree_generic.h
|
||||
include/linux/io-64-nonatomic-lo-hi.h
|
||||
include/linux/ioasid.h
|
||||
include/linux/io-mapping.h
|
||||
include/linux/iommu.h
|
||||
include/linux/iopoll.h
|
||||
include/linux/iova.h
|
||||
include/linux/jhash.h
|
||||
include/linux/kfifo.h
|
||||
include/linux/kmemleak.h
|
||||
include/linux/kvm_para.h
|
||||
include/linux/linkmode.h
|
||||
include/linux/linux_logo.h
|
||||
include/linux/list_sort.h
|
||||
include/linux/livepatch.h
|
||||
include/linux/mdio.h
|
||||
include/linux/memblock.h
|
||||
include/linux/mfd/intel_soc_pmic.h
|
||||
include/linux/migrate.h
|
||||
include/linux/mii.h
|
||||
include/linux/mii_timestamper.h
|
||||
include/linux/mman.h
|
||||
include/linux/mmu_context.h
|
||||
include/linux/netdevice.h
|
||||
include/linux/netlink.h
|
||||
include/linux/nls.h
|
||||
include/linux/nmi.h
|
||||
include/linux/nvme.h
|
||||
include/linux/of_device.h
|
||||
include/linux/of_graph.h
|
||||
include/linux/of_pci.h
|
||||
include/linux/of_platform.h
|
||||
include/linux/oom.h
|
||||
include/linux/pagevec.h
|
||||
include/linux/panic_notifier.h
|
||||
include/linux/pci-acpi.h
|
||||
include/linux/pci-dma-compat.h
|
||||
include/linux/pci.h
|
||||
include/linux/pci_hotplug.h
|
||||
include/linux/pci_ids.h
|
||||
include/linux/phy.h
|
||||
include/linux/pinctrl/consumer.h
|
||||
include/linux/pinctrl/devinfo.h
|
||||
include/linux/pinctrl/machine.h
|
||||
include/linux/pinctrl/pinctrl-state.h
|
||||
include/linux/pkeys.h
|
||||
include/linux/platform_data/x86/apple.h
|
||||
include/linux/platform_device.h
|
||||
include/linux/pm_domain.h
|
||||
include/linux/pm_wakeirq.h
|
||||
include/linux/pnp.h
|
||||
include/linux/psi.h
|
||||
include/linux/pstore.h
|
||||
include/linux/pvclock_gtod.h
|
||||
include/linux/pwm.h
|
||||
include/linux/rbtree_augmented.h
|
||||
include/linux/rcupdate_wait.h
|
||||
include/linux/regmap.h
|
||||
include/linux/regulator/consumer.h
|
||||
include/linux/relay.h
|
||||
include/linux/ring_buffer.h
|
||||
include/linux/rtmutex.h
|
||||
include/linux/sched/autogroup.h
|
||||
include/linux/sched_clock.h
|
||||
include/linux/sched/cputime.h
|
||||
include/linux/sched/deadline.h
|
||||
include/linux/sched/debug.h
|
||||
include/linux/sched/hotplug.h
|
||||
include/linux/sched/init.h
|
||||
include/linux/sched/loadavg.h
|
||||
include/linux/sched/nohz.h
|
||||
include/linux/sched/numa_balancing.h
|
||||
include/linux/sched/smt.h
|
||||
include/linux/sched/stat.h
|
||||
include/linux/sched/sysctl.h
|
||||
include/linux/sched/wake_q.h
|
||||
include/linux/sched/xacct.h
|
||||
include/linux/securebits.h
|
||||
include/linux/seq_buf.h
|
||||
include/linux/shmem_fs.h
|
||||
include/linux/smpboot.h
|
||||
include/linux/sort.h
|
||||
include/linux/swiotlb.h
|
||||
include/linux/switchtec.h
|
||||
include/linux/sync_file.h
|
||||
include/linux/syscalls.h
|
||||
include/linux/syscore_ops.h
|
||||
include/linux/timecounter.h
|
||||
include/linux/timekeeper_internal.h
|
||||
include/linux/trace_events.h
|
||||
include/linux/trace_seq.h
|
||||
include/linux/tsacct_kern.h
|
||||
include/linux/userfaultfd_k.h
|
||||
include/linux/utsname.h
|
||||
include/linux/vgaarb.h
|
||||
include/linux/vga_switcheroo.h
|
||||
include/linux/vt_kern.h
|
||||
include/linux/xattr.h
|
||||
include/media/cec.h
|
||||
include/media/cec-notifier.h
|
||||
include/media/rc-core.h
|
||||
include/media/rc-map.h
|
||||
include/net/genetlink.h
|
||||
include/net/netlink.h
|
||||
include/net/netprio_cgroup.h
|
||||
include/net/scm.h
|
||||
include/net/xdp.h
|
||||
include/trace/events/dma_fence.h
|
||||
include/trace/events/i2c.h
|
||||
include/trace/events/irq.h
|
||||
include/trace/events/power.h
|
||||
include/trace/events/sched.h
|
||||
include/trace/events/timer.h
|
||||
include/trace/events/tlb.h
|
||||
include/trace/events/workqueue.h
|
||||
include/trace/syscall.h
|
||||
include/uapi/asm-generic/mman-common.h
|
||||
include/uapi/asm-generic/mman.h
|
||||
include/uapi/drm/drm_fourcc.h
|
||||
include/uapi/drm/drm.h
|
||||
include/uapi/drm/drm_mode.h
|
||||
include/uapi/drm/i915_drm.h
|
||||
include/uapi/linux/audit.h
|
||||
include/uapi/linux/binfmts.h
|
||||
include/uapi/linux/cec-funcs.h
|
||||
include/uapi/linux/cec.h
|
||||
include/uapi/linux/ethtool.h
|
||||
include/uapi/linux/fb.h
|
||||
include/uapi/linux/genetlink.h
|
||||
include/uapi/linux/i2c.h
|
||||
include/uapi/linux/if_bonding.h
|
||||
include/uapi/linux/if_link.h
|
||||
include/uapi/linux/input-event-codes.h
|
||||
include/uapi/linux/input.h
|
||||
include/uapi/linux/iommu.h
|
||||
include/uapi/linux/kd.h
|
||||
include/uapi/linux/kvm_para.h
|
||||
include/uapi/linux/lirc.h
|
||||
include/uapi/linux/mdio.h
|
||||
include/uapi/linux/media-bus-format.h
|
||||
include/uapi/linux/membarrier.h
|
||||
include/uapi/linux/mii.h
|
||||
include/uapi/linux/mman.h
|
||||
include/uapi/linux/neighbour.h
|
||||
include/uapi/linux/netdevice.h
|
||||
include/uapi/linux/netfilter/nf_tables.h
|
||||
include/uapi/linux/netlink.h
|
||||
include/uapi/linux/oom.h
|
||||
include/uapi/linux/pci.h
|
||||
include/uapi/linux/pci_regs.h
|
||||
include/uapi/linux/pkt_cls.h
|
||||
include/uapi/linux/pkt_sched.h
|
||||
include/uapi/linux/securebits.h
|
||||
include/uapi/linux/utsname.h
|
||||
include/uapi/linux/xattr.h
|
||||
include/video/display_timing.h
|
||||
include/video/of_videomode.h
|
||||
include/video/mipi_display.h
|
||||
include/video/vga.h
|
||||
include/video/videomode.h
|
||||
include/xen/balloon.h
|
||||
include/xen/interface/hvm/start_info.h
|
||||
include/xen/xen.h
|
||||
kernel/irq/debug.h
|
||||
kernel/irq/internals.h
|
||||
kernel/irq/settings.h
|
||||
kernel/locking/lock_events.h
|
||||
kernel/locking/lock_events_list.h
|
||||
kernel/locking/mutex.h
|
||||
kernel/locking/rtmutex_common.h
|
||||
kernel/sched/autogroup.h
|
||||
kernel/sched/cpudeadline.h
|
||||
kernel/sched/cpupri.h
|
||||
kernel/sched/features.h
|
||||
kernel/sched/sched.h
|
||||
kernel/sched/stats.h
|
||||
kernel/smpboot.h
|
||||
kernel/time/ntp_internal.h
|
||||
kernel/time/tick-internal.h
|
||||
kernel/time/tick-sched.h
|
||||
kernel/time/timekeeping.h
|
||||
kernel/time/timekeeping_internal.h
|
||||
kernel/workqueue_internal.h
|
713
repos/pc/src/drivers/framebuffer/intel/pc/dummies.c
Normal file
713
repos/pc/src/drivers/framebuffer/intel/pc/dummies.c
Normal file
@ -0,0 +1,713 @@
|
||||
/*
|
||||
* \brief Dummy definitions of Linux Kernel functions - handled manually
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-01-21
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021-2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <lx_emul/debug.h>
|
||||
#include <linux/math64.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
|
||||
#include <acpi/acpixf.h>
|
||||
#include <acpi/video.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/cpuhotplug.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/kernfs.h>
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/nls.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/sched/loadavg.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/timekeeper_internal.h>
|
||||
|
||||
|
||||
unsigned long init_stack[THREAD_SIZE / sizeof(unsigned long)];
|
||||
unsigned long lpj_fine = 0;
|
||||
|
||||
|
||||
const guid_t pci_acpi_dsm_guid =
|
||||
GUID_INIT(0xe5c937d0, 0x3553, 0x4d7a,
|
||||
0x91, 0x17, 0xea, 0x4d, 0x19, 0xc3, 0x43, 0x4d);
|
||||
|
||||
|
||||
void rcu_barrier(void)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int __cpuhp_setup_state(enum cpuhp_state state,const char * name,bool invoke,int (* startup)(unsigned int cpu),int (* teardown)(unsigned int cpu),bool multi_instance)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void update_vsyscall(struct timekeeper * tk)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void clocksource_arch_init(struct clocksource * cs)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void ignore_signals(struct task_struct * t)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void calc_global_load(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void account_process_tick(struct task_struct * p,int user_tick)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void rcu_sched_clock_irq(int user)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void kernfs_get(struct kernfs_node * kn)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int software_node_notify(struct device * dev,unsigned long action)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void get_random_bytes(void * buf,int nbytes)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int __must_check get_random_bytes_arch(void * buf,int nbytes)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int add_random_ready_callback(struct random_ready_callback * rdy)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void add_interrupt_randomness(int irq,int irq_flags)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_files(struct kobject * kobj,const struct attribute * const * ptr)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_bin_file(struct kobject * kobj,const struct bin_attribute * attr)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void sysfs_remove_file_ns(struct kobject * kobj,const struct attribute * attr,const void * ns)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_dir_ns(struct kobject * kobj,const void * ns)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_file_ns(struct kobject * kobj,const struct attribute * attr,const void * ns)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_link(struct kobject * kobj,struct kobject * target,const char * name)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int sysfs_create_groups(struct kobject * kobj,const struct attribute_group ** groups)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_engines_add_sysfs(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void register_syscore_ops(struct syscore_ops * ops)
|
||||
{
|
||||
wait_bit_init();
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void pci_allocate_vc_save_buffers(struct pci_dev * dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void pci_vpd_init(struct pci_dev * dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int pci_proc_attach_device(struct pci_dev * dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void i915_pmu_init(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void i915_pmu_register(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool parse_option_str(const char *str, const char *option)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int __register_chrdev(unsigned int major,unsigned int baseminor,unsigned int count,const char * name,const struct file_operations * fops)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_driver_late_release(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool intel_vgpu_active(struct drm_i915_private * dev_priv)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void unregister_shrinker(struct shrinker * shrinker)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int register_shrinker(struct shrinker * shrinker)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int intel_gt_init_mmio(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int __intel_gt_reset(struct intel_gt * gt, intel_engine_mask_t engine_mask)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void i915_perf_init(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev * pdev,
|
||||
const char * name)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_init_hw_early(struct intel_gt * gt, struct i915_ggtt * ggtt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int intel_gt_probe_lmem(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_init_workarounds(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void sched_set_fifo(struct task_struct * p)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen8_gt_irq_handler(struct intel_gt * gt,u32 master_ctl)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen11_gt_irq_reset(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen11_gt_irq_handler(struct intel_gt * gt, const u32 master_ctl)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen11_gt_irq_postinstall(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen8_gt_irq_reset(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen8_gt_irq_postinstall(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen5_gt_irq_reset(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void gen5_gt_irq_postinstall(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void register_irq_proc(unsigned int irq,struct irq_desc * desc)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void register_handler_proc(unsigned int irq,struct irqaction * action)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void unregister_handler_proc(unsigned int irq,struct irqaction * action)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void intel_vgpu_register(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void i915_perf_register(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_driver_register(struct intel_gt * gt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void i915_perf_sysctl_register(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int acpi_platform_notify(struct device *dev, enum kobject_action action)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool acpi_driver_match_device(struct device *dev, const struct device_driver *drv)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool is_acpi_device_node(const struct fwnode_handle *fwnode)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int acpi_dma_configure_id(struct device *dev, enum dev_dma_attr attr, const u32 *input_id)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int acpi_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *event)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int acpi_device_modalias(struct device *device, char * x, int y)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
void acpi_video_unregister(void)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 funcs)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
union acpi_object *acpi_evaluate_dsm(acpi_handle handle, const guid_t *guid,
|
||||
u64 rev, u64 func, union acpi_object *argv4)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
acpi_status acpi_remove_address_space_handler(acpi_handle device,
|
||||
acpi_adr_space_type space_id,
|
||||
acpi_adr_space_handler handler)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
acpi_status acpi_buffer_to_resource(u8 * aml_buffer,u16 aml_buffer_length,
|
||||
struct acpi_resource ** resource_ptr)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
acpi_status acpi_install_address_space_handler(acpi_handle device,
|
||||
acpi_adr_space_type space_id,
|
||||
acpi_adr_space_handler handler,
|
||||
acpi_adr_space_setup setup,
|
||||
void * context)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int acpi_video_register(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
acpi_status acpi_get_name(acpi_handle object, u32 name_type,
|
||||
struct acpi_buffer *ret_path_ptr)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
acpi_status acpi_get_table(acpi_string signature, u32 instance, struct acpi_table_header **out_table)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
void acpi_put_table(struct acpi_table_header *table)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
void cpu_latency_qos_add_request(struct pm_qos_request *req, s32 value)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void cpu_latency_qos_update_request(struct pm_qos_request *req, s32 new_value)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool cpu_latency_qos_request_active(struct pm_qos_request *req)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
void cpu_latency_qos_remove_request(struct pm_qos_request *req)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
enum acpi_backlight_type acpi_video_get_backlight_type(void)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool pciehp_is_native(struct pci_dev *bridge)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int pci_acpi_program_hp_params(struct pci_dev *dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int pnp_range_reserved(resource_size_t start, resource_size_t end)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int utf16s_to_utf8s(const wchar_t *pwcs, int len, enum utf16_endian endian,
|
||||
u8 *s, int maxlen)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int __get_user_nocheck_1(void)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
unsigned long
|
||||
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
unsigned long
|
||||
raw_copy_from_user(void *to, const void __user * from, unsigned long n)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
int i915_gemfs_init(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int __init i915_global_context_init(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int __init i915_global_gem_context_init(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int __init i915_global_request_init(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int __init i915_global_scheduler_init(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void pci_fixup_device(enum pci_fixup_pass pass,struct pci_dev * dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int pci_dev_specific_reset(struct pci_dev * dev,int probe)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int register_acpi_notifier(struct notifier_block * nb)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int unregister_acpi_notifier(struct notifier_block * nb)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int acpi_reconfig_notifier_register(struct notifier_block * nb)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int intel_vgt_balloon(struct i915_ggtt * ggtt)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_info_print(const struct intel_gt_info * info,struct drm_printer * p)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int set_pages_uc(struct page * page,int numpages)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool irq_work_queue(struct irq_work * work)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void iomap_free(resource_size_t base, unsigned long size)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
||||
|
||||
|
||||
void i915_gem_object_release_mmap_offset(struct drm_i915_gem_object * obj)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
31
repos/pc/src/drivers/framebuffer/intel/pc/emul.cc
Normal file
31
repos/pc/src/drivers/framebuffer/intel/pc/emul.cc
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* \brief Linux emulation backend functions
|
||||
* \author Josef Soentgen
|
||||
* \date 2021-03-22
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021-2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
/* lx emulation includes */
|
||||
#include <lx_kit/env.h>
|
||||
|
||||
/* local includes */
|
||||
#include "lx_emul.h"
|
||||
|
||||
|
||||
void *emul_alloc_shmem_file_buffer(unsigned long size)
|
||||
{
|
||||
auto &buffer = Lx_kit::env().memory.alloc_buffer(size);
|
||||
return reinterpret_cast<void *>(buffer.virt_addr());
|
||||
}
|
||||
|
||||
|
||||
void emul_free_shmem_file_buffer(void *addr)
|
||||
{
|
||||
Lx_kit::env().memory.free_buffer(addr);
|
||||
}
|
61
repos/pc/src/drivers/framebuffer/intel/pc/fb.c
Normal file
61
repos/pc/src/drivers/framebuffer/intel/pc/fb.c
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* \brief Linux kernel framebuffer device support
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2021-05-03
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/fb.h>
|
||||
#include <lx_emul/fb.h>
|
||||
|
||||
struct fb_info * framebuffer_alloc(size_t size,struct device * dev)
|
||||
{
|
||||
#define BYTES_PER_LONG (BITS_PER_LONG/8)
|
||||
#define PADDING (BYTES_PER_LONG - (sizeof(struct fb_info) % BYTES_PER_LONG))
|
||||
int fb_info_size = sizeof(struct fb_info);
|
||||
struct fb_info *info;
|
||||
char *p;
|
||||
|
||||
if (size) {
|
||||
fb_info_size += PADDING;
|
||||
}
|
||||
|
||||
p = kzalloc(fb_info_size + size, GFP_KERNEL);
|
||||
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
info = (struct fb_info *) p;
|
||||
|
||||
if (size)
|
||||
info->par = p + fb_info_size;
|
||||
|
||||
info->device = dev;
|
||||
info->fbcon_rotate_hint = -1;
|
||||
|
||||
#if IS_ENABLED(CONFIG_FB_BACKLIGHT)
|
||||
mutex_init(&info->bl_curve_mutex);
|
||||
#endif
|
||||
|
||||
return info;
|
||||
#undef PADDING
|
||||
#undef BYTES_PER_LONG
|
||||
}
|
||||
|
||||
|
||||
int register_framebuffer(struct fb_info * fb_info)
|
||||
{
|
||||
lx_emul_framebuffer_ready(fb_info->screen_base, fb_info->screen_size,
|
||||
fb_info->var.xres_virtual, fb_info->var.yres_virtual,
|
||||
fb_info->fix.line_length /
|
||||
(fb_info->var.bits_per_pixel / 8), fb_info->var.yres);
|
||||
return 0;
|
||||
}
|
387
repos/pc/src/drivers/framebuffer/intel/pc/gem.c
Normal file
387
repos/pc/src/drivers/framebuffer/intel/pc/gem.c
Normal file
@ -0,0 +1,387 @@
|
||||
/*
|
||||
* \brief Shadow of drivers/gpu/drm/i915/i915_gem.c
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-02-03
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright © 2008-2015 Intel Corporation
|
||||
*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <lx_emul.h>
|
||||
#include "i915_drv.h"
|
||||
|
||||
#include "intel_pm.h"
|
||||
|
||||
|
||||
int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
|
||||
unsigned long flags)
|
||||
{
|
||||
struct intel_runtime_pm *rpm = &to_i915(obj->base.dev)->runtime_pm;
|
||||
LIST_HEAD(still_in_list);
|
||||
intel_wakeref_t wakeref;
|
||||
struct i915_vma *vma;
|
||||
int ret;
|
||||
|
||||
if (list_empty(&obj->vma.list))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* As some machines use ACPI to handle runtime-resume callbacks, and
|
||||
* ACPI is quite kmalloc happy, we cannot resume beneath the vm->mutex
|
||||
* as they are required by the shrinker. Ergo, we wake the device up
|
||||
* first just in case.
|
||||
*/
|
||||
wakeref = intel_runtime_pm_get(rpm);
|
||||
|
||||
try_again:
|
||||
ret = 0;
|
||||
spin_lock(&obj->vma.lock);
|
||||
while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
|
||||
struct i915_vma,
|
||||
obj_link))) {
|
||||
struct i915_address_space *vm = vma->vm;
|
||||
|
||||
list_move_tail(&vma->obj_link, &still_in_list);
|
||||
if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK))
|
||||
continue;
|
||||
|
||||
if (flags & I915_GEM_OBJECT_UNBIND_TEST) {
|
||||
ret = -EBUSY;
|
||||
break;
|
||||
}
|
||||
|
||||
ret = -EAGAIN;
|
||||
if (!i915_vm_tryopen(vm))
|
||||
break;
|
||||
|
||||
/* Prevent vma being freed by i915_vma_parked as we unbind */
|
||||
vma = __i915_vma_get(vma);
|
||||
spin_unlock(&obj->vma.lock);
|
||||
|
||||
if (vma) {
|
||||
ret = -EBUSY;
|
||||
if (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
|
||||
!i915_vma_is_active(vma)) {
|
||||
if (flags & I915_GEM_OBJECT_UNBIND_VM_TRYLOCK) {
|
||||
if (mutex_trylock(&vma->vm->mutex)) {
|
||||
ret = __i915_vma_unbind(vma);
|
||||
mutex_unlock(&vma->vm->mutex);
|
||||
} else {
|
||||
ret = -EBUSY;
|
||||
}
|
||||
} else {
|
||||
ret = i915_vma_unbind(vma);
|
||||
}
|
||||
}
|
||||
|
||||
__i915_vma_put(vma);
|
||||
}
|
||||
|
||||
i915_vm_close(vm);
|
||||
spin_lock(&obj->vma.lock);
|
||||
}
|
||||
list_splice_init(&still_in_list, &obj->vma.list);
|
||||
spin_unlock(&obj->vma.lock);
|
||||
|
||||
if (ret == -EAGAIN && flags & I915_GEM_OBJECT_UNBIND_BARRIER) {
|
||||
rcu_barrier(); /* flush the i915_vm_release() */
|
||||
goto try_again;
|
||||
}
|
||||
|
||||
intel_runtime_pm_put(rpm, wakeref);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void discard_ggtt_vma(struct i915_vma *vma)
|
||||
{
|
||||
struct drm_i915_gem_object *obj = vma->obj;
|
||||
|
||||
spin_lock(&obj->vma.lock);
|
||||
if (!RB_EMPTY_NODE(&vma->obj_node)) {
|
||||
rb_erase(&vma->obj_node, &obj->vma.tree);
|
||||
RB_CLEAR_NODE(&vma->obj_node);
|
||||
}
|
||||
spin_unlock(&obj->vma.lock);
|
||||
}
|
||||
|
||||
struct i915_vma *
|
||||
i915_gem_object_ggtt_pin_ww(struct drm_i915_gem_object *obj,
|
||||
struct i915_gem_ww_ctx *ww,
|
||||
const struct i915_ggtt_view *view,
|
||||
u64 size, u64 alignment, u64 flags)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(obj->base.dev);
|
||||
struct i915_ggtt *ggtt = &i915->ggtt;
|
||||
struct i915_vma *vma;
|
||||
int ret;
|
||||
|
||||
if (flags & PIN_MAPPABLE &&
|
||||
(!view || view->type == I915_GGTT_VIEW_NORMAL)) {
|
||||
/*
|
||||
* If the required space is larger than the available
|
||||
* aperture, we will not able to find a slot for the
|
||||
* object and unbinding the object now will be in
|
||||
* vain. Worse, doing so may cause us to ping-pong
|
||||
* the object in and out of the Global GTT and
|
||||
* waste a lot of cycles under the mutex.
|
||||
*/
|
||||
if (obj->base.size > ggtt->mappable_end)
|
||||
return ERR_PTR(-E2BIG);
|
||||
|
||||
/*
|
||||
* If NONBLOCK is set the caller is optimistically
|
||||
* trying to cache the full object within the mappable
|
||||
* aperture, and *must* have a fallback in place for
|
||||
* situations where we cannot bind the object. We
|
||||
* can be a little more lax here and use the fallback
|
||||
* more often to avoid costly migrations of ourselves
|
||||
* and other objects within the aperture.
|
||||
*
|
||||
* Half-the-aperture is used as a simple heuristic.
|
||||
* More interesting would to do search for a free
|
||||
* block prior to making the commitment to unbind.
|
||||
* That caters for the self-harm case, and with a
|
||||
* little more heuristics (e.g. NOFAULT, NOEVICT)
|
||||
* we could try to minimise harm to others.
|
||||
*/
|
||||
if (flags & PIN_NONBLOCK &&
|
||||
obj->base.size > ggtt->mappable_end / 2)
|
||||
return ERR_PTR(-ENOSPC);
|
||||
}
|
||||
|
||||
new_vma:
|
||||
vma = i915_vma_instance(obj, &ggtt->vm, view);
|
||||
if (IS_ERR(vma))
|
||||
return vma;
|
||||
|
||||
if (i915_vma_misplaced(vma, size, alignment, flags)) {
|
||||
if (flags & PIN_NONBLOCK) {
|
||||
if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma))
|
||||
return ERR_PTR(-ENOSPC);
|
||||
|
||||
if (flags & PIN_MAPPABLE &&
|
||||
vma->fence_size > ggtt->mappable_end / 2)
|
||||
return ERR_PTR(-ENOSPC);
|
||||
}
|
||||
|
||||
if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma)) {
|
||||
discard_ggtt_vma(vma);
|
||||
goto new_vma;
|
||||
}
|
||||
|
||||
ret = i915_vma_unbind(vma);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if (ww)
|
||||
ret = i915_vma_pin_ww(vma, ww, size, alignment, flags | PIN_GLOBAL);
|
||||
else
|
||||
ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL);
|
||||
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
if (vma->fence && !i915_gem_object_is_tiled(obj)) {
|
||||
mutex_lock(&ggtt->vm.mutex);
|
||||
i915_vma_revoke_fence(vma);
|
||||
mutex_unlock(&ggtt->vm.mutex);
|
||||
}
|
||||
|
||||
ret = i915_vma_wait_for_bind(vma);
|
||||
if (ret) {
|
||||
i915_vma_unpin(vma);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
return vma;
|
||||
}
|
||||
|
||||
void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ww, bool intr)
|
||||
{
|
||||
ww_acquire_init(&ww->ctx, &reservation_ww_class);
|
||||
INIT_LIST_HEAD(&ww->obj_list);
|
||||
ww->intr = intr;
|
||||
ww->contended = NULL;
|
||||
}
|
||||
|
||||
static void i915_gem_ww_ctx_unlock_all(struct i915_gem_ww_ctx *ww)
|
||||
{
|
||||
struct drm_i915_gem_object *obj;
|
||||
|
||||
while ((obj = list_first_entry_or_null(&ww->obj_list, struct drm_i915_gem_object, obj_link))) {
|
||||
list_del(&obj->obj_link);
|
||||
i915_gem_object_unlock(obj);
|
||||
}
|
||||
}
|
||||
|
||||
void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ww)
|
||||
{
|
||||
i915_gem_ww_ctx_unlock_all(ww);
|
||||
WARN_ON(ww->contended);
|
||||
ww_acquire_fini(&ww->ctx);
|
||||
}
|
||||
|
||||
static void i915_gem_init__mm(struct drm_i915_private *i915)
|
||||
{
|
||||
spin_lock_init(&i915->mm.obj_lock);
|
||||
|
||||
init_llist_head(&i915->mm.free_list);
|
||||
|
||||
INIT_LIST_HEAD(&i915->mm.purge_list);
|
||||
INIT_LIST_HEAD(&i915->mm.shrink_list);
|
||||
|
||||
i915_gem_init__objects(i915);
|
||||
}
|
||||
|
||||
|
||||
int i915_gem_init(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* We need to fallback to 4K pages if host doesn't support huge gtt. */
|
||||
/*
|
||||
if (intel_vgpu_active(dev_priv) && !intel_vgpu_has_huge_gtt(dev_priv))
|
||||
mkwrite_device_info(dev_priv)->page_sizes =
|
||||
I915_GTT_PAGE_SIZE_4K;
|
||||
*/
|
||||
|
||||
ret = i915_gem_init_userptr(dev_priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
intel_uc_fetch_firmwares(&dev_priv->gt.uc);
|
||||
intel_wopcm_init(&dev_priv->wopcm);
|
||||
*/
|
||||
ret = i915_init_ggtt(dev_priv);
|
||||
if (ret) {
|
||||
GEM_BUG_ON(ret == -EIO);
|
||||
goto err_unlock;
|
||||
}
|
||||
|
||||
/*
|
||||
* Despite its name intel_init_clock_gating applies both display
|
||||
* clock gating workarounds; GT mmio workarounds and the occasional
|
||||
* GT power context workaround. Worse, sometimes it includes a context
|
||||
* register workaround which we need to apply before we record the
|
||||
* default HW state for all contexts.
|
||||
*
|
||||
* FIXME: break up the workarounds and apply them at the right time!
|
||||
*/
|
||||
|
||||
intel_init_clock_gating(dev_priv);
|
||||
|
||||
/*
|
||||
ret = intel_gt_init(&dev_priv->gt);
|
||||
if (ret)
|
||||
goto err_unlock;
|
||||
*/
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Unwinding is complicated by that we want to handle -EIO to mean
|
||||
* disable GPU submission but keep KMS alive. We want to mark the
|
||||
* HW as irrevisibly wedged, but keep enough state around that the
|
||||
* driver doesn't explode during runtime.
|
||||
*/
|
||||
err_unlock:
|
||||
i915_gem_drain_workqueue(dev_priv);
|
||||
|
||||
/*
|
||||
if (ret != -EIO)
|
||||
intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
|
||||
*/
|
||||
|
||||
if (ret == -EIO) {
|
||||
/*
|
||||
* Allow engines or uC initialisation to fail by marking the GPU
|
||||
* as wedged. But we only want to do this when the GPU is angry,
|
||||
* for all other failure, such as an allocation failure, bail.
|
||||
*/
|
||||
/*
|
||||
if (!intel_gt_is_wedged(&dev_priv->gt)) {
|
||||
i915_probe_error(dev_priv,
|
||||
"Failed to initialize GPU, declaring it wedged!\n");
|
||||
intel_gt_set_wedged(&dev_priv->gt);
|
||||
}
|
||||
*/
|
||||
/* Minimal basic recovery for KMS */
|
||||
ret = i915_ggtt_enable_hw(dev_priv);
|
||||
i915_ggtt_resume(&dev_priv->ggtt);
|
||||
|
||||
intel_init_clock_gating(dev_priv);
|
||||
}
|
||||
|
||||
i915_gem_drain_freed_objects(dev_priv);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void i915_gem_driver_register(struct drm_i915_private * i915)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void i915_gem_init_early(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
/* 4 * 4M XXX */
|
||||
unsigned const ram_pages = 4 * 1024;
|
||||
|
||||
i915_gem_init__mm(dev_priv);
|
||||
/*
|
||||
i915_gem_init__contexts(dev_priv);
|
||||
*/
|
||||
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
spin_lock_init(&dev_priv->fb_tracking.lock);
|
||||
|
||||
totalram_pages_add(ram_pages);
|
||||
}
|
||||
|
||||
|
||||
int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)
|
||||
{
|
||||
struct drm_i915_file_private *file_priv;
|
||||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
|
||||
if (!file_priv)
|
||||
return -ENOMEM;
|
||||
|
||||
file->driver_priv = file_priv;
|
||||
file_priv->dev_priv = i915;
|
||||
file_priv->file = file;
|
||||
|
||||
file_priv->bsd_engine = -1;
|
||||
file_priv->hang_timestamp = jiffies;
|
||||
|
||||
/*
|
||||
ret = i915_gem_context_open(i915, file);
|
||||
if (ret)
|
||||
kfree(file_priv);
|
||||
|
||||
return ret;
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int i915_gem_init_userptr(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
#ifdef CONFIG_MMU_NOTIFIER
|
||||
spin_lock_init(&dev_priv->mm.notifier_lock);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
2122
repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c
Normal file
2122
repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c
Normal file
File diff suppressed because it is too large
Load Diff
381
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c
Normal file
381
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c
Normal file
@ -0,0 +1,381 @@
|
||||
/*
|
||||
* \brief Linux emulation environment specific to this driver
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-01-21
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021-2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <lx_emul.h>
|
||||
#include <lx_emul/io_mem.h>
|
||||
|
||||
#include <linux/dma-fence.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/proc_fs.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include <drm/drm_managed.h>
|
||||
|
||||
|
||||
/* support for arch/x86/lib/delay.c, normally defined in init/main.c */
|
||||
unsigned long loops_per_jiffy = (1<<12);
|
||||
|
||||
|
||||
struct dma_fence_ops const i915_fence_ops;
|
||||
|
||||
/* early_identify_cpu() in linux sets this up normally, used by drm_cache */
|
||||
struct cpuinfo_x86 boot_cpu_data =
|
||||
{
|
||||
.x86_clflush_size = (sizeof(void*) == 8) ? 64 : 32,
|
||||
.x86_cache_alignment = (sizeof(void*) == 8) ? 64 : 32,
|
||||
.x86_phys_bits = (sizeof(void*) == 8) ? 36 : 32,
|
||||
.x86_virt_bits = (sizeof(void*) == 8) ? 48 : 32
|
||||
};
|
||||
|
||||
/* Bits allowed in normal kernel mappings: */
|
||||
pteval_t __default_kernel_pte_mask __read_mostly = ~0;
|
||||
|
||||
|
||||
int acpi_disabled = 0;
|
||||
|
||||
|
||||
void intel_wopcm_init_early(struct intel_wopcm * wopcm)
|
||||
{
|
||||
wait_bit_init();
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void * kmalloc_order(size_t size,gfp_t flags, unsigned int order)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return kmalloc(size, flags);
|
||||
}
|
||||
|
||||
|
||||
int simple_pin_fs(struct file_system_type *type, struct vfsmount ** mount, int * count)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
if (!mount)
|
||||
return -EFAULT;
|
||||
|
||||
if (!*mount)
|
||||
*mount = kzalloc(sizeof(struct vfsmount), GFP_KERNEL);
|
||||
|
||||
if (!*mount)
|
||||
return -ENOMEM;
|
||||
|
||||
if (count)
|
||||
++*count;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
struct inode * alloc_anon_inode(struct super_block * s)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
return kzalloc(sizeof(struct inode), GFP_KERNEL);
|
||||
}
|
||||
|
||||
|
||||
struct proc_dir_entry { char dummy [512]; };
|
||||
|
||||
struct proc_dir_entry * proc_create_seq_private(const char * name,umode_t mode,struct proc_dir_entry * parent,const struct seq_operations * ops,unsigned int state_size,void * data)
|
||||
{
|
||||
static struct proc_dir_entry ret;
|
||||
|
||||
lx_emul_trace(__func__);
|
||||
return &ret;
|
||||
}
|
||||
|
||||
|
||||
void si_meminfo(struct sysinfo * val)
|
||||
{
|
||||
/* 4M, ttm actually use only half - more or configurable XXX ? */
|
||||
unsigned const ram_pages = 1024;
|
||||
|
||||
/* used by drivers/gpu/drm/ttm/ttm_device.c */
|
||||
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
val->totalram = ram_pages;
|
||||
val->sharedram = 0;
|
||||
val->freeram = ram_pages;
|
||||
val->bufferram = 0;
|
||||
val->totalhigh = 0;
|
||||
val->freehigh = 0;
|
||||
val->mem_unit = PAGE_SIZE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void __iomem * ioremap(resource_size_t phys_addr, unsigned long size)
|
||||
{
|
||||
return lx_emul_io_mem_map(phys_addr, size);
|
||||
}
|
||||
|
||||
|
||||
int dma_supported(struct device * dev, u64 mask)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void yield()
|
||||
{
|
||||
lx_emul_task_schedule(false /* no block */);
|
||||
}
|
||||
|
||||
|
||||
int fb_get_options(const char * name,char ** option)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
if (!option)
|
||||
return 1;
|
||||
|
||||
*option = "";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void ack_bad_irq(unsigned int irq)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool pat_enabled(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
pgprot_t pgprot_writecombine(pgprot_t prot)
|
||||
{
|
||||
pgprot_t p = { .pgprot = 0 };
|
||||
lx_emul_trace(__func__);
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* shmem handling as done by Josef etnaviv
|
||||
*/
|
||||
#include <linux/shmem_fs.h>
|
||||
|
||||
struct shmem_file_buffer
|
||||
{
|
||||
void *addr;
|
||||
struct page *pages;
|
||||
};
|
||||
|
||||
|
||||
struct file *shmem_file_setup(char const *name, loff_t size,
|
||||
unsigned long flags)
|
||||
{
|
||||
struct file *f;
|
||||
struct inode *inode;
|
||||
struct address_space *mapping;
|
||||
struct shmem_file_buffer *private_data;
|
||||
loff_t const nrpages = (size / PAGE_SIZE) + ((size % (PAGE_SIZE)) ? 1 : 0);
|
||||
|
||||
f = kzalloc(sizeof (struct file), 0);
|
||||
if (!f) {
|
||||
return (struct file*)ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
inode = kzalloc(sizeof (struct inode), 0);
|
||||
if (!inode) {
|
||||
goto err_inode;
|
||||
}
|
||||
|
||||
mapping = kzalloc(sizeof (struct address_space), 0);
|
||||
if (!mapping) {
|
||||
goto err_mapping;
|
||||
}
|
||||
|
||||
private_data = kzalloc(sizeof (struct shmem_file_buffer), 0);
|
||||
if (!private_data) {
|
||||
goto err_private_data;
|
||||
}
|
||||
|
||||
private_data->addr = emul_alloc_shmem_file_buffer(nrpages * PAGE_SIZE);
|
||||
if (!private_data->addr)
|
||||
goto err_private_data_addr;
|
||||
|
||||
/*
|
||||
* We call virt_to_pages eagerly here, to get continuous page
|
||||
* objects registered in case one wants to use them immediately.
|
||||
*/
|
||||
private_data->pages =
|
||||
lx_emul_virt_to_pages(private_data->addr, nrpages);
|
||||
|
||||
mapping->private_data = private_data;
|
||||
mapping->nrpages = nrpages;
|
||||
|
||||
inode->i_mapping = mapping;
|
||||
|
||||
atomic_long_set(&f->f_count, 1);
|
||||
f->f_inode = inode;
|
||||
f->f_mapping = mapping;
|
||||
f->f_flags = flags;
|
||||
f->f_mode = OPEN_FMODE(flags);
|
||||
f->f_mode |= FMODE_OPENED;
|
||||
|
||||
return f;
|
||||
|
||||
err_private_data_addr:
|
||||
kfree(private_data);
|
||||
err_private_data:
|
||||
kfree(mapping);
|
||||
err_mapping:
|
||||
kfree(inode);
|
||||
err_inode:
|
||||
kfree(f);
|
||||
return (struct file*)ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
|
||||
struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
|
||||
pgoff_t index, gfp_t gfp)
|
||||
{
|
||||
struct page *p;
|
||||
struct shmem_file_buffer *private_data;
|
||||
|
||||
if (index > mapping->nrpages)
|
||||
return NULL;
|
||||
|
||||
private_data = mapping->private_data;
|
||||
|
||||
p = private_data->pages;
|
||||
return (p + index);
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
|
||||
#include <linux/swiotlb.h>
|
||||
|
||||
unsigned int swiotlb_max_segment(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return PAGE_SIZE * 512;
|
||||
}
|
||||
|
||||
|
||||
bool is_swiotlb_active(void)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* linux/mm/page_alloc.c */
|
||||
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
|
||||
{
|
||||
struct page *page = alloc_pages(gfp_mask & ~__GFP_HIGHMEM, order);
|
||||
|
||||
if (!page)
|
||||
return 0;
|
||||
|
||||
return (unsigned long) page_address(page);
|
||||
}
|
||||
|
||||
|
||||
/* linux/mm/page_alloc.c */
|
||||
void free_pages(unsigned long addr, unsigned int order)
|
||||
{
|
||||
if (addr != 0) {
|
||||
__free_pages(virt_to_page((void *)addr), order);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void intel_gt_init_early(struct intel_gt * gt, struct drm_i915_private * i915)
|
||||
{
|
||||
gt->i915 = i915;
|
||||
gt->uncore = &i915->uncore;
|
||||
|
||||
spin_lock_init(>->irq_lock);
|
||||
|
||||
INIT_LIST_HEAD(>->closed_vma);
|
||||
spin_lock_init(>->closed_lock);
|
||||
|
||||
init_llist_head(>->watchdog.list);
|
||||
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
void __iomem * ioremap_wc(resource_size_t phys_addr, unsigned long size)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return lx_emul_io_mem_map(phys_addr, size);
|
||||
}
|
||||
|
||||
|
||||
int iomap_create_wc(resource_size_t base, unsigned long size, pgprot_t *prot)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void intel_rps_mark_interactive(struct intel_rps * rps, bool interactive)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
bool is_vmalloc_addr(const void * addr)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void * memremap(resource_size_t offset, size_t size, unsigned long flags)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void intel_vgpu_detect(struct drm_i915_private * dev_priv)
|
||||
{
|
||||
/*
|
||||
* We don't want to use the GPU in this display driver.
|
||||
* By setting the ppgtt support to NONE, code paths in early driver
|
||||
* probe/boot up are not trigged (INTEL_PPGTT_ALIASING, Lenovo T420)
|
||||
*/
|
||||
|
||||
struct intel_device_info *info = mkwrite_device_info(dev_priv);
|
||||
info->ppgtt_type = INTEL_PPGTT_NONE;
|
||||
|
||||
printk("disabling PPGTT to avoid GPU code paths\n");
|
||||
}
|
||||
|
||||
|
||||
void call_rcu(struct rcu_head * head, rcu_callback_t func)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
|
||||
func(head);
|
||||
}
|
47
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h
Normal file
47
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h
Normal file
@ -0,0 +1,47 @@
|
||||
/**
|
||||
* \brief Dummy definitions of Linux Kernel functions
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2021-03-16
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
|
||||
/* Needed to trace and stop */
|
||||
#include <lx_emul/debug.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* fix for wait_for_completion_timeout where the __sched include is missing */
|
||||
#include <linux/sched/debug.h>
|
||||
|
||||
struct dma_fence_work;
|
||||
struct dma_fence_work_ops;
|
||||
|
||||
void lx_emul_time_udelay(unsigned long usec);
|
||||
|
||||
/* shadow/asm/io.h */
|
||||
void lx_emul_io_port_outb(unsigned char value, unsigned short port);
|
||||
void lx_emul_io_port_outw(unsigned short value, unsigned short port);
|
||||
void lx_emul_io_port_outl(unsigned int value, unsigned short port);
|
||||
|
||||
unsigned char lx_emul_io_port_inb(unsigned short port);
|
||||
unsigned short lx_emul_io_port_inw(unsigned short port);
|
||||
unsigned int lx_emul_io_port_inl(unsigned short port);
|
||||
|
||||
void *emul_alloc_shmem_file_buffer(unsigned long);
|
||||
|
||||
|
||||
#include "lx_i915.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
29
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul/fb.h
Normal file
29
repos/pc/src/drivers/framebuffer/intel/pc/lx_emul/fb.h
Normal file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* \brief Lx_emul support to register Linux kernel framebuffer
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2021-05-17
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#ifndef _LX_EMUL__FB_H_
|
||||
#define _LX_EMUL__FB_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void lx_emul_framebuffer_ready(void * base, unsigned long size,
|
||||
unsigned xres, unsigned yres,
|
||||
unsigned virtual_width, unsigned virtual_height);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LX_EMUL__FB_H_ */
|
@ -0,0 +1,193 @@
|
||||
/*
|
||||
* \brief Array defining order of Linux Kernel initcalls
|
||||
* \author Automatically generated file - do no edit
|
||||
* \date 2022-02-02
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
static const char * lx_emul_initcall_order[] = {
|
||||
"__initcall_init_hw_perf_eventsearly",
|
||||
"__initcall_start",
|
||||
"__initcall_init_real_modeearly",
|
||||
"__initcall_validate_x2apicearly",
|
||||
"__initcall_register_nmi_cpu_backtrace_handlerearly",
|
||||
"__initcall_spawn_ksoftirqdearly",
|
||||
"__initcall_static_call_initearly",
|
||||
"__initcall_init_zero_pfnearly",
|
||||
"__initcall_initialize_ptr_randomearly",
|
||||
"__initcall_init_mmap_min_addr0",
|
||||
"__initcall_pci_realloc_setup_params0",
|
||||
"__initcall_e820__register_nvs_regions1",
|
||||
"__initcall_reboot_init1",
|
||||
"__initcall_wq_sysfs_init1",
|
||||
"__initcall_ksysfs_init1",
|
||||
"__initcall_rcu_set_runtime_mode1",
|
||||
"__initcall_init_jiffies_clocksource1",
|
||||
"__initcall_init_script_binfmt1",
|
||||
"__initcall_init_elf_binfmt1",
|
||||
"__initcall_prandom_init_early1",
|
||||
"__initcall_cpuidle_init1",
|
||||
"__initcall_irq_sysfs_init2",
|
||||
"__initcall_bdi_class_init2",
|
||||
"__initcall_mm_sysfs_init2",
|
||||
"__initcall_init_per_zone_wmark_min2",
|
||||
"__initcall_pcibus_class_init2",
|
||||
"__initcall_pci_driver_init2",
|
||||
"__initcall_backlight_class_init2",
|
||||
"__initcall_tty_class_init2",
|
||||
"__initcall_vtconsole_class_init2",
|
||||
"__initcall_mipi_dsi_bus_init2",
|
||||
"__initcall_devlink_class_init2",
|
||||
"__initcall_software_node_init2",
|
||||
"__initcall_i2c_init2",
|
||||
"__initcall_thermal_init2",
|
||||
"__initcall_init_ladder2",
|
||||
"__initcall_amd_postcore_init2",
|
||||
"__initcall_bts_init3",
|
||||
"__initcall_pt_init3",
|
||||
"__initcall_boot_params_ksysfs_init3",
|
||||
"__initcall_sbf_init3",
|
||||
"__initcall_arch_kdebugfs_init3",
|
||||
"__initcall_intel_pconfig_init3",
|
||||
"__initcall_ffh_cstate_init3",
|
||||
"__initcall_kcmp_cookies_init3",
|
||||
"__initcall_acpi_pci_init3",
|
||||
"__initcall_pci_arch_init3",
|
||||
"__initcall_init_vdso4",
|
||||
"__initcall_fixup_ht_bug4",
|
||||
"__initcall_topology_init4",
|
||||
"__initcall_uid_cache_init4",
|
||||
"__initcall_param_sysfs_init4",
|
||||
"__initcall_user_namespace_sysctl_init4",
|
||||
"__initcall_oom_init4",
|
||||
"__initcall_default_bdi_init4",
|
||||
"__initcall_percpu_enable_async4",
|
||||
"__initcall_init_user_reserve4",
|
||||
"__initcall_init_admin_reserve4",
|
||||
"__initcall_init_reserve_notifier4",
|
||||
"__initcall_pci_slot_init4",
|
||||
"__initcall_fbmem_init4",
|
||||
"__initcall_acpi_init4",
|
||||
"__initcall_pnp_init4",
|
||||
"__initcall_misc_init4",
|
||||
"__initcall_dma_buf_init4",
|
||||
"__initcall_serio_init4",
|
||||
"__initcall_input_init4",
|
||||
"__initcall_power_supply_class_init4",
|
||||
"__initcall_pci_subsys_init4",
|
||||
"__initcall_nmi_warning_debugfs5",
|
||||
"__initcall_hpet_late_init5",
|
||||
"__initcall_init_amd_nbs5",
|
||||
"__initcall_iomem_init_inode5",
|
||||
"__initcall_clocksource_done_booting5",
|
||||
"__initcall_init_pipe_fs5",
|
||||
"__initcall_anon_inode_init5",
|
||||
"__initcall_proc_cmdline_init5",
|
||||
"__initcall_proc_consoles_init5",
|
||||
"__initcall_proc_cpuinfo_init5",
|
||||
"__initcall_proc_devices_init5",
|
||||
"__initcall_proc_interrupts_init5",
|
||||
"__initcall_proc_loadavg_init5",
|
||||
"__initcall_proc_meminfo_init5",
|
||||
"__initcall_proc_stat_init5",
|
||||
"__initcall_proc_uptime_init5",
|
||||
"__initcall_proc_version_init5",
|
||||
"__initcall_proc_softirqs_init5",
|
||||
"__initcall_proc_kmsg_init5",
|
||||
"__initcall_proc_page_init5",
|
||||
"__initcall_init_ramfs_fs5",
|
||||
"__initcall_acpi_event_init5",
|
||||
"__initcall_pnp_system_init5",
|
||||
"__initcall_pnpacpi_init5",
|
||||
"__initcall_chr_dev_init5",
|
||||
"__initcall_init_acpi_pm_clocksource5",
|
||||
"__initcall_pcibios_assign_resources5",
|
||||
"__initcall_pci_apply_final_quirks5s",
|
||||
"__initcall_acpi_reserve_resources5s",
|
||||
"__initcall_populate_rootfsrootfs",
|
||||
"__initcall_pci_iommu_initrootfs",
|
||||
"__initcall_rapl_pmu_init6",
|
||||
"__initcall_amd_uncore_init6",
|
||||
"__initcall_amd_ibs_init6",
|
||||
"__initcall_msr_init6",
|
||||
"__initcall_intel_uncore_init6",
|
||||
"__initcall_cstate_pmu_init6",
|
||||
"__initcall_register_kernel_offset_dumper6",
|
||||
"__initcall_i8259A_init_ops6",
|
||||
"__initcall_init_tsc_clocksource6",
|
||||
"__initcall_add_rtc_cmos6",
|
||||
"__initcall_umwait_init6",
|
||||
"__initcall_ioapic_init_ops6",
|
||||
"__initcall_sysfb_init6",
|
||||
"__initcall_iosf_mbi_init6",
|
||||
"__initcall_proc_execdomains_init6",
|
||||
"__initcall_ioresources_init6",
|
||||
"__initcall_timekeeping_init_ops6",
|
||||
"__initcall_init_clocksource_sysfs6",
|
||||
"__initcall_init_timer_list_procfs6",
|
||||
"__initcall_alarmtimer_init6",
|
||||
"__initcall_clockevents_init_sysfs6",
|
||||
"__initcall_utsname_sysctl_init6",
|
||||
"__initcall_perf_event_sysfs_init6",
|
||||
"__initcall_kswapd_init6",
|
||||
"__initcall_workingset_init6",
|
||||
"__initcall_proc_vmalloc_init6",
|
||||
"__initcall_fcntl_init6",
|
||||
"__initcall_proc_filesystems_init6",
|
||||
"__initcall_start_dirtytime_writeback6",
|
||||
"__initcall_init_devpts_fs6",
|
||||
"__initcall_pci_proc_init6",
|
||||
"__initcall_ged_driver_init6",
|
||||
"__initcall_acpi_ac_init6",
|
||||
"__initcall_acpi_button_driver_init6",
|
||||
"__initcall_acpi_fan_driver_init6",
|
||||
"__initcall_acpi_video_init6",
|
||||
"__initcall_acpi_processor_driver_init6",
|
||||
"__initcall_acpi_thermal_init6",
|
||||
"__initcall_acpi_battery_init6",
|
||||
"__initcall_gpio_clk_driver_init6",
|
||||
"__initcall_plt_clk_driver_init6",
|
||||
"__initcall_n_null_init6",
|
||||
"__initcall_pty_init6",
|
||||
"__initcall_serial8250_init6",
|
||||
"__initcall_serial_pci_driver_init6",
|
||||
"__initcall_exar_pci_driver_init6",
|
||||
"__initcall_lpss8250_pci_driver_init6",
|
||||
"__initcall_mid8250_pci_driver_init6",
|
||||
"__initcall_drm_kms_helper_init6",
|
||||
"__initcall_drm_core_init6",
|
||||
"__initcall_i915_init6",
|
||||
"__initcall_topology_sysfs_init6",
|
||||
"__initcall_cacheinfo_sysfs_init6",
|
||||
"__initcall_i8042_init6",
|
||||
"__initcall_serport_init6",
|
||||
"__initcall_atkbd_init6",
|
||||
"__initcall_psmouse_init6",
|
||||
"__initcall_pkg_temp_thermal_init6",
|
||||
"__initcall_thermal_throttle_init_device6",
|
||||
"__initcall_pmc_atom_init6",
|
||||
"__initcall_hpet_insert_resource7",
|
||||
"__initcall_update_mp_table7",
|
||||
"__initcall_lapic_insert_resource7",
|
||||
"__initcall_print_ICs7",
|
||||
"__initcall_create_tlb_single_page_flush_ceiling7",
|
||||
"__initcall_init_oops_id7",
|
||||
"__initcall_reboot_ksysfs_init7",
|
||||
"__initcall_sched_clock_init_late7",
|
||||
"__initcall_sched_init_debug7",
|
||||
"__initcall_cpu_latency_qos_init7",
|
||||
"__initcall_printk_late_init7",
|
||||
"__initcall_check_early_ioremap_leak7",
|
||||
"__initcall_prandom_init_late7",
|
||||
"__initcall_pci_resource_alignment_sysfs_init7",
|
||||
"__initcall_pci_sysfs_init7",
|
||||
"__initcall_sync_state_resume_initcall7",
|
||||
"__initcall_deferred_probe_initcall7",
|
||||
"__initcall_pci_mmcfg_late_insert_resources7",
|
||||
"__initcall_clk_disable_unused7s",
|
||||
"__initcall_con_initcon",
|
||||
"__initcall_end",
|
||||
"__initcall_univ8250_console_initcon",
|
||||
"END_OF_INITCALL_ORDER_ARRAY_DUMMY_ENTRY"
|
||||
};
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* \brief PCI fixups
|
||||
* \author Josef Soentgen
|
||||
* \date 2022-01-20
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
static const char * lx_emul_pci_final_fixups[] = {
|
||||
"END_OF_PCI_FIXUPS"
|
||||
};
|
37
repos/pc/src/drivers/framebuffer/intel/pc/lx_i915.h
Normal file
37
repos/pc/src/drivers/framebuffer/intel/pc/lx_i915.h
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* \brief Interface used between Genode config/report (C++) and lx_user (C)
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-02-17
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#ifndef _LX_I915_H_
|
||||
#define _LX_I915_H_
|
||||
|
||||
struct genode_mode {
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
unsigned hz;
|
||||
unsigned brightness;
|
||||
unsigned enabled;
|
||||
unsigned preferred;
|
||||
unsigned id;
|
||||
char name[32];
|
||||
};
|
||||
|
||||
void lx_emul_i915_report(void * lx_data, void * genode_xml);
|
||||
void lx_emul_i915_hotplug_connector(void * lx_data);
|
||||
void lx_emul_i915_report_connector(void * lx_data, void * genode_xml,
|
||||
char const *name, char connected,
|
||||
unsigned brightness);
|
||||
void lx_emul_i915_iterate_modes(void *lx_data, void * genode_data);
|
||||
void lx_emul_i915_report_modes(void * genode_xml, struct genode_mode *);
|
||||
void lx_emul_i915_connector_config(char * name, struct genode_mode *);
|
||||
|
||||
#endif /* _LX_I915_H_ */
|
457
repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c
Normal file
457
repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c
Normal file
@ -0,0 +1,457 @@
|
||||
/*
|
||||
* \brief Post kernel activity
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-03-08
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <linux/sched/task.h>
|
||||
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_print.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "display/intel_display_types.h"
|
||||
#include "display/intel_opregion.h"
|
||||
#include "display/intel_panel.h"
|
||||
|
||||
#include "lx_emul.h"
|
||||
|
||||
|
||||
enum { MAX_BRIGHTNESS = 100, INVALID_BRIGHTNESS = MAX_BRIGHTNESS + 1 };
|
||||
|
||||
struct task_struct * lx_user_task = NULL;
|
||||
|
||||
static struct drm_i915_private *i915 = NULL;
|
||||
|
||||
static struct drm_fb_helper * i915_fb(void) { return &i915->fbdev->helper; }
|
||||
|
||||
|
||||
/*
|
||||
* Heuristic to calculate max resolution across all connectors
|
||||
*/
|
||||
static void preferred_mode(struct drm_display_mode *prefer)
|
||||
{
|
||||
struct drm_connector *connector = NULL;
|
||||
struct drm_display_mode *mode = NULL;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
|
||||
/* read Genode's config per connector */
|
||||
drm_connector_list_iter_begin(i915_fb()->dev, &conn_iter);
|
||||
drm_client_for_each_connector_iter(connector, &conn_iter) {
|
||||
struct genode_mode conf_mode = { .enabled = 1 };
|
||||
|
||||
/* check for connector configuration on Genode side */
|
||||
lx_emul_i915_connector_config(connector->name, &conf_mode);
|
||||
|
||||
if (!conf_mode.enabled || !conf_mode.width || !conf_mode.height)
|
||||
continue;
|
||||
|
||||
if (conf_mode.width * conf_mode.height > prefer->hdisplay * prefer->vdisplay) {
|
||||
prefer->hdisplay = conf_mode.width;
|
||||
prefer->vdisplay = conf_mode.height;
|
||||
}
|
||||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
|
||||
/* if nothing was configured by Genode's config, apply heuristic */
|
||||
if (!prefer->hdisplay || !prefer->vdisplay) {
|
||||
drm_connector_list_iter_begin(i915_fb()->dev, &conn_iter);
|
||||
drm_client_for_each_connector_iter(connector, &conn_iter) {
|
||||
list_for_each_entry(mode, &connector->modes, head) {
|
||||
if (!mode)
|
||||
continue;
|
||||
|
||||
if (mode->hdisplay * mode->vdisplay > prefer->hdisplay * prefer->vdisplay) {
|
||||
prefer->hdisplay = mode->hdisplay;
|
||||
prefer->vdisplay = mode->vdisplay;
|
||||
}
|
||||
}
|
||||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void set_brightness(unsigned brightness, struct drm_connector * connector)
|
||||
{
|
||||
struct intel_connector * intel_c = to_intel_connector(connector);
|
||||
if (intel_c)
|
||||
intel_panel_set_backlight_acpi(intel_c->base.state, brightness, MAX_BRIGHTNESS);
|
||||
}
|
||||
|
||||
|
||||
static unsigned get_brightness(struct drm_connector * const connector,
|
||||
unsigned const brightness_error)
|
||||
{
|
||||
struct intel_connector * intel_c = NULL;
|
||||
struct intel_panel * panel = NULL;
|
||||
unsigned ret;
|
||||
|
||||
if (!connector)
|
||||
return brightness_error;
|
||||
|
||||
intel_c = to_intel_connector(connector);
|
||||
if (!intel_c)
|
||||
return brightness_error;
|
||||
|
||||
panel = &intel_c->panel;
|
||||
|
||||
if (!panel || !panel->backlight.device || !panel->backlight.device->ops ||
|
||||
!panel->backlight.device->ops->get_brightness)
|
||||
return brightness_error;
|
||||
|
||||
ret = panel->backlight.device->ops->get_brightness(panel->backlight.device);
|
||||
|
||||
/* in percentage */
|
||||
return ret * MAX_BRIGHTNESS / panel->backlight.device->props.max_brightness;
|
||||
}
|
||||
|
||||
|
||||
static bool reconfigure(void * data)
|
||||
{
|
||||
struct drm_display_mode *mode = NULL;
|
||||
struct drm_display_mode mode_preferred = {};
|
||||
struct drm_mode_set *mode_set = NULL;
|
||||
struct fb_info report_fb_info = {};
|
||||
bool report_fb = false;
|
||||
bool retry = false;
|
||||
|
||||
if (!i915_fb())
|
||||
return retry;
|
||||
|
||||
BUG_ON(!i915_fb()->funcs);
|
||||
BUG_ON(!i915_fb()->funcs->fb_probe);
|
||||
|
||||
preferred_mode(&mode_preferred);
|
||||
|
||||
if (mode_preferred.hdisplay && mode_preferred.vdisplay) {
|
||||
unsigned err = 0;
|
||||
struct drm_fb_helper_surface_size sizes = {};
|
||||
|
||||
sizes.surface_depth = 32;
|
||||
sizes.surface_bpp = 32;
|
||||
sizes.fb_width = mode_preferred.hdisplay;
|
||||
sizes.fb_height = mode_preferred.vdisplay;
|
||||
sizes.surface_width = sizes.fb_width;
|
||||
sizes.surface_height = sizes.fb_height;
|
||||
|
||||
err = (*i915_fb()->funcs->fb_probe)(i915_fb(), &sizes);
|
||||
/* i915_fb()->fb contains adjusted drm_frambuffer object */
|
||||
|
||||
if (err || !i915_fb()->fbdev)
|
||||
printk("setting up framebuffer failed - error=%d\n", err);
|
||||
}
|
||||
|
||||
if (!i915_fb()->fb)
|
||||
return retry;
|
||||
|
||||
/* data is adjusted if virtual resolution is not same size as physical fb */
|
||||
report_fb_info = *i915_fb()->fbdev;
|
||||
|
||||
drm_client_for_each_modeset(mode_set, &(i915_fb()->client)) {
|
||||
struct drm_display_mode *mode_match = NULL;
|
||||
unsigned mode_id = 0;
|
||||
struct drm_connector *connector = NULL;
|
||||
|
||||
struct genode_mode conf_mode = { .enabled = 1,
|
||||
.brightness = INVALID_BRIGHTNESS };
|
||||
|
||||
if (!mode_set->connectors || !*mode_set->connectors)
|
||||
continue;
|
||||
|
||||
BUG_ON(!mode_set->crtc);
|
||||
|
||||
/* set connector */
|
||||
connector = *mode_set->connectors;
|
||||
|
||||
/* read configuration of connector */
|
||||
lx_emul_i915_connector_config(connector->name, &conf_mode);
|
||||
|
||||
/* heuristics to find matching mode */
|
||||
list_for_each_entry(mode, &connector->modes, head) {
|
||||
mode_id ++;
|
||||
|
||||
if (!mode)
|
||||
continue;
|
||||
|
||||
/* use mode id if configured and matches exactly */
|
||||
if (conf_mode.id && (conf_mode.id == mode_id)) {
|
||||
mode_match = mode;
|
||||
break;
|
||||
}
|
||||
|
||||
/* if invalid, mode is configured in second loop below */
|
||||
if (conf_mode.width == 0 || conf_mode.height == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* no exact match by mode id -> try matching by size */
|
||||
if ((mode->hdisplay != conf_mode.width) ||
|
||||
(mode->vdisplay != conf_mode.height))
|
||||
continue;
|
||||
|
||||
/* take as default any mode with matching resolution */
|
||||
if (!mode_match) {
|
||||
mode_match = mode;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* replace matching mode iif hz matches exactly */
|
||||
if ((conf_mode.hz != drm_mode_vrefresh(mode_match)) &&
|
||||
(conf_mode.hz == drm_mode_vrefresh(mode)))
|
||||
mode_match = mode;
|
||||
}
|
||||
|
||||
/* apply new mode */
|
||||
mode_id = 0;
|
||||
list_for_each_entry(mode, &connector->modes, head) {
|
||||
struct drm_mode_set set;
|
||||
int err = -1;
|
||||
bool no_match = false;
|
||||
|
||||
mode_id ++;
|
||||
|
||||
if (!mode)
|
||||
continue;
|
||||
|
||||
/* no matching mode ? */
|
||||
if (!mode_match) {
|
||||
/* use first mode */
|
||||
mode_match = mode;
|
||||
/* set up preferred resolution as virtual, if nothing is enforced */
|
||||
if (!conf_mode.preferred &&
|
||||
mode_preferred.hdisplay &&
|
||||
mode_preferred.vdisplay) {
|
||||
conf_mode.preferred = 1;
|
||||
conf_mode.width = mode_preferred.hdisplay;
|
||||
conf_mode.height = mode_preferred.vdisplay;
|
||||
}
|
||||
no_match = mode->hdisplay != conf_mode.width ||
|
||||
mode->vdisplay != conf_mode.height;
|
||||
}
|
||||
|
||||
if (mode_match != mode)
|
||||
continue;
|
||||
|
||||
set.crtc = mode_set->crtc;
|
||||
set.x = 0;
|
||||
set.y = 0;
|
||||
set.mode = conf_mode.enabled ? mode : NULL;
|
||||
set.connectors = &connector;
|
||||
set.num_connectors = conf_mode.enabled ? 1 : 0;
|
||||
set.fb = conf_mode.enabled ? i915_fb()->fb : NULL;
|
||||
|
||||
if (set.crtc->funcs && set.crtc->funcs->set_config &&
|
||||
drm_drv_uses_atomic_modeset(i915_fb()->dev)) {
|
||||
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
|
||||
DRM_MODESET_LOCK_ALL_BEGIN(i915_fb()->dev, ctx,
|
||||
DRM_MODESET_ACQUIRE_INTERRUPTIBLE,
|
||||
err);
|
||||
err = set.crtc->funcs->set_config(&set, &ctx);
|
||||
|
||||
if (!err && conf_mode.enabled && conf_mode.brightness <= MAX_BRIGHTNESS)
|
||||
set_brightness(conf_mode.brightness, connector);
|
||||
|
||||
DRM_MODESET_LOCK_ALL_END(i915_fb()->dev, ctx, err);
|
||||
|
||||
if (err)
|
||||
retry = true;
|
||||
else {
|
||||
report_fb = true;
|
||||
|
||||
/* report forced resolution */
|
||||
if (conf_mode.preferred) {
|
||||
report_fb_info.var.xres_virtual = conf_mode.width;
|
||||
report_fb_info.var.yres_virtual = conf_mode.height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printk("%s: %s name='%s' id=%u %ux%u@%u%s",
|
||||
connector->name ? connector->name : "unnamed",
|
||||
conf_mode.enabled ? " enable" : "disable",
|
||||
mode->name ? mode->name : "noname",
|
||||
mode_id, mode->hdisplay,
|
||||
mode->vdisplay, drm_mode_vrefresh(mode),
|
||||
(err || no_match) ? "" : "\n");
|
||||
|
||||
if (no_match)
|
||||
printk(" - no mode match: %ux%u\n",
|
||||
conf_mode.width,
|
||||
conf_mode.height);
|
||||
if (err)
|
||||
printk(" - failed, error=%d\n", err);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (report_fb)
|
||||
register_framebuffer(&report_fb_info);
|
||||
|
||||
return retry;
|
||||
}
|
||||
|
||||
|
||||
static int configure_connectors(void * data)
|
||||
{
|
||||
unsigned retry_count = 0;
|
||||
|
||||
while (true) {
|
||||
bool retry = reconfigure(data);
|
||||
|
||||
if (retry && retry_count < 3) {
|
||||
retry_count ++;
|
||||
|
||||
printk("retry applying configuration in 1s\n");
|
||||
msleep(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
retry_count = 0;
|
||||
|
||||
lx_emul_task_schedule(true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void lx_user_init(void)
|
||||
{
|
||||
int pid = kernel_thread(configure_connectors, NULL, CLONE_FS | CLONE_FILES);
|
||||
lx_user_task = find_task_by_pid_ns(pid, NULL);;
|
||||
}
|
||||
|
||||
|
||||
static int genode_fb_client_hotplug(struct drm_client_dev *client)
|
||||
{
|
||||
lx_emul_i915_hotplug_connector(client);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void lx_emul_i915_report(void * lx_data, void * genode_data)
|
||||
{
|
||||
struct drm_client_dev *client = lx_data;
|
||||
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
|
||||
struct drm_device const *dev = client->dev;
|
||||
struct drm_connector *connector = NULL;
|
||||
|
||||
drm_connector_list_iter_begin(dev, &conn_iter);
|
||||
drm_client_for_each_connector_iter(connector, &conn_iter) {
|
||||
lx_emul_i915_report_connector(connector, genode_data,
|
||||
connector->name,
|
||||
!!connector->encoder /* connected */,
|
||||
get_brightness(connector, INVALID_BRIGHTNESS));
|
||||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
}
|
||||
|
||||
|
||||
void lx_emul_i915_iterate_modes(void * lx_data, void * genode_data)
|
||||
{
|
||||
struct drm_connector *connector = lx_data;
|
||||
struct drm_display_mode *mode = NULL;
|
||||
struct drm_display_mode *prev_mode = NULL;
|
||||
unsigned mode_id = 0;
|
||||
|
||||
list_for_each_entry(mode, &connector->modes, head) {
|
||||
bool skip = false;
|
||||
|
||||
mode_id ++;
|
||||
|
||||
if (!mode)
|
||||
continue;
|
||||
|
||||
/* skip duplicates - actually not really, some parameters varies ?! */
|
||||
if (prev_mode) {
|
||||
skip = (mode->hdisplay == prev_mode->hdisplay) &&
|
||||
(mode->vdisplay == prev_mode->vdisplay) &&
|
||||
(drm_mode_vrefresh(mode) == drm_mode_vrefresh(prev_mode)) &&
|
||||
!strncmp(mode->name, prev_mode->name, DRM_DISPLAY_MODE_LEN);
|
||||
}
|
||||
|
||||
if (!skip) {
|
||||
struct genode_mode conf_mode = { .width = mode->hdisplay,
|
||||
.height = mode->vdisplay,
|
||||
.preferred = mode->type & (DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DEFAULT),
|
||||
.hz = drm_mode_vrefresh(mode),
|
||||
.id = mode_id
|
||||
};
|
||||
|
||||
static_assert(sizeof(conf_mode.name) == DRM_DISPLAY_MODE_LEN);
|
||||
memcpy(conf_mode.name, mode->name, sizeof(conf_mode.name));
|
||||
|
||||
lx_emul_i915_report_modes(genode_data, &conf_mode);
|
||||
}
|
||||
|
||||
prev_mode = mode;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static const struct drm_client_funcs drm_fbdev_client_funcs = {
|
||||
.owner = THIS_MODULE,
|
||||
.hotplug = genode_fb_client_hotplug,
|
||||
};
|
||||
|
||||
|
||||
static void hotplug_setup(struct drm_device *dev)
|
||||
{
|
||||
struct drm_fb_helper *hotplug_helper;
|
||||
int ret;
|
||||
|
||||
hotplug_helper = kzalloc(sizeof(*hotplug_helper), GFP_KERNEL);
|
||||
if (!hotplug_helper) {
|
||||
drm_err(dev, "Failed to allocate fb_helper\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = drm_client_init(dev, &hotplug_helper->client, "fbdev",
|
||||
&drm_fbdev_client_funcs);
|
||||
if (ret) {
|
||||
kfree(hotplug_helper);
|
||||
drm_err(dev, "Failed to register client: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
hotplug_helper->preferred_bpp = 32;
|
||||
|
||||
ret = genode_fb_client_hotplug(&hotplug_helper->client);
|
||||
if (ret)
|
||||
drm_dbg_kms(dev, "client hotplug ret=%d\n", ret);
|
||||
|
||||
drm_client_register(&hotplug_helper->client);
|
||||
|
||||
hotplug_helper->dev = dev;
|
||||
}
|
||||
|
||||
|
||||
int i915_switcheroo_register(struct drm_i915_private *i915_private)
|
||||
{
|
||||
/* get hold of the function pointers we need for mode setting */
|
||||
i915 = i915_private;
|
||||
|
||||
/* register dummy fb_helper to get notifications about hotplug events */
|
||||
hotplug_setup(&i915_private->drm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void i915_switcheroo_unregister(struct drm_i915_private *i915)
|
||||
{
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
}
|
310
repos/pc/src/drivers/framebuffer/intel/pc/main.cc
Normal file
310
repos/pc/src/drivers/framebuffer/intel/pc/main.cc
Normal file
@ -0,0 +1,310 @@
|
||||
/*
|
||||
* \brief Linux Intel framebuffer driver port
|
||||
* \author Alexander Boettcher
|
||||
* \date 2022-03-08
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <base/attached_rom_dataspace.h>
|
||||
#include <base/component.h>
|
||||
#include <timer_session/connection.h>
|
||||
#include <capture_session/connection.h>
|
||||
#include <os/pixel_rgb888.h>
|
||||
#include <os/reporter.h>
|
||||
#include <util/reconstructible.h>
|
||||
|
||||
/* emulation includes */
|
||||
#include <lx_emul/init.h>
|
||||
#include <lx_emul/fb.h>
|
||||
#include <lx_emul/task.h>
|
||||
#include <lx_kit/env.h>
|
||||
#include <lx_kit/init.h>
|
||||
|
||||
/* local includes */
|
||||
extern "C" {
|
||||
#include "lx_i915.h"
|
||||
}
|
||||
|
||||
|
||||
extern struct task_struct * lx_user_task;
|
||||
|
||||
|
||||
namespace Framebuffer {
|
||||
using namespace Genode;
|
||||
struct Driver;
|
||||
}
|
||||
|
||||
|
||||
struct Framebuffer::Driver
|
||||
{
|
||||
Env &env;
|
||||
Timer::Connection timer { env };
|
||||
Attached_rom_dataspace config { env, "config" };
|
||||
Reporter reporter { env, "connectors" };
|
||||
|
||||
Signal_handler<Driver> config_handler { env.ep(), *this,
|
||||
&Driver::config_update };
|
||||
Signal_handler<Driver> timer_handler { env.ep(), *this,
|
||||
&Driver::handle_timer };
|
||||
|
||||
class Fb
|
||||
{
|
||||
private:
|
||||
|
||||
Capture::Connection _capture;
|
||||
Capture::Area const _size;
|
||||
Capture::Area const _size_phys;
|
||||
Capture::Connection::Screen _captured_screen;
|
||||
void * _base;
|
||||
|
||||
/*
|
||||
* Non_copyable
|
||||
*/
|
||||
Fb(const Fb&);
|
||||
Fb & operator=(const Fb&);
|
||||
|
||||
public:
|
||||
|
||||
void paint()
|
||||
{
|
||||
using Pixel = Capture::Pixel;
|
||||
Surface<Pixel> surface((Pixel*)_base, _size_phys);
|
||||
_captured_screen.apply_to_surface(surface);
|
||||
}
|
||||
|
||||
Fb(Env & env, void * base, Capture::Area size,
|
||||
Capture::Area size_phys)
|
||||
:
|
||||
_capture(env),
|
||||
_size(size),
|
||||
_size_phys(size_phys),
|
||||
_captured_screen(_capture, env.rm(), _size),
|
||||
_base(base) {}
|
||||
|
||||
bool same_setup(void * base, Capture::Area &size,
|
||||
Capture::Area &size_phys)
|
||||
{
|
||||
return ((base == _base) && (size == _size) &&
|
||||
(size_phys == _size_phys));
|
||||
}
|
||||
};
|
||||
|
||||
Constructible<Fb> fb {};
|
||||
|
||||
void config_update();
|
||||
void generate_report(void *);
|
||||
void lookup_config(char const *, struct genode_mode &mode);
|
||||
|
||||
void handle_timer()
|
||||
{
|
||||
if (fb.constructed()) { fb->paint(); }
|
||||
}
|
||||
|
||||
Driver(Env &env) : env(env)
|
||||
{
|
||||
Lx_kit::initialize(env);
|
||||
|
||||
config.sigh(config_handler);
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
log("--- Intel framebuffer driver started ---");
|
||||
|
||||
lx_emul_start_kernel(nullptr);
|
||||
|
||||
timer.sigh(timer_handler);
|
||||
timer.trigger_periodic(20*1000);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
enum { MAX_BRIGHTNESS = 100u };
|
||||
|
||||
|
||||
void Framebuffer::Driver::config_update()
|
||||
{
|
||||
config.update();
|
||||
|
||||
if (!config.valid() || !lx_user_task)
|
||||
return;
|
||||
|
||||
lx_emul_task_unblock(lx_user_task);
|
||||
Lx_kit::env().scheduler.schedule();
|
||||
}
|
||||
|
||||
|
||||
static Framebuffer::Driver & driver(Genode::Env & env)
|
||||
{
|
||||
static Framebuffer::Driver driver(env);
|
||||
return driver;
|
||||
}
|
||||
|
||||
|
||||
void Framebuffer::Driver::generate_report(void *lx_data)
|
||||
{
|
||||
/* check for report configuration option */
|
||||
try {
|
||||
reporter.enabled(config.xml().sub_node("report")
|
||||
.attribute_value(reporter.name().string(), false));
|
||||
} catch (...) {
|
||||
Genode::warning("Failed to enable report");
|
||||
reporter.enabled(false);
|
||||
}
|
||||
|
||||
if (!reporter.enabled()) return;
|
||||
|
||||
try {
|
||||
Genode::Reporter::Xml_generator xml(reporter, [&] ()
|
||||
{
|
||||
lx_emul_i915_report(lx_data, &xml);
|
||||
});
|
||||
} catch (...) {
|
||||
Genode::warning("Failed to generate report");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Framebuffer::Driver::lookup_config(char const * const name,
|
||||
struct genode_mode &mode)
|
||||
{
|
||||
if (!config.valid())
|
||||
return;
|
||||
|
||||
unsigned force_width = config.xml().attribute_value("force_width", 0u);
|
||||
unsigned force_height = config.xml().attribute_value("force_height", 0u);
|
||||
|
||||
/* iterate independently of force* ever to get brightness and hz */
|
||||
config.xml().for_each_sub_node("connector", [&] (Xml_node &node) {
|
||||
typedef String<32> Name;
|
||||
Name const con_policy = node.attribute_value("name", Name());
|
||||
if (con_policy != name)
|
||||
return;
|
||||
|
||||
mode.enabled = node.attribute_value("enabled", true);
|
||||
if (!mode.enabled)
|
||||
return;
|
||||
|
||||
mode.brightness = node.attribute_value("brightness",
|
||||
unsigned(MAX_BRIGHTNESS + 1));
|
||||
|
||||
mode.width = node.attribute_value("width", 0U);
|
||||
mode.height = node.attribute_value("height", 0U);
|
||||
mode.hz = node.attribute_value("hz", 0U);
|
||||
mode.id = node.attribute_value("mode_id", 0U);
|
||||
});
|
||||
|
||||
/* enforce forced width/height if configured */
|
||||
mode.preferred = force_width && force_height;
|
||||
if (mode.preferred) {
|
||||
mode.width = force_width;
|
||||
mode.height = force_height;
|
||||
mode.id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Can be called already as side-effect of `lx_emul_start_kernel`,
|
||||
* that's why the Driver object needs to be constructed already here.
|
||||
*/
|
||||
extern "C" void lx_emul_framebuffer_ready(void * base, unsigned long,
|
||||
unsigned xres, unsigned yres,
|
||||
unsigned phys_width,
|
||||
unsigned phys_height)
|
||||
{
|
||||
auto &env = Lx_kit::env().env;
|
||||
auto &drv = driver(env);
|
||||
auto &fb = drv.fb;
|
||||
|
||||
Capture::Area area(xres, yres);
|
||||
Capture::Area area_phys(phys_width, phys_height);
|
||||
|
||||
if (fb.constructed()) {
|
||||
if (fb->same_setup(base, area, area_phys))
|
||||
return;
|
||||
|
||||
fb.destruct();
|
||||
}
|
||||
|
||||
/* clear artefacts */
|
||||
if (area != area_phys)
|
||||
Genode::memset(base, 0, area_phys.count() * 4);
|
||||
|
||||
fb.construct(env, base, area, area_phys);
|
||||
|
||||
Genode::log("framebuffer reconstructed - virtual=", xres, "x", yres,
|
||||
" physical=", phys_width, "x", phys_height);
|
||||
}
|
||||
|
||||
|
||||
extern "C" void lx_emul_i915_hotplug_connector(void *data)
|
||||
{
|
||||
Genode::Env &env = Lx_kit::env().env;
|
||||
driver(env).generate_report(data);
|
||||
}
|
||||
|
||||
|
||||
void lx_emul_i915_report_connector(void * lx_data, void * genode_xml,
|
||||
char const *name, char const connected,
|
||||
unsigned brightness)
|
||||
{
|
||||
auto &xml = *reinterpret_cast<Genode::Reporter::Xml_generator *>(genode_xml);
|
||||
|
||||
xml.node("connector", [&] ()
|
||||
{
|
||||
xml.attribute("name", name);
|
||||
xml.attribute("connected", !!connected);
|
||||
|
||||
/* insane values means no brightness support - we use percentage */
|
||||
if (brightness <= MAX_BRIGHTNESS)
|
||||
xml.attribute("brightness", brightness);
|
||||
|
||||
lx_emul_i915_iterate_modes(lx_data, &xml);
|
||||
});
|
||||
|
||||
/* re-read config on connector change */
|
||||
Genode::Signal_transmitter(driver(Lx_kit::env().env).config_handler).submit();
|
||||
}
|
||||
|
||||
|
||||
void lx_emul_i915_report_modes(void * genode_xml, struct genode_mode *mode)
|
||||
{
|
||||
if (!genode_xml || !mode)
|
||||
return;
|
||||
|
||||
auto &xml = *reinterpret_cast<Genode::Reporter::Xml_generator *>(genode_xml);
|
||||
|
||||
xml.node("mode", [&] ()
|
||||
{
|
||||
xml.attribute("width", mode->width);
|
||||
xml.attribute("height", mode->height);
|
||||
xml.attribute("hz", mode->hz);
|
||||
xml.attribute("mode_id", mode->id);
|
||||
xml.attribute("mode_name", mode->name);
|
||||
if (mode->preferred)
|
||||
xml.attribute("preferred", true);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void lx_emul_i915_connector_config(char * name, struct genode_mode * mode)
|
||||
{
|
||||
if (!mode || !name)
|
||||
return;
|
||||
|
||||
Genode::Env &env = Lx_kit::env().env;
|
||||
driver(env).lookup_config(name, *mode);
|
||||
}
|
||||
|
||||
|
||||
void Component::construct(Genode::Env &env)
|
||||
{
|
||||
driver(env).start();
|
||||
}
|
20
repos/pc/src/drivers/framebuffer/intel/pc/misc.cc
Normal file
20
repos/pc/src/drivers/framebuffer/intel/pc/misc.cc
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* \brief Misc
|
||||
* \author Josef Soentgen
|
||||
* \date 2022-01-20
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2022 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <os/backtrace.h>
|
||||
|
||||
extern "C" void lx_backtrace(void)
|
||||
{
|
||||
Genode::backtrace();
|
||||
}
|
@ -0,0 +1,271 @@
|
||||
arch/x86/lib/delay.c
|
||||
arch/x86/lib/hweight.S
|
||||
arch/x86/pci/legacy.c
|
||||
arch/x86/platform/intel/iosf_mbi.c
|
||||
drivers/base/bus.c
|
||||
drivers/base/class.c
|
||||
drivers/base/component.c
|
||||
drivers/base/core.c
|
||||
drivers/base/dd.c
|
||||
drivers/base/devres.c
|
||||
drivers/base/driver.c
|
||||
drivers/base/platform.c
|
||||
drivers/base/property.c
|
||||
drivers/char/agp/intel-gtt.c
|
||||
drivers/clk/clk-devres.c
|
||||
drivers/dma-buf/dma-fence-array.c
|
||||
drivers/dma-buf/dma-fence.c
|
||||
drivers/dma-buf/dma-fence-chain.c
|
||||
drivers/dma-buf/dma-resv.c
|
||||
drivers/gpu/drm/drm_atomic.c
|
||||
drivers/gpu/drm/drm_atomic_helper.c
|
||||
drivers/gpu/drm/drm_atomic_state_helper.c
|
||||
drivers/gpu/drm/drm_atomic_uapi.c
|
||||
drivers/gpu/drm/drm_auth.c
|
||||
drivers/gpu/drm/drm_blend.c
|
||||
drivers/gpu/drm/drm_bridge.c
|
||||
drivers/gpu/drm/drm_cache.c
|
||||
drivers/gpu/drm/drm_client.c
|
||||
drivers/gpu/drm/drm_client_modeset.c
|
||||
drivers/gpu/drm/drm_color_mgmt.c
|
||||
drivers/gpu/drm/drm_connector.c
|
||||
drivers/gpu/drm/drm_crtc.c
|
||||
drivers/gpu/drm/drm_crtc_helper.c
|
||||
drivers/gpu/drm/drm_damage_helper.c
|
||||
drivers/gpu/drm/drm_displayid.c
|
||||
drivers/gpu/drm/drm_dp_dual_mode_helper.c
|
||||
drivers/gpu/drm/drm_dp_helper.c
|
||||
drivers/gpu/drm/drm_dp_mst_topology.c
|
||||
drivers/gpu/drm/drm_drv.c
|
||||
drivers/gpu/drm/drm_dsc.c
|
||||
drivers/gpu/drm/drm_edid.c
|
||||
drivers/gpu/drm/drm_encoder.c
|
||||
drivers/gpu/drm/drm_fb_helper.c
|
||||
drivers/gpu/drm/drm_file.c
|
||||
drivers/gpu/drm/drm_fourcc.c
|
||||
drivers/gpu/drm/drm_framebuffer.c
|
||||
drivers/gpu/drm/drm_gem.c
|
||||
drivers/gpu/drm/drm_hdcp.c
|
||||
drivers/gpu/drm/drm_managed.c
|
||||
drivers/gpu/drm/drm_mipi_dsi.c
|
||||
drivers/gpu/drm/drm_mm.c
|
||||
drivers/gpu/drm/drm_mode_config.c
|
||||
drivers/gpu/drm/drm_mode_object.c
|
||||
drivers/gpu/drm/drm_modes.c
|
||||
drivers/gpu/drm/drm_modeset_helper.c
|
||||
drivers/gpu/drm/drm_modeset_lock.c
|
||||
drivers/gpu/drm/drm_panel_orientation_quirks.c
|
||||
drivers/gpu/drm/drm_plane.c
|
||||
drivers/gpu/drm/drm_prime.c
|
||||
drivers/gpu/drm/drm_print.c
|
||||
drivers/gpu/drm/drm_probe_helper.c
|
||||
drivers/gpu/drm/drm_property.c
|
||||
drivers/gpu/drm/drm_rect.c
|
||||
drivers/gpu/drm/drm_syncobj.c
|
||||
drivers/gpu/drm/drm_sysfs.c
|
||||
drivers/gpu/drm/drm_vblank.c
|
||||
drivers/gpu/drm/drm_vblank_work.c
|
||||
drivers/gpu/drm/drm_vma_manager.c
|
||||
drivers/gpu/drm/i915/display/g4x_dp.c
|
||||
drivers/gpu/drm/i915/display/g4x_hdmi.c
|
||||
drivers/gpu/drm/i915/display/i9xx_plane.c
|
||||
drivers/gpu/drm/i915/display/icl_dsi.c
|
||||
drivers/gpu/drm/i915/display/intel_acpi.c
|
||||
drivers/gpu/drm/i915/display/intel_atomic.c
|
||||
drivers/gpu/drm/i915/display/intel_atomic_plane.c
|
||||
drivers/gpu/drm/i915/display/intel_audio.c
|
||||
drivers/gpu/drm/i915/display/intel_bios.c
|
||||
drivers/gpu/drm/i915/display/intel_bw.c
|
||||
drivers/gpu/drm/i915/display/intel_cdclk.c
|
||||
drivers/gpu/drm/i915/display/intel_color.c
|
||||
drivers/gpu/drm/i915/display/intel_combo_phy.c
|
||||
drivers/gpu/drm/i915/display/intel_connector.c
|
||||
drivers/gpu/drm/i915/display/intel_crt.c
|
||||
drivers/gpu/drm/i915/display/intel_crtc.c
|
||||
drivers/gpu/drm/i915/display/intel_cursor.c
|
||||
drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
|
||||
drivers/gpu/drm/i915/display/intel_ddi.c
|
||||
drivers/gpu/drm/i915/display/intel_display.c
|
||||
drivers/gpu/drm/i915/display/intel_display_power.c
|
||||
drivers/gpu/drm/i915/display/intel_dmc.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux.c
|
||||
drivers/gpu/drm/i915/display/intel_dp.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_hdcp.c
|
||||
drivers/gpu/drm/i915/display/intel_dpio_phy.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_link_training.c
|
||||
drivers/gpu/drm/i915/display/intel_dpll.c
|
||||
drivers/gpu/drm/i915/display/intel_dpll_mgr.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_mst.c
|
||||
drivers/gpu/drm/i915/display/intel_dsb.c
|
||||
drivers/gpu/drm/i915/display/intel_dsi.c
|
||||
drivers/gpu/drm/i915/display/intel_dsi_vbt.c
|
||||
drivers/gpu/drm/i915/display/intel_fb.c
|
||||
drivers/gpu/drm/i915/display/intel_fbc.c
|
||||
drivers/gpu/drm/i915/display/intel_fbdev.c
|
||||
drivers/gpu/drm/i915/display/intel_fdi.c
|
||||
drivers/gpu/drm/i915/display/intel_fifo_underrun.c
|
||||
drivers/gpu/drm/i915/display/intel_frontbuffer.c
|
||||
drivers/gpu/drm/i915/display/intel_global_state.c
|
||||
drivers/gpu/drm/i915/display/intel_gmbus.c
|
||||
drivers/gpu/drm/i915/display/intel_hdcp.c
|
||||
drivers/gpu/drm/i915/display/intel_hdmi.c
|
||||
drivers/gpu/drm/i915/display/intel_hotplug.c
|
||||
drivers/gpu/drm/i915/display/intel_lpe_audio.c
|
||||
drivers/gpu/drm/i915/display/intel_lspcon.c
|
||||
drivers/gpu/drm/i915/display/intel_lvds.c
|
||||
drivers/gpu/drm/i915/display/intel_opregion.c
|
||||
drivers/gpu/drm/i915/display/intel_overlay.c
|
||||
drivers/gpu/drm/i915/display/intel_panel.c
|
||||
drivers/gpu/drm/i915/display/intel_pps.c
|
||||
drivers/gpu/drm/i915/display/intel_psr.c
|
||||
drivers/gpu/drm/i915/display/intel_quirks.c
|
||||
drivers/gpu/drm/i915/display/intel_sdvo.c
|
||||
drivers/gpu/drm/i915/display/intel_sprite.c
|
||||
drivers/gpu/drm/i915/display/intel_tc.c
|
||||
drivers/gpu/drm/i915/display/intel_vdsc.c
|
||||
drivers/gpu/drm/i915/display/intel_vga.c
|
||||
drivers/gpu/drm/i915/display/intel_vrr.c
|
||||
drivers/gpu/drm/i915/display/skl_scaler.c
|
||||
drivers/gpu/drm/i915/display/skl_universal_plane.c
|
||||
drivers/gpu/drm/i915/display/vlv_dsi.c
|
||||
drivers/gpu/drm/i915/display/vlv_dsi_pll.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_clflush.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_domain.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_internal.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_lmem.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_object.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_pages.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_region.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_shmem.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_stolen.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_tiling.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_wait.c
|
||||
drivers/gpu/drm/i915/gt/intel_ggtt.c
|
||||
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c
|
||||
drivers/gpu/drm/i915/gt/intel_gtt.c
|
||||
drivers/gpu/drm/i915/i915_active.c
|
||||
drivers/gpu/drm/i915/i915_config.c
|
||||
drivers/gpu/drm/i915/i915_drv.c
|
||||
drivers/gpu/drm/i915/i915_gem_gtt.c
|
||||
drivers/gpu/drm/i915/i915_getparam.c
|
||||
drivers/gpu/drm/i915/i915_globals.c
|
||||
drivers/gpu/drm/i915/i915_irq.c
|
||||
drivers/gpu/drm/i915/i915_memcpy.c
|
||||
drivers/gpu/drm/i915/i915_mitigations.c
|
||||
drivers/gpu/drm/i915/i915_params.c
|
||||
drivers/gpu/drm/i915/i915_pci.c
|
||||
drivers/gpu/drm/i915/i915_scatterlist.c
|
||||
drivers/gpu/drm/i915/i915_suspend.c
|
||||
drivers/gpu/drm/i915/i915_sw_fence.c
|
||||
drivers/gpu/drm/i915/i915_sw_fence_work.c
|
||||
drivers/gpu/drm/i915/i915_sysfs.c
|
||||
drivers/gpu/drm/i915/i915_utils.c
|
||||
drivers/gpu/drm/i915/i915_vma.c
|
||||
drivers/gpu/drm/i915/intel_device_info.c
|
||||
drivers/gpu/drm/i915/intel_dram.c
|
||||
drivers/gpu/drm/i915/intel_memory_region.c
|
||||
drivers/gpu/drm/i915/intel_pch.c
|
||||
drivers/gpu/drm/i915/intel_pm.c
|
||||
drivers/gpu/drm/i915/intel_region_ttm.c
|
||||
drivers/gpu/drm/i915/intel_runtime_pm.c
|
||||
drivers/gpu/drm/i915/intel_sideband.c
|
||||
drivers/gpu/drm/i915/intel_step.c
|
||||
drivers/gpu/drm/i915/intel_uncore.c
|
||||
drivers/gpu/drm/i915/intel_wakeref.c
|
||||
drivers/gpu/drm/i915/vlv_suspend.c
|
||||
drivers/gpu/drm/ttm/ttm_bo.c
|
||||
drivers/gpu/drm/ttm/ttm_device.c
|
||||
drivers/gpu/drm/ttm/ttm_pool.c
|
||||
drivers/gpu/drm/ttm/ttm_resource.c
|
||||
drivers/gpu/drm/ttm/ttm_sys_manager.c
|
||||
drivers/gpu/drm/ttm/ttm_tt.c
|
||||
drivers/i2c/algos/i2c-algo-bit.c
|
||||
drivers/i2c/i2c-boardinfo.c
|
||||
drivers/i2c/i2c-core-acpi.c
|
||||
drivers/i2c/i2c-core-base.c
|
||||
drivers/pci/access.c
|
||||
drivers/pci/bus.c
|
||||
drivers/pci/host-bridge.c
|
||||
drivers/pci/msi.c
|
||||
drivers/pci/pci.c
|
||||
drivers/pci/pci-driver.c
|
||||
drivers/pci/pci-label.c
|
||||
drivers/pci/pci-sysfs.c
|
||||
drivers/pci/probe.c
|
||||
drivers/pci/rom.c
|
||||
drivers/pci/search.c
|
||||
drivers/pci/setup-res.c
|
||||
drivers/pci/slot.c
|
||||
drivers/video/backlight/backlight.c
|
||||
drivers/video/fbdev/core/fbcmap.c
|
||||
drivers/video/fbdev/core/fb_notify.c
|
||||
drivers/video/hdmi.c
|
||||
kernel/async.c
|
||||
kernel/irq/chip.c
|
||||
kernel/irq/devres.c
|
||||
kernel/irq/handle.c
|
||||
kernel/irq/irqdesc.c
|
||||
kernel/irq/irqdomain.c
|
||||
kernel/irq/manage.c
|
||||
kernel/irq/resend.c
|
||||
kernel/kthread.c
|
||||
kernel/locking/mutex.c
|
||||
kernel/locking/osq_lock.c
|
||||
kernel/locking/rtmutex.c
|
||||
kernel/locking/rwsem.c
|
||||
kernel/notifier.c
|
||||
kernel/panic.c
|
||||
kernel/resource.c
|
||||
kernel/sched/clock.c
|
||||
kernel/sched/completion.c
|
||||
kernel/sched/swait.c
|
||||
kernel/sched/wait_bit.c
|
||||
kernel/sched/wait.c
|
||||
kernel/smpboot.c
|
||||
kernel/time/clockevents.c
|
||||
kernel/time/clocksource.c
|
||||
kernel/time/hrtimer.c
|
||||
kernel/time/jiffies.c
|
||||
kernel/time/ntp.c
|
||||
kernel/time/tick-common.c
|
||||
kernel/time/time.c
|
||||
kernel/time/timeconv.c
|
||||
kernel/time/timecounter.c
|
||||
kernel/time/timekeeping.c
|
||||
kernel/time/timer.c
|
||||
kernel/time/timer_list.c
|
||||
kernel/workqueue.c
|
||||
lib/bitmap.c
|
||||
lib/crc32.c
|
||||
lib/ctype.c
|
||||
lib/debug_locks.c
|
||||
lib/dec_and_lock.c
|
||||
lib/find_bit.c
|
||||
lib/hexdump.c
|
||||
lib/idr.c
|
||||
lib/iomap.c
|
||||
lib/irq_regs.c
|
||||
lib/kasprintf.c
|
||||
lib/klist.c
|
||||
lib/kobject.c
|
||||
lib/kobject_uevent.c
|
||||
lib/kstrtox.c
|
||||
lib/list_sort.c
|
||||
lib/llist.c
|
||||
lib/math/div64.c
|
||||
lib/pci_iomap.c
|
||||
lib/radix-tree.c
|
||||
lib/rbtree.c
|
||||
lib/refcount.c
|
||||
lib/scatterlist.c
|
||||
lib/siphash.c
|
||||
lib/sort.c
|
||||
lib/string.c
|
||||
lib/timerqueue.c
|
||||
lib/uuid.c
|
||||
lib/vsprintf.c
|
||||
lib/xarray.c
|
||||
mm/mempool.c
|
||||
mm/util.c
|
@ -0,0 +1,4 @@
|
||||
include $(REP_DIR)/src/drivers/framebuffer/intel/pc/target.inc
|
||||
|
||||
REQUIRES += 32bit
|
||||
SRC_C += lx_emul/spec/x86_32/atomic64_32.c
|
@ -0,0 +1,274 @@
|
||||
arch/x86/lib/delay.c
|
||||
arch/x86/lib/hweight.S
|
||||
arch/x86/lib/memcpy_64.S
|
||||
arch/x86/lib/memmove_64.S
|
||||
arch/x86/lib/memset_64.S
|
||||
arch/x86/pci/legacy.c
|
||||
arch/x86/platform/intel/iosf_mbi.c
|
||||
drivers/base/bus.c
|
||||
drivers/base/class.c
|
||||
drivers/base/component.c
|
||||
drivers/base/core.c
|
||||
drivers/base/dd.c
|
||||
drivers/base/devres.c
|
||||
drivers/base/driver.c
|
||||
drivers/base/platform.c
|
||||
drivers/base/property.c
|
||||
drivers/char/agp/intel-gtt.c
|
||||
drivers/clk/clk-devres.c
|
||||
drivers/dma-buf/dma-fence-array.c
|
||||
drivers/dma-buf/dma-fence.c
|
||||
drivers/dma-buf/dma-fence-chain.c
|
||||
drivers/dma-buf/dma-resv.c
|
||||
drivers/gpu/drm/drm_atomic.c
|
||||
drivers/gpu/drm/drm_atomic_helper.c
|
||||
drivers/gpu/drm/drm_atomic_state_helper.c
|
||||
drivers/gpu/drm/drm_atomic_uapi.c
|
||||
drivers/gpu/drm/drm_auth.c
|
||||
drivers/gpu/drm/drm_blend.c
|
||||
drivers/gpu/drm/drm_bridge.c
|
||||
drivers/gpu/drm/drm_cache.c
|
||||
drivers/gpu/drm/drm_client.c
|
||||
drivers/gpu/drm/drm_client_modeset.c
|
||||
drivers/gpu/drm/drm_color_mgmt.c
|
||||
drivers/gpu/drm/drm_connector.c
|
||||
drivers/gpu/drm/drm_crtc.c
|
||||
drivers/gpu/drm/drm_crtc_helper.c
|
||||
drivers/gpu/drm/drm_damage_helper.c
|
||||
drivers/gpu/drm/drm_displayid.c
|
||||
drivers/gpu/drm/drm_dp_dual_mode_helper.c
|
||||
drivers/gpu/drm/drm_dp_helper.c
|
||||
drivers/gpu/drm/drm_dp_mst_topology.c
|
||||
drivers/gpu/drm/drm_drv.c
|
||||
drivers/gpu/drm/drm_dsc.c
|
||||
drivers/gpu/drm/drm_edid.c
|
||||
drivers/gpu/drm/drm_encoder.c
|
||||
drivers/gpu/drm/drm_fb_helper.c
|
||||
drivers/gpu/drm/drm_file.c
|
||||
drivers/gpu/drm/drm_fourcc.c
|
||||
drivers/gpu/drm/drm_framebuffer.c
|
||||
drivers/gpu/drm/drm_gem.c
|
||||
drivers/gpu/drm/drm_hdcp.c
|
||||
drivers/gpu/drm/drm_managed.c
|
||||
drivers/gpu/drm/drm_mipi_dsi.c
|
||||
drivers/gpu/drm/drm_mm.c
|
||||
drivers/gpu/drm/drm_mode_config.c
|
||||
drivers/gpu/drm/drm_mode_object.c
|
||||
drivers/gpu/drm/drm_modes.c
|
||||
drivers/gpu/drm/drm_modeset_helper.c
|
||||
drivers/gpu/drm/drm_modeset_lock.c
|
||||
drivers/gpu/drm/drm_panel_orientation_quirks.c
|
||||
drivers/gpu/drm/drm_plane.c
|
||||
drivers/gpu/drm/drm_prime.c
|
||||
drivers/gpu/drm/drm_print.c
|
||||
drivers/gpu/drm/drm_probe_helper.c
|
||||
drivers/gpu/drm/drm_property.c
|
||||
drivers/gpu/drm/drm_rect.c
|
||||
drivers/gpu/drm/drm_syncobj.c
|
||||
drivers/gpu/drm/drm_sysfs.c
|
||||
drivers/gpu/drm/drm_vblank.c
|
||||
drivers/gpu/drm/drm_vblank_work.c
|
||||
drivers/gpu/drm/drm_vma_manager.c
|
||||
drivers/gpu/drm/i915/display/g4x_dp.c
|
||||
drivers/gpu/drm/i915/display/g4x_hdmi.c
|
||||
drivers/gpu/drm/i915/display/i9xx_plane.c
|
||||
drivers/gpu/drm/i915/display/icl_dsi.c
|
||||
drivers/gpu/drm/i915/display/intel_acpi.c
|
||||
drivers/gpu/drm/i915/display/intel_atomic.c
|
||||
drivers/gpu/drm/i915/display/intel_atomic_plane.c
|
||||
drivers/gpu/drm/i915/display/intel_audio.c
|
||||
drivers/gpu/drm/i915/display/intel_bios.c
|
||||
drivers/gpu/drm/i915/display/intel_bw.c
|
||||
drivers/gpu/drm/i915/display/intel_cdclk.c
|
||||
drivers/gpu/drm/i915/display/intel_color.c
|
||||
drivers/gpu/drm/i915/display/intel_combo_phy.c
|
||||
drivers/gpu/drm/i915/display/intel_connector.c
|
||||
drivers/gpu/drm/i915/display/intel_crt.c
|
||||
drivers/gpu/drm/i915/display/intel_crtc.c
|
||||
drivers/gpu/drm/i915/display/intel_cursor.c
|
||||
drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
|
||||
drivers/gpu/drm/i915/display/intel_ddi.c
|
||||
drivers/gpu/drm/i915/display/intel_display.c
|
||||
drivers/gpu/drm/i915/display/intel_display_power.c
|
||||
drivers/gpu/drm/i915/display/intel_dmc.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_aux.c
|
||||
drivers/gpu/drm/i915/display/intel_dp.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_hdcp.c
|
||||
drivers/gpu/drm/i915/display/intel_dpio_phy.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_link_training.c
|
||||
drivers/gpu/drm/i915/display/intel_dpll.c
|
||||
drivers/gpu/drm/i915/display/intel_dpll_mgr.c
|
||||
drivers/gpu/drm/i915/display/intel_dp_mst.c
|
||||
drivers/gpu/drm/i915/display/intel_dsb.c
|
||||
drivers/gpu/drm/i915/display/intel_dsi.c
|
||||
drivers/gpu/drm/i915/display/intel_dsi_vbt.c
|
||||
drivers/gpu/drm/i915/display/intel_fb.c
|
||||
drivers/gpu/drm/i915/display/intel_fbc.c
|
||||
drivers/gpu/drm/i915/display/intel_fbdev.c
|
||||
drivers/gpu/drm/i915/display/intel_fdi.c
|
||||
drivers/gpu/drm/i915/display/intel_fifo_underrun.c
|
||||
drivers/gpu/drm/i915/display/intel_frontbuffer.c
|
||||
drivers/gpu/drm/i915/display/intel_global_state.c
|
||||
drivers/gpu/drm/i915/display/intel_gmbus.c
|
||||
drivers/gpu/drm/i915/display/intel_hdcp.c
|
||||
drivers/gpu/drm/i915/display/intel_hdmi.c
|
||||
drivers/gpu/drm/i915/display/intel_hotplug.c
|
||||
drivers/gpu/drm/i915/display/intel_lpe_audio.c
|
||||
drivers/gpu/drm/i915/display/intel_lspcon.c
|
||||
drivers/gpu/drm/i915/display/intel_lvds.c
|
||||
drivers/gpu/drm/i915/display/intel_opregion.c
|
||||
drivers/gpu/drm/i915/display/intel_overlay.c
|
||||
drivers/gpu/drm/i915/display/intel_panel.c
|
||||
drivers/gpu/drm/i915/display/intel_pps.c
|
||||
drivers/gpu/drm/i915/display/intel_psr.c
|
||||
drivers/gpu/drm/i915/display/intel_quirks.c
|
||||
drivers/gpu/drm/i915/display/intel_sdvo.c
|
||||
drivers/gpu/drm/i915/display/intel_sprite.c
|
||||
drivers/gpu/drm/i915/display/intel_tc.c
|
||||
drivers/gpu/drm/i915/display/intel_vdsc.c
|
||||
drivers/gpu/drm/i915/display/intel_vga.c
|
||||
drivers/gpu/drm/i915/display/intel_vrr.c
|
||||
drivers/gpu/drm/i915/display/skl_scaler.c
|
||||
drivers/gpu/drm/i915/display/skl_universal_plane.c
|
||||
drivers/gpu/drm/i915/display/vlv_dsi.c
|
||||
drivers/gpu/drm/i915/display/vlv_dsi_pll.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_clflush.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_domain.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_internal.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_lmem.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_object.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_pages.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_region.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_shmem.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_stolen.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_tiling.c
|
||||
drivers/gpu/drm/i915/gem/i915_gem_wait.c
|
||||
drivers/gpu/drm/i915/gt/intel_ggtt.c
|
||||
drivers/gpu/drm/i915/gt/intel_gtt.c
|
||||
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c
|
||||
drivers/gpu/drm/i915/i915_active.c
|
||||
drivers/gpu/drm/i915/i915_config.c
|
||||
drivers/gpu/drm/i915/i915_drv.c
|
||||
drivers/gpu/drm/i915/i915_gem_gtt.c
|
||||
drivers/gpu/drm/i915/i915_getparam.c
|
||||
drivers/gpu/drm/i915/i915_globals.c
|
||||
drivers/gpu/drm/i915/i915_irq.c
|
||||
drivers/gpu/drm/i915/i915_memcpy.c
|
||||
drivers/gpu/drm/i915/i915_mitigations.c
|
||||
drivers/gpu/drm/i915/i915_params.c
|
||||
drivers/gpu/drm/i915/i915_pci.c
|
||||
drivers/gpu/drm/i915/i915_scatterlist.c
|
||||
drivers/gpu/drm/i915/i915_suspend.c
|
||||
drivers/gpu/drm/i915/i915_sw_fence.c
|
||||
drivers/gpu/drm/i915/i915_sw_fence_work.c
|
||||
drivers/gpu/drm/i915/i915_sysfs.c
|
||||
drivers/gpu/drm/i915/i915_utils.c
|
||||
drivers/gpu/drm/i915/i915_vma.c
|
||||
drivers/gpu/drm/i915/intel_device_info.c
|
||||
drivers/gpu/drm/i915/intel_dram.c
|
||||
drivers/gpu/drm/i915/intel_memory_region.c
|
||||
drivers/gpu/drm/i915/intel_pch.c
|
||||
drivers/gpu/drm/i915/intel_pm.c
|
||||
drivers/gpu/drm/i915/intel_region_ttm.c
|
||||
drivers/gpu/drm/i915/intel_runtime_pm.c
|
||||
drivers/gpu/drm/i915/intel_sideband.c
|
||||
drivers/gpu/drm/i915/intel_step.c
|
||||
drivers/gpu/drm/i915/intel_uncore.c
|
||||
drivers/gpu/drm/i915/intel_wakeref.c
|
||||
drivers/gpu/drm/i915/vlv_suspend.c
|
||||
drivers/gpu/drm/ttm/ttm_bo.c
|
||||
drivers/gpu/drm/ttm/ttm_device.c
|
||||
drivers/gpu/drm/ttm/ttm_pool.c
|
||||
drivers/gpu/drm/ttm/ttm_resource.c
|
||||
drivers/gpu/drm/ttm/ttm_sys_manager.c
|
||||
drivers/gpu/drm/ttm/ttm_tt.c
|
||||
drivers/i2c/algos/i2c-algo-bit.c
|
||||
drivers/i2c/i2c-boardinfo.c
|
||||
drivers/i2c/i2c-core-acpi.c
|
||||
drivers/i2c/i2c-core-base.c
|
||||
drivers/pci/access.c
|
||||
drivers/pci/bus.c
|
||||
drivers/pci/host-bridge.c
|
||||
drivers/pci/msi.c
|
||||
drivers/pci/pci.c
|
||||
drivers/pci/pci-driver.c
|
||||
drivers/pci/pci-label.c
|
||||
drivers/pci/pci-sysfs.c
|
||||
drivers/pci/probe.c
|
||||
drivers/pci/rom.c
|
||||
drivers/pci/search.c
|
||||
drivers/pci/setup-res.c
|
||||
drivers/pci/slot.c
|
||||
drivers/video/backlight/backlight.c
|
||||
drivers/video/fbdev/core/fbcmap.c
|
||||
drivers/video/fbdev/core/fb_notify.c
|
||||
drivers/video/hdmi.c
|
||||
kernel/async.c
|
||||
kernel/irq/chip.c
|
||||
kernel/irq/devres.c
|
||||
kernel/irq/handle.c
|
||||
kernel/irq/irqdesc.c
|
||||
kernel/irq/irqdomain.c
|
||||
kernel/irq/manage.c
|
||||
kernel/irq/resend.c
|
||||
kernel/kthread.c
|
||||
kernel/locking/mutex.c
|
||||
kernel/locking/osq_lock.c
|
||||
kernel/locking/rtmutex.c
|
||||
kernel/locking/rwsem.c
|
||||
kernel/notifier.c
|
||||
kernel/panic.c
|
||||
kernel/resource.c
|
||||
kernel/sched/clock.c
|
||||
kernel/sched/completion.c
|
||||
kernel/sched/swait.c
|
||||
kernel/sched/wait_bit.c
|
||||
kernel/sched/wait.c
|
||||
kernel/smpboot.c
|
||||
kernel/time/clockevents.c
|
||||
kernel/time/clocksource.c
|
||||
kernel/time/hrtimer.c
|
||||
kernel/time/jiffies.c
|
||||
kernel/time/ntp.c
|
||||
kernel/time/tick-broadcast.c
|
||||
kernel/time/tick-common.c
|
||||
kernel/time/time.c
|
||||
kernel/time/timeconv.c
|
||||
kernel/time/timecounter.c
|
||||
kernel/time/timekeeping.c
|
||||
kernel/time/timer.c
|
||||
kernel/time/timer_list.c
|
||||
kernel/workqueue.c
|
||||
lib/bitmap.c
|
||||
lib/crc32.c
|
||||
lib/ctype.c
|
||||
lib/debug_locks.c
|
||||
lib/dec_and_lock.c
|
||||
lib/find_bit.c
|
||||
lib/hexdump.c
|
||||
lib/idr.c
|
||||
lib/iomap.c
|
||||
lib/irq_regs.c
|
||||
lib/kasprintf.c
|
||||
lib/klist.c
|
||||
lib/kobject.c
|
||||
lib/kobject_uevent.c
|
||||
lib/kstrtox.c
|
||||
lib/list_sort.c
|
||||
lib/llist.c
|
||||
lib/pci_iomap.c
|
||||
lib/radix-tree.c
|
||||
lib/rbtree.c
|
||||
lib/refcount.c
|
||||
lib/scatterlist.c
|
||||
lib/siphash.c
|
||||
lib/sort.c
|
||||
lib/string.c
|
||||
lib/timerqueue.c
|
||||
lib/uuid.c
|
||||
lib/vsprintf.c
|
||||
lib/xarray.c
|
||||
mm/mempool.c
|
||||
mm/util.c
|
@ -0,0 +1,3 @@
|
||||
include $(REP_DIR)/src/drivers/framebuffer/intel/pc/target.inc
|
||||
|
||||
REQUIRES += 64bit
|
41
repos/pc/src/drivers/framebuffer/intel/pc/target.inc
Normal file
41
repos/pc/src/drivers/framebuffer/intel/pc/target.inc
Normal file
@ -0,0 +1,41 @@
|
||||
REQUIRES := x86
|
||||
|
||||
REL_PRG_DIR := $(PRG_DIR)/../..
|
||||
|
||||
TARGET := pc_intel_fb_drv
|
||||
LIBS := base pc_lx_emul blit
|
||||
|
||||
INC_DIR += $(REL_PRG_DIR)
|
||||
SRC_CC += main.cc
|
||||
SRC_CC += misc.cc
|
||||
SRC_CC += time.cc
|
||||
SRC_CC += emul.cc
|
||||
SRC_C += dummies.c
|
||||
SRC_C += lx_emul.c
|
||||
SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c))
|
||||
SRC_C += fb.c
|
||||
SRC_C += lx_user.c
|
||||
SRC_C += gem.c
|
||||
SRC_C += common_dummies.c
|
||||
SRC_C += lx_emul/spec/x86/pci.c
|
||||
SRC_C += lx_emul/shadow/mm/page_alloc.c
|
||||
|
||||
vpath %.c $(REL_PRG_DIR)
|
||||
vpath %.cc $(REL_PRG_DIR)
|
||||
vpath common_dummies.c $(REP_DIR)/src/lib/pc/lx_emul
|
||||
|
||||
LX_SRC_DIR := $(call select_from_ports,linux)/src/linux
|
||||
ifeq ($(wildcard $(LX_SRC_DIR)),)
|
||||
LX_SRC_DIR := $(call select_from_repositories,src/linux)
|
||||
endif
|
||||
ifeq ($(wildcard $(LX_SRC_DIR)),)
|
||||
fail
|
||||
endif
|
||||
|
||||
INC_DIR += $(LX_SRC_DIR)/drivers/gpu/drm/i915
|
||||
|
||||
CC_C_OPT += -Wno-unused-label
|
||||
|
||||
#
|
||||
# Genode C-API backends
|
||||
#
|
25
repos/pc/src/drivers/framebuffer/intel/pc/time.cc
Normal file
25
repos/pc/src/drivers/framebuffer/intel/pc/time.cc
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* \brief Lx_emul udelay function for very short delays
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2021-07-10
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2021 Genode Labs GmbH
|
||||
*
|
||||
* This file is distributed under the terms of the GNU General Public License
|
||||
* version 2.
|
||||
*/
|
||||
|
||||
#include <base/log.h>
|
||||
#include <lx_kit/env.h>
|
||||
|
||||
extern "C" void lx_emul_time_udelay(unsigned long usec);
|
||||
extern "C" void lx_emul_time_udelay(unsigned long usec)
|
||||
{
|
||||
if (usec > 100)
|
||||
Genode::error("Cannot delay that long ", usec, " microseconds");
|
||||
|
||||
auto start = Lx_kit::env().timer.curr_time().trunc_to_plain_us().value;
|
||||
while (Lx_kit::env().timer.curr_time().trunc_to_plain_us().value < (start + usec)) { ; }
|
||||
}
|
@ -21,6 +21,12 @@ LX_ENABLE += ACPI
|
||||
LX_ENABLE += USB_SUPPORT USB USB_ARCH_HAS_HCD USB_XHCI_HCD USB_EHCI_HCD USB_OHCI_HCD
|
||||
LX_ENABLE += USB_PCI USB_UHCI_HCD
|
||||
|
||||
# Intel framebuffer
|
||||
LX_ENABLE += DRM DRM_I915
|
||||
|
||||
# to automatically set up screen mode at boot time
|
||||
LX_ENABLE += FB
|
||||
|
||||
# mandatory fs support
|
||||
LX_ENABLE += PROC_FS SYSFS
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user