genode/os/src/drivers/acpi
Norman Feske 6d837c9e26 Attach affinity information to session requests
This patch extends the 'Parent::session()' and 'Root::session()'
functions with an additional 'affinity' parameter, which is inteded to
express the preferred affinity of the new session. For CPU sessions
provided by core, the values will be used to select the set of CPUs
assigned to the CPU session. For other services, the session affinity
information can be utilized to optimize the locality of the server
thread with the client. For example, to enable the IRQ session to route
an IRQ to the CPU core on which the corresponding device driver (the IRQ
client) is running.
2013-08-13 17:08:25 +02:00
..
x86 Coding style fixes 2013-03-23 13:37:57 +01:00
README ACPI: Remove quota checking 2012-03-16 18:22:52 +01:00
acpi.cc Coding style fixes 2013-03-23 13:37:57 +01:00
acpi.h Coding style fixes 2013-03-23 13:37:57 +01:00
main.cc Attach affinity information to session requests 2013-08-13 17:08:25 +02:00

README

This directory contains an implementation of a simple ACPI parser

Behavior
--------

This server should be used when using a kernel (like Fiasco.OC or Nova) that
takes advantage of x86's APIC. The server traverses the ACPI tables and sets the
interrupt line of devices within the PCI config space to the GSIs found in the
ACPI tables. The 'MADT' table is parsed by the server as well, enabling clients
to use the correct IRQ when 'Interrupt Override' structures are found wihtin the
table.

Usage
-----

Start the 'acpi_drv' in your Genode environment. Do not start the 'pci_drv'
since this will be used as a slave of the 'acpi_drv'. You still must load the
'pci_drv' in your boot loader.

Configuration snipped (please note that IRQ service requests of the 'timer' are
routed to the ACPI-driver):

!<start name="acpi">
!  <resource name="RAM" quantum="2M"/>
!    <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>
!
!<start name="timer">
!  <resource name="RAM" quantum="1M"/>
!  <provides><service name="Timer"/></provides>
!  <route>
!    <service name="IRQ"><child name="acpi" /></service>
!    <any-service> <parent /> <any-child /></any-service>
!  </route>
!</start>

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

Currently there is no interface to set the interrupt mode for Irq_sessions
(e.g., level or edge triggered). This is required by Fiasco.OCs kernel
interface. We regard this as future work.