mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-09 20:51:16 +00:00
This function returns the information whether the used platform relies on USB HID for interactive scenarios by default as is the case for most ARM platforms. In contrast, for x86 the USB driver can be omitted because we can use the PS/2 driver (that is readily available in repos/os/).
276 lines
6.8 KiB
PHP
276 lines
6.8 KiB
PHP
#
|
|
# Global variables required by platform_drv-related functions
|
|
#
|
|
|
|
set build_components { }
|
|
set config { }
|
|
set boot_modules { }
|
|
|
|
source ${genode_dir}/repos/base/run/platform_drv.inc
|
|
|
|
#
|
|
# Helper functions
|
|
#
|
|
|
|
proc use_audio_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [info exists feature(Audio_out)]
|
|
}
|
|
|
|
proc use_fb_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [have_spec framebuffer]
|
|
}
|
|
|
|
proc use_fb_sdl { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [have_spec linux]
|
|
}
|
|
|
|
proc use_gpio_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [expr {[use_usb_drv feature] &&
|
|
[have_spec gpio]}]
|
|
}
|
|
|
|
proc use_input_merger { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [info exists feature(Input)]
|
|
}
|
|
|
|
proc use_nic_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [expr {[info exists feature(Nic)] &&
|
|
([have_spec cadence_gem] ||
|
|
[have_spec lan9118] ||
|
|
[have_spec linux] ||
|
|
[have_spec x86])}]
|
|
}
|
|
|
|
proc use_ps2_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [have_spec ps2]
|
|
}
|
|
|
|
proc use_timer { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [info exists feature(Timer)]
|
|
}
|
|
|
|
proc use_usb_input { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [expr {[info exists feature(Input)] && [need_usb_hid]}]
|
|
}
|
|
|
|
proc use_usb_nic { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [expr {[info exists feature(Nic)] &&
|
|
([have_spec omap4] ||
|
|
[have_spec arndale] ||
|
|
[have_spec rpi])}]
|
|
}
|
|
|
|
proc use_usb_drv { feature_arg } {
|
|
upvar $feature_arg feature
|
|
return [expr {[use_usb_input feature] || [use_usb_nic feature]}]
|
|
}
|
|
|
|
#
|
|
# Build
|
|
#
|
|
|
|
proc drivers_build_components { feature_arg } {
|
|
|
|
upvar $feature_arg feature
|
|
|
|
set build_components { }
|
|
|
|
# This function appends to the global 'build_components' variable, not to
|
|
# the local version defined above.
|
|
append_platform_drv_build_components
|
|
|
|
lappend_if [use_audio_drv feature] build_components drivers/audio
|
|
lappend_if [use_fb_drv feature] build_components drivers/framebuffer
|
|
lappend_if [use_fb_sdl feature] build_components drivers/framebuffer/spec/sdl
|
|
lappend_if [use_gpio_drv feature] build_components drivers/gpio
|
|
lappend_if [use_input_merger feature] build_components server/input_merger
|
|
lappend_if [use_nic_drv feature] build_components drivers/nic
|
|
lappend_if [use_ps2_drv feature] build_components drivers/input/spec/ps2
|
|
lappend_if [use_timer feature] build_components drivers/timer
|
|
lappend_if [use_usb_drv feature] build_components drivers/usb
|
|
|
|
return $build_components
|
|
}
|
|
|
|
#
|
|
# Configuration
|
|
#
|
|
|
|
proc drivers_parent_provides { feature_arg } {
|
|
|
|
upvar $feature_arg feature
|
|
|
|
set parent_provides { }
|
|
|
|
# TODO: make dependent on features
|
|
|
|
append parent_provides {
|
|
<service name="ROM"/>
|
|
<service name="RAM"/>
|
|
<service name="IRQ"/>
|
|
<service name="IO_MEM"/>
|
|
<service name="IO_PORT"/>
|
|
<service name="PD"/>
|
|
<service name="RM"/>
|
|
<service name="CPU"/>
|
|
<service name="LOG"/>
|
|
}
|
|
|
|
return $parent_provides
|
|
}
|
|
|
|
proc drivers_start_nodes { feature_arg } {
|
|
|
|
upvar $feature_arg feature
|
|
|
|
set start_nodes { }
|
|
|
|
# This function appends to the global 'config' variable, not to the
|
|
# 'start_nodes' variable defined above.
|
|
append_platform_drv_config
|
|
|
|
append_if [use_audio_drv feature] start_nodes {
|
|
<start name="audio_drv">
|
|
<resource name="RAM" quantum="8M"/>
|
|
<provides><service name="Audio_out"/></provides>
|
|
<config/>
|
|
</start>
|
|
}
|
|
|
|
append_if [use_fb_drv feature] start_nodes {
|
|
<start name="fb_drv">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides><service name="Framebuffer"/></provides>
|
|
</start>
|
|
}
|
|
|
|
append_if [use_fb_sdl feature] start_nodes {
|
|
<start name="fb_sdl">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides>
|
|
<service name="Input"/>
|
|
<service name="Framebuffer"/>
|
|
</provides>
|
|
</start>
|
|
}
|
|
|
|
append_if [use_gpio_drv feature] start_nodes {
|
|
<start name="gpio_drv">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides><service name="Gpio"/></provides>
|
|
<config/>
|
|
</start>
|
|
}
|
|
|
|
if { [use_input_merger feature] } {
|
|
append start_nodes {
|
|
<start name="input_merger">
|
|
<resource name="RAM" quantum="1M" />
|
|
<provides> <service name="Input" /> </provides>
|
|
<config>}
|
|
append_if [use_ps2_drv feature] start_nodes {
|
|
<input label="ps2"/>}
|
|
append_if [use_usb_drv feature] start_nodes {
|
|
<input label="usb"/>}
|
|
append_if [use_fb_sdl feature] start_nodes {
|
|
<input label="sdl"/>}
|
|
append start_nodes {
|
|
</config>
|
|
<route>
|
|
<service name="LOG"> <parent/> </service>}
|
|
append_if [use_ps2_drv feature] start_nodes {
|
|
<service name="Input" label="ps2"> <child name="ps2_drv" /> </service>}
|
|
append_if [use_usb_drv feature] start_nodes {
|
|
<service name="Input" label="usb"> <child name="usb_drv" /> </service>}
|
|
append_if [use_fb_sdl feature] start_nodes {
|
|
<service name="Input" label="sdl"> <child name="fb_sdl" /> </service>}
|
|
append start_nodes {
|
|
</route>
|
|
</start>
|
|
}
|
|
}
|
|
|
|
append_if [use_nic_drv feature] start_nodes {
|
|
<start name="nic_drv">
|
|
<resource name="RAM" quantum="8M"/>
|
|
<provides><service name="Nic"/></provides>
|
|
</start>
|
|
}
|
|
|
|
append_if [use_ps2_drv feature] start_nodes {
|
|
<start name="ps2_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Input"/></provides>
|
|
</start>
|
|
}
|
|
|
|
append_if [use_timer feature] start_nodes {
|
|
<start name="timer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Timer"/></provides>
|
|
</start>
|
|
}
|
|
|
|
if { [use_usb_drv feature] } {
|
|
append start_nodes {
|
|
<start name="usb_drv">
|
|
<resource name="RAM" quantum="12M"/>
|
|
<provides>}
|
|
append_if [use_usb_input feature] start_nodes {
|
|
<service name="Input"/>}
|
|
append_if [use_usb_nic feature] start_nodes {
|
|
<service name="Nic"/>}
|
|
append start_nodes {
|
|
</provides>
|
|
<config uhci="yes" ehci="yes" xhci="no">}
|
|
append_if [use_usb_input feature] start_nodes {
|
|
<hid/>}
|
|
append_if [use_usb_nic feature] start_nodes {
|
|
<nic mac="2e:60:90:0c:4e:01" />}
|
|
append start_nodes {
|
|
</config>
|
|
</start>
|
|
}
|
|
}
|
|
|
|
return $start_nodes
|
|
}
|
|
|
|
#
|
|
# Boot modules
|
|
#
|
|
|
|
proc drivers_boot_modules { feature_arg } {
|
|
|
|
upvar $feature_arg feature
|
|
|
|
set boot_modules { }
|
|
|
|
# This function appends to the global 'boot_modules' variable, not to the
|
|
# local version defined above.
|
|
append_platform_drv_boot_modules
|
|
|
|
lappend_if [use_audio_drv feature] boot_modules audio_drv
|
|
lappend_if [use_fb_drv feature] boot_modules fb_drv
|
|
lappend_if [use_fb_sdl feature] boot_modules fb_sdl
|
|
lappend_if [use_gpio_drv feature] boot_modules gpio_drv
|
|
lappend_if [use_input_merger feature] boot_modules input_merger
|
|
lappend_if [use_nic_drv feature] boot_modules nic_drv
|
|
lappend_if [use_ps2_drv feature] boot_modules ps2_drv
|
|
lappend_if [use_timer feature] boot_modules timer
|
|
lappend_if [use_usb_drv feature] boot_modules usb_drv
|
|
|
|
return $boot_modules
|
|
}
|
|
|