# # Helper functions # proc use_acpi_drv { feature_arg } { upvar $feature_arg feature return [have_spec acpi] } proc use_audio_out_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_nic_drv { feature_arg } { upvar $feature_arg feature return [expr {[info exists feature(Nic)] && ![use_usb_drv feature]}] } proc use_pci_device_pd { feature_arg } { upvar $feature_arg feature return [expr [use_pci_drv feature] && [have_spec nova]] } proc use_pci_drv { feature_arg } { upvar $feature_arg feature return [have_spec pci] } 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_drv { feature_arg } { upvar $feature_arg feature return [expr {([info exists feature(Input)] || [info exists feature(Nic)]) && (![use_ps2_drv feature] && [have_spec usb])}] } # # Build # proc drivers_build_components { feature_arg } { upvar $feature_arg feature set build_components { } lappend_if [use_acpi_drv feature] build_components drivers/acpi lappend_if [use_audio_out_drv feature] build_components drivers/audio_out lappend_if [use_fb_drv feature] build_components drivers/framebuffer lappend_if [use_fb_sdl feature] build_components drivers/framebuffer lappend_if [use_gpio_drv feature] build_components drivers/gpio lappend_if [use_nic_drv feature] build_components drivers/nic lappend_if [use_pci_drv feature] build_components drivers/pci lappend_if [use_ps2_drv feature] build_components drivers/input/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 { } return $parent_provides } proc drivers_start_nodes { feature_arg } { upvar $feature_arg feature set start_nodes { } append_if [use_acpi_drv feature] start_nodes { } append_if [use_audio_out_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 { } append_if [use_nic_drv feature] start_nodes { } append_if [expr [use_pci_drv feature] && ![use_acpi_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 [info exists feature(Input)] start_nodes { } append_if [info exists feature(Nic)] start_nodes { } append start_nodes { } append_if [info exists feature(Input)] start_nodes { } append_if [info exists feature(Nic)] start_nodes { } append start_nodes { } } return $start_nodes } # # Boot modules # proc drivers_boot_modules { feature_arg } { upvar $feature_arg feature set boot_modules { } lappend_if [use_acpi_drv feature] boot_modules acpi_drv lappend_if [use_audio_out_drv feature] boot_modules audio_out_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_nic_drv feature] boot_modules nic_drv lappend_if [use_pci_drv feature] boot_modules pci_drv lappend_if [use_pci_device_pd feature] boot_modules pci_device_pd 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 }