diff --git a/repos/os/lib/mk/sd_card.inc b/repos/os/lib/mk/sd_card.inc
index 0eb4701d4a..d757f2fa5b 100644
--- a/repos/os/lib/mk/sd_card.inc
+++ b/repos/os/lib/mk/sd_card.inc
@@ -1,6 +1,5 @@
-
INC_DIR += $(REP_DIR)/src/drivers/sd_card
-
-LIBS += base
+SRC_CC += main.cc
+LIBS += base
vpath %.cc $(REP_DIR)/src/drivers/sd_card
diff --git a/repos/os/lib/mk/spec/exynos5/sd_card_bench.mk b/repos/os/lib/mk/spec/exynos5/sd_card_bench.mk
index ad5e7d164a..1007f6c24f 100644
--- a/repos/os/lib/mk/spec/exynos5/sd_card_bench.mk
+++ b/repos/os/lib/mk/spec/exynos5/sd_card_bench.mk
@@ -1,2 +1,5 @@
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/exynos5
-include $(REP_DIR)/lib/mk/sd_card_bench.inc
+
+vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
+include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/exynos5/sd_card_drv.mk b/repos/os/lib/mk/spec/exynos5/sd_card_drv.mk
index 250a98352b..b7657581d0 100644
--- a/repos/os/lib/mk/spec/exynos5/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/exynos5/sd_card_drv.mk
@@ -1,3 +1,3 @@
-SRC_CC += spec/exynos5/main.cc
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/exynos5
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/imx53/sd_card_bench.mk b/repos/os/lib/mk/spec/imx53/sd_card_bench.mk
index e3981845b0..1542020f2a 100644
--- a/repos/os/lib/mk/spec/imx53/sd_card_bench.mk
+++ b/repos/os/lib/mk/spec/imx53/sd_card_bench.mk
@@ -2,4 +2,7 @@ INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/imx
SRC_CC += spec/imx/adma2.cc
SRC_CC += spec/imx/sdhc.cc
SRC_CC += spec/imx53/sdhc.cc
-include $(REP_DIR)/lib/mk/sd_card_bench.inc
+
+vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
+include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/imx53/sd_card_drv.mk b/repos/os/lib/mk/spec/imx53/sd_card_drv.mk
index 84122ff48c..784a82fef3 100644
--- a/repos/os/lib/mk/spec/imx53/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/imx53/sd_card_drv.mk
@@ -1,6 +1,6 @@
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/imx
SRC_CC += spec/imx/adma2.cc
SRC_CC += spec/imx/sdhc.cc
-SRC_CC += spec/imx/main.cc
SRC_CC += spec/imx53/sdhc.cc
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/imx6/sd_card_bench.mk b/repos/os/lib/mk/spec/imx6/sd_card_bench.mk
index c6a50e2db6..f25ea8b120 100644
--- a/repos/os/lib/mk/spec/imx6/sd_card_bench.mk
+++ b/repos/os/lib/mk/spec/imx6/sd_card_bench.mk
@@ -2,4 +2,7 @@ INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/imx
SRC_CC += spec/imx/adma2.cc
SRC_CC += spec/imx/sdhc.cc
SRC_CC += spec/imx6/sdhc.cc
-include $(REP_DIR)/lib/mk/sd_card_bench.inc
+
+vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
+include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/imx6/sd_card_drv.mk b/repos/os/lib/mk/spec/imx6/sd_card_drv.mk
index 7ad4a1629c..c5cdcf54f5 100644
--- a/repos/os/lib/mk/spec/imx6/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/imx6/sd_card_drv.mk
@@ -1,6 +1,6 @@
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/imx
SRC_CC += spec/imx/adma2.cc
SRC_CC += spec/imx/sdhc.cc
-SRC_CC += spec/imx/main.cc
SRC_CC += spec/imx6/sdhc.cc
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/omap4/sd_card_bench.mk b/repos/os/lib/mk/spec/omap4/sd_card_bench.mk
index 4ed3bd5380..a91ddc6e06 100644
--- a/repos/os/lib/mk/spec/omap4/sd_card_bench.mk
+++ b/repos/os/lib/mk/spec/omap4/sd_card_bench.mk
@@ -1,2 +1,5 @@
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/omap4
-include $(REP_DIR)/lib/mk/sd_card_bench.inc
+
+vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
+include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/omap4/sd_card_drv.mk b/repos/os/lib/mk/spec/omap4/sd_card_drv.mk
index 06883a0a12..5fdd391f8d 100644
--- a/repos/os/lib/mk/spec/omap4/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/omap4/sd_card_drv.mk
@@ -1,3 +1,3 @@
-SRC_CC += spec/omap4/main.cc
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/omap4
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/sd_card_bench.inc b/repos/os/lib/mk/spec/pl180/sd_card_bench.mk
similarity index 60%
rename from repos/os/lib/mk/sd_card_bench.inc
rename to repos/os/lib/mk/spec/pl180/sd_card_bench.mk
index d022dbdb19..0ed74cda51 100644
--- a/repos/os/lib/mk/sd_card_bench.inc
+++ b/repos/os/lib/mk/spec/pl180/sd_card_bench.mk
@@ -1,4 +1,5 @@
-SRC_CC += main.cc
-LIBS += server
+INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/pl180
+
vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/pl180/sd_card_drv.mk b/repos/os/lib/mk/spec/pl180/sd_card_drv.mk
index 6261acfbfb..b4b6183617 100644
--- a/repos/os/lib/mk/spec/pl180/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/pl180/sd_card_drv.mk
@@ -1,3 +1,3 @@
-SRC_CC += spec/pl180/main.cc
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/pl180
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/rpi/sd_card_bench.mk b/repos/os/lib/mk/spec/rpi/sd_card_bench.mk
index bbe27567d6..9bb3d5f948 100644
--- a/repos/os/lib/mk/spec/rpi/sd_card_bench.mk
+++ b/repos/os/lib/mk/spec/rpi/sd_card_bench.mk
@@ -1,2 +1,5 @@
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/rpi
-include $(REP_DIR)/lib/mk/sd_card_bench.inc
+
+vpath main.cc $(REP_DIR)/src/test/sd_card_bench
+
+include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/lib/mk/spec/rpi/sd_card_drv.mk b/repos/os/lib/mk/spec/rpi/sd_card_drv.mk
index bed1918da7..b2c9b61867 100644
--- a/repos/os/lib/mk/spec/rpi/sd_card_drv.mk
+++ b/repos/os/lib/mk/spec/rpi/sd_card_drv.mk
@@ -1,3 +1,3 @@
-SRC_CC += spec/rpi/main.cc
INC_DIR += $(REP_DIR)/src/drivers/sd_card/spec/rpi
+
include $(REP_DIR)/lib/mk/sd_card.inc
diff --git a/repos/os/run/sd_card_bench.run b/repos/os/run/sd_card_bench.run
index d96991cc5e..b8c3019aba 100644
--- a/repos/os/run/sd_card_bench.run
+++ b/repos/os/run/sd_card_bench.run
@@ -1,58 +1,98 @@
#
-# Build
+# Check for platform support
#
-build {
+if {[expr ![have_spec exynos5] && \
+ ![have_spec omap4] && \
+ ![have_spec imx6] && \
+ ![have_spec imx53] && \
+ ![have_spec pl180] && \
+ ![have_spec rpi]]} \
+{
+ puts "\n Run script is not supported on this platform. \n";
+ exit 0;
+}
+
+
+#
+# Build the boot modules
+#
+
+set build_components {
core init
drivers/timer
test/sd_card_bench
}
+source ${genode_dir}/repos/base/run/platform_drv.inc
+append_platform_drv_build_components
+build $build_components
create_boot_directory
-
#
-# Config
+# Install the config
#
-install_config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
-
-
-
-
-
-
-
-
-
-}
+append_platform_drv_config
+
+append config {
+
+
+
+
+
+
+
+
+}
+
+install_config $config
#
-# Boot modules
+# Create the boot image
#
-build_boot_image {
+set boot_modules {
core ld.lib.so init
timer
sd_card_bench
}
-run_genode_until forever
+append_platform_drv_boot_modules
+build_boot_image $boot_modules
-# vi: set ft=tcl :
+
+#
+# Run and evaluate the test
+#
+# If we run on qemu, provide a virtual disk
+#
+
+if {[have_include power_on/qemu]} {
+
+ set disk_image "bin/sd_card.img"
+ if { [file exists $disk_image] == 0 } then {
+ catch { exec dd if=/dev/zero of=$disk_image bs=1M count=512 } }
+
+ append qemu_args "-drive file=$disk_image,format=raw,if=sd,cache=writeback "
+ append qemu_args "-nographic "
+}
+
+run_genode_until "--- SD card benchmark finished ---" 120
diff --git a/repos/os/src/drivers/sd_card/spec/imx/main.cc b/repos/os/src/drivers/sd_card/main.cc
similarity index 54%
rename from repos/os/src/drivers/sd_card/spec/imx/main.cc
rename to repos/os/src/drivers/sd_card/main.cc
index 16e93b6a67..db80f23e44 100644
--- a/repos/os/src/drivers/sd_card/spec/imx/main.cc
+++ b/repos/os/src/drivers/sd_card/main.cc
@@ -1,11 +1,12 @@
/*
* \brief SD-card driver
* \author Martin Stein
- * \date 2015-02-04
+ * \author Sebastian Sumpf
+ * \date 2013-03-06
*/
/*
- * Copyright (C) 2012-2015 Genode Labs GmbH
+ * Copyright (C) 2013-2016 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -14,41 +15,42 @@
/* Genode includes */
#include
#include
+#include
+#include
/* local includes */
#include
+using namespace Genode;
struct Main
{
- Genode::Env &env;
- Genode::Heap heap { env.ram(), env.rm() };
+ Env &env;
+ Heap heap { env.ram(), env.rm() };
struct Factory : Block::Driver_factory
{
- Genode::Entrypoint &ep;
- Genode::Heap &heap;
+ Env &env;
+ Heap &heap;
- Factory(Genode::Entrypoint &ep, Genode::Heap &heap)
- : ep(ep), heap(heap) { }
+ Factory(Env &env, Heap &heap) : env(env), heap(heap) { }
Block::Driver *create() {
- return new (&heap) Block::Sdhci_driver(ep, true); }
+ return new (&heap) Block::Sdhci_driver(env); }
void destroy(Block::Driver *driver) {
- Genode::destroy(&heap,
- static_cast(driver)); }
- } factory { env.ep(), heap };
+ Genode::destroy(&heap, static_cast(driver)); }
+
+ } factory { env, heap };
Block::Root root { env.ep(), heap, factory };
Main(Genode::Env &env) : env(env)
{
Genode::log("--- SD card driver ---");
-
env.parent().announce(env.ep().manage(root));
}
};
-void Component::construct(Genode::Env &env) { static Main m(env); }
+void Component::construct(Genode::Env &env) { static Main main(env); }
diff --git a/repos/os/src/drivers/sd_card/spec/exynos5/driver.h b/repos/os/src/drivers/sd_card/spec/exynos5/driver.h
index a12192ce54..d29d556b59 100644
--- a/repos/os/src/drivers/sd_card/spec/exynos5/driver.h
+++ b/repos/os/src/drivers/sd_card/spec/exynos5/driver.h
@@ -14,12 +14,14 @@
#ifndef _DRIVERS__SD_CARD__SPEC__EXYNOS5__DRIVER_H_
#define _DRIVERS__SD_CARD__SPEC__EXYNOS5__DRIVER_H_
+/* Genode includes */
#include
#include
#include
#include
#include
#include
+#include
/* local includes */
#include
@@ -54,8 +56,15 @@ class Block::Sdhci_driver : public Block::Driver
MSH_SIZE = 0x10000,
};
+ struct Clock_regulator
+ {
+ Regulator::Connection regulator;
+
+ Clock_regulator(Env &env) : regulator(env, Regulator::CLK_MMC0) {
+ regulator.state(true); }
+
+ } _clock_regulator;
- Server::Entrypoint &_ep;
/* display sub system registers */
Attached_io_mem_dataspace _mmio;
@@ -67,13 +76,13 @@ class Block::Sdhci_driver : public Block::Driver
public:
- Sdhci_driver(Server::Entrypoint &ep, bool use_dma)
+ Sdhci_driver(Env &env)
:
- _ep(ep),
+ _clock_regulator(env),
_mmio(MSH_BASE, MSH_SIZE),
- _controller(ep, (addr_t)_mmio.local_addr(),
- _delayer, use_dma),
- _use_dma(use_dma)
+ _controller(env.ep(), (addr_t)_mmio.local_addr(),
+ _delayer, true),
+ _use_dma(true)
{
Sd_card::Card_info const card_info = _controller.card_info();
diff --git a/repos/os/src/drivers/sd_card/spec/exynos5/main.cc b/repos/os/src/drivers/sd_card/spec/exynos5/main.cc
deleted file mode 100644
index 64bb13cf94..0000000000
--- a/repos/os/src/drivers/sd_card/spec/exynos5/main.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * \brief eMMC driver for Arndale/Exynos5 platform
- * \author Sebastian Sumpf
- * \date 2013-03-06
- */
-
-/*
- * Copyright (C) 2015 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-
-/* local includes */
-#include
-
-
-struct Main
-{
- Genode::Env &env;
- Genode::Heap heap { env.ram(), env.rm() };
-
- struct Factory : Block::Driver_factory
- {
- Genode::Entrypoint &ep;
- Genode::Heap &heap;
-
- Factory(Genode::Entrypoint &ep, Genode::Heap &heap)
- : ep(ep), heap(heap) { }
-
- Block::Driver *create() {
- return new (&heap) Block::Sdhci_driver(ep, true); }
-
- void destroy(Block::Driver *driver) {
- Genode::destroy(&heap,
- static_cast(driver)); }
- } factory { env.ep(), heap };
-
- Regulator::Connection regulator { env, Regulator::CLK_MMC0 };
- Block::Root root { env.ep(), heap, factory };
-
- Main(Genode::Env &env) : env(env)
- {
- Genode::log("--- Arndale eMMC card driver ---");
-
- env.parent().announce(env.ep().manage(root));
- regulator.state(true);
- }
-};
-
-
-void Component::construct(Genode::Env &env) { static Main m(env); }
diff --git a/repos/os/src/drivers/sd_card/spec/imx/driver.h b/repos/os/src/drivers/sd_card/spec/imx/driver.h
index ae4e7dacee..743dc87eb5 100644
--- a/repos/os/src/drivers/sd_card/spec/imx/driver.h
+++ b/repos/os/src/drivers/sd_card/spec/imx/driver.h
@@ -51,12 +51,12 @@ class Block::Sdhci_driver : public Block::Driver
public:
- Sdhci_driver(Entrypoint &, bool use_dma)
+ Sdhci_driver(Env &)
:
_sdhc_mmio(Board_base::SDHC_MMIO_BASE, Board_base::SDHC_MMIO_SIZE),
_controller((addr_t)_sdhc_mmio.local_addr(),
- Board_base::SDHC_IRQ, _delayer, use_dma),
- _use_dma(use_dma)
+ Board_base::SDHC_IRQ, _delayer, true),
+ _use_dma(true)
{
Sd_card::Card_info const card_info = _controller.card_info();
diff --git a/repos/os/src/drivers/sd_card/spec/omap4/driver.h b/repos/os/src/drivers/sd_card/spec/omap4/driver.h
index 2aca791a55..d99a75f3db 100644
--- a/repos/os/src/drivers/sd_card/spec/omap4/driver.h
+++ b/repos/os/src/drivers/sd_card/spec/omap4/driver.h
@@ -58,13 +58,16 @@ class Block::Sdhci_driver : public Block::Driver
public:
- Sdhci_driver(Entrypoint &, bool use_dma)
+ struct Dma_not_supported : Exception { };
+
+ Sdhci_driver(Env &)
:
_mmchs1_mmio(MMCHS1_MMIO_BASE, MMCHS1_MMIO_SIZE),
_controller((addr_t)_mmchs1_mmio.local_addr(),
- _delayer, use_dma),
- _use_dma(use_dma)
+ _delayer, false),
+ _use_dma(false)
{
+ if (_use_dma) { throw Dma_not_supported(); }
Sd_card::Card_info const card_info = _controller.card_info();
Genode::log("SD card detected");
diff --git a/repos/os/src/drivers/sd_card/spec/omap4/main.cc b/repos/os/src/drivers/sd_card/spec/omap4/main.cc
deleted file mode 100644
index 17ea313cbf..0000000000
--- a/repos/os/src/drivers/sd_card/spec/omap4/main.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * \brief SD-card driver for OMAP4 platform
- * \author Norman Feske
- * \date 2012-07-03
- */
-
-/*
- * Copyright (C) 2012-2015 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-/* Genode includes */
-#include
-#include
-
-/* local includes */
-#include
-
-
-struct Main
-{
- Genode::Env &env;
- Genode::Heap heap { env.ram(), env.rm() };
-
- struct Factory : Block::Driver_factory
- {
- Genode::Entrypoint &ep;
- Genode::Heap &heap;
-
- Factory(Genode::Entrypoint &ep, Genode::Heap &heap)
- : ep(ep), heap(heap) { }
-
- Block::Driver *create() {
- return new (&heap) Block::Sdhci_driver(ep, true); }
-
- void destroy(Block::Driver *driver) {
- Genode::destroy(&heap,
- static_cast(driver)); }
- } factory { env.ep(), heap };
-
- Block::Root root { env.ep(), heap, factory };
-
- Main(Genode::Env &env) : env(env)
- {
- Genode::log("--- OMAP4 SD card driver ---");
-
- env.parent().announce(env.ep().manage(root));
- }
-};
-
-
-void Component::construct(Genode::Env &env) { static Main m(env); }
diff --git a/repos/os/src/drivers/sd_card/spec/pl180/sd_card.h b/repos/os/src/drivers/sd_card/spec/pl180/driver.h
similarity index 89%
rename from repos/os/src/drivers/sd_card/spec/pl180/sd_card.h
rename to repos/os/src/drivers/sd_card/spec/pl180/driver.h
index 02fc1ad86c..c5e81ff2d2 100644
--- a/repos/os/src/drivers/sd_card/spec/pl180/sd_card.h
+++ b/repos/os/src/drivers/sd_card/spec/pl180/driver.h
@@ -11,26 +11,33 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _DRIVERS__SD_CARD__SPEC__PL180__SD_CARD_H_
-#define _DRIVERS__SD_CARD__SPEC__PL180__SD_CARD_H_
+#ifndef _DRIVER_H_
+#define _DRIVER_H_
+/* Genode includes */
#include
-#include "host_driver.h"
+/* local includes */
+#include
+#include
+namespace Block {
-class Sd_card : public Block::Driver
+ using namespace Genode;
+ class Sdhci_driver;
+}
+
+class Block::Sdhci_driver : public Block::Driver
{
private:
- Host_driver &_hd;
+ Pl180 _hd;
enum { BLOCK_SIZE = 512 };
public:
- Sd_card(Host_driver &host_driver)
- : _hd(host_driver)
+ Sdhci_driver(Env &) : _hd(PL180_PHYS, PL180_SIZE)
{
unsigned resp;
@@ -133,4 +140,4 @@ class Sd_card : public Block::Driver
}
};
-#endif /* _DRIVERS__SD_CARD__SPEC__PL180__SD_CARD_H_ */
+#endif /* _DRIVER_H_ */
diff --git a/repos/os/src/drivers/sd_card/spec/pl180/main.cc b/repos/os/src/drivers/sd_card/spec/pl180/main.cc
deleted file mode 100644
index a53d8a293c..0000000000
--- a/repos/os/src/drivers/sd_card/spec/pl180/main.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * \brief Driver for PL180 multi-media card interface (MMCI)
- * \author Christian Helmuth
- * \date 2011-05-20
- */
-
-/*
- * Copyright (C) 2011-2013 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-
-/* local includes */
-#include
-#include "pl180.h"
-#include "sd_card.h"
-
-
-struct Main
-{
- Genode::Env &env;
- Genode::Heap heap { env.ram(), env.rm() };
-
- struct Factory : Block::Driver_factory
- {
- Genode::Entrypoint &ep;
- Genode::Heap &heap;
-
- Factory(Genode::Entrypoint &ep, Genode::Heap &heap)
- : ep(ep), heap(heap) { }
-
- Block::Driver *create() {
- Pl180 *pl180 = new (Genode::env()->heap())
- Pl180(PL180_PHYS, PL180_SIZE);
- Sd_card *sd_card = new (Genode::env()->heap())
- Sd_card(*pl180);
-
- return sd_card;
- }
-
- void destroy(Block::Driver *driver)
- {
- Sd_card *sd_card = static_cast(driver);
- Pl180 *pl180 = static_cast(&sd_card->host_driver());
-
- Genode::destroy(Genode::env()->heap(), sd_card);
- Genode::destroy(Genode::env()->heap(), pl180);
- }
- } factory { env.ep(), heap };
-
- Block::Root root { env.ep(), heap, factory };
-
- Main(Genode::Env &env) : env(env)
- {
- Genode::log("--- PL180 MMC/SD card driver started ---");
-
- env.parent().announce(env.ep().manage(root));
- }
-};
-
-
-void Component::construct(Genode::Env &env) { static Main m(env); }
diff --git a/repos/os/src/drivers/sd_card/spec/rpi/driver.h b/repos/os/src/drivers/sd_card/spec/rpi/driver.h
index 0ae95a8cd1..10f66de9e1 100644
--- a/repos/os/src/drivers/sd_card/spec/rpi/driver.h
+++ b/repos/os/src/drivers/sd_card/spec/rpi/driver.h
@@ -54,11 +54,11 @@ class Block::Sdhci_driver : public Block::Driver
public:
- Sdhci_driver(Entrypoint &, bool use_dma, const bool set_voltage = false)
+ Sdhci_driver(Env &)
:
_controller((addr_t)_sdhci_mmio.local_addr(),
- _delayer, Board_base::SDHCI_IRQ, use_dma, set_voltage),
- _use_dma(use_dma)
+ _delayer, Board_base::SDHCI_IRQ, false, true),
+ _use_dma(false)
{
Sd_card::Card_info const card_info = _controller.card_info();
diff --git a/repos/os/src/drivers/sd_card/spec/rpi/main.cc b/repos/os/src/drivers/sd_card/spec/rpi/main.cc
deleted file mode 100644
index 6b2da02ace..0000000000
--- a/repos/os/src/drivers/sd_card/spec/rpi/main.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * \brief SD-card driver for Raspberry Pi
- * \author Norman Feske
- * \date 2014-09-21
- */
-
-/*
- * Copyright (C) 2014 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-
-/* local includes */
-#include
-
-
-struct Main
-{
- Genode::Env &env;
- Genode::Heap heap { env.ram(), env.rm() };
- Platform::Connection platform { env };
-
- struct Factory : Block::Driver_factory
- {
- Genode::Entrypoint &ep;
- Genode::Heap &heap;
-
- Factory(Genode::Entrypoint &ep, Genode::Heap &heap)
- : ep(ep), heap(heap) { }
-
- Block::Driver *create() {
- return new (&heap) Block::Sdhci_driver(ep, false); }
-
- void destroy(Block::Driver *driver) {
- Genode::destroy(&heap,
- static_cast(driver)); }
- } factory { env.ep(), heap };
-
- Block::Root root { env.ep(), heap, factory };
-
- Main(Genode::Env &env) : env(env)
- {
- Genode::log("--- SD card driver ---");
-
- while (platform.power_state(Platform::Session::POWER_SDHCI) == 0)
- platform.power_state(Platform::Session::POWER_SDHCI, true);
-
- env.parent().announce(env.ep().manage(root));
- }
-};
-
-
-void Component::construct(Genode::Env &env) { static Main m(env); }
diff --git a/repos/os/src/test/sd_card_bench/main.cc b/repos/os/src/test/sd_card_bench/main.cc
index 03e71fa1b5..ec6f977330 100644
--- a/repos/os/src/test/sd_card_bench/main.cc
+++ b/repos/os/src/test/sd_card_bench/main.cc
@@ -13,15 +13,16 @@
*/
/* Genode includes */
-#include
+#include
#include
#include
#include
-#include
+#include
/* local includes */
#include
+using namespace Genode;
struct Operation
{
@@ -90,15 +91,13 @@ static void run_benchmark(Block::Driver &driver,
struct Main
{
- Main(Server::Entrypoint &ep)
+ Main(Env &env)
{
- using namespace Genode;
-
log("--- SD card benchmark ---");
- bool const use_dma = true;
- static Block::Sdhci_driver driver(ep, use_dma);
+ static Block::Sdhci_driver driver(env);
+ bool const use_dma = driver.dma_enabled();
static Timer::Connection timer;
@@ -109,7 +108,7 @@ struct Main
size_t const buffer_size = 10 * 1024 * 1024;
/* allocate read/write buffer */
- static Attached_ram_dataspace buffer(env()->ram_session(), buffer_size, Genode::UNCACHED);
+ static Attached_ram_dataspace buffer(&env.ram(), buffer_size, Genode::UNCACHED);
char * const buffer_virt = buffer.local_addr();
addr_t const buffer_phys = Dataspace_client(buffer.cap()).phys_addr();
@@ -117,7 +116,7 @@ struct Main
* Benchmark reading from SD card
*/
- log("\n-- reading from SD card --");
+ log("\n-- reading from SD card (", use_dma ? "" : "not ", "using DMA) --");
struct Read : Operation
{
@@ -145,7 +144,7 @@ struct Main
* its original content.
*/
- log("\n-- writing to SD card --");
+ log("\n-- writing to SD card (", use_dma ? "" : "not ", "using DMA) --");
struct Write : Operation
{
@@ -169,12 +168,4 @@ struct Main
};
-/************
- ** Server **
- ************/
-
-namespace Server {
- char const *name() { return "sd_card_bench_ep"; }
- size_t stack_size() { return 16*1024*sizeof(long); }
- void construct(Entrypoint &ep) { static Main server(ep); }
-}
+void Component::construct(Genode::Env &env) { static Main main(env); }