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

@ -13,13 +13,13 @@
set build_components {
core init
drivers/pci drivers/timer drivers/usb
drivers/timer drivers/usb
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
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
lappend_if [have_spec gpio] build_components drivers/gpio
build $build_components
@ -70,25 +70,7 @@ set config {
</config>
</start>}
append_if [have_spec acpi] 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_platform_drv_config
append_if [have_spec gpio] config {
<start name="gpio_drv">
@ -97,12 +79,6 @@ append_if [have_spec gpio] config {
<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>
</start> }
append config {
</config>
}
@ -120,10 +96,7 @@ set boot_modules {
ld.lib.so libc.lib.so lwip.lib.so test-lwip_httpsrv
}
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
append_platform_drv_boot_modules
lappend_if [have_spec gpio] boot_modules gpio_drv
build_boot_image $boot_modules

View File

@ -15,12 +15,11 @@ set build_components {
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
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
@ -48,31 +47,7 @@ set config {
<any-service> <parent/> <any-child/> </any-service>
</default-route>}
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>}
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_platform_drv_config
append_if [have_spec gpio] config {
<start name="gpio_drv">
@ -108,10 +83,7 @@ set boot_modules {
core init timer usb_drv test-blk-cli
}
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
append_platform_drv_boot_modules
build_boot_image $boot_modules

View File

@ -17,12 +17,11 @@ set build_components {
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
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
@ -50,12 +49,6 @@ append config {
<any-service> <parent/> <any-child/> </any-service>
</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 {
<start name="gpio_drv">
<resource name="RAM" quantum="4M"/>
@ -63,25 +56,7 @@ append_if [have_spec gpio] config {
<config/>
</start>}
append_if [have_spec acpi] 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_platform_drv_config
append config {
<start name="timer">
@ -116,12 +91,10 @@ set boot_modules {
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
append_platform_drv_boot_modules
build_boot_image $boot_modules
append qemu_args " -m 256 -nographic -usb -usbdevice host:$::env(USB_RAW_DEVICE) -nographic"

View File

@ -4,7 +4,7 @@
set build_components {
core init
drivers/pci drivers/timer drivers/wifi
drivers/timer drivers/wifi
drivers/rtc
server/report_rom
server/ram_fs
@ -12,11 +12,11 @@ set build_components {
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
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
build $build_components
create_boot_directory
@ -105,38 +105,13 @@ set config {
<route>
<service name="Rtc"> <any-child /> </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>
<any-service> <parent/> <any-child /> </any-service>
</route>
</start>}
append_if [have_spec acpi] 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_platform_drv_config
append_if [have_spec gpio] config {
<start name="gpio_drv">
@ -145,12 +120,6 @@ append_if [have_spec gpio] config {
<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>
</start> }
append config {
</config>
}
@ -183,12 +152,10 @@ set boot_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
append_platform_drv_boot_modules
build_boot_image $boot_modules
run_genode_until forever

View File

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

View File

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

View File

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