if {![have_spec x86_32] && ![have_spec exynos5]} { puts "\nThe AHCI driver supports x86_32 architecture and exynos5 only\n" exit 0 } # # Build # set build_components { core init drivers/timer drivers/ahci test/blk/cli } lappend_if [have_spec x86_32] build_components drivers/pci lappend_if [have_spec acpi] build_components drivers/acpi lappend_if [have_spec pci] build_components drivers/pci/device_pd lappend_if [have_spec exynos5] build_components drivers/platform build $build_components create_boot_directory # # Generate config # set config { <config> <parent-provides> <service name="ROM"/> <service name="RAM"/> <service name="IRQ"/> <service name="IO_MEM"/> <service name="IO_PORT"/> <service name="CAP"/> <service name="PD"/> <service name="RM"/> <service name="CPU"/> <service name="LOG"/> <service name="SIGNAL" /> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route>} append_if [have_spec exynos5] config { <start name="platform_drv"> <resource name="RAM" quantum="1M"/> <provides><service name="Regulator"/></provides> </start> } append_if [have_spec acpi] config { <start name="acpi"> <resource name="RAM" quantum="4M"/> <binary name="acpi_drv"/> <provides> <service name="PCI"/> <service name="IRQ" /> </provides> <route> <service name="PCI"> <any-child /> </service> <any-service> <parent/> <any-child /> </any-service> </route> </start>} append_if [expr ![have_spec acpi] && [have_spec x86_32]] config { <start name="pci_drv"> <resource name="RAM" quantum="2M"/> <provides><service name="PCI"/></provides> </start>} append config { <start name="timer"> <resource name="RAM" quantum="1M"/> <provides><service name="Timer"/></provides> <route>} append_if [have_spec acpi] config { <service name="IRQ"><child name="acpi" /></service>} append config { <any-service> <parent /> <any-child /></any-service> </route> </start> <start name="ahci"> <binary name="ahci" /> <resource name="RAM" quantum="10M" /> <provides><service name="Block" /></provides> <route>} append_if [have_spec acpi] config { <service name="IRQ"><child name="acpi" /></service>} append config { <any-service> <parent /> <any-child /></any-service> </route> </start> <start name="test-blk-cli"> <resource name="RAM" quantum="2M" /> <route> <service name="Block"><child name="ahci"/></service> <any-service> <parent/> <any-child /> </any-service> </route> </start> </config>} install_config $config # # Boot modules # set boot_modules { core init timer ahci test-blk-cli } append_if [have_spec x86_32] boot_modules { pci_drv acpi_drv } append_if [have_spec nova] boot_modules pci_device_pd append_if [have_spec exynos5] boot_modules platform_drv build_boot_image $boot_modules # # Qemu # set disk_image "bin/block.img" append qemu_args " -m 64 -nographic " append qemu_args " -drive id=disk,file=$disk_image,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -boot d" if { [file exists $disk_image] == 0 } then { # create random block device file puts "creating disk image \"$disk_image\"" catch { exec dd if=/dev/urandom of=$disk_image bs=512 count=20480 } } # # Test # run_genode_until "Tests finished successfully.*\n" 50