genode/repos/os/src/drivers/ahci
Josef Söntgen 85599c072f os: use async IRQ and server lib in drivers
Use the new asynchronous IRQ interface in the mostly used drivers, e.g.:

* ahci_drv: x86/exynos5
* gpio_drv: imx53/omap4
* input_drv: imx53/dummy
* ps2_drv: x86/pl050
* timer_drv

Now, the Irq_session is requested from Gpio::Session:

From now on we use an asynchronous IRQ interface. To prevent triggering
another GPIO IRQ while currently handling the former one, IRQs must
now by acknowledged explicitly. While here, we also changed the GPIO
session interface regarding IRQ management. The generic GPIO component
now wraps the Irq_session managed by the backend instead of using the
GPIO backend methods directly. A client using the GPIO session may
request the Irq_session_capability by calling
'Gpio::Session::irq_session()' and can use this capability when using
a local Irq_session_client.

Issue #1456.
2015-04-23 16:47:59 +02:00
..
exynos5 os: use async IRQ and server lib in drivers 2015-04-23 16:47:59 +02:00
include os: use async IRQ and server lib in drivers 2015-04-23 16:47:59 +02:00
x86 os: use async IRQ and server lib in drivers 2015-04-23 16:47:59 +02:00
README Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
empty.cc Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
main.cc ahci: avoid to reinstantiate backend driver 2015-01-12 14:24:55 +01:00
target.mk Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00

README

This directory contains an implementation of a simple AHCI driver.

Behavior
--------

The server implements Genode's new block-driver API ('os/include/block'), thus
exposing the block-session interface as front-end. AHCI depends on Genode's PCI
driver as well as the timer server. For a usage example see: 'os/run/ahci.run'.

Limitations and known issues
----------------------------

Currently, the server scans the PCI bus at startup and retrieves the first available
AHCI controller, scans the controller ports and uses the first non-ATAPI port
where a device is present.

On real hardware and on kernels taking advantage of I/O APICs (namely NOVA and
Fiasco.OC) we still lack support for ACPI parsing and thus for interrupts,
leading to a non-working driver.