From 7c8ca5be649ee92906edf762c49868a602596717 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 19 Jul 2012 14:47:33 +0200 Subject: [PATCH] Move 'Block::Omap4_driver' into header file By placing this code into a distinct header, we can easily reuse it for benchmarking purposes. --- os/src/drivers/sd_card/omap4/driver.h | 118 ++++++++++++++++++++++++++ os/src/drivers/sd_card/omap4/main.cc | 109 +----------------------- 2 files changed, 119 insertions(+), 108 deletions(-) create mode 100644 os/src/drivers/sd_card/omap4/driver.h diff --git a/os/src/drivers/sd_card/omap4/driver.h b/os/src/drivers/sd_card/omap4/driver.h new file mode 100644 index 0000000000..b8ff04c672 --- /dev/null +++ b/os/src/drivers/sd_card/omap4/driver.h @@ -0,0 +1,118 @@ +/* + * \brief OMAP4-specific implementation of the Block::Driver interface + * \author Norman Feske + * \date 2012-07-19 + */ + +#ifndef _DRIVER_H_ +#define _DRIVER_H_ + +#include +#include +#include +#include +#include + +/* local includes */ +#include + +namespace Block { + using namespace Genode; + class Omap4_driver; +} + + +class Block::Omap4_driver : public Block::Driver +{ + private: + + struct Timer_delayer : Timer::Connection, Mmio::Delayer + { + /** + * Implementation of 'Delayer' interface + */ + void usleep(unsigned us) + { + /* polling */ + if (us == 0) + return; + + unsigned ms = us / 1000; + if (ms == 0) + ms = 1; + + Timer::Connection::msleep(ms); + } + } _delayer; + + /* memory map */ + enum { + MMCHS1_MMIO_BASE = 0x4809c000, + MMCHS1_MMIO_SIZE = 0x00001000, + }; + + /* display sub system registers */ + Attached_io_mem_dataspace _mmchs1_mmio; + + /* hsmmc controller instance */ + Omap4_hsmmc_controller _controller; + + public: + + Omap4_driver() + : + _mmchs1_mmio(MMCHS1_MMIO_BASE, MMCHS1_MMIO_SIZE), + _controller((addr_t)_mmchs1_mmio.local_addr(), _delayer) + { + Sd_card::Card_info const card_info = _controller.card_info(); + + PLOG("SD card detected"); + PLOG("capacity: %zd MiB", card_info.capacity_mb()); + } + + + /***************************** + ** Block::Driver interface ** + *****************************/ + + Genode::size_t block_size() { return 512; } + + virtual Genode::size_t block_count() + { + return _controller.card_info().capacity_mb() * 1024 * 2; + } + + void read(Genode::size_t block_number, + Genode::size_t block_count, + char *out_buffer) + { + if (!_controller.read_blocks(block_number, block_count, out_buffer)) + throw Io_error(); + } + + void write(Genode::size_t block_number, + Genode::size_t block_count, + char const *buffer) + { + if (!_controller.write_blocks(block_number, block_count, buffer)) + throw Io_error(); + } + + void read_dma(Genode::size_t block_number, + Genode::size_t block_count, + Genode::addr_t phys) + { + throw Io_error(); + } + + void write_dma(Genode::size_t block_number, + Genode::size_t block_count, + Genode::addr_t phys) + { + throw Io_error(); + } + + bool dma_enabled() { return false; } +}; + +#endif /* _DRIVER_H_ */ diff --git a/os/src/drivers/sd_card/omap4/main.cc b/os/src/drivers/sd_card/omap4/main.cc index a9323bfccd..6f8d581d29 100644 --- a/os/src/drivers/sd_card/omap4/main.cc +++ b/os/src/drivers/sd_card/omap4/main.cc @@ -6,118 +6,11 @@ /* Genode includes */ #include -#include -#include #include -#include #include -#include /* local includes */ -#include - - -namespace Block { - using namespace Genode; - class Omap4_driver; -} - - -class Block::Omap4_driver : public Block::Driver -{ - private: - - struct Timer_delayer : Timer::Connection, Mmio::Delayer - { - /** - * Implementation of 'Delayer' interface - */ - void usleep(unsigned us) - { - /* polling */ - if (us == 0) - return; - - unsigned ms = us / 1000; - if (ms == 0) - ms = 1; - - Timer::Connection::msleep(ms); - } - } _delayer; - - /* memory map */ - enum { - MMCHS1_MMIO_BASE = 0x4809c000, - MMCHS1_MMIO_SIZE = 0x00001000, - }; - - /* display sub system registers */ - Attached_io_mem_dataspace _mmchs1_mmio; - - /* hsmmc controller instance */ - Omap4_hsmmc_controller _controller; - - public: - - Omap4_driver(); - - - /***************************** - ** Block::Driver interface ** - *****************************/ - - Genode::size_t block_size() { return 512; } - - virtual Genode::size_t block_count() - { - return _controller.card_info().capacity_mb() * 1024 * 2; - } - - void read(Genode::size_t block_number, - Genode::size_t block_count, - char *out_buffer) - { - if (!_controller.read_blocks(block_number, block_count, out_buffer)) - throw Io_error(); - } - - void write(Genode::size_t block_number, - Genode::size_t block_count, - char const *buffer) - { - if (!_controller.write_blocks(block_number, block_count, buffer)) - throw Io_error(); - } - - void read_dma(Genode::size_t block_number, - Genode::size_t block_count, - Genode::addr_t phys) - { - throw Io_error(); - } - - void write_dma(Genode::size_t block_number, - Genode::size_t block_count, - Genode::addr_t phys) - { - throw Io_error(); - } - - bool dma_enabled() { return false; } -}; - - -Block::Omap4_driver::Omap4_driver() -: - _mmchs1_mmio(MMCHS1_MMIO_BASE, MMCHS1_MMIO_SIZE), - _controller((addr_t)_mmchs1_mmio.local_addr(), _delayer) -{ - Sd_card::Card_info const card_info = _controller.card_info(); - - PLOG("SD card detected"); - PLOG("capacity: %zd MiB", card_info.capacity_mb()); -} +#include /*