# # 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_filter { 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 zynq] || [have_spec lan9118] || [have_spec imx53] || [have_spec imx6] || [have_spec linux] || [have_spec x86])}] } proc nic_drv_binary { } { if {[have_spec linux]} { return linux_nic_drv } if {[have_spec zynq]} { return zynq_nic_drv } if {[have_spec lan9118]} { return lan9118_nic_drv } if {[have_spec x86]} { return ipxe_nic_drv } if {[have_spec imx53]} { return fec_nic_drv } if {[have_spec imx6]} { return fec_nic_drv } return no_nic_drv_available } 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] || ([have_spec x86] && ![have_spec linux]))}] } 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]}] } # # Keyboard layout - this function can be overridden in a run script # proc language_chargen { } { return "en_us" } # # 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_filter feature] build_components server/input_filter 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_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 { } return $parent_provides } proc drivers_start_nodes { feature_arg } { upvar $feature_arg feature set start_nodes { } append start_nodes [platform_drv_config] append_if [use_audio_drv feature] start_nodes { } append_if [use_fb_drv feature] start_nodes { } append_if [use_fb_sdl feature] start_nodes { } append_if [use_gpio_drv feature] start_nodes " " if { [use_input_filter feature] } { exec cp -f [genode_dir]/repos/os/src/server/input_filter/[language_chargen].chargen bin/ exec cp -f [genode_dir]/repos/os/src/server/input_filter/special.chargen bin/ append start_nodes { } append_if [use_ps2_drv feature] start_nodes { } append_if [use_usb_drv feature] start_nodes { } append_if [use_fb_sdl feature] start_nodes { } append start_nodes { } append_if [use_ps2_drv feature] start_nodes { } append_if [use_usb_drv feature] start_nodes { } append_if [use_fb_sdl feature] start_nodes { } append start_nodes { } append start_nodes " " append start_nodes { } append_if [use_ps2_drv feature] start_nodes { } append_if [use_usb_drv feature] start_nodes { } append_if [use_fb_sdl feature] start_nodes { } append start_nodes { } } # don't use the dynamic linker for loading the lx_hybrid nic_drv on Linux proc nic_drv_ld_attr {} { if {[have_spec linux]} { return {ld="no"} } return "" } append_if [use_nic_drv feature] start_nodes { } append_if [use_ps2_drv feature] start_nodes { } append_if [use_timer feature] start_nodes { } if { [use_usb_drv feature] } { append start_nodes { } append_if [use_usb_input feature] start_nodes { } append_if [use_usb_nic feature] start_nodes { } append start_nodes { } append_if [use_usb_input feature] start_nodes { } append_if [use_usb_nic feature] start_nodes { } append start_nodes { } } 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_binary] 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_filter feature] boot_modules input_filter lappend_if [use_input_filter feature] boot_modules [language_chargen].chargen lappend_if [use_input_filter feature] boot_modules special.chargen lappend_if [use_nic_drv feature] boot_modules [nic_drv_binary] lappend_if [use_ps2_drv feature] boot_modules ps2_drv lappend_if [use_usb_drv feature] boot_modules usb_drv return $boot_modules }