pci: convert to platform_drv

Fixes #1542
This commit is contained in:
Alexander Boettcher 2015-06-08 09:05:32 +02:00 committed by Christian Helmuth
parent 32e792dc74
commit 1f40d9de6a
84 changed files with 721 additions and 1324 deletions

View File

@ -8,6 +8,7 @@ SPECS += x86 32bit
# #
REP_INC_DIR += include/x86 REP_INC_DIR += include/x86
REP_INC_DIR += include/x86_32 REP_INC_DIR += include/x86_32
REP_INC_DIR += include/platform/x86
# #
# x86-specific flags # x86-specific flags

View File

@ -8,6 +8,7 @@ SPECS += x86 64bit
# #
REP_INC_DIR += include/x86 REP_INC_DIR += include/x86
REP_INC_DIR += include/x86_64 REP_INC_DIR += include/x86_64
REP_INC_DIR += include/platform/x86
CC_MARCH ?= -m64 CC_MARCH ?= -m64

View File

@ -1,5 +1,8 @@
proc have_platform_drv {} { proc have_platform_drv {} {
return [expr [have_spec platform_arndale] || [have_spec platform_imx53] || [have_spec platform_rpi]] if {[have_spec linux]} {
return 0
}
return [expr [have_spec platform_arndale] || [have_spec platform_imx53] || [have_spec platform_rpi] || [have_spec x86]]
} }
proc append_platform_drv_build_components {} { proc append_platform_drv_build_components {} {
@ -8,7 +11,7 @@ proc append_platform_drv_build_components {} {
lappend_if [have_platform_drv] build_components drivers/platform lappend_if [have_platform_drv] build_components drivers/platform
lappend_if [have_spec acpi] build_components drivers/acpi lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec acpi] build_components server/report_rom lappend_if [have_spec acpi] build_components server/report_rom
lappend_if [have_spec pci] build_components drivers/pci lappend_if [have_spec nova] build_components drivers/platform/x86/device_pd
} }
proc append_platform_drv_boot_modules {} { proc append_platform_drv_boot_modules {} {
@ -17,19 +20,22 @@ proc append_platform_drv_boot_modules {} {
lappend_if [have_platform_drv] boot_modules platform_drv lappend_if [have_platform_drv] boot_modules platform_drv
lappend_if [have_spec acpi] boot_modules acpi_drv lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec acpi] boot_modules report_rom lappend_if [have_spec acpi] boot_modules report_rom
lappend_if [have_spec pci] boot_modules pci_drv lappend_if [have_spec nova] boot_modules device_pd
lappend_if [have_spec nova] boot_modules pci_device_pd
} }
proc platform_drv_policy {} { proc platform_drv_policy {} {
return { if ([have_spec x86]) {
return {
<policy label="ps2_drv"> <device name="PS2"/> </policy> <policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="nic_drv"> <pci class="ETHERNET"/> </policy> <policy label="nic_drv"> <pci class="ETHERNET"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy> <policy label="fb_drv"> <pci class="VGA"/> </policy>
<policy label="wifi_drv"> <pci class="WIFI"/> </policy> <policy label="wifi_drv"> <pci class="WIFI"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy> <policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="ahci_drv"> <pci class="AHCI"/> </policy>} <policy label="ahci_drv"> <pci class="AHCI"/> </policy>}
} else {
return {}
}
} }
proc platform_drv_priority {} { return "" } proc platform_drv_priority {} { return "" }
@ -37,18 +43,6 @@ proc platform_drv_priority {} { return "" }
proc append_platform_drv_config {} { proc append_platform_drv_config {} {
global config global config
if {[have_platform_drv]} {
append config {
<start name="platform_drv">
<resource name="RAM" quantum="1M" />
<provides>
<service name="Regulator"/>
<service name="Platform"/>
</provides>
</start>}
}
if {[have_spec acpi]} { if {[have_spec acpi]} {
append config " append config "
@ -75,7 +69,7 @@ proc append_platform_drv_config {} {
<service name="Report" /> <service name="Report" />
</provides> </provides>
<config> <config>
<rom> <policy label="pci_drv -> acpi" report="acpi_drv -> acpi"/> </rom> <rom> <policy label="platform_drv -> acpi" report="acpi_drv -> acpi"/> </rom>
</config> </config>
<route> <route>
<service name="LOG"> <parent/> </service> <service name="LOG"> <parent/> </service>
@ -87,28 +81,36 @@ proc append_platform_drv_config {} {
} }
if {[have_spec pci]} { if {[have_platform_drv]} {
append config " append config "
<start name=\"pci_drv\" [platform_drv_priority]>" <start name=\"platform_drv\" [platform_drv_priority]>"
append config { append config {
<resource name="RAM" quantum="3M" constrain_phys="yes"/> <resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides> <provides>
<service name="Platform"/>}
append_if [have_spec arm] config {
<service name="Regulator"/>}
append config {
</provides>
<route>} <route>}
if {[have_spec acpi]} { append_if [have_spec acpi] config {
append config {
<service name="ROM"> <service name="ROM">
<if-arg key="label" value="acpi"/> <child name="acpi_report_rom"/> <if-arg key="label" value="acpi"/> <child name="acpi_report_rom"/>
</service>} </service>}
}
append_if [have_spec platform_rpi] config {
<service name="Timer"> <any-child/> </service>}
append config { append config {
<any-service> <parent/> </any-service> <any-service> <parent/> </any-service>
</route>} </route>}
if {[have_spec acpi]} { if {[have_spec acpi] || [have_spec arm]} {
append config { append config {
<config>} <config>}

View File

@ -20,14 +20,14 @@ set build_components {
core init core init
drivers/timer drivers/timer
drivers/audio_out drivers/audio_out
drivers/pci
test/audio_out test/audio_out
} }
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if $use_mixer build_components server/mixer lappend_if $use_mixer build_components server/mixer
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -59,36 +59,7 @@ append config {
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi_drv">
<resource name="RAM" quantum="6M"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv">
<pci class="ALL"/>
</policy>
<policy label="audio_out_drv">
<pci class="AUDIO"/>
</policy>
</config>
</start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="4M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
<config>
<policy label="audio_out_drv">
<pci class="AUDIO"/>
</policy>
</config>
</start>}
append_if $use_mixer config { append_if $use_mixer config {
<start name="mixer"> <start name="mixer">
@ -150,10 +121,7 @@ set boot_modules {
lappend_if $use_mixer boot_modules mixer lappend_if $use_mixer boot_modules mixer
# platform-specific modules append_platform_drv_boot_modules
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -17,8 +17,8 @@
#include <dataspace/client.h> #include <dataspace/client.h>
#include <io_port_session/connection.h> #include <io_port_session/connection.h>
#include <io_mem_session/connection.h> #include <io_mem_session/connection.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
/* local includes */ /* local includes */
#include "bsd.h" #include "bsd.h"
@ -43,8 +43,8 @@ class Pci_driver : public Bsd::Bus_driver
struct pci_attach_args _pa { 0, 0, 0, 0, 0 }; struct pci_attach_args _pa { 0, 0, 0, 0, 0 };
Pci::Connection _pci; Platform::Connection _pci;
Pci::Device_capability _cap; Platform::Device_capability _cap;
Genode::Io_port_connection *_io_port { nullptr }; Genode::Io_port_connection *_io_port { nullptr };
@ -104,9 +104,9 @@ class Pci_driver : public Bsd::Bus_driver
/** /**
* Scan pci bus for sound devices * Scan pci bus for sound devices
*/ */
Pci::Device_capability _scan_pci(Pci::Device_capability const &prev) Platform::Device_capability _scan_pci(Platform::Device_capability const &prev)
{ {
Pci::Device_capability cap; Platform::Device_capability cap;
/* shift values for Pci interface used by Genode */ /* shift values for Pci interface used by Genode */
cap = _pci.next_device(prev, PCI_CLASS_MULTIMEDIA << 16, cap = _pci.next_device(prev, PCI_CLASS_MULTIMEDIA << 16,
PCI_CLASS_MASK << 16); PCI_CLASS_MASK << 16);
@ -133,9 +133,9 @@ class Pci_driver : public Bsd::Bus_driver
Pci_driver() : _dma_region_manager(*Genode::env()->heap(), *this) { } Pci_driver() : _dma_region_manager(*Genode::env()->heap(), *this) { }
Pci::Device_capability cap() { return _cap; } Platform::Device_capability cap() { return _cap; }
Pci::Connection &pci() { return _pci; } Platform::Connection &pci() { return _pci; }
int probe() int probe()
{ {
@ -150,7 +150,7 @@ class Pci_driver : public Bsd::Bus_driver
int found = 0; int found = 0;
while ((_cap = _scan_pci(_cap)).valid()) { while ((_cap = _scan_pci(_cap)).valid()) {
Pci::Device_client device(_cap); Platform::Device_client device(_cap);
uint8_t bus, dev, func; uint8_t bus, dev, func;
device.bus_address(&bus, &dev, &func); device.bus_address(&bus, &dev, &func);
@ -181,7 +181,7 @@ class Pci_driver : public Bsd::Bus_driver
**************************/ **************************/
Genode::Irq_session_capability irq_session() override { Genode::Irq_session_capability irq_session() override {
return Pci::Device_client(_cap).irq(0); } return Platform::Device_client(_cap).irq(0); }
Genode::addr_t alloc(Genode::size_t size, int align) override { Genode::addr_t alloc(Genode::size_t size, int align) override {
return _dma_region_manager.alloc(size, align); } return _dma_region_manager.alloc(size, align); }
@ -326,26 +326,26 @@ extern "C" int pci_mapreg_map(struct pci_attach_args *pa,
Pci_driver *drv = (Pci_driver*)pa->pa_pc; Pci_driver *drv = (Pci_driver*)pa->pa_pc;
Pci::Device_capability cap = drv->cap(); Platform::Device_capability cap = drv->cap();
Pci::Device_client device(cap); Platform::Device_client device(cap);
Pci::Device::Resource res = device.resource(r); Platform::Device::Resource res = device.resource(r);
switch (res.type()) { switch (res.type()) {
case Pci::Device::Resource::IO: case Platform::Device::Resource::IO:
{ {
Io_port *iop = new (Genode::env()->heap()) Io_port *iop = new (Genode::env()->heap())
Io_port(res.base(), device.io_port(r)); Io_port(res.base(), device.io_port(r));
*tagp = (Genode::addr_t) iop; *tagp = (Genode::addr_t) iop;
break; break;
} }
case Pci::Device::Resource::MEMORY: case Platform::Device::Resource::MEMORY:
{ {
Io_memory *iom = new (Genode::env()->heap()) Io_memory *iom = new (Genode::env()->heap())
Io_memory(res.base(), device.io_mem(r)); Io_memory(res.base(), device.io_mem(r));
*tagp = (Genode::addr_t) iom; *tagp = (Genode::addr_t) iom;
break; break;
} }
case Pci::Device::Resource::INVALID: case Platform::Device::Resource::INVALID:
{ {
PERR("PCI resource type invalid"); PERR("PCI resource type invalid");
return -1; return -1;
@ -360,8 +360,8 @@ extern "C" int pci_mapreg_map(struct pci_attach_args *pa,
*sizep = maxsize > 0 && res.size() > maxsize ? maxsize : res.size(); *sizep = maxsize > 0 && res.size() > maxsize ? maxsize : res.size();
/* enable bus master and I/O or memory bits */ /* enable bus master and I/O or memory bits */
uint16_t cmd = device.config_read(Pci_driver::CMD, Pci::Device::ACCESS_16BIT); uint16_t cmd = device.config_read(Pci_driver::CMD, Platform::Device::ACCESS_16BIT);
if (res.type() == Pci::Device::Resource::IO) { if (res.type() == Platform::Device::Resource::IO) {
cmd &= ~Pci_driver:: CMD_MEMORY; cmd &= ~Pci_driver:: CMD_MEMORY;
cmd |= Pci_driver::CMD_IO; cmd |= Pci_driver::CMD_IO;
} else { } else {
@ -370,7 +370,7 @@ extern "C" int pci_mapreg_map(struct pci_attach_args *pa,
} }
cmd |= Pci_driver::CMD_MASTER; cmd |= Pci_driver::CMD_MASTER;
device.config_write(Pci_driver::CMD, cmd, Pci::Device::ACCESS_16BIT); device.config_write(Pci_driver::CMD, cmd, Platform::Device::ACCESS_16BIT);
return 0; return 0;
} }
@ -383,8 +383,8 @@ extern "C" int pci_mapreg_map(struct pci_attach_args *pa,
extern "C" pcireg_t pci_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg) extern "C" pcireg_t pci_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg)
{ {
Pci_driver *drv = (Pci_driver *)pc; Pci_driver *drv = (Pci_driver *)pc;
Pci::Device_client device(drv->cap()); Platform::Device_client device(drv->cap());
return device.config_read(reg, Pci::Device::ACCESS_32BIT); return device.config_read(reg, Platform::Device::ACCESS_32BIT);
} }
@ -392,8 +392,8 @@ extern "C" void pci_conf_write(pci_chipset_tag_t pc, pcitag_t tag, int reg,
pcireg_t val) pcireg_t val)
{ {
Pci_driver *drv = (Pci_driver *)pc; Pci_driver *drv = (Pci_driver *)pc;
Pci::Device_client device(drv->cap()); Platform::Device_client device(drv->cap());
return device.config_write(reg, val, Pci::Device::ACCESS_32BIT); return device.config_write(reg, val, Platform::Device::ACCESS_32BIT);
} }

View File

@ -30,8 +30,8 @@
#include <io_port_session/connection.h> #include <io_port_session/connection.h>
#include <irq_session/connection.h> #include <irq_session/connection.h>
#include <os/server.h> #include <os/server.h>
#include <pci_device/client.h> #include <platform_device/client.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <rm_session/connection.h> #include <rm_session/connection.h>
#include <timer_session/connection.h> #include <timer_session/connection.h>
#include <util/misc_math.h> #include <util/misc_math.h>
@ -124,9 +124,9 @@ struct Pci_driver
CLASS_NETWORK = PCI_BASE_CLASS_NETWORK << 16 CLASS_NETWORK = PCI_BASE_CLASS_NETWORK << 16
}; };
Pci::Connection _pci; Platform::Connection _pci;
Pci::Device_capability _cap; Platform::Device_capability _cap;
Pci::Device_capability _last_cap; Platform::Device_capability _last_cap;
struct Region struct Region
{ {
@ -135,21 +135,21 @@ struct Pci_driver
} _region; } _region;
template <typename T> template <typename T>
Pci::Device::Access_size _access_size(T t) Platform::Device::Access_size _access_size(T t)
{ {
switch (sizeof(T)) { switch (sizeof(T)) {
case 1: case 1:
return Pci::Device::ACCESS_8BIT; return Platform::Device::ACCESS_8BIT;
case 2: case 2:
return Pci::Device::ACCESS_16BIT; return Platform::Device::ACCESS_16BIT;
default: default:
return Pci::Device::ACCESS_32BIT; return Platform::Device::ACCESS_32BIT;
} }
} }
void _bus_address(int *bus, int *dev, int *fun) void _bus_address(int *bus, int *dev, int *fun)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
unsigned char b, d, f; unsigned char b, d, f;
client.bus_address(&b, &d, &f); client.bus_address(&b, &d, &f);
@ -164,14 +164,14 @@ struct Pci_driver
template <typename T> template <typename T>
void config_read(unsigned int devfn, T *val) void config_read(unsigned int devfn, T *val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
*val = client.config_read(devfn, _access_size(*val)); *val = client.config_read(devfn, _access_size(*val));
} }
template <typename T> template <typename T>
void config_write(unsigned int devfn, T val) void config_write(unsigned int devfn, T val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
client.config_write(devfn, val, _access_size(val)); client.config_write(devfn, val, _access_size(val));
} }
@ -302,7 +302,7 @@ extern "C" int dde_interrupt_attach(void(*handler)(void *), void *priv)
} }
try { try {
Pci::Device_client device(pci_drv()._cap); Platform::Device_client device(pci_drv()._cap);
_irq_handler = new (Genode::env()->heap()) _irq_handler = new (Genode::env()->heap())
Irq_handler(*_ep, device.irq(0), handler, priv); Irq_handler(*_ep, device.irq(0), handler, priv);
} catch (...) { return -1; } } catch (...) { return -1; }
@ -375,7 +375,7 @@ extern "C" void dde_request_io(dde_uint8_t virt_bar_ioport)
sleep_forever(); sleep_forever();
} }
Pci::Device_client device(pci_drv()._cap); Platform::Device_client device(pci_drv()._cap);
Io_port_session_capability cap = device.io_port(virt_bar_ioport); Io_port_session_capability cap = device.io_port(virt_bar_ioport);
_io_port = new (env()->heap()) Io_port_session_client(cap); _io_port = new (env()->heap()) Io_port_session_client(cap);
@ -622,13 +622,13 @@ extern "C" int dde_request_iomem(dde_addr_t start, dde_addr_t *vaddr)
Genode::sleep_forever(); Genode::sleep_forever();
} }
Pci::Device_client device(pci_drv()._cap); Platform::Device_client device(pci_drv()._cap);
Genode::Io_mem_session_capability cap; Genode::Io_mem_session_capability cap;
Genode::uint8_t virt_iomem_bar = 0; Genode::uint8_t virt_iomem_bar = 0;
for (unsigned i = 0; i < Pci::Device::NUM_RESOURCES; i++) { for (unsigned i = 0; i < Platform::Device::NUM_RESOURCES; i++) {
Pci::Device::Resource res = device.resource(i); Platform::Device::Resource res = device.resource(i);
if (res.type() == Pci::Device::Resource::MEMORY) { if (res.type() == Platform::Device::Resource::MEMORY) {
if (res.base() == start) { if (res.base() == start) {
cap = device.io_mem(virt_iomem_bar); cap = device.io_mem(virt_iomem_bar);
break; break;

View File

@ -13,13 +13,13 @@
set build_components { set build_components {
core init core init
drivers/pci drivers/timer drivers/usb drivers/timer drivers/usb
test/lwip/http_srv test/lwip/http_srv
} }
lappend_if [have_spec acpi] build_components drivers/acpi source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec pci] build_components drivers/pci/device_pd append_platform_drv_build_components
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
build $build_components build $build_components
@ -70,25 +70,7 @@ set config {
</config> </config>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="10M" constrain_phys="yes"/>
<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 [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
@ -97,12 +79,6 @@ append_if [have_spec gpio] config {
<config/> <config/>
</start>} </start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start> }
append config { append config {
</config> </config>
} }
@ -120,10 +96,7 @@ set boot_modules {
ld.lib.so libc.lib.so lwip.lib.so test-lwip_httpsrv ld.lib.so libc.lib.so lwip.lib.so test-lwip_httpsrv
} }
lappend_if [have_spec acpi] boot_modules acpi_drv append_platform_drv_boot_modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -15,12 +15,11 @@ set build_components {
test/blk/cli test/blk/cli
} }
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -48,31 +47,7 @@ set config {
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route>} </default-route>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="5M" constrain_phys="yes"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
@ -108,10 +83,7 @@ set boot_modules {
core init timer usb_drv test-blk-cli core init timer usb_drv test-blk-cli
} }
lappend_if [have_spec acpi] boot_modules acpi_drv append_platform_drv_boot_modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -17,12 +17,11 @@ set build_components {
test/terminal_echo test/terminal_echo
} }
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -50,12 +49,6 @@ append config {
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route>} </default-route>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -63,25 +56,7 @@ append_if [have_spec gpio] config {
<config/> <config/>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="5M"/>
<provides><service name="PCI"/></provides>
</start>}
append config { append config {
<start name="timer"> <start name="timer">
@ -116,12 +91,10 @@ set boot_modules {
usb_terminal usb_terminal
} }
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 256 -nographic -usb -usbdevice host:$::env(USB_RAW_DEVICE) -nographic" append qemu_args " -m 256 -nographic -usb -usbdevice host:$::env(USB_RAW_DEVICE) -nographic"

View File

@ -4,7 +4,7 @@
set build_components { set build_components {
core init core init
drivers/pci drivers/timer drivers/wifi drivers/timer drivers/wifi
drivers/rtc drivers/rtc
server/report_rom server/report_rom
server/ram_fs server/ram_fs
@ -12,11 +12,11 @@ set build_components {
test/lwip/http_srv test/lwip/http_srv
} }
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -105,38 +105,13 @@ set config {
<route> <route>
<service name="Rtc"> <any-child /> </service> <service name="Rtc"> <any-child /> </service>
<service name="File_system"> <child name="config_fs"/> </service> <service name="File_system"> <child name="config_fs"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM"> <if-arg key="label" value="wlan_configuration" /> <child name="config_rom" /> </service> <service name="ROM"> <if-arg key="label" value="wlan_configuration" /> <child name="config_rom" /> </service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="16M" constrain_phys="yes"/>
<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>
<config>
<policy label="acpi_drv">
<pci class="ALL"/>
</policy>
<policy label="wifi_drv">
<pci class="WIFI"/>
</policy>
</config>
</start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
@ -145,12 +120,6 @@ append_if [have_spec gpio] config {
<config/> <config/>
</start>} </start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start> }
append config { append config {
</config> </config>
} }
@ -183,12 +152,10 @@ set boot_modules {
append boot_modules $firmware_modules append boot_modules $firmware_modules
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
run_genode_until forever run_genode_until forever

View File

@ -19,8 +19,8 @@
/* Genode os includes */ /* Genode os includes */
#include <io_port_session/client.h> #include <io_port_session/client.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
#include <util/volatile_object.h> #include <util/volatile_object.h>
/* Linux includes */ /* Linux includes */
@ -102,7 +102,7 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
private: private:
pci_driver *_drv; /* Linux PCI driver */ pci_driver *_drv; /* Linux PCI driver */
Pci::Device_capability _cap; /* PCI cap */ Platform::Device_capability _cap; /* PCI cap */
pci_device_id const *_id; /* matched id for this driver */ pci_device_id const *_id; /* matched id for this driver */
Io_port _port; Io_port _port;
@ -120,7 +120,7 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
*/ */
void _setup_pci_device() void _setup_pci_device()
{ {
using namespace Pci; using namespace Platform;
Device_client client(_cap); Device_client client(_cap);
uint8_t bus, dev, func; uint8_t bus, dev, func;
@ -195,16 +195,16 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
} }
template <typename T> template <typename T>
Pci::Device::Access_size _access_size(T t) Platform::Device::Access_size _access_size(T t)
{ {
switch (sizeof(T)) switch (sizeof(T))
{ {
case 1: case 1:
return Pci::Device::ACCESS_8BIT; return Platform::Device::ACCESS_8BIT;
case 2: case 2:
return Pci::Device::ACCESS_16BIT; return Platform::Device::ACCESS_16BIT;
default: default:
return Pci::Device::ACCESS_32BIT; return Platform::Device::ACCESS_32BIT;
} }
} }
@ -216,7 +216,7 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
public: public:
Pci_driver(pci_driver *drv, Pci::Device_capability cap, Pci_driver(pci_driver *drv, Platform::Device_capability cap,
pci_device_id const * id) pci_device_id const * id)
: _drv(drv), _cap(cap), _id(id), _dev(0) : _drv(drv), _cap(cap), _id(id), _dev(0)
{ {
@ -240,14 +240,14 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
template <typename T> template <typename T>
void config_read(unsigned int devfn, T *val) void config_read(unsigned int devfn, T *val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
*val = client.config_read(devfn, _access_size(*val)); *val = client.config_read(devfn, _access_size(*val));
} }
template <typename T> template <typename T>
void config_write(unsigned int devfn, T val) void config_write(unsigned int devfn, T val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
client.config_write(devfn, val, _access_size(val)); client.config_write(devfn, val, _access_size(val));
} }
@ -257,7 +257,7 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
if (d->_dev && d->_dev->irq != irq) if (d->_dev && d->_dev->irq != irq)
continue; continue;
Pci::Device_client client(d->_cap); Platform::Device_client client(d->_cap);
return client.irq(0); return client.irq(0);
} }
@ -279,7 +279,7 @@ class Pci_driver : public Genode::List<Pci_driver>::Element
if (bar >= PCI_ROM_RESOURCE) if (bar >= PCI_ROM_RESOURCE)
continue; continue;
Pci::Device_client client(d->_cap); Platform::Device_client client(d->_cap);
return client.io_mem(bar); return client.io_mem(bar);
} }
@ -346,7 +346,7 @@ struct Dma_object : Memory_object_base
** Linux interface ** ** Linux interface **
*********************/ *********************/
static Pci::Connection pci; static Platform::Connection pci;
static Genode::Object_pool<Memory_object_base> memory_pool; static Genode::Object_pool<Memory_object_base> memory_pool;
int pci_register_driver(struct pci_driver *drv) int pci_register_driver(struct pci_driver *drv)
@ -372,13 +372,13 @@ int pci_register_driver(struct pci_driver *drv)
Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096");
Pci::Device_capability cap = pci.first_device(id->class_, Platform::Device_capability cap = pci.first_device(id->class_,
id->class_mask); id->class_mask);
while (cap.valid()) { while (cap.valid()) {
if (DEBUG_PCI) { if (DEBUG_PCI) {
uint8_t bus, dev, func; uint8_t bus, dev, func;
Pci::Device_client client(cap); Platform::Device_client client(cap);
client.bus_address(&bus, &dev, &func); client.bus_address(&bus, &dev, &func);
lx_log(DEBUG_PCI, "bus: %x dev: %x func: %x", bus, dev, func); lx_log(DEBUG_PCI, "bus: %x dev: %x func: %x", bus, dev, func);
} }
@ -387,10 +387,10 @@ int pci_register_driver(struct pci_driver *drv)
try { try {
/* probe device */ /* probe device */
pci_drv = new (env()->heap()) Pci_driver(drv, cap, id); pci_drv = new (env()->heap()) Pci_driver(drv, cap, id);
pci.on_destruction(Pci::Connection::KEEP_OPEN); pci.on_destruction(Platform::Connection::KEEP_OPEN);
found = true; found = true;
} catch (Pci::Device::Quota_exceeded) { } catch (Platform::Device::Quota_exceeded) {
Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096");
continue; continue;
} catch (...) { } catch (...) {
@ -398,11 +398,11 @@ int pci_register_driver(struct pci_driver *drv)
pci_drv = 0; pci_drv = 0;
} }
Pci::Device_capability free_up = cap; Platform::Device_capability free_up = cap;
try { try {
cap = pci.next_device(cap, id->class_, id->class_mask); cap = pci.next_device(cap, id->class_, id->class_mask);
} catch (Pci::Device::Quota_exceeded) { } catch (Platform::Device::Quota_exceeded) {
Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096");
cap = pci.next_device(cap, id->class_, id->class_mask); cap = pci.next_device(cap, id->class_, id->class_mask);
} }

View File

@ -17,7 +17,7 @@
#include <base/tslab.h> #include <base/tslab.h>
#include <timer_session/connection.h> #include <timer_session/connection.h>
#include <irq_session/connection.h> #include <irq_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
/* local includes */ /* local includes */
#include <lx.h> #include <lx.h>
@ -81,7 +81,7 @@ namespace Lx {
static void run_irq(void *args); static void run_irq(void *args);
extern "C" Pci::Device_capability pci_device_cap; extern "C" Platform::Device_capability pci_device_cap;
/** /**
* Lx::Irq * Lx::Irq
@ -147,11 +147,11 @@ class Lx::Irq
* Constructor * Constructor
*/ */
Context(Server::Entrypoint &ep, unsigned irq, Context(Server::Entrypoint &ep, unsigned irq,
Pci::Device_capability pci_dev) Platform::Device_capability pci_dev)
: :
_name(irq), _name(irq),
_irq(irq), _irq(irq),
_irq_sess(Pci::Device_client(pci_dev).irq(0)), _irq_sess(Platform::Device_client(pci_dev).irq(0)),
_task(run_irq, this, _name.name), _task(run_irq, this, _name.name),
_dispatcher(ep, *this, &Context::_handle) _dispatcher(ep, *this, &Context::_handle)
{ {

View File

@ -15,8 +15,8 @@
/* Genode inludes */ /* Genode inludes */
#include <ram_session/client.h> #include <ram_session/client.h>
#include <base/object_pool.h> #include <base/object_pool.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
#include <io_mem_session/connection.h> #include <io_mem_session/connection.h>
/* local includes */ /* local includes */
@ -41,9 +41,9 @@ class Pci_driver
{ {
private: private:
pci_driver *_drv; /* Linux PCI driver */ pci_driver *_drv; /* Linux PCI driver */
Pci::Device_capability _cap; /* PCI cap */ Platform::Device_capability _cap; /* PCI cap */
pci_device_id const *_id; /* matched id for this driver */ pci_device_id const *_id; /* matched id for this driver */
public: public:
@ -62,7 +62,7 @@ class Pci_driver
*/ */
bool _setup_pci_device() bool _setup_pci_device()
{ {
using namespace Pci; using namespace Platform;
Device_client client(_cap); Device_client client(_cap);
if (client.device_id() != _id->device) if (client.device_id() != _id->device)
@ -159,22 +159,22 @@ class Pci_driver
} }
template <typename T> template <typename T>
Pci::Device::Access_size _access_size(T t) Platform::Device::Access_size _access_size(T t)
{ {
switch (sizeof(T)) switch (sizeof(T))
{ {
case 1: case 1:
return Pci::Device::ACCESS_8BIT; return Platform::Device::ACCESS_8BIT;
case 2: case 2:
return Pci::Device::ACCESS_16BIT; return Platform::Device::ACCESS_16BIT;
default: default:
return Pci::Device::ACCESS_32BIT; return Platform::Device::ACCESS_32BIT;
} }
} }
public: public:
Pci_driver(pci_driver *drv, Pci::Device_capability cap, Pci_driver(pci_driver *drv, Platform::Device_capability cap,
pci_device_id const * id) pci_device_id const * id)
: _drv(drv), _cap(cap), _id(id), _dev(0) : _drv(drv), _cap(cap), _id(id), _dev(0)
{ {
@ -196,14 +196,14 @@ class Pci_driver
template <typename T> template <typename T>
void config_read(unsigned int devfn, T *val) void config_read(unsigned int devfn, T *val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
*val = client.config_read(devfn, _access_size(*val)); *val = client.config_read(devfn, _access_size(*val));
} }
template <typename T> template <typename T>
void config_write(unsigned int devfn, T val) void config_write(unsigned int devfn, T val)
{ {
Pci::Device_client client(_cap); Platform::Device_client client(_cap);
client.config_write(devfn, val, _access_size(val)); client.config_write(devfn, val, _access_size(val));
} }
}; };
@ -251,10 +251,10 @@ struct Dma_object : Memory_object_base
** Linux interface ** ** Linux interface **
*********************/ *********************/
extern "C" { Pci::Device_capability pci_device_cap; } extern "C" { Platform::Device_capability pci_device_cap; }
static Pci::Connection *pci() static Platform::Connection *pci()
{ {
static Pci::Connection _pci; static Platform::Connection _pci;
return &_pci; return &_pci;
} }
static Genode::Object_pool<Memory_object_base> memory_pool; static Genode::Object_pool<Memory_object_base> memory_pool;
@ -287,7 +287,7 @@ extern "C" int pci_register_driver(struct pci_driver *drv)
continue; continue;
} }
Pci::Device_capability cap = pci()->first_device(PCI_CLASS_WIFI, Platform::Device_capability cap = pci()->first_device(PCI_CLASS_WIFI,
PCI_CLASS_MASK); PCI_CLASS_MASK);
while (cap.valid()) { while (cap.valid()) {
@ -297,10 +297,10 @@ extern "C" int pci_register_driver(struct pci_driver *drv)
/* probe device */ /* probe device */
pci_drv = new (env()->heap()) Pci_driver(drv, cap, id); pci_drv = new (env()->heap()) Pci_driver(drv, cap, id);
pci()->on_destruction(Pci::Connection::KEEP_OPEN); pci()->on_destruction(Platform::Connection::KEEP_OPEN);
found++; found++;
} catch (Pci::Device::Quota_exceeded) { } catch (Platform::Device::Quota_exceeded) {
Genode::env()->parent()->upgrade(pci()->cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(pci()->cap(), "ram_quota=4096");
continue; continue;
} catch (...) { } catch (...) {
@ -311,7 +311,7 @@ extern "C" int pci_register_driver(struct pci_driver *drv)
if (found) if (found)
break; break;
Pci::Device_capability free_up = cap; Platform::Device_capability free_up = cap;
cap = pci()->next_device(cap, PCI_CLASS_WIFI, PCI_CLASS_MASK); cap = pci()->next_device(cap, PCI_CLASS_WIFI, PCI_CLASS_MASK);
if (!pci_drv) if (!pci_drv)
pci()->release_device(free_up); pci()->release_device(free_up);
@ -362,7 +362,7 @@ extern "C" void *pci_ioremap_bar(struct pci_dev *dev, int bar)
Io_mem_session_client *io_mem; Io_mem_session_client *io_mem;
try { try {
Pci::Device_client device(pci_device_cap); Platform::Device_client device(pci_device_cap);
io_mem = new (env()->heap()) Io_mem_session_client(device.io_mem(device.phys_bar_to_virt(bar))); io_mem = new (env()->heap()) Io_mem_session_client(device.io_mem(device.phys_bar_to_virt(bar)));
} catch (...) { } catch (...) {
PERR("Failed to request I/O memory: [%zx,%zx)", start, start + size); PERR("Failed to request I/O memory: [%zx,%zx)", start, start + size);

View File

@ -13,14 +13,14 @@ set build_components {
app/decorator app/decorator
server/nitpicker server/report_rom server/nitpicker server/report_rom
test/decorator_stress test/decorator_stress
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
lappend_if [have_spec usb] build_components drivers/usb lappend_if [have_spec usb] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
lappend_if [have_spec imx53] build_components drivers/platform
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec platform_rpi] build_components drivers/platform
build $build_components build $build_components
@ -58,11 +58,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -77,26 +73,7 @@ append_if [have_spec gpio] config {
<config/> <config/>
</start>} </start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
<config/>
</start>}
append_if [have_spec platform_rpi] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>}
append_if [have_spec imx53] config { append_if [have_spec imx53] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>
<start name="input_drv"> <start name="input_drv">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides> <provides><service name="Input"/></provides>
@ -129,6 +106,10 @@ append config {
<policy label="" domain=""/> <policy label="" domain=""/>
<report pointer="yes" /> <report pointer="yes" />
</config> </config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start> </start>
<start name="report_rom"> <start name="report_rom">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
@ -145,6 +126,10 @@ append config {
</start> </start>
<start name="test-decorator_stress"> <start name="test-decorator_stress">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start> </start>
<start name="decorator"> <start name="decorator">
<resource name="RAM" quantum="8M"/> <resource name="RAM" quantum="8M"/>
@ -157,6 +142,7 @@ append config {
<if-arg key="label" value="window_layout" /> <if-arg key="label" value="window_layout" />
<child name="report_rom" /> <child name="report_rom" />
</service> </service>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</route> </route>
</start> </start>
@ -180,15 +166,13 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
append_platform_drv_boot_modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec usb] boot_modules usb_drv lappend_if [have_spec usb] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
lappend_if [have_spec imx53] boot_modules platform_drv
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec platform_rpi] boot_modules platform_drv
lappend_if [have_spec imx53] boot_modules input_drv lappend_if [have_spec imx53] boot_modules input_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -11,7 +11,6 @@ if {[have_spec hw_odroid_xu]} {
set use_usb_driver [expr [have_spec omap4] || [have_spec platform_arndale] || [have_spec platform_rpi]] set use_usb_driver [expr [have_spec omap4] || [have_spec platform_arndale] || [have_spec platform_rpi]]
set use_nic_driver [expr !$use_usb_driver && ![have_spec platform_imx53]] set use_nic_driver [expr !$use_usb_driver && ![have_spec platform_imx53]]
set use_platform_driver [expr [have_spec platform_arndale] || [have_spec platform_imx53] || [have_spec platform_rpi]]
if {[expr !$use_usb_driver && !$use_nic_driver]} { if {[expr !$use_usb_driver && !$use_nic_driver]} {
puts "\n Run script is not supported on this platform. \n"; exit 0 } puts "\n Run script is not supported on this platform. \n"; exit 0 }
@ -31,12 +30,11 @@ set build_components {
# platform-specific modules # platform-specific modules
lappend_if $use_usb_driver build_components drivers/usb lappend_if $use_usb_driver build_components drivers/usb
lappend_if $use_nic_driver build_components drivers/nic lappend_if $use_nic_driver build_components drivers/nic
lappend_if $use_platform_driver build_components drivers/platform
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -64,13 +62,6 @@ append config {
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start>} </start>}
append_if $use_platform_driver config {
<start name="platform_drv">
<resource name="RAM" quantum="1M" />
<provides><service name="Regulator"/></provides>
<provides><service name="Platform"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -95,25 +86,7 @@ append_if $use_nic_driver config {
<provides><service name="Nic"/></provides> <provides><service name="Nic"/></provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start>}
append config { append config {
<start name="nic_bridge"> <start name="nic_bridge">
@ -139,6 +112,7 @@ append config {
</config> </config>
<route> <route>
<service name="Nic"> <child name="nic_bridge"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service>
<service name="ROM"> <parent/> </service>
<any-service> <any-child /> <parent/> </any-service> <any-service> <any-child /> <parent/> </any-service>
</route> </route>
</start> </start>
@ -186,6 +160,7 @@ mimetype.assign = (
</config> </config>
<route> <route>
<service name="Nic"> <child name="nic_bridge"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service>
<service name="ROM"> <parent/> </service>
<any-service> <any-child /> <parent/> </any-service> <any-service> <any-child /> <parent/> </any-service>
</route> </route>
</start> </start>
@ -208,13 +183,11 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if $use_platform_driver boot_modules platform_drv
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
lappend_if $use_usb_driver boot_modules usb_drv lappend_if $use_usb_driver boot_modules usb_drv
lappend_if $use_nic_driver boot_modules nic_drv lappend_if $use_nic_driver boot_modules nic_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -3,13 +3,16 @@
# #
set build_components { set build_components {
core init drivers/timer drivers/framebuffer drivers/input drivers/pci core init drivers/timer drivers/framebuffer drivers/input
server/dynamic_rom server/nitpicker server/report_rom server/dynamic_rom server/nitpicker server/report_rom
app/pointer app/menu_view app/pointer app/menu_view
app/scout app/launchpad app/launcher test/nitpicker app/scout app/launchpad app/launcher test/nitpicker
server/nit_fader server/nit_fader
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -46,11 +49,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -89,6 +88,10 @@ append config {
<global-key name="KEY_F11" operation="kill" /> <global-key name="KEY_F11" operation="kill" />
<global-key name="KEY_F12" operation="xray" /> <global-key name="KEY_F12" operation="xray" />
</config> </config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start> </start>
<start name="pointer"> <start name="pointer">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
@ -167,8 +170,9 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
append_platform_drv_boot_modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv

View File

@ -22,9 +22,8 @@ set build_components {
test/terminal_echo test/terminal_echo
} }
lappend_if [have_spec acpi] build_components drivers/acpi source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec pci] build_components drivers/pci append_platform_drv_build_components
lappend_if [have_spec pci] build_components drivers/pci/device_pd
build $build_components build $build_components
@ -50,7 +49,7 @@ set config {
<service name="SIGNAL"/> <service name="SIGNAL"/>
</parent-provides> </parent-provides>
<default-route> <default-route>
<any-service> <any-child/> <parent/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route> </default-route>
<start name="timer"> <start name="timer">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
@ -67,33 +66,14 @@ set config {
<policy label="test-terminal_echo" port="8888"/> <policy label="test-terminal_echo" port="8888"/>
<libc stdout="/dev/log"> <libc stdout="/dev/log">
<vfs> <dir name="dev"> <log/> </dir> </vfs> <vfs> <dir name="dev"> <log/> </dir> </vfs>
</lib> </libc>
</config> </config>
</start> </start>
<start name="test-terminal_echo"> <start name="test-terminal_echo">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<service name="PCI"> <any-child /> </service>
<service name="IRQ"> <parent /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
</start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="2M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start> }
append config { append config {
</config> </config>
@ -115,9 +95,7 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv append_platform_drv_boot_modules
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -1,9 +1,14 @@
build { set build_components {
core init drivers/timer core init drivers/timer
server/terminal test/terminal_echo server/terminal test/terminal_echo
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory create_boot_directory
append config { append config {
@ -22,7 +27,7 @@ append config {
<service name="SIGNAL"/> <service name="SIGNAL"/>
</parent-provides> </parent-provides>
<default-route> <default-route>
<any-service> <any-child/> <parent/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route> </default-route>
} }
@ -35,11 +40,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -85,10 +86,10 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -4,13 +4,12 @@
# \date 2012-05-21 # \date 2012-05-21
# #
build { set build_components {
core core
init init
drivers/framebuffer drivers/framebuffer
drivers/input drivers/input
drivers/timer drivers/timer
drivers/pci
server/nitpicker server/nitpicker
server/nit_fb server/nit_fb
server/terminal server/terminal
@ -19,6 +18,12 @@ build {
app/launchpad app/launchpad
app/pointer app/pointer
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory create_boot_directory
append config { append config {
@ -40,7 +45,7 @@ append config {
<service name="Nitpicker"> <child name="nitpicker"/> </service> <service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="Timer"> <child name="timer"/> </service> <service name="Timer"> <child name="timer"/> </service>
<service name="Terminal"> <child name="terminal"/> </service> <service name="Terminal"> <child name="terminal"/> </service>
<service name="PCI"> <child name="pci_drv"/> </service> <service name="Platform"> <child name="platform_drv"/> </service>
<any-service><parent/></any-service> <any-service><parent/></any-service>
</default-route> </default-route>
<start name="timer"> <start name="timer">
@ -73,11 +78,7 @@ append_if [have_spec sdl] config {
</route> </route>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -86,8 +87,7 @@ append_if [have_spec framebuffer] config {
</start>} </start>}
append_if [have_spec ps2] config { append_if [have_spec ps2] config {
<start name="input_drv"> <start name="ps2_drv">
<binary name="ps2_drv"/>
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides> <provides><service name="Input"/></provides>
</start> } </start> }
@ -103,7 +103,7 @@ append_if [expr ! [have_spec sdl]] config {
<policy label="" domain=""/> <policy label="" domain=""/>
</config> </config>
<route> <route>
<service name="Input"> <child name="input_drv"/> </service> <service name="Input"> <child name="ps2_drv"/> </service>
<service name="Framebuffer"> <child name="fb_drv"/> </service> <service name="Framebuffer"> <child name="fb_drv"/> </service>
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</route> </route>
@ -164,10 +164,11 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 256 " append qemu_args " -m 256 "

View File

@ -10,7 +10,7 @@ set build_components {
drivers/timer drivers/timer
server/wm app/decorator app/floating_window_layouter server/wm app/decorator app/floating_window_layouter
server/nitpicker app/pointer server/report_rom server/nitpicker app/pointer server/report_rom
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
test/nitpicker test/nitpicker
app/backdrop app/backdrop
app/launchpad app/launchpad
@ -19,9 +19,9 @@ set build_components {
lappend_if [have_spec usb] build_components drivers/usb lappend_if [have_spec usb] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
lappend_if [have_spec imx53] build_components drivers/platform
lappend_if [have_spec platform_arndale] build_components drivers/platform source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec platform_rpi] build_components drivers/platform append_platform_drv_build_components
build $build_components build $build_components
@ -59,11 +59,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -78,26 +74,7 @@ append_if [have_spec gpio] config {
<config/> <config/>
</start>} </start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
<config/>
</start>}
append_if [have_spec platform_rpi] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>}
append_if [have_spec imx53] config { append_if [have_spec imx53] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>
<start name="input_drv"> <start name="input_drv">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides> <provides><service name="Input"/></provides>
@ -241,15 +218,13 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
append_platform_drv_boot_modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec usb] boot_modules usb_drv lappend_if [have_spec usb] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
lappend_if [have_spec imx53] boot_modules platform_drv
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec platform_rpi] boot_modules platform_drv
lappend_if [have_spec imx53] boot_modules input_drv lappend_if [have_spec imx53] boot_modules input_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -2,14 +2,19 @@
# Build # Build
# #
build { set build_components {
core init core init
drivers/timer drivers/timer
drivers/framebuffer drivers/pci drivers/input drivers/audio_out drivers/framebuffer drivers/input drivers/audio_out
server/mixer server/mixer
app/avplay drivers/acpi app/avplay drivers/acpi
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
# #
# Download media file # Download media file
# #
@ -55,40 +60,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv"> <pci class="ALL"/> </policy>
<policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy>
<policy label="audio_out_drv"> <pci class="AUDIO"/> </policy>
</config>
</start>
}
append_if [expr [have_spec pci] && ![have_spec acpi]] config {
<start name="pci_drv">
<resource name="RAM" quantum="2M" constrain_phys="yes"/>
<provides>
<service name="PCI"/>
</provides>
<policy label="acpi_drv"> <pci class="ALL"/> </policy>
<policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy>
<policy label="audio_out_drv"> <pci class="AUDIO"/> </policy>
</start>
}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -139,7 +111,7 @@ append config {
</libc> </libc>
</config> </config>
<route> <route>
<service name="PCI"> <any-child /> </service> <service name="Platform"> <any-child /> </service>
<service name="Audio_out"> <child name="mixer"/> </service> <service name="Audio_out"> <child name="mixer"/> </service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
@ -161,11 +133,10 @@ set boot_modules {
} }
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec pci] boot_modules acpi_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -4,7 +4,7 @@ build {
server/nitpicker server/nit_fb server/nitpicker server/nit_fb
app/launchpad app/pointer app/launchpad app/pointer
app/eglgears app/eglgears
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
lib/gallium lib/gallium
} }
@ -39,11 +39,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -92,7 +88,7 @@ append config {
<service name="RM"/> <service name="RM"/>
<service name="CPU"/> <service name="CPU"/>
<service name="LOG"/> <service name="LOG"/>
<service name="PCI"/> <service name="Platform"/>
<service name="SIGNAL"/> <service name="SIGNAL"/>
<service name="Nitpicker"/> <service name="Nitpicker"/>
<service name="Timer"/> <service name="Timer"/>
@ -128,11 +124,12 @@ set boot_modules {
} }
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec i915] boot_modules gallium-i915.lib.so lappend_if [have_spec i915] boot_modules gallium-i915.lib.so
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 768" append qemu_args " -m 768"

View File

@ -28,12 +28,17 @@ requires_installation_of lynx
# Build # Build
# #
build { set build_components {
core init core init
drivers/acpi drivers/pci drivers/timer drivers/nic drivers/timer drivers/nic
test/lwip/http_srv_tracing test/lwip/http_srv_tracing
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory create_boot_directory
# #
@ -75,25 +80,7 @@ set config {
</config> </config>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start>}
append config { append config {
</config> </config>
@ -114,8 +101,7 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv append_platform_drv_boot_modules
lappend_if [have_spec acpi] boot_modules acpi_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -10,6 +10,7 @@ if {![have_include power_on/qemu]} {
exit 0 exit 0
} }
# #
# Build # Build
# #
@ -20,11 +21,12 @@ set build_components {
test/libc_block test/libc_block
} }
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if $use_ahci_drv build_components drivers/ahci lappend_if $use_ahci_drv build_components drivers/ahci
lappend_if $use_sd_card_drv build_components drivers/sd_card lappend_if $use_sd_card_drv build_components drivers/sd_card
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -66,28 +68,9 @@ set config {
</vfs> </vfs>
</libc> </libc>
</config> </config>
</start>
}
append_if [have_spec acpi] config {
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<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>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="5M" constrain_phys="yes"/>
<provides><service name="PCI"/></provides>
</start>}
append_if $use_ahci_drv config { append_if $use_ahci_drv config {
<start name="ahci"> <start name="ahci">
@ -121,11 +104,11 @@ set boot_modules {
test-libc_block test-libc_block
} }
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if $use_ahci_drv boot_modules ahci lappend_if $use_ahci_drv boot_modules ahci
lappend_if $use_sd_card_drv boot_modules sd_card_drv lappend_if $use_sd_card_drv boot_modules sd_card_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
# #

View File

@ -22,11 +22,12 @@ set build_components {
test/libc_vfs test/libc_vfs
} }
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if $use_ahci_drv build_components drivers/ahci lappend_if $use_ahci_drv build_components drivers/ahci
lappend_if $use_sd_card_drv build_components drivers/sd_card lappend_if $use_sd_card_drv build_components drivers/sd_card
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -71,34 +72,9 @@ set config {
</vfs> </vfs>
</libc> </libc>
</config> </config>
</start>
}
append_if [have_spec acpi] config {
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv"><pci class="ALL" /></policy>
<policy label="ahci_drv"><pci class="AHCI" /></policy>
</config>
</start>} </start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="5M" constrain_phys="yes"/>
<provides><service name="PCI"/></provides>
<config>
<policy label="ahci_drv"/><pci class="AHCI" /></policy>
</config>
</start>}
append_if $use_ahci_drv config { append_if $use_ahci_drv config {
<start name="ahci_drv"> <start name="ahci_drv">
@ -134,11 +110,11 @@ set boot_modules {
test-libc_vfs test-libc_vfs
} }
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if $use_ahci_drv boot_modules ahci_drv lappend_if $use_ahci_drv boot_modules ahci_drv
lappend_if $use_sd_card_drv boot_modules sd_card_drv lappend_if $use_sd_card_drv boot_modules sd_card_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
# #

View File

@ -1,10 +1,15 @@
build { set build_components {
core init core init
drivers/timer drivers/timer
app/mupdf app/mupdf
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory create_boot_directory
set config { set config {
@ -36,11 +41,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -98,10 +99,11 @@ set boot_modules {
} }
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 768" append qemu_args " -m 768"

View File

@ -6,9 +6,12 @@ set build_components {
core init core init
drivers/timer drivers/timer
test/sdl test/sdl
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -45,11 +48,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -94,10 +93,11 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 256 " append qemu_args " -m 256 "

View File

@ -4,13 +4,16 @@
set build_components { set build_components {
core init core init
drivers/timer drivers/pci drivers/nic drivers/timer drivers/nic
server/nic_bridge server/nic_bridge
test/lwip/http_srv_static test/lwip/http_srv_static
test/lwip/http_clnt test/lwip/http_clnt
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -38,12 +41,7 @@ append config {
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route>} </default-route>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append config { append config {
<start name="timer"> <start name="timer">
@ -112,9 +110,10 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 512 " append qemu_args " -m 512 "

View File

@ -4,13 +4,16 @@
set build_components { set build_components {
core init core init
drivers/timer drivers/input drivers/pci drivers/nic drivers/timer drivers/input drivers/nic
server/nic_bridge server/nic_bridge
app/lighttpd app/lighttpd
test/lwip/http_clnt test/lwip/http_clnt
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -38,12 +41,7 @@ append config {
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route>} </default-route>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append config { append config {
<start name="timer"> <start name="timer">
@ -155,9 +153,10 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 512 " append qemu_args " -m 512 "

View File

@ -15,14 +15,16 @@ if {[have_spec hw_odroid_xu]} {
set build_components { set build_components {
core init core init
drivers/pci drivers/timer drivers/nic drivers/timer drivers/nic
test/lwip/pingpong/client test/lwip/pingpong/client
} }
lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] build_components drivers/usb lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] build_components drivers/usb
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -54,12 +56,6 @@ set config {
<provides> <service name="Timer"/> </provides> <provides> <service name="Timer"/> </provides>
</start> } </start> }
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -84,11 +80,7 @@ append_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] config {
<provides><service name="Nic"/></provides> <provides><service name="Nic"/></provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="2M"/>
<provides> <service name="PCI"/> </provides>
</start> }
# establish serial connection with the server system # establish serial connection with the server system
spawn picocom -b 115200 /dev/ttyUSB0 spawn picocom -b 115200 /dev/ttyUSB0
@ -143,12 +135,12 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] boot_modules usb_drv lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] boot_modules usb_drv
lappend_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] boot_modules nic_drv lappend_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] boot_modules nic_drv
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
# #

View File

@ -15,14 +15,16 @@ if {[have_spec hw_odroid_xu]} {
set build_components { set build_components {
core init core init
drivers/pci drivers/timer drivers/nic drivers/timer drivers/nic
test/lwip/pingpong/server test/lwip/pingpong/server
} }
lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] build_components drivers/usb lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] build_components drivers/usb
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -63,12 +65,6 @@ set config {
</config> </config>
</start> } </start> }
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -93,11 +89,7 @@ append_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] config {
<provides><service name="Nic"/></provides> <provides><service name="Nic"/></provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="2M"/>
<provides> <service name="PCI"/> </provides>
</start> }
append config { append config {
</config> </config>
@ -117,12 +109,12 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] boot_modules usb_drv lappend_if [expr [have_spec omap4] || [have_spec platform_arndale]] boot_modules usb_drv
lappend_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] boot_modules nic_drv lappend_if [expr ![have_spec omap4] && ![have_spec platform_arndale]] boot_modules nic_drv
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
# #

View File

@ -30,8 +30,8 @@ static const bool verbose = false;
** PCI virtualization ** ** PCI virtualization **
************************/ ************************/
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
enum { enum {
PCI_ADDR_REG = 0xcf8, PCI_ADDR_REG = 0xcf8,
@ -42,22 +42,22 @@ class Pci_card
{ {
private: private:
Pci::Connection _pci_drv; Platform::Connection _pci_drv;
Pci::Device_client _device; Platform::Device_client _device;
unsigned short _devfn; unsigned short _devfn;
Pci::Device_capability _find_vga_card() Platform::Device_capability _find_vga_card()
{ {
/* /*
* Iterate through all accessible devices. * Iterate through all accessible devices.
*/ */
Pci::Device_capability prev_device_cap, device_cap; Platform::Device_capability prev_device_cap, device_cap;
Genode::env()->parent()->upgrade(_pci_drv.cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(_pci_drv.cap(), "ram_quota=4096");
for (device_cap = _pci_drv.first_device(); for (device_cap = _pci_drv.first_device();
device_cap.valid(); device_cap.valid();
device_cap = _pci_drv.next_device(prev_device_cap)) { device_cap = _pci_drv.next_device(prev_device_cap)) {
Pci::Device_client device(device_cap); Platform::Device_client device(device_cap);
if (prev_device_cap.valid()) if (prev_device_cap.valid())
_pci_drv.release_device(prev_device_cap); _pci_drv.release_device(prev_device_cap);
@ -93,7 +93,7 @@ class Pci_card
PDBG("Found PCI VGA at %x:%x.%x", bus, dev, fn); PDBG("Found PCI VGA at %x:%x.%x", bus, dev, fn);
} }
Pci::Device_client &device() { return _device; } Platform::Device_client &device() { return _device; }
unsigned short devfn() const { return _devfn; } unsigned short devfn() const { return _devfn; }
}; };
@ -190,7 +190,7 @@ static bool handle_pci_port_read(unsigned short port, T *val)
case 4: /* status and command */ case 4: /* status and command */
case 8: /* class code / revision ID */ case 8: /* class code / revision ID */
raw_val = pci_card()->device().config_read(pci_cfg_addr, raw_val = pci_card()->device().config_read(pci_cfg_addr,
Pci::Device::ACCESS_32BIT); Platform::Device::ACCESS_32BIT);
break; break;
case 0x10: /* base address register 0 */ case 0x10: /* base address register 0 */
@ -201,8 +201,8 @@ static bool handle_pci_port_read(unsigned short port, T *val)
case 0x24: /* base address register 5 */ case 0x24: /* base address register 5 */
{ {
unsigned bar = (pci_cfg_addr - 0x10) / 4; unsigned bar = (pci_cfg_addr - 0x10) / 4;
Pci::Device::Resource res = pci_card()->device().resource(bar); Platform::Device::Resource res = pci_card()->device().resource(bar);
if (res.type() == Pci::Device::Resource::INVALID) { if (res.type() == Platform::Device::Resource::INVALID) {
PWRN("requested PCI resource 0x%x invalid", bar); PWRN("requested PCI resource 0x%x invalid", bar);
*val = 0; *val = 0;
return true; return true;

View File

@ -21,7 +21,7 @@
#include <io_port_session/connection.h> #include <io_port_session/connection.h>
#include <io_mem_session/connection.h> #include <io_mem_session/connection.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include "ifx86emu.h" #include "ifx86emu.h"
#include "framebuffer.h" #include "framebuffer.h"
@ -512,7 +512,7 @@ int X86emu::init(void)
* concurrently accesses by this driver and the Acpi/Pci driver to the * concurrently accesses by this driver and the Acpi/Pci driver to the
* graphic device (PCI config space). * graphic device (PCI config space).
*/ */
Pci::Connection conn; Platform::Connection conn;
if (map_code_area()) if (map_code_area())
return -1; return -1;

View File

@ -1,22 +0,0 @@
/*
* \brief PCI session capability type
* \author Norman Feske
* \date 2008-08-16
*/
/*
* Copyright (C) 2008-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.
*/
#ifndef _INCLUDE__PCI_SESSION__CAPABILITY_H_
#define _INCLUDE__PCI_SESSION__CAPABILITY_H_
#include <base/capability.h>
#include <pci_session/pci_session.h>
namespace Pci { typedef Genode::Capability<Session> Session_capability; }
#endif /* _INCLUDE__PCI_SESSION__CAPABILITY_H_ */

View File

@ -1,32 +0,0 @@
/*
* \brief Connection to PCI service
* \author Norman Feske
* \date 2008-08-22
*/
/*
* Copyright (C) 2008-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.
*/
#ifndef _INCLUDE__PCI_SESSION__CONNECTION_H_
#define _INCLUDE__PCI_SESSION__CONNECTION_H_
#include <pci_session/client.h>
#include <base/connection.h>
namespace Pci { struct Connection; }
struct Pci::Connection : Genode::Connection<Session>, Session_client
{
Connection()
:
Genode::Connection<Session>(session("ram_quota=12K")),
Session_client(cap())
{ }
};
#endif /* _INCLUDE__PCI_SESSION__CONNECTION_H_ */

View File

@ -16,9 +16,9 @@
#include <irq_session/capability.h> #include <irq_session/capability.h>
#include <io_mem_session/capability.h> #include <io_mem_session/capability.h>
namespace Platform { class Device; } namespace Platform { class Abstract_device; }
struct Platform::Device struct Platform::Abstract_device
{ {
/** /**
* Get IRQ session capability * Get IRQ session capability

View File

@ -11,12 +11,9 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _INCLUDE__PCI_DEVICE__CAPABILITY_H_ #pragma once
#define _INCLUDE__PCI_DEVICE__CAPABILITY_H_
#include <base/capability.h> #include <base/capability.h>
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
namespace Pci { typedef Genode::Capability<Device> Device_capability; } namespace Platform { typedef Genode::Capability<Device> Device_capability; }
#endif /* _INCLUDE__PCI_DEVICE__CAPABILITY_H_ */

View File

@ -11,18 +11,17 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _INCLUDE__PCI_DEVICE__CLIENT_H_ #pragma once
#define _INCLUDE__PCI_DEVICE__CLIENT_H_
#include <pci_session/pci_session.h> #include <platform_session/platform_session.h>
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
#include <base/rpc_client.h> #include <base/rpc_client.h>
#include <io_mem_session/io_mem_session.h> #include <io_mem_session/io_mem_session.h>
namespace Pci { struct Device_client; } namespace Platform { struct Device_client; }
struct Pci::Device_client : public Genode::Rpc_client<Device> struct Platform::Device_client : public Genode::Rpc_client<Device>
{ {
Device_client(Device_capability device) Device_client(Device_capability device)
: Genode::Rpc_client<Device>(device) { } : Genode::Rpc_client<Device>(device) { }
@ -57,5 +56,3 @@ struct Pci::Device_client : public Genode::Rpc_client<Device>
Genode::Io_mem_session_capability io_mem(Genode::uint8_t id) override { Genode::Io_mem_session_capability io_mem(Genode::uint8_t id) override {
return call<Rpc_io_mem>(id); } return call<Rpc_io_mem>(id); }
}; };
#endif /* _INCLUDE__PCI_DEVICE__CLIENT_H_ */

View File

@ -11,8 +11,7 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _INCLUDE__PCI_DEVICE__PCI_DEVICE_H_ #pragma once
#define _INCLUDE__PCI_DEVICE__PCI_DEVICE_H_
#include <base/rpc.h> #include <base/rpc.h>
#include <base/signal.h> #include <base/signal.h>
@ -26,10 +25,10 @@
#include <platform/device.h> #include <platform/device.h>
namespace Pci { struct Device; } namespace Platform { struct Device; }
struct Pci::Device : Platform::Device struct Platform::Device : Platform::Abstract_device
{ {
/********************* /*********************
** Exception types ** ** Exception types **
@ -258,5 +257,3 @@ struct Pci::Device : Platform::Device
Genode::Meta::Empty> Genode::Meta::Empty>
> > > > > > > > > Rpc_functions; > > > > > > > > > Rpc_functions;
}; };
#endif /* _INCLUDE__PCI_DEVICE__PCI_DEVICE_H_ */

View File

@ -11,20 +11,19 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _INCLUDE__PCI_SESSION__CLIENT_H_ #pragma once
#define _INCLUDE__PCI_SESSION__CLIENT_H_
#include <base/rpc_client.h> #include <base/rpc_client.h>
#include <pci_device/client.h> #include <platform_device/client.h>
#include <pci_session/capability.h> #include <platform_session/capability.h>
namespace Pci { struct Session_client; } namespace Platform { struct Client; }
struct Pci::Session_client : public Genode::Rpc_client<Session> struct Platform::Client : public Genode::Rpc_client<Session>
{ {
Session_client(Session_capability session) Client(Session_capability session)
: Genode::Rpc_client<Session>(session) { } : Genode::Rpc_client<Session>(session) { }
Device_capability first_device(unsigned device_class = 0, Device_capability first_device(unsigned device_class = 0,
@ -51,5 +50,3 @@ struct Pci::Session_client : public Genode::Rpc_client<Session>
Device_capability device(String const &device) override { Device_capability device(String const &device) override {
return call<Rpc_device>(device); } return call<Rpc_device>(device); }
}; };
#endif /* _INCLUDE__PCI_SESSION__CLIENT_H_ */

View File

@ -0,0 +1,29 @@
/*
* \brief Connection to Platform service
* \author Norman Feske
* \date 2008-08-22
*/
/*
* Copyright (C) 2008-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.
*/
#pragma once
#include <base/connection.h>
#include <platform_session/client.h>
namespace Platform { struct Connection; }
struct Platform::Connection : Genode::Connection<Session>, Client
{
Connection()
:
Genode::Connection<Session>(session("ram_quota=12K")),
Client(cap())
{ }
};

View File

@ -1,5 +1,5 @@
/* /*
* \brief PCI session interface * \brief Platform session interface
* \author Norman Feske * \author Norman Feske
* \date 2008-01-28 * \date 2008-01-28
*/ */
@ -11,27 +11,22 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _INCLUDE__PCI_SESSION__PCI_SESSION_H_ #pragma once
#define _INCLUDE__PCI_SESSION__PCI_SESSION_H_
/* base */ /* base */
#include <session/session.h> #include <session/session.h>
#include <ram_session/ram_session.h> #include <ram_session/ram_session.h>
/* os */ /* os */
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
#include <platform_device/capability.h>
namespace Pci { namespace Platform { struct Session; }
typedef Genode::Capability<Pci::Device> Device_capability;
struct Session;
}
struct Pci::Session : Genode::Session struct Platform::Session : Genode::Session
{ {
static const char *service_name() { return "PCI"; } static const char *service_name() { return "Platform"; }
virtual ~Session() { } virtual ~Session() { }
@ -87,24 +82,24 @@ struct Pci::Session : Genode::Session
*********************/ *********************/
GENODE_RPC_THROW(Rpc_first_device, Device_capability, first_device, GENODE_RPC_THROW(Rpc_first_device, Device_capability, first_device,
GENODE_TYPE_LIST(Pci::Device::Quota_exceeded), GENODE_TYPE_LIST(Platform::Device::Quota_exceeded),
unsigned, unsigned); unsigned, unsigned);
GENODE_RPC_THROW(Rpc_next_device, Device_capability, next_device, GENODE_RPC_THROW(Rpc_next_device, Device_capability, next_device,
GENODE_TYPE_LIST(Pci::Device::Quota_exceeded), GENODE_TYPE_LIST(Platform::Device::Quota_exceeded),
Device_capability, unsigned, unsigned); Device_capability, unsigned, unsigned);
GENODE_RPC(Rpc_release_device, void, release_device, Device_capability); GENODE_RPC(Rpc_release_device, void, release_device, Device_capability);
GENODE_RPC_THROW(Rpc_config_extended, Genode::Io_mem_dataspace_capability, GENODE_RPC_THROW(Rpc_config_extended, Genode::Io_mem_dataspace_capability,
config_extended, config_extended,
GENODE_TYPE_LIST(Pci::Device::Quota_exceeded), GENODE_TYPE_LIST(Platform::Device::Quota_exceeded),
Device_capability); Device_capability);
GENODE_RPC_THROW(Rpc_alloc_dma_buffer, Genode::Ram_dataspace_capability, GENODE_RPC_THROW(Rpc_alloc_dma_buffer, Genode::Ram_dataspace_capability,
alloc_dma_buffer, alloc_dma_buffer,
GENODE_TYPE_LIST(Pci::Device::Quota_exceeded), GENODE_TYPE_LIST(Platform::Device::Quota_exceeded),
Genode::size_t); Genode::size_t);
GENODE_RPC(Rpc_free_dma_buffer, void, free_dma_buffer, GENODE_RPC(Rpc_free_dma_buffer, void, free_dma_buffer,
Genode::Ram_dataspace_capability); Genode::Ram_dataspace_capability);
GENODE_RPC_THROW(Rpc_device, Device_capability, device, GENODE_RPC_THROW(Rpc_device, Device_capability, device,
GENODE_TYPE_LIST(Pci::Device::Quota_exceeded), GENODE_TYPE_LIST(Platform::Device::Quota_exceeded),
String const &); String const &);
GENODE_RPC_INTERFACE(Rpc_first_device, Rpc_next_device, GENODE_RPC_INTERFACE(Rpc_first_device, Rpc_next_device,
@ -112,5 +107,3 @@ struct Pci::Session : Genode::Session
Rpc_alloc_dma_buffer, Rpc_free_dma_buffer, Rpc_alloc_dma_buffer, Rpc_free_dma_buffer,
Rpc_device); Rpc_device);
}; };
#endif /* _INCLUDE__PCI_SESSION__PCI_SESSION_H_ */

View File

@ -13,8 +13,8 @@ set build_components {
test/blk/bench test/blk/bench
} }
lappend_if [have_spec acpi] build_components drivers/acpi source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec pci] build_components drivers/pci append_platform_drv_build_components
build $build_components build $build_components
# #
@ -51,42 +51,11 @@ set config {
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start> </start>
} }
append_if [expr ![have_spec acpi] && ![have_spec pci]] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv"><pci class="ALL" /></policy>
<policy label="ahci"><pci class="AHCI" /></policy>
</config>
</start>
}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
<config>
<policy label="ahci"/><pci class="AHCI" /></policy>
</config>
</start> }
append config { append config {
<start name="ahci"> <start name="ahci_drv">
<binary name="ahci_drv" />
<resource name="RAM" quantum="10M" /> <resource name="RAM" quantum="10M" />
<provides><service name="Block" /></provides> <provides><service name="Block" /></provides>
<config> <config>
@ -105,7 +74,7 @@ append config {
</libc> </libc>
</config> </config>
<route> <route>
<service name="Block"><child name="ahci"/></service> <service name="Block"><child name="ahci_drv"/></service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
</start> </start>
@ -119,10 +88,7 @@ install_config $config
set boot_modules { core init timer ahci_drv test-blk-bench libc.lib.so set boot_modules { core init timer ahci_drv test-blk-bench libc.lib.so
ld.lib.so } ld.lib.so }
lappend_if [expr ![have_spec acpi] && ![have_spec pci]] boot_modules platform_drv append_platform_drv_boot_modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec acpi] boot_modules acpi_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -9,14 +9,14 @@ set build_components {
core init core init
drivers/timer drivers/timer
drivers/ahci drivers/ahci
drivers/platform
test/blk/cli test/blk/cli
} }
lappend_if [have_spec acpi] build_components drivers/acpi source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec pci] build_components drivers/pci append_platform_drv_build_components
build $build_components build $build_components
# #
# Build EXT2-file-system image # Build EXT2-file-system image
# #
@ -49,44 +49,12 @@ set config {
<start name="timer"> <start name="timer">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start>
}
append_if [expr ![have_spec acpi] && ![have_spec pci]] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv"><pci class="ALL" /></policy>
<policy label="ahci"><pci class="AHCI" /></policy>
</config>
</start>
}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
<config>
<policy label="ahci"><pci class="AHCI" /></policy>
</config>
</start> }
append config { append config {
<start name="ahci"> <start name="ahci_drv">
<binary name="ahci_drv" />
<resource name="RAM" quantum="10M" /> <resource name="RAM" quantum="10M" />
<provides><service name="Block" /></provides> <provides><service name="Block" /></provides>
<config> <config>
@ -98,7 +66,7 @@ append config {
<resource name="RAM" quantum="50M" /> <resource name="RAM" quantum="50M" />
<config test_size="100M"></config> <config test_size="100M"></config>
<route> <route>
<service name="Block"><child name="ahci"/></service> <service name="Block"><child name="ahci_drv"/></service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
</start> </start>
@ -111,10 +79,7 @@ install_config $config
# #
set boot_modules { core init timer ahci_drv test-blk-cli } set boot_modules { core init timer ahci_drv test-blk-cli }
lappend_if [expr ![have_spec acpi] && ![have_spec pci]] boot_modules platform_drv append_platform_drv_boot_modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec acpi] boot_modules acpi_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -127,6 +127,10 @@ append config {
<global-key name="KEY_F11" operation="kill" /> <global-key name="KEY_F11" operation="kill" />
<global-key name="KEY_F12" operation="xray" /> <global-key name="KEY_F12" operation="xray" />
</config> </config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start> </start>
<start name="pointer"> <start name="pointer">
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>

View File

@ -7,9 +7,8 @@ if {[have_spec hw_odroid_xu]} {
set build_components { core init test/framebuffer drivers/framebuffer drivers/timer } set build_components { core init test/framebuffer drivers/framebuffer drivers/timer }
lappend_if [have_spec pci] build_components drivers/pci source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec acpi] build_components drivers/acpi append_platform_drv_build_components
lappend_if [have_spec platform_arndale] build_components drivers/platform
build $build_components build $build_components
@ -52,25 +51,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="5M" constrain_phys="yes"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -78,12 +59,6 @@ append_if [have_spec framebuffer] config {
<provides><service name="Framebuffer"/></provides> <provides><service name="Framebuffer"/></provides>
</start>} </start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append config { append config {
<start name="test-framebuffer"> <start name="test-framebuffer">
<resource name="RAM" quantum="10M"/> <resource name="RAM" quantum="10M"/>
@ -103,12 +78,10 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
append_platform_drv_boot_modules
lappend_if [have_spec sdl] boot_modules fb_sdl lappend_if [have_spec sdl] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec platform_arndale] boot_modules platform_drv
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -65,7 +65,7 @@ append config {
<service name="SIGNAL"> <parent/> </service> <service name="SIGNAL"> <parent/> </service>
<service name="IO_MEM"> <parent/> </service> <service name="IO_MEM"> <parent/> </service>
<service name="IRQ"> <parent/> </service> <service name="IRQ"> <parent/> </service>
<service name="PCI"> <any-child/> </service> <service name="Platform"> <any-child/> </service>
</route> </route>
</start> </start>

View File

@ -7,9 +7,12 @@ set build_components {
drivers/timer drivers/timer
server/nitpicker server/loader server/nitpicker server/loader
test/nitpicker test/loader test/nitpicker test/loader
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -37,6 +40,8 @@ append config {
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route>} </default-route>}
append_platform_drv_config
append_if [have_spec sdl] config { append_if [have_spec sdl] config {
<start name="fb_sdl"> <start name="fb_sdl">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -46,12 +51,6 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config {
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -96,10 +95,11 @@ set boot_modules { core init timer nitpicker testnit loader test-loader }
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 256 " append qemu_args " -m 256 "

View File

@ -11,11 +11,8 @@ set build_components {
test/audio_out test/audio_out
} }
# platform-specific components source ${genode_dir}/repos/base/run/platform_drv.inc
if {![have_spec linux]} { append_platform_drv_build_components
lappend build_components drivers/pci
lappend build_components drivers/acpi
}
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -43,49 +40,13 @@ set config {
<default-route> <default-route>
<service name="Audio_out"> <child name="mixer"/> </service> <service name="Audio_out"> <child name="mixer"/> </service>
<any-service> <parent/> <any-child/> </any-service> <any-service> <parent/> <any-child/> </any-service>
</default-route> </default-route>}
}
if {![have_spec linux]} { append_platform_drv_config
append config {
<start name="acpi">
<resource name="RAM" quantum="2M" constrain_phys="yes"/>
<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="audio_out_drv">
<resource name="RAM" quantum="6M"/>
<route>
<service name="IRQ"><child name="acpi" /></service>
<any-service> <parent /> <any-child /></any-service>
</route>
<provides>
<service name="Audio_out" />
</provides>
</start>
}
}
append config { append config {
<start name="audio_out_drv"> <start name="audio_out_drv">
<resource name="RAM" quantum="6M"/> <resource name="RAM" quantum="6M"/>
}
append_if [expr ![have_spec linux]] config {
<route>
<service name="IRQ"><child name="acpi" /></service>
<any-service> <parent /> <any-child /></any-service>
</route>
}
append config {
<provides> <provides>
<service name="Audio_out"/> <service name="Audio_out"/>
</provides> </provides>
@ -137,10 +98,7 @@ set boot_modules {
} }
# platform-specific components # platform-specific components
if {![have_spec linux]} { append_platform_drv_boot_modules
lappend boot_modules acpi_drv
lappend boot_modules pci_drv
}
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args "-m 256 -soundhw es1370 -nographic" append qemu_args "-m 256 -soundhw es1370 -nographic"

View File

@ -5,50 +5,33 @@ Behavior
This server should be used when using a kernel (like Fiasco.OC, Nova, This server should be used when using a kernel (like Fiasco.OC, Nova,
base_hw x86_64) that takes advantage of x86's APIC. The server traverses the base_hw x86_64) 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 ACPI tables and reports the interrupt line of devices within the PCI config
to the GSIs found in the ACPI tables. The 'MADT' table is parsed by the server space of GSIs found in the ACPI tables. The 'MADT' table is parsed by the
as well, enabling clients to use the correct IRQ when 'Interrupt Override' server as well, enabling clients to use the correct IRQ when
structures are found wihtin the table. 'Interrupt Override' structures are found within the table. All information
are reported to a report_rom service as "acpi" report. The report can be
consumed by any interested party, e.g. the platform driver. Please consult
the platform driver README for more details.
Usage 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_drv"> !<start name="acpi_drv">
! <resource name="RAM" quantum="2M" constrain_phys="yes"/> ! <resource name="RAM" quantum="2M"/>
! <provides>
! <service name="PCI"/>
! <service name="IRQ" />
! </provides>
! <config>
! <policy label="acpi_drv">
! <pci class="ALL"/>
! </policy>
! </config>
! <route>
! <any-service> <parent/> <any-child /> </any-service>
! </route>
!</start> !</start>
! !
!<start name="timer"> !<start name="report_rom">
! <resource name="RAM" quantum="1M"/> ! <resource name="RAM" quantum="2M"/>
! <provides><service name="Timer"/></provides> ! <provides>
! <route> ! <service name="ROM" />
! <service name="IRQ"><child name="acpi_drv" /></service> ! <service name="Report" />
! <any-service> <parent /> <any-child /></any-service> ! </provides>
! </route> ! <config>
! <rom>
! <policy label="platform_drv -> acpi" report="acpi_drv -> acpi"/>
! </rom>
! </config>
!</start> !</start>
!
The 'config' node on the 'acpi_drv' requires an policy entry that permits the !<start name="platform_drv">
'acpi_drv' to iterate over all pci devices in order to rewrite the ! ...
interrupt numbers according to the 'MADT' table. Furthermore the whole 'config'
node will be passed on to the 'pci_drv' which obtains from it the required
policy for each client. Additionally the constrain_phys attribute is a
feature of init, which applies to the pci_drv. Please read the 'pci_drv'
README for more details.

View File

@ -12,8 +12,8 @@
*/ */
#include <irq_session/connection.h> #include <irq_session/connection.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
#include <util/volatile_object.h> #include <util/volatile_object.h>
#include <ahci.h> #include <ahci.h>
@ -32,12 +32,12 @@ struct X86_hba : Platform::Hba
PCI_CMD = 0x4, PCI_CMD = 0x4,
}; };
Pci::Connection pci; Platform::Connection pci;
Pci::Device_capability pci_device_cap; Platform::Device_capability pci_device_cap;
Lazy_volatile_object<Pci::Device_client> pci_device; Lazy_volatile_object<Platform::Device_client> pci_device;
Lazy_volatile_object<Irq_session_client> irq; Lazy_volatile_object<Irq_session_client> irq;
addr_t res_base; addr_t res_base;
size_t res_size; size_t res_size;
X86_hba() X86_hba()
{ {
@ -49,7 +49,7 @@ struct X86_hba : Platform::Hba
throw -1; throw -1;
} }
break; break;
} catch (Pci::Device::Quota_exceeded) { } catch (Platform::Device::Quota_exceeded) {
Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096"); Genode::env()->parent()->upgrade(pci.cap(), "ram_quota=4096");
} }
@ -60,7 +60,7 @@ struct X86_hba : Platform::Hba
pci_device->device_id(), pci_device->class_code()); pci_device->device_id(), pci_device->class_code());
/* read base address of controller */ /* read base address of controller */
Pci::Device::Resource resource = pci_device->resource(AHCI_BASE_ID); Platform::Device::Resource resource = pci_device->resource(AHCI_BASE_ID);
res_base = resource.base(); res_base = resource.base();
res_size = resource.size(); res_size = resource.size();
@ -68,9 +68,9 @@ struct X86_hba : Platform::Hba
PDBG("base: %lx size: %zx", res_base, res_size); PDBG("base: %lx size: %zx", res_base, res_size);
/* enable bus master */ /* enable bus master */
uint16_t cmd = pci_device->config_read(PCI_CMD, Pci::Device::ACCESS_16BIT); uint16_t cmd = pci_device->config_read(PCI_CMD, Platform::Device::ACCESS_16BIT);
cmd |= 0x4; cmd |= 0x4;
pci_device->config_write(PCI_CMD, cmd, Pci::Device::ACCESS_16BIT); pci_device->config_write(PCI_CMD, cmd, Platform::Device::ACCESS_16BIT);
irq.construct(pci_device->irq(0)); irq.construct(pci_device->irq(0));
} }
@ -78,19 +78,19 @@ struct X86_hba : Platform::Hba
void disable_msi() void disable_msi()
{ {
enum { PM_CAP_OFF = 0x34, MSI_CAP = 0x5, MSI_ENABLED = 0x1 }; enum { PM_CAP_OFF = 0x34, MSI_CAP = 0x5, MSI_ENABLED = 0x1 };
uint8_t cap = pci_device->config_read(PM_CAP_OFF, ::Pci::Device::ACCESS_8BIT); uint8_t cap = pci_device->config_read(PM_CAP_OFF, Platform::Device::ACCESS_8BIT);
/* iterate through cap pointers */ /* iterate through cap pointers */
for (uint16_t val = 0; cap; cap = val >> 8) { for (uint16_t val = 0; cap; cap = val >> 8) {
val = pci_device->config_read(cap, ::Pci::Device::ACCESS_16BIT); val = pci_device->config_read(cap, Platform::Device::ACCESS_16BIT);
if ((val & 0xff) != MSI_CAP) if ((val & 0xff) != MSI_CAP)
continue; continue;
uint16_t msi = pci_device->config_read(cap + 2, ::Pci::Device::ACCESS_16BIT); uint16_t msi = pci_device->config_read(cap + 2, Platform::Device::ACCESS_16BIT);
if (msi & MSI_ENABLED) { if (msi & MSI_ENABLED) {
pci_device->config_write(cap + 2, msi ^ MSI_CAP, ::Pci::Device::ACCESS_8BIT); pci_device->config_write(cap + 2, msi ^ MSI_CAP, Platform::Device::ACCESS_8BIT);
PINF("Disabled MSIs %x", msi); PINF("Disabled MSIs %x", msi);
} }
} }

View File

@ -20,7 +20,7 @@
#include <input/component.h> #include <input/component.h>
#include <input/root.h> #include <input/root.h>
#include <os/server.h> #include <os/server.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
/* local includes */ /* local includes */
#include "i8042.h" #include "i8042.h"
@ -38,8 +38,8 @@ struct Main
Input::Session_component session; Input::Session_component session;
Input::Root_component root; Input::Root_component root;
Pci::Connection platform; Platform::Connection platform;
Pci::Device_client device_ps2; Platform::Device_client device_ps2;
I8042 i8042; I8042 i8042;

View File

@ -1,4 +1,4 @@
This directory contains the implementation of Genode's PCI driver. This directory contains the implementation of Genode's x86 platform driver.
Behavior Behavior
-------- --------
@ -7,12 +7,13 @@ On startup the driver scans the PCI bus hierarchy and stores the found devices.
Per client a policy must be configured that states which client can Per client a policy must be configured that states which client can
access certain devices to form a virtual pci bus per client. The client may access certain devices to form a virtual pci bus per client. The client may
iterate through the virtual pci bus using the 'first' and 'next' methods of iterate through the virtual pci bus using the 'first' and 'next' methods of
the pci_session interface to discover all available devices of the virtual bus. the platform_session interface to discover all available devices of the virtual
Non PCI devices may be discovered by using 'device' of the pci_session bus. Non PCI devices may be discovered by using 'device' of the
interface. As a result of the discovery a client obtains a device capability. platform_session interface. As a result of the discovery a client obtains a
device capability.
With the device capability the resources of the devices can be obtained, e.g. With the device capability the resources of the devices can be obtained, e.g.
io_port, io_mem and irq of the pci_device interface. io_port, io_mem and irq of the platform_device interface.
Policy usage Policy usage
------------ ------------
@ -21,7 +22,7 @@ A policy may contain several nodes describing several devices. The entries of
a policy may describe PCI devices as non PCI devices. A PCI device is a policy may describe PCI devices as non PCI devices. A PCI device is
explicitly configured by the triple 'bus', 'device', 'function': explicitly configured by the triple 'bus', 'device', 'function':
!<start name="pci_drv"> !<start name="platform_drv">
! <resource name="RAM" quantum="8M" constrain_phys="yes"/> ! <resource name="RAM" quantum="8M" constrain_phys="yes"/>
! ... ! ...
! <config> ! <config>
@ -30,11 +31,11 @@ explicitly configured by the triple 'bus', 'device', 'function':
! <pci bus="0" device="18" function="3"/> ! <pci bus="0" device="18" function="3"/>
! </policy> ! </policy>
! </config> ! </config>
!</start> ! ...
or more fuzzy by a device class alias: or more fuzzy by a device class alias:
!<start name="pci_drv"> !<start name="platform_drv">
! <resource name="RAM" quantum="8M" constrain_phys="yes"/> ! <resource name="RAM" quantum="8M" constrain_phys="yes"/>
! ... ! ...
! <config> ! <config>
@ -42,19 +43,19 @@ or more fuzzy by a device class alias:
! <pci class="USB"/> ! <pci class="USB"/>
! </policy> ! </policy>
! </config> ! </config>
!</start> ! ...
Non PCI devices, as the PS2 controller are named by a "device" node in the policy: Non PCI devices, as the PS2 controller are named by a "device" node in the policy:
!<start name="pci_drv"> !<start name="platform_drv">
! <resource name="RAM" quantum="8M" constrain_phys="yes"/> ! <resource name="RAM" quantum="8M" constrain_phys="yes"/>
! <config> ! <config>
! <policy label="ps_drv"> ! <policy label="ps_drv">
! <device name="PS2/> ! <device name="PS2/>
! </policy> ! </policy>
! </config> ! </config>
!</start> ! ...
The first entry ('pci' or 'dev') of the policy node that matches will grant The first entry ('pci' or 'dev') of the policy node that matches will grant
@ -68,24 +69,53 @@ discovery by the client with the fuzzy pci class policy.
By default the driver will try to use MSIs if the device and the used kernel By default the driver will try to use MSIs if the device and the used kernel
supports it. This behaviour can be overwritten: supports it. This behaviour can be overwritten:
!<start name="pci_drv"> !<start name="platform_drv">
! <resource name="RAM" quantum="8M" constrain_phys="yes"/> ! <resource name="RAM" quantum="8M" constrain_phys="yes"/>
! <config> ! <config>
! <policy label="nic_drv" irq_mode="nomsi"> ! <policy label="nic_drv" irq_mode="nomsi">
! ... ! ...
! </policy> ! </policy>
! </config> ! </config>
!</start> ! ...
The constrain_phys attribute is evaluated by init. If set to "yes" it The constrain_phys attribute is evaluated by init. If set to "yes" it
permits a component, the pci driver, to restrict the allocation of memory to permits a component, the platform driver, to restrict the allocation of memory to
specific physical RAM ranges. The PCI driver uses this feature to ensure that specific physical RAM ranges. The platform driver uses this feature to ensure that
the allocation of DMA capable memory consider several restrictions. For the allocation of DMA capable memory consider several restrictions. For
example, some drivers, as the UHCI controller, requires a example, some drivers, as the UHCI controller, requires a
physical memory address below 4G. Another example is that on 32bit hosts physical memory address below 4G. Another example is that on 32bit hosts
physical to virtual identical mappings of DMA memory for the device_pd physical to virtual identical mappings of DMA memory for the device_pd
(required when IOMMU is used) must be below the kernel memory boundary (3G). (required when IOMMU is used) must be below the kernel memory boundary (3G).
By default the platform driver waits on startup on a report of the acpi driver,
which conatins further information about the platform the platform driver can
not discover (e.g. IRQ re-routing information, pci config extended space
information).
A specific route to a report_rom service named 'acpi_report_rom' looks as
in the following:
!<start name="platform_drv">
! ...
! <route>
! <service name="ROM">
! <if-arg key="label" value="acpi"/> <child name="acpi_report_rom"/>
! </service>
! ...
! </route>
! ...
For platforms which don't support or require the ACPI information -
e.g. base-okl4, base-pistachio, base-fiasco - the platform driver can be
configured to not wait for the acpi report:
!<start name="platform_drv">
! ...
! <config acpi="no">
! ...
! </config>
! ...
Supported PCI class aliases Supported PCI class aliases
--------------------------- ---------------------------
@ -108,7 +138,7 @@ Supported non PCI devices
The driver provides for the PS2 controller the IO_PORT and IRQ resources. The driver provides for the PS2 controller the IO_PORT and IRQ resources.
!<start name="pci_drv"> !<start name="platform_drv">
! <resource name="RAM" quantum="8M" constrain_phys="yes"/> ! <resource name="RAM" quantum="8M" constrain_phys="yes"/>
! <config> ! <config>
! <policy label="ps_drv"> ! <policy label="ps_drv">

View File

@ -1,11 +1,11 @@
/* /*
* \brief Pci device protection domain service for pci_drv * \brief Pci device protection domain service for platform driver
* \author Alexander Boettcher * \author Alexander Boettcher
* \date 2013-02-10 * \date 2013-02-10
*/ */
/* /*
* Copyright (C) 2013-2013 Genode Labs GmbH * Copyright (C) 2013-2015 Genode Labs GmbH
* *
* This file is part of the Genode OS framework, which is distributed * This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
@ -24,7 +24,7 @@
#include "../pci_device_pd_ipc.h" #include "../pci_device_pd_ipc.h"
void Pci::Device_pd_component::attach_dma_mem(Genode::Ram_dataspace_capability ds_cap) void Platform::Device_pd_component::attach_dma_mem(Genode::Ram_dataspace_capability ds_cap)
{ {
using namespace Genode; using namespace Genode;
@ -52,7 +52,7 @@ void Pci::Device_pd_component::attach_dma_mem(Genode::Ram_dataspace_capability d
touch_read(reinterpret_cast<unsigned char *>(page)); touch_read(reinterpret_cast<unsigned char *>(page));
} }
void Pci::Device_pd_component::assign_pci(Genode::Io_mem_dataspace_capability io_mem_cap) void Platform::Device_pd_component::assign_pci(Genode::Io_mem_dataspace_capability io_mem_cap)
{ {
using namespace Genode; using namespace Genode;
@ -78,7 +78,7 @@ int main(int argc, char **argv)
{ {
using namespace Genode; using namespace Genode;
Genode::printf("PCI device pd starting ...\n"); Genode::printf("Device protection domain starting ...\n");
/* /*
* Initialize server entry point * Initialize server entry point
@ -88,18 +88,18 @@ int main(int argc, char **argv)
}; };
static Cap_connection cap; static Cap_connection cap;
static Rpc_entrypoint ep(&cap, STACK_SIZE, "pci_device_pd_ep"); static Rpc_entrypoint ep(&cap, STACK_SIZE, "device_pd_ep");
static Pci::Device_pd_component pci_device_component; static Platform::Device_pd_component pd_component;
/* /*
* Attach input root interface to the entry point * Attach input root interface to the entry point
*/ */
static Static_root<Pci::Device_pd> root(ep.manage(&pci_device_component)); static Static_root<Platform::Device_pd> root(ep.manage(&pd_component));
env()->parent()->announce(ep.manage(&root)); env()->parent()->announce(ep.manage(&root));
printf("PCI device pd started\n"); printf("Device protection domain started\n");
Genode::sleep_forever(); Genode::sleep_forever();
return 0; return 0;

View File

@ -1,4 +1,4 @@
TARGET = pci_device_pd TARGET = device_pd
SRC_CC = main.cc SRC_CC = main.cc
LIBS = base LIBS = base

View File

@ -1,5 +1,5 @@
/* /*
* \brief Implementation of shared IRQs in PCI driver * \brief Implementation of shared IRQs in platform driver
* \author Alexander Boettcher * \author Alexander Boettcher
* \date 2015-03-27 * \date 2015-03-27
*/ */
@ -18,12 +18,12 @@
/* Genode OS includes */ /* Genode OS includes */
#include <platform/irq_proxy.h> #include <platform/irq_proxy.h>
/* PCI driver include */ /* Platform driver include */
#include "irq.h" #include "irq.h"
#include "pci_session_component.h" #include "pci_session_component.h"
namespace Pci { namespace Platform {
class Irq_component; class Irq_component;
class Irq_allocator; class Irq_allocator;
class Irq_thread; class Irq_thread;
@ -36,7 +36,7 @@ using Genode::addr_t;
/** /**
* A simple range allocator implementation used by the Irq_proxy * A simple range allocator implementation used by the Irq_proxy
*/ */
class Pci::Irq_allocator : public Genode::Range_allocator class Platform::Irq_allocator : public Genode::Range_allocator
{ {
private: private:
@ -94,7 +94,7 @@ class Pci::Irq_allocator : public Genode::Range_allocator
/** /**
* Required by Irq_proxy if we would like to have a thread per IRQ, * Required by Irq_proxy if we would like to have a thread per IRQ,
* which we don't want to in the PCI driver - one thread is sufficient. * which we don't want to in the platform driver - one thread is sufficient.
*/ */
class NoThread class NoThread
{ {
@ -109,7 +109,7 @@ class NoThread
/** /**
* Thread waiting for signals caused by IRQs * Thread waiting for signals caused by IRQs
*/ */
class Pci::Irq_thread : public Genode::Thread<4096> class Platform::Irq_thread : public Genode::Thread<4096>
{ {
private: private:
@ -145,8 +145,8 @@ class Pci::Irq_thread : public Genode::Thread<4096>
* One allocator for managing in use IRQ numbers and one IRQ thread waiting * One allocator for managing in use IRQ numbers and one IRQ thread waiting
* for Genode signals of all hardware IRQs. * for Genode signals of all hardware IRQs.
*/ */
static Pci::Irq_allocator irq_alloc; static Platform::Irq_allocator irq_alloc;
static Pci::Irq_thread irq_thread; static Platform::Irq_thread irq_thread;
/** /**
@ -154,12 +154,12 @@ static Pci::Irq_thread irq_thread;
*/ */
typedef Genode::Irq_proxy<NoThread> Proxy; typedef Genode::Irq_proxy<NoThread> Proxy;
class Pci::Irq_component : public Proxy class Platform::Irq_component : public Proxy
{ {
private: private:
Genode::Irq_connection _irq; Genode::Irq_connection _irq;
Genode::Signal_dispatcher<Pci::Irq_component> _irq_dispatcher; Genode::Signal_dispatcher<Platform::Irq_component> _irq_dispatcher;
bool _associated; bool _associated;
@ -212,7 +212,7 @@ class Pci::Irq_component : public Proxy
** PCI IRQ session component ** ** PCI IRQ session component **
*******************************/ *******************************/
void Pci::Irq_session_component::ack_irq() void Platform::Irq_session_component::ack_irq()
{ {
if (msi()) { if (msi()) {
Genode::Irq_session_client irq_msi(_irq_cap); Genode::Irq_session_client irq_msi(_irq_cap);
@ -232,8 +232,8 @@ void Pci::Irq_session_component::ack_irq()
} }
Pci::Irq_session_component::Irq_session_component(unsigned irq, Platform::Irq_session_component::Irq_session_component(unsigned irq,
addr_t pci_config_space) addr_t pci_config_space)
: :
_gsi(irq) _gsi(irq)
{ {
@ -269,7 +269,7 @@ Pci::Irq_session_component::Irq_session_component(unsigned irq,
Genode::Irq_session::Trigger trigger; Genode::Irq_session::Trigger trigger;
Genode::Irq_session::Polarity polarity; Genode::Irq_session::Polarity polarity;
_gsi = Pci::Irq_override::irq_override(_gsi, trigger, polarity); _gsi = Platform::Irq_override::irq_override(_gsi, trigger, polarity);
if (_gsi != irq || trigger != Genode::Irq_session::TRIGGER_UNCHANGED || if (_gsi != irq || trigger != Genode::Irq_session::TRIGGER_UNCHANGED ||
polarity != Genode::Irq_session::POLARITY_UNCHANGED) polarity != Genode::Irq_session::POLARITY_UNCHANGED)
PINF("IRQ override %u->%u trigger mode=%s polarity=%s", irq, _gsi, PINF("IRQ override %u->%u trigger mode=%s polarity=%s", irq, _gsi,
@ -287,7 +287,7 @@ Pci::Irq_session_component::Irq_session_component(unsigned irq,
} }
Pci::Irq_session_component::~Irq_session_component() Platform::Irq_session_component::~Irq_session_component()
{ {
if (msi()) { if (msi()) {
Genode::Irq_session_client irq_msi(_irq_cap); Genode::Irq_session_client irq_msi(_irq_cap);
@ -308,7 +308,7 @@ Pci::Irq_session_component::~Irq_session_component()
} }
void Pci::Irq_session_component::sigh(Genode::Signal_context_capability sigh) void Platform::Irq_session_component::sigh(Genode::Signal_context_capability sigh)
{ {
if (msi()) { if (msi()) {
/* register signal handler for msi directly at parent */ /* register signal handler for msi directly at parent */
@ -336,12 +336,12 @@ void Pci::Irq_session_component::sigh(Genode::Signal_context_capability sigh)
} }
unsigned short Pci::Irq_routing::rewrite(unsigned char bus, unsigned char dev, unsigned short Platform::Irq_routing::rewrite(unsigned char bus, unsigned char dev,
unsigned char func, unsigned char pin) unsigned char func, unsigned char pin)
{ {
for (Irq_routing *i = list()->first(); i; i = i->next()) for (Irq_routing *i = list()->first(); i; i = i->next())
if ((dev == i->_device) && (pin - 1 == i->_device_pin) && if ((dev == i->_device) && (pin - 1 == i->_device_pin) &&
(i->_bridge_bdf == Pci::bridge_bdf(bus))) (i->_bridge_bdf == Platform::bridge_bdf(bus)))
return i->_gsi; return i->_gsi;
return 0; return 0;

View File

@ -20,19 +20,19 @@
#include <irq_session/irq_session.h> #include <irq_session/irq_session.h>
#include <irq_session/capability.h> #include <irq_session/capability.h>
/* PCI local includes */ /* platform local includes */
#include <platform/irq_proxy.h> #include <platform/irq_proxy.h>
namespace Pci { namespace Platform {
class Irq_session_component; class Irq_session_component;
class Irq_override; class Irq_override;
class Irq_routing; class Irq_routing;
} }
class Pci::Irq_session_component : public Genode::Rpc_object<Genode::Irq_session>, class Platform::Irq_session_component : public Genode::Rpc_object<Genode::Irq_session>,
public Genode::List<Irq_session_component>::Element public Genode::List<Irq_session_component>::Element
{ {
private: private:
@ -73,7 +73,7 @@ class Pci::Irq_session_component : public Genode::Rpc_object<Genode::Irq_session
/** /**
* List that holds interrupt override information * List that holds interrupt override information
*/ */
class Pci::Irq_override : public Genode::List<Pci::Irq_override>::Element class Platform::Irq_override : public Genode::List<Platform::Irq_override>::Element
{ {
private: private:
@ -151,7 +151,7 @@ class Pci::Irq_override : public Genode::List<Pci::Irq_override>::Element
/** /**
* List that holds interrupt rewrite information * List that holds interrupt rewrite information
*/ */
class Pci::Irq_routing : public Genode::List<Pci::Irq_routing>::Element class Platform::Irq_routing : public Genode::List<Platform::Irq_routing>::Element
{ {
private: private:

View File

@ -1,5 +1,5 @@
/* /*
* \brief PCI-bus driver * \brief Platform driver for x86
* \author Norman Feske * \author Norman Feske
* \date 2008-01-28 * \date 2008-01-28
*/ */
@ -23,7 +23,7 @@
#include "pci_device_config.h" #include "pci_device_config.h"
using namespace Genode; using namespace Genode;
using namespace Pci; using namespace Platform;
class Device_pd_policy : public Genode::Slave_policy class Device_pd_policy : public Genode::Slave_policy
{ {
@ -45,7 +45,7 @@ class Device_pd_policy : public Genode::Slave_policy
Device_pd_policy(Genode::Rpc_entrypoint &slave_ep) Device_pd_policy(Genode::Rpc_entrypoint &slave_ep)
: :
Slave_policy("pci_device_pd", slave_ep), Slave_policy("device_pd", slave_ep),
_lock(Genode::Lock::LOCKED) _lock(Genode::Lock::LOCKED)
{ } { }
@ -54,8 +54,8 @@ class Device_pd_policy : public Genode::Slave_policy
Genode::Allocator *alloc, Genode::Allocator *alloc,
Genode::Server *server) Genode::Server *server)
{ {
/* wait for 'pci_drv' to announce the PCI service */ /* wait for 'platform_drv' to announce the DEVICE_PD service */
if (Genode::strcmp(service_name, "PCI_DEV_PD")) if (Genode::strcmp(service_name, "DEVICE_PD"))
return false; return false;
_cap = root; _cap = root;
@ -75,27 +75,27 @@ class Device_pd_policy : public Genode::Slave_policy
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
printf("PCI driver started\n"); printf("platform driver started\n");
/* /*
* Initialize server entry point * Initialize server entry point
*/ */
enum { enum {
STACK_SIZE = 2 * sizeof(addr_t)*1024, STACK_SIZE = 2 * sizeof(addr_t)*1024,
PCI_DEVICE_PD_RAM_QUOTA = 196 * 4096, DEVICE_PD_RAM_QUOTA = 196 * 4096,
}; };
static Cap_connection cap; static Cap_connection cap;
static Rpc_entrypoint ep(&cap, STACK_SIZE, "pci_ep"); static Rpc_entrypoint ep(&cap, STACK_SIZE, "platform_ep");
/* use 'pci_device_pd' as slave service */ /* use 'device_pd' as slave service */
Session_capability session_dev_pd; Session_capability session_dev_pd;
Genode::Root_capability device_pd_root; Genode::Root_capability device_pd_root;
try { try {
static Rpc_entrypoint device_pd_ep(&cap, STACK_SIZE, "device_pd_slave"); static Rpc_entrypoint device_pd_ep(&cap, STACK_SIZE, "device_pd_slave");
static Device_pd_policy device_pd_policy(device_pd_ep); static Device_pd_policy device_pd_policy(device_pd_ep);
static Genode::Slave device_pd_slave(device_pd_ep, device_pd_policy, static Genode::Slave device_pd_slave(device_pd_ep, device_pd_policy,
PCI_DEVICE_PD_RAM_QUOTA); DEVICE_PD_RAM_QUOTA);
device_pd_root = device_pd_policy.root(); device_pd_root = device_pd_policy.root();
} catch (...) { } catch (...) {
PWRN("PCI device protection domain for IOMMU support is not available"); PWRN("PCI device protection domain for IOMMU support is not available");
@ -140,8 +140,8 @@ int main(int argc, char **argv)
/* /*
* Let the entry point serve the PCI root interface * Let the entry point serve the PCI root interface
*/ */
static Pci::Root root(&ep, &sliced_heap, PCI_DEVICE_PD_RAM_QUOTA, static Platform::Root root(&ep, &sliced_heap, DEVICE_PD_RAM_QUOTA,
device_pd_root, report_addr); device_pd_root, report_addr);
env()->parent()->announce(ep.manage(&root)); env()->parent()->announce(ep.manage(&root));

View File

@ -16,7 +16,7 @@
namespace Nonpci { class Ps2; } namespace Nonpci { class Ps2; }
class Nonpci::Ps2 : public Pci::Device_component class Nonpci::Ps2 : public Platform::Device_component
{ {
private: private:
@ -35,9 +35,9 @@ class Nonpci::Ps2 : public Pci::Device_component
public: public:
Ps2(Genode::Rpc_entrypoint * ep, Pci::Session_component * session) Ps2(Genode::Rpc_entrypoint * ep, Platform::Session_component * session)
: :
Pci::Device_component(ep, session, IRQ_KEYBOARD), Platform::Device_component(ep, session, IRQ_KEYBOARD),
_irq_mouse(IRQ_MOUSE), _irq_mouse(IRQ_MOUSE),
_data(REG_DATA, ACCESS_WIDTH), _status(REG_STATUS, ACCESS_WIDTH) _data(REG_DATA, ACCESS_WIDTH), _status(REG_STATUS, ACCESS_WIDTH)
{ } { }
@ -74,9 +74,9 @@ class Nonpci::Ps2 : public Pci::Device_component
/** /**
* PCI session component devices which are non PCI devices, e.g. PS2 * Platform session component devices which are non PCI devices, e.g. PS2
*/ */
Pci::Device_capability Pci::Session_component::device(String const &name) { Platform::Device_capability Platform::Session_component::device(String const &name) {
if (!name.is_valid_string()) if (!name.is_valid_string())
return Device_capability(); return Device_capability();
@ -116,7 +116,7 @@ Pci::Device_capability Pci::Session_component::device(String const &name) {
_device_list.insert(dev); _device_list.insert(dev);
return _ep->manage(dev); return _ep->manage(dev);
} catch (Genode::Allocator::Out_of_memory) { } catch (Genode::Allocator::Out_of_memory) {
throw Pci::Device::Quota_exceeded(); throw Platform::Device::Quota_exceeded();
} catch (Genode::Parent::Service_denied) { } catch (Genode::Parent::Service_denied) {
return Device_capability(); return Device_capability();
} }

View File

@ -13,7 +13,7 @@
#pragma once #pragma once
namespace Pci { class Bridge; } namespace Platform { class Bridge; }
#include <util/list.h> #include <util/list.h>
@ -21,7 +21,7 @@ namespace Pci { class Bridge; }
/** /**
* List of PCI-bridge devices * List of PCI-bridge devices
*/ */
class Pci::Bridge : public Genode::List<Bridge>::Element class Platform::Bridge : public Genode::List<Bridge>::Element
{ {
private: private:

View File

@ -5,19 +5,18 @@
*/ */
/* /*
* Copyright (C) 2008-2013 Genode Labs GmbH * Copyright (C) 2008-2015 Genode Labs GmbH
* *
* This file is part of the Genode OS framework, which is distributed * This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _CONFIG_ACCESS_H_ #pragma once
#define _CONFIG_ACCESS_H_
#include <io_port_session/connection.h> #include <io_port_session/connection.h>
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
namespace Pci { namespace Platform {
class Config_access class Config_access
{ {
@ -178,5 +177,3 @@ namespace Pci {
} }
}; };
} }
#endif /* _CONFIG_ACCESS_H_ */

View File

@ -13,7 +13,7 @@
#include "pci_session_component.h" #include "pci_session_component.h"
#include "pci_device_component.h" #include "pci_device_component.h"
Genode::Io_port_session_capability Pci::Device_component::io_port(Genode::uint8_t v_id) Genode::Io_port_session_capability Platform::Device_component::io_port(Genode::uint8_t v_id)
{ {
Genode::uint8_t max = sizeof(_io_port_conn) / sizeof(_io_port_conn[0]); Genode::uint8_t max = sizeof(_io_port_conn) / sizeof(_io_port_conn[0]);
Genode::uint8_t i = 0, r_id = 0; Genode::uint8_t i = 0, r_id = 0;
@ -37,7 +37,7 @@ Genode::Io_port_session_capability Pci::Device_component::io_port(Genode::uint8_
return Genode::Io_port_session_capability(); return Genode::Io_port_session_capability();
} }
Genode::Io_mem_session_capability Pci::Device_component::io_mem(Genode::uint8_t v_id) Genode::Io_mem_session_capability Platform::Device_component::io_mem(Genode::uint8_t v_id)
{ {
Genode::uint8_t max = sizeof(_io_mem_conn) / sizeof(_io_mem_conn[0]); Genode::uint8_t max = sizeof(_io_mem_conn) / sizeof(_io_mem_conn[0]);
Genode::uint8_t i = 0, r_id = 0; Genode::uint8_t i = 0, r_id = 0;
@ -61,7 +61,7 @@ Genode::Io_mem_session_capability Pci::Device_component::io_mem(Genode::uint8_t
return Genode::Io_mem_session_capability(); return Genode::Io_mem_session_capability();
} }
void Pci::Device_component::config_write(unsigned char address, unsigned value, void Platform::Device_component::config_write(unsigned char address, unsigned value,
Access_size size) Access_size size)
{ {
/* white list of ports which we permit to write */ /* white list of ports which we permit to write */

View File

@ -1,18 +1,17 @@
/* /*
* \brief PCI-device component * \brief platform device component
* \author Norman Feske * \author Norman Feske
* \date 2008-01-28 * \date 2008-01-28
*/ */
/* /*
* Copyright (C) 2008-2013 Genode Labs GmbH * Copyright (C) 2008-2015 Genode Labs GmbH
* *
* This file is part of the Genode OS framework, which is distributed * This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _PCI_DEVICE_COMPONENT_H_ #pragma once
#define _PCI_DEVICE_COMPONENT_H_
/* base */ /* base */
#include <base/rpc_server.h> #include <base/rpc_server.h>
@ -21,16 +20,16 @@
#include <util/mmio.h> #include <util/mmio.h>
/* os */ /* os */
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
/* local */ /* local */
#include "pci_device_config.h" #include "pci_device_config.h"
#include "irq.h" #include "irq.h"
namespace Pci { class Device_component; class Session_component; } namespace Platform { class Device_component; class Session_component; }
class Pci::Device_component : public Genode::Rpc_object<Pci::Device>, class Platform::Device_component : public Genode::Rpc_object<Platform::Device>,
public Genode::List<Device_component>::Element public Genode::List<Device_component>::Element
{ {
private: private:
@ -39,7 +38,7 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
Genode::Io_mem_session_capability _io_mem_config_extended; Genode::Io_mem_session_capability _io_mem_config_extended;
Config_access _config_access; Config_access _config_access;
Genode::Rpc_entrypoint *_ep; Genode::Rpc_entrypoint *_ep;
Pci::Session_component *_session; Platform::Session_component *_session;
unsigned short _irq_line; unsigned short _irq_line;
Irq_session_component _irq_session; Irq_session_component _irq_session;
@ -82,17 +81,17 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
Status::access_t status = Status::read(_device_config.read(&_config_access, Status::access_t status = Status::read(_device_config.read(&_config_access,
PCI_STATUS, PCI_STATUS,
Pci::Device::ACCESS_16BIT)); Platform::Device::ACCESS_16BIT));
if (!Status::Capabilities::get(status)) if (!Status::Capabilities::get(status))
return 0; return 0;
Genode::uint8_t cap = _device_config.read(&_config_access, Genode::uint8_t cap = _device_config.read(&_config_access,
PCI_CAP_OFFSET, PCI_CAP_OFFSET,
Pci::Device::ACCESS_8BIT); Platform::Device::ACCESS_8BIT);
for (Genode::uint16_t val = 0; cap; cap = val >> 8) { for (Genode::uint16_t val = 0; cap; cap = val >> 8) {
val = _device_config.read(&_config_access, cap, val = _device_config.read(&_config_access, cap,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
if ((val & 0xff) != CAP_MSI) if ((val & 0xff) != CAP_MSI)
continue; continue;
@ -112,7 +111,7 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
using Genode::uint8_t; using Genode::uint8_t;
uint8_t pin = _device_config.read(&_config_access, PCI_IRQ_PIN, uint8_t pin = _device_config.read(&_config_access, PCI_IRQ_PIN,
Pci::Device::ACCESS_8BIT); Platform::Device::ACCESS_8BIT);
if (!pin) if (!pin)
return Irq_session_component::INVALID_IRQ; return Irq_session_component::INVALID_IRQ;
@ -129,7 +128,7 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
if (_irq_line != irq_r) if (_irq_line != irq_r)
_device_config.write(&_config_access, PCI_IRQ_LINE, irq_r, _device_config.write(&_config_access, PCI_IRQ_LINE, irq_r,
Pci::Device::ACCESS_8BIT); Platform::Device::ACCESS_8BIT);
_irq_line = irq = irq_r; _irq_line = irq = irq_r;
} }
@ -139,13 +138,13 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
return irq; return irq;
uint16_t msi = _device_config.read(&_config_access, cap + 2, uint16_t msi = _device_config.read(&_config_access, cap + 2,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
if (msi & MSI_ENABLED) if (msi & MSI_ENABLED)
/* disable MSI */ /* disable MSI */
_device_config.write(&_config_access, cap + 2, _device_config.write(&_config_access, cap + 2,
msi ^ MSI_ENABLED, msi ^ MSI_ENABLED,
Pci::Device::ACCESS_8BIT); Platform::Device::ACCESS_8BIT);
return irq; return irq;
} }
@ -164,11 +163,11 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
return; return;
unsigned cmd = _device_config.read(&_config_access, PCI_CMD_REG, unsigned cmd = _device_config.read(&_config_access, PCI_CMD_REG,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
if (cmd & PCI_CMD_DMA) if (cmd & PCI_CMD_DMA)
_device_config.write(&_config_access, PCI_CMD_REG, _device_config.write(&_config_access, PCI_CMD_REG,
cmd ^ PCI_CMD_DMA, cmd ^ PCI_CMD_DMA,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
} }
@ -179,13 +178,13 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
*/ */
Device_component(Device_config device_config, Genode::addr_t addr, Device_component(Device_config device_config, Genode::addr_t addr,
Genode::Rpc_entrypoint *ep, Genode::Rpc_entrypoint *ep,
Pci::Session_component * session, Platform::Session_component * session,
bool use_msi) bool use_msi)
: :
_device_config(device_config), _config_space(addr), _device_config(device_config), _config_space(addr),
_ep(ep), _session(session), _ep(ep), _session(session),
_irq_line(_device_config.read(&_config_access, PCI_IRQ_LINE, _irq_line(_device_config.read(&_config_access, PCI_IRQ_LINE,
Pci::Device::ACCESS_8BIT)), Platform::Device::ACCESS_8BIT)),
_irq_session(_configure_irq(_irq_line), (!use_msi || !_msi_cap()) ? ~0UL : _config_space), _irq_session(_configure_irq(_irq_line), (!use_msi || !_msi_cap()) ? ~0UL : _config_space),
_slab_ioport(0, &_slab_ioport_block), _slab_ioport(0, &_slab_ioport_block),
_slab_iomem(0, &_slab_iomem_block) _slab_iomem(0, &_slab_iomem_block)
@ -221,10 +220,10 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
Genode::uint16_t msi = _device_config.read(&_config_access, Genode::uint16_t msi = _device_config.read(&_config_access,
msi_cap + 2, msi_cap + 2,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
_device_config.write(&_config_access, msi_cap + 0x4, msi_address, _device_config.write(&_config_access, msi_cap + 0x4, msi_address,
Pci::Device::ACCESS_32BIT); Platform::Device::ACCESS_32BIT);
if (msi & CAP_MSI_64) { if (msi & CAP_MSI_64) {
Genode::uint32_t upper_address = sizeof(msi_address) > 4 Genode::uint32_t upper_address = sizeof(msi_address) > 4
@ -233,26 +232,26 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
_device_config.write(&_config_access, msi_cap + 0x8, _device_config.write(&_config_access, msi_cap + 0x8,
upper_address, upper_address,
Pci::Device::ACCESS_32BIT); Platform::Device::ACCESS_32BIT);
_device_config.write(&_config_access, msi_cap + 0xc, _device_config.write(&_config_access, msi_cap + 0xc,
msi_value, msi_value,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
} }
else else
_device_config.write(&_config_access, msi_cap + 0x8, msi_value, _device_config.write(&_config_access, msi_cap + 0x8, msi_value,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
/* enable MSI */ /* enable MSI */
_device_config.write(&_config_access, msi_cap + 2, _device_config.write(&_config_access, msi_cap + 2,
msi ^ MSI_ENABLED, msi ^ MSI_ENABLED,
Pci::Device::ACCESS_8BIT); Platform::Device::ACCESS_8BIT);
} }
/** /**
* Constructor for non PCI devices * Constructor for non PCI devices
*/ */
Device_component(Genode::Rpc_entrypoint * ep, Device_component(Genode::Rpc_entrypoint * ep,
Pci::Session_component * session, unsigned irq) Platform::Session_component * session, unsigned irq)
: :
_config_space(~0UL), _config_space(~0UL),
_ep(ep), _session(session), _ep(ep), _session(session),
@ -354,7 +353,7 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
if (msi_cap) { if (msi_cap) {
Genode::uint16_t msi = _device_config.read(&_config_access, Genode::uint16_t msi = _device_config.read(&_config_access,
msi_cap + 2, msi_cap + 2,
Pci::Device::ACCESS_16BIT); Platform::Device::ACCESS_16BIT);
msi_64 = msi & CAP_MSI_64; msi_64 = msi & CAP_MSI_64;
} }
@ -380,5 +379,3 @@ class Pci::Device_component : public Genode::Rpc_object<Pci::Device>,
Genode::Io_mem_session_capability io_mem(Genode::uint8_t) override; Genode::Io_mem_session_capability io_mem(Genode::uint8_t) override;
}; };
#endif /* _PCI_DEVICE_COMPONENT_H_ */

View File

@ -5,19 +5,18 @@
*/ */
/* /*
* Copyright (C) 2008-2013 Genode Labs GmbH * Copyright (C) 2008-2015 Genode Labs GmbH
* *
* This file is part of the Genode OS framework, which is distributed * This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _DEVICE_CONFIG_H_ #pragma once
#define _DEVICE_CONFIG_H_
#include <pci_device/pci_device.h> #include <platform_device/platform_device.h>
#include "pci_config_access.h" #include "pci_config_access.h"
namespace Pci { namespace Platform {
class Device_config class Device_config
{ {
@ -219,5 +218,3 @@ namespace Pci {
} }
}; };
} }
#endif /* _DEVICE_CONFIG_H_ */

View File

@ -11,19 +11,18 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _PCI_DEVICE_PD_IPC_H_ #pragma once
#define _PCI_DEVICE_PD_IPC_H_
#include <base/rpc_server.h> #include <base/rpc_server.h>
#include <io_mem_session/capability.h> #include <io_mem_session/capability.h>
#include <ram_session/ram_session.h> #include <ram_session/ram_session.h>
namespace Pci { namespace Platform {
struct Device_pd : Genode::Session struct Device_pd : Genode::Session
{ {
static const char *service_name() { return "PCI_DEV_PD"; } static const char *service_name() { return "DEVICE_PD"; }
GENODE_RPC(Rpc_attach_dma_mem, void, attach_dma_mem, GENODE_RPC(Rpc_attach_dma_mem, void, attach_dma_mem,
Genode::Ram_dataspace_capability); Genode::Ram_dataspace_capability);
@ -54,4 +53,3 @@ namespace Pci {
}; };
} }
#endif /* _PCI_DEVICE_PD_IPC_H_ */

View File

@ -1,5 +1,5 @@
/* /*
* \brief PCI-session component * \brief platform session component
* \author Norman Feske * \author Norman Feske
* \date 2008-01-28 * \date 2008-01-28
*/ */
@ -11,8 +11,7 @@
* under the terms of the GNU General Public License version 2. * under the terms of the GNU General Public License version 2.
*/ */
#ifndef _PCI_SESSION_COMPONENT_H_ #pragma once
#define _PCI_SESSION_COMPONENT_H_
/* base */ /* base */
#include <base/allocator_guard.h> #include <base/allocator_guard.h>
@ -26,19 +25,19 @@
/* os */ /* os */
#include <io_mem_session/connection.h> #include <io_mem_session/connection.h>
#include <os/session_policy.h> #include <os/session_policy.h>
#include <pci_session/pci_session.h> #include <platform_session/platform_session.h>
/* local */ /* local */
#include "pci_device_component.h" #include "pci_device_component.h"
#include "pci_config_access.h" #include "pci_config_access.h"
#include "pci_device_pd_ipc.h" #include "pci_device_pd_ipc.h"
namespace Pci { namespace Platform {
bool bus_valid(int bus = 0); bool bus_valid(int bus = 0);
unsigned short bridge_bdf(unsigned char bus); unsigned short bridge_bdf(unsigned char bus);
} }
namespace Pci { namespace Platform {
class Session_component : public Genode::Rpc_object<Session> class Session_component : public Genode::Rpc_object<Session>
{ {
@ -697,7 +696,7 @@ namespace Pci {
node.attribute("gsi").value(&gsi); node.attribute("gsi").value(&gsi);
node.attribute("flags").value(&flags); node.attribute("flags").value(&flags);
using Pci::Irq_override; using Platform::Irq_override;
Irq_override::list()->insert(new (env()->heap()) Irq_override(irq, gsi, flags)); Irq_override::list()->insert(new (env()->heap()) Irq_override(irq, gsi, flags));
} }
@ -777,5 +776,3 @@ namespace Pci {
}; };
} }
#endif /* _PCI_SESSION_COMPONENT_H_ */

View File

@ -1,5 +1,5 @@
/* /*
* \brief PCI-session component * \brief platform session component
* \author Norman Feske * \author Norman Feske
* \date 2008-01-28 * \date 2008-01-28
*/ */
@ -15,16 +15,16 @@
#include "pci_bridge.h" #include "pci_bridge.h"
static Genode::List<Pci::Bridge> *bridges() static Genode::List<Platform::Bridge> *bridges()
{ {
static Genode::List<Pci::Bridge> list; static Genode::List<Platform::Bridge> list;
return &list; return &list;
} }
unsigned short Pci::bridge_bdf(unsigned char bus) unsigned short Platform::bridge_bdf(unsigned char bus)
{ {
for (Pci::Bridge *bridge = bridges()->first(); bridge; for (Platform::Bridge *bridge = bridges()->first(); bridge;
bridge = bridge->next()) bridge = bridge->next())
{ {
if (bridge->part_of(bus)) if (bridge->part_of(bus))
@ -39,7 +39,7 @@ unsigned short Pci::bridge_bdf(unsigned char bus)
* *
* This tremendously speeds up further scans by other drivers. * This tremendously speeds up further scans by other drivers.
*/ */
bool Pci::bus_valid(int bus) bool Platform::bus_valid(int bus)
{ {
struct Valid_buses struct Valid_buses
{ {
@ -87,7 +87,7 @@ bool Pci::bus_valid(int bus)
} }
using Pci::Session_component; using Platform::Session_component;
using Genode::Bit_array; using Genode::Bit_array;
Bit_array<Session_component::MAX_PCI_DEVICES> Session_component::bdf_in_use; Bit_array<Session_component::MAX_PCI_DEVICES> Session_component::bdf_in_use;

View File

@ -1,8 +1,6 @@
TARGET = pci_drv TARGET = platform_drv
REQUIRES = x86 REQUIRES = x86
SRC_CC = main.cc irq.cc pci_device.cc nonpci_devices.cc session.cc SRC_CC = main.cc irq.cc pci_device.cc nonpci_devices.cc session.cc
LIBS = base config LIBS = base config
INC_DIR = $(PRG_DIR)/.. INC_DIR = $(PRG_DIR)
vpath %.cc $(PRG_DIR)/..

View File

@ -1,3 +1,4 @@
TARGET = test-pci TARGET = test-pci
SRC_CC = test.cc SRC_CC = test.cc
LIBS = base LIBS = base
REQUIRES = pci

View File

@ -13,8 +13,8 @@
#include <base/env.h> #include <base/env.h>
#include <base/printf.h> #include <base/printf.h>
#include <pci_session/connection.h> #include <platform_session/connection.h>
#include <pci_device/client.h> #include <platform_device/client.h>
using namespace Genode; using namespace Genode;
@ -24,14 +24,14 @@ enum { INTEL_VENDOR_ID = 0x8086 };
/** /**
* Print device information * Print device information
*/ */
static void print_device_info(Pci::Device_capability device_cap) static void print_device_info(Platform::Device_capability device_cap)
{ {
if (!device_cap.valid()) { if (!device_cap.valid()) {
PERR("Invalid device capability"); PERR("Invalid device capability");
return; return;
} }
Pci::Device_client device(device_cap); Platform::Device_client device(device_cap);
unsigned char bus = 0, dev = 0, fun = 0; unsigned char bus = 0, dev = 0, fun = 0;
device.bus_address(&bus, &dev, &fun); device.bus_address(&bus, &dev, &fun);
@ -45,11 +45,11 @@ static void print_device_info(Pci::Device_capability device_cap)
for (int resource_id = 0; resource_id < 6; resource_id++) { for (int resource_id = 0; resource_id < 6; resource_id++) {
Pci::Device::Resource resource = device.resource(resource_id); Platform::Device::Resource resource = device.resource(resource_id);
if (resource.type() != Pci::Device::Resource::INVALID) if (resource.type() != Platform::Device::Resource::INVALID)
printf(" Resource %d (%s): base=0x%08x size=0x%08x %s\n", resource_id, printf(" Resource %d (%s): base=0x%08x size=0x%08x %s\n", resource_id,
resource.type() == Pci::Device::Resource::IO ? "I/O" : "MEM", resource.type() == Platform::Device::Resource::IO ? "I/O" : "MEM",
resource.base(), resource.size(), resource.base(), resource.size(),
resource.prefetchable() ? "prefetchable" : ""); resource.prefetchable() ? "prefetchable" : "");
} }
@ -58,16 +58,16 @@ static void print_device_info(Pci::Device_capability device_cap)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
printf("--- PCI test started ---\n"); printf("--- Platform test started ---\n");
/* open session to pci service */ /* open session to pci service */
static Pci::Connection pci; static Platform::Connection pci;
/* /*
* Iterate through all installed devices * Iterate through all installed devices
* and print the available device information. * and print the available device information.
*/ */
Pci::Device_capability prev_device_cap, Platform::Device_capability prev_device_cap,
device_cap = pci.first_device(); device_cap = pci.first_device();
while (device_cap.valid()) { while (device_cap.valid()) {
print_device_info(device_cap); print_device_info(device_cap);
@ -80,7 +80,7 @@ int main(int argc, char **argv)
/* release last device */ /* release last device */
pci.release_device(prev_device_cap); pci.release_device(prev_device_cap);
printf("--- PCI test finished ---\n"); printf("--- Platform test finished ---\n");
return 0; return 0;
} }

View File

@ -16,15 +16,20 @@
# Build # Build
# #
build { set build_components {
core init core init
drivers/timer drivers/uart drivers/timer drivers/uart
app/gdb_monitor app/gdb_monitor
test/gdb_monitor test/gdb_monitor
server/nitpicker app/pointer app/scout server/nitpicker app/pointer app/scout
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory create_boot_directory
# #
@ -85,11 +90,7 @@ set config {
<resource name="RAM" quantum="32M"/> <resource name="RAM" quantum="32M"/>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -123,10 +124,11 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
# #

View File

@ -2,17 +2,25 @@
# Build # Build
# #
set build_components { set build_components {
core init core init
drivers/timer drivers/timer
drivers/audio_out drivers/audio_out
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
app/dosbox app/dosbox
} }
lappend_if [have_spec acpi] build_components drivers/acpi source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [have_spec pci] build_components drivers/pci/device_pd # override default platform driver policy
proc platform_drv_policy {} {
return {
<policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy>
<policy label="audio_out_drv"> <pci class="AUDIO"/> </policy>}
}
append_platform_drv_build_components
build $build_components build $build_components
@ -51,51 +59,13 @@ append_if [have_spec sdl] config {
<config width="640" height="480"/> <config width="640" height="480"/>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<policy label="acpi_drv"> <pci class="ALL"/> </policy>
<policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy>
<policy label="audio_out_drv"> <pci class="AUDIO"/> </policy>
</config>
</start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="4M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
<config>
<policy label="audio_out_drv"> <pci class="AUDIO"/> </policy>
<policy label="ps2_drv"> <device name="PS2"/> </policy>
<policy label="usb_drv"> <pci class="USB"/> </policy>
<policy label="fb_drv"> <pci class="VGA"/> </policy>
</config>
</start>}
append_if [have_spec vesa] config { append_if [have_spec vesa] config {
<start name="fb_drv"> <start name="fb_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
<provides><service name="Framebuffer"/></provides> <provides><service name="Framebuffer"/></provides>
<config buffered="yes"> </config> <config buffered="yes"> </config>
<route>}
append_if [have_spec acpi] config {
<service name="PCI"><child name="acpi" /></service>}
append_if [have_spec vesa] config {
<any-service> <parent /> <any-child /></any-service>
</route>
</start>} </start>}
append_if [have_spec pl11x] config { append_if [have_spec pl11x] config {
@ -112,14 +82,7 @@ append_if [have_spec ps2] config {
append config { append config {
<start name="audio_out_drv"> <start name="audio_out_drv">
<resource name="RAM" quantum="6M"/>} <resource name="RAM" quantum="6M"/>
append_if [have_spec acpi] config {
<route>
<service name="IRQ"><child name="acpi" /></service>
<service name="PCI"><child name="acpi" /></service>
<any-service> <parent /> <any-child /></any-service>
</route>}
append config {
<provides><service name="Audio_out"/></provides> <provides><service name="Audio_out"/></provides>
</start> </start>
<start name="timer"> <start name="timer">
@ -166,14 +129,13 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec vesa] boot_modules fb_drv lappend_if [have_spec vesa] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec pl11x] boot_modules fb_drv lappend_if [have_spec pl11x] boot_modules fb_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 256 -soundhw es1370 " append qemu_args " -m 256 -soundhw es1370 "

View File

@ -22,18 +22,17 @@ set build_components {
set use_usb_driver [expr [have_spec omap4] || [have_spec platform_arndale] || [have_spec platform_rpi]] set use_usb_driver [expr [have_spec omap4] || [have_spec platform_arndale] || [have_spec platform_rpi]]
set use_nic_driver [expr !$use_usb_driver] set use_nic_driver [expr !$use_usb_driver]
set use_platform_driver [expr [have_spec platform_arndale] || [have_spec platform_imx53] || [have_spec platform_rpi]]
if {$use_usb_driver} { set network_driver "usb_drv" } if {$use_usb_driver} { set network_driver "usb_drv" }
if {$use_nic_driver} { set network_driver "nic_drv" } if {$use_nic_driver} { set network_driver "nic_drv" }
lappend_if $use_platform_driver build_components drivers/platform
lappend_if $use_usb_driver build_components drivers/usb lappend_if $use_usb_driver build_components drivers/usb
lappend_if $use_nic_driver build_components drivers/nic lappend_if $use_nic_driver build_components drivers/nic
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -61,13 +60,6 @@ append config {
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start>} </start>}
append_if $use_platform_driver config {
<start name="platform_drv">
<resource name="RAM" quantum="1M" />
<provides><service name="Regulator"/></provides>
<provides><service name="Platform"/></provides>
</start>}
append_if [have_spec gpio] config { append_if [have_spec gpio] config {
<start name="gpio_drv"> <start name="gpio_drv">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
@ -92,25 +84,7 @@ append_if $use_nic_driver config {
<provides><service name="Nic"/></provides> <provides><service name="Nic"/></provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start> }
append config { append config {
<start name="lighttpd"> <start name="lighttpd">
@ -190,14 +164,12 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if $use_platform_driver boot_modules platform_drv
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if $use_usb_driver boot_modules usb_drv lappend_if $use_usb_driver boot_modules usb_drv
lappend_if $use_nic_driver boot_modules nic_drv lappend_if $use_nic_driver boot_modules nic_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append_if [have_spec x86] qemu_args " -net nic,model=e1000 " append_if [have_spec x86] qemu_args " -net nic,model=e1000 "

View File

@ -6,12 +6,14 @@
set build_components { set build_components {
core init core init
drivers/pci
drivers/nic drivers/nic
drivers/timer drivers/timer
app/lighttpd app/lighttpd
} }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory create_boot_directory
@ -39,11 +41,7 @@ append config {
<provides><service name="Timer"/></provides> <provides><service name="Timer"/></provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="4M"/>
<provides><service name="PCI"/></provides>
</start>}
append config { append config {
<start name="nic_drv"> <start name="nic_drv">
@ -118,7 +116,7 @@ set boot_modules {
} }
# platform-specific modules # platform-specific modules
lappend_if [have_spec pci] boot_modules pci_drv append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -11,7 +11,7 @@ proc use_usb_input { } { return [expr ![have_spec ps2] && [have_spec usb]] }
set build_components { set build_components {
core init drivers/timer noux/minimal lib/libc_noux core init drivers/timer noux/minimal lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
server/terminal server/ram_fs server/terminal server/ram_fs
test/libports/ncurses test/libports/ncurses
@ -27,6 +27,9 @@ lappend_if [have_spec gpio] build_components drivers/gpio
foreach pkg {bash coreutils vim} { foreach pkg {bash coreutils vim} {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# write default vimrc file # write default vimrc file
@ -85,11 +88,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -196,12 +195,13 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [use_usb_input] boot_modules usb_drv lappend_if [use_usb_input] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
if {[have_spec x86_64]} { if {[have_spec x86_64]} {

View File

@ -21,7 +21,7 @@ if {[have_spec x86]} {
set build_components { set build_components {
core init drivers/timer noux lib/libc_noux core init drivers/timer noux lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/usb drivers/framebuffer drivers/input drivers/usb
server/terminal server/terminal_crosslink server/terminal server/terminal_crosslink
app/gdb_monitor app/gdb_monitor
} }
@ -34,6 +34,9 @@ lappend build_components noux-pkg/[noux_gdb_pkg_name]
lappend build_components test/gdb_monitor lappend build_components test/gdb_monitor
set gdb_target_binary_name test-gdb_monitor set gdb_target_binary_name test-gdb_monitor
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# names of the binaries needed for the GDB monitor test # names of the binaries needed for the GDB monitor test
@ -81,11 +84,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -216,12 +215,13 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec usb] boot_modules usb_drv lappend_if [have_spec usb] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
run_genode_until forever run_genode_until forever

View File

@ -6,7 +6,7 @@ if {![have_spec x86]} {
set build_components { set build_components {
core init drivers/timer core init drivers/timer
noux/net lib/libc_noux noux/net lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
drivers/nic drivers/nic
drivers/timer drivers/timer
server/terminal server/ram_fs server/terminal server/ram_fs
@ -24,6 +24,9 @@ set noux_pkgs "bash coreutils vim"
foreach pkg $noux_pkgs { foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
set vimrc_fd [open "bin/vim/share/vim/vimrc" w] set vimrc_fd [open "bin/vim/share/vim/vimrc" w]
@ -94,11 +97,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -218,10 +217,11 @@ foreach pkg $noux_pkgs {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
if {[have_spec x86_64]} { if {[have_spec x86_64]} {

View File

@ -12,7 +12,7 @@ if {![have_spec x86]} {
set build_components { set build_components {
core init drivers/timer core init drivers/timer
noux/net lib/libc_noux noux/net lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
drivers/nic drivers/nic
drivers/timer drivers/timer
server/terminal server/ram_fs server/terminal server/ram_fs
@ -29,6 +29,9 @@ set noux_pkgs "bash coreutils lynx noux-etc"
foreach pkg $noux_pkgs { foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# strip all binaries prior archiving # strip all binaries prior archiving
@ -75,12 +78,8 @@ append_if [have_spec sdl] config {
<service name="Framebuffer"/> <service name="Framebuffer"/>
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -176,10 +175,11 @@ foreach pkg $noux_pkgs {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
if {[have_spec x86_64]} { if {[have_spec x86_64]} {

View File

@ -12,7 +12,7 @@ if {![have_spec x86]} {
set build_components { set build_components {
core init drivers/timer core init drivers/timer
noux/net lib/libc_noux noux/net lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
drivers/nic drivers/nic
server/terminal server/ram_fs server/terminal server/ram_fs
test/libc_resolv test/libc_resolv
@ -31,6 +31,9 @@ set noux_pkgs "bash coreutils openssh noux-etc"
foreach pkg $noux_pkgs { foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# strip all binaries prior archiving # strip all binaries prior archiving
@ -78,11 +81,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -180,10 +179,11 @@ foreach pkg $noux_pkgs {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
if {[have_spec x86_64]} { if {[have_spec x86_64]} {

View File

@ -1,14 +1,12 @@
set build_components { set build_components {
core init drivers/timer noux/minimal lib/libc_noux core init drivers/timer noux/minimal lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
server/terminal server/ram_fs server/terminal server/ram_fs
test/libports/ncurses test/libports/ncurses
} }
set use_usb_input [expr ![have_spec ps2] && ![have_spec sdl] && [have_spec usb]] set use_usb_input [expr ![have_spec ps2] && ![have_spec sdl] && [have_spec usb]]
set use_platform_driver [expr [have_spec platform_arndale] || [have_spec platform_imx53] || [have_spec platform_rpi]]
lappend_if $use_usb_input build_components drivers/usb lappend_if $use_usb_input build_components drivers/usb
lappend_if $use_platform_driver build_components drivers/platform
# #
# Build Noux packages only once # Build Noux packages only once
@ -18,6 +16,9 @@ set noux_pkgs {bash coreutils make}
foreach pkg $noux_pkgs { foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# strip all binaries prior archiving # strip all binaries prior archiving
@ -72,11 +73,7 @@ append_if $use_usb_input config {
<config uhci="yes" ehci="no" xhci="no"> <hid/> </config> <config uhci="yes" ehci="no" xhci="no"> <hid/> </config>
</start> } </start> }
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -90,13 +87,6 @@ append_if [have_spec ps2] config {
<provides><service name="Input"/></provides> <provides><service name="Input"/></provides>
</start> } </start> }
append_if $use_platform_driver config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
<provides><service name="Platform"/></provides>
</start>}
append config { append config {
<start name="terminal"> <start name="terminal">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
@ -176,12 +166,12 @@ foreach pkg $noux_pkgs {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if $use_platform_driver boot_modules platform_drv
lappend_if $use_usb_input boot_modules usb_drv lappend_if $use_usb_input boot_modules usb_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
append qemu_args " -m 300 " append qemu_args " -m 300 "

View File

@ -15,7 +15,7 @@
set build_components { set build_components {
core init drivers/timer noux lib/libc_noux core init drivers/timer noux lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
server/terminal server/ram_fs server/nitpicker app/pointer server/terminal server/ram_fs server/nitpicker app/pointer
server/nit_fb server/nit_fb
} }
@ -26,6 +26,9 @@ set build_components {
foreach pkg {bash coreutils} { foreach pkg {bash coreutils} {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# strip all binaries prior archiving # strip all binaries prior archiving
@ -68,11 +71,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start> } </start> }
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start> }
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -202,10 +201,11 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
if {[have_spec x86_64]} { if {[have_spec x86_64]} {

View File

@ -20,7 +20,7 @@ proc use_usb_input { } { return [expr ![have_spec ps2] && [have_spec usb]] }
set build_components { set build_components {
core init drivers/timer noux/minimal lib/libc_noux core init drivers/timer noux/minimal lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
server/terminal server/ram_fs server/trace_fs server/terminal server/ram_fs server/trace_fs
test/libports/ncurses test/libports/ncurses
@ -29,8 +29,6 @@ set build_components {
lappend_if [use_usb_input] build_components drivers/usb lappend_if [use_usb_input] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio lappend_if [have_spec gpio] build_components drivers/gpio
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci
set noux_pkgs "bash coreutils grep vim" set noux_pkgs "bash coreutils grep vim"
# #
@ -39,6 +37,9 @@ set noux_pkgs "bash coreutils grep vim"
foreach pkg $noux_pkgs { foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
# write default vimrc file # write default vimrc file
@ -92,25 +93,7 @@ append_if [have_spec sdl] config {
</provides> </provides>
</start>} </start>}
append_if [have_spec acpi] config { append_platform_drv_config
<start name="acpi">
<resource name="RAM" quantum="8M" constrain_phys="yes"/>
<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 pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="5M" constrain_phys="yes"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -237,12 +220,12 @@ foreach pkg $noux_pkgs {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [use_usb_input ] boot_modules usb_drv lappend_if [use_usb_input ] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules gpio_drv lappend_if [have_spec gpio] boot_modules gpio_drv
lappend_if [have_spec acpi] boot_modules acpi_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules

View File

@ -6,12 +6,15 @@
set build_components { set build_components {
core init drivers/timer noux/minimal lib/libc_noux core init drivers/timer noux/minimal lib/libc_noux
drivers/framebuffer drivers/pci drivers/input drivers/framebuffer drivers/input
server/terminal server/terminal
} }
lappend build_components noux-pkg/vim lappend build_components noux-pkg/vim
lappend build_components test/libports/ncurses lappend build_components test/libports/ncurses
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components build $build_components
exec tar cfv bin/vim.tar -h -C bin/vim . exec tar cfv bin/vim.tar -h -C bin/vim .
@ -49,12 +52,8 @@ append_if [have_spec sdl] config {
<service name="Framebuffer"/> <service name="Framebuffer"/>
</provides> </provides>
</start>} </start>}
append_if [have_spec pci] config { append_platform_drv_config
<start name="pci_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="PCI"/></provides>
</start>}
append_if [have_spec framebuffer] config { append_if [have_spec framebuffer] config {
<start name="fb_drv"> <start name="fb_drv">
@ -125,10 +124,11 @@ set boot_modules {
# platform-specific modules # platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec ps2] boot_modules ps2_drv lappend_if [have_spec ps2] boot_modules ps2_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules build_boot_image $boot_modules
run_genode_until forever run_genode_until forever

View File

@ -222,7 +222,7 @@ append_if $use_framebuffer config {
<provides><service name="Framebuffer"/></provides> <provides><service name="Framebuffer"/></provides>
<route> <route>
<service name="Timer"><child name="timer"/></service> <service name="Timer"><child name="timer"/></service>
<service name="PCI"><any-child/></service> <service name="Platform"><any-child/></service>
<any-service><parent/></any-service> <any-service><parent/></any-service>
</route> </route>
<config width="1024" height="768" depth="16" buffered="yes"/> <config width="1024" height="768" depth="16" buffered="yes"/>