Remove sleep/reset handlers from PCI interface and
authorGerd Zellweger <zgerd@student.ethz.ch>
Sat, 10 Mar 2012 21:51:29 +0000 (22:51 +0100)
committerGerd Zellweger <zgerd@student.ethz.ch>
Sat, 10 Mar 2012 21:51:29 +0000 (22:51 +0100)
adjust fish to use acpi client.

--HG--
rename : usr/kaluga/startup.h => usr/kaluga/driver_startup.h

27 files changed:
errors/errno.fugu
if/pci.if
include/pci/pci.h
lib/pci/pci_client.c
lib/vfs/Hakefile
usr/acpi/acpi.c
usr/acpi/acpi_main.c
usr/drivers/vbe/Hakefile
usr/drivers/vbe/vbe.c
usr/fish/Hakefile
usr/fish/fish.c
usr/ioapic/ioapic_main.c
usr/kaluga/Hakefile
usr/kaluga/common.c
usr/kaluga/driver_startup.c
usr/kaluga/driver_startup.h [moved from usr/kaluga/startup.h with 69% similarity]
usr/kaluga/kaluga.h
usr/kaluga/main.c
usr/kaluga/start_cpu.c
usr/kaluga/start_cpu.h
usr/kaluga/start_pci.c
usr/pci/Hakefile
usr/pci/acpi_client.c [deleted file]
usr/pci/acpi_client.h [deleted file]
usr/pci/pci.c
usr/pci/pcie.c
usr/pci/pcimain.c

index 411ebf3..0d976a6 100644 (file)
@@ -799,8 +799,10 @@ errors libdist2  DIST2_ERR_ {
 
 // dist2 library errors
 errors kaluga  KALUGA_ERR_ {
-    failure PARSE_MODULES    "Cannot parse menu.lst.",
-    failure MODULE_NOT_FOUND "Boot module not found",
+    failure PARSE_MODULES          "Cannot parse menu.lst.",
+    failure MODULE_NOT_FOUND       "Boot module not found.",
+    failure DRIVER_ALREADY_STARTED "Driver for this type of device is already running.",
+    failure DRIVER_NOT_AUTO        "Driver not declared as auto in menu.lst.",
 };
  
 // errors generated by THC
index a91c88f..7383fc6 100644 (file)
--- a/if/pci.if
+++ b/if/pci.if
@@ -38,10 +38,8 @@ interface pci "The PCI Interface" {
     rpc get_cap(in uint32 index, in uint32 cap_nr,
                 out errval err, out cap cap, out uint8 type);
 
-    /* Kludge: retrieve frame cap to VBE BIOS */
+    /* Kludge: retrieve frame cap to VBE BIOS
     rpc get_vbe_bios_cap(out errval err, out cap cap, out uint32 size);
-
-    /* reset or sleep / power off machine */
     rpc reset(out errval err);
-    rpc sleep(in int state, out errval err);
+    rpc sleep(in int state, out errval err);  */
 };
index b9edcda..7d5d220 100644 (file)
@@ -42,10 +42,6 @@ errval_t pci_register_legacy_driver_irq(legacy_driver_init_fn init_func,
 errval_t pci_setup_inthandler(interrupt_handler_fn handler, void *handler_arg,
                               int *ret_vector);
 
-errval_t pci_reset(void);
-errval_t pci_sleep(int state);
-
-errval_t pci_get_vbe_bios_cap(struct capref *retcap, size_t *retsize);
 
 errval_t pci_client_connect(void);
 
index 9a2c154..ef640e5 100644 (file)
@@ -169,32 +169,6 @@ errval_t pci_register_legacy_driver_irq(legacy_driver_init_fn init_func,
     return msgerr;
 }
 
-errval_t pci_reset(void)
-{
-    errval_t err, msgerr;
-    err = pci_client->vtbl.reset(pci_client, &msgerr);
-    return err_is_fail(err) ? err : msgerr;
-}
-
-errval_t pci_sleep(int state)
-{
-    errval_t err, msgerr;
-    err = pci_client->vtbl.sleep(pci_client, state, &msgerr);
-    return err_is_fail(err) ? err : msgerr;
-}
-
-// Kludge for VBE driver
-errval_t pci_get_vbe_bios_cap(struct capref *retcap, size_t *retsize)
-{
-    errval_t err, msgerr;
-    assert(retcap != NULL);
-    assert(retsize != NULL);
-    uint32_t s;
-    err = pci_client->vtbl.get_vbe_bios_cap(pci_client, &msgerr, retcap, &s);
-    *retsize = s;
-    return err_is_fail(err) ? err : msgerr;
-}
-
 static void bind_cont(void *st, errval_t err, struct pci_binding *b)
 {
     errval_t *reterr = st;
index 653fe83..48ff4e1 100644 (file)
@@ -14,7 +14,7 @@
 [ build library { target = "vfs",
                  cFiles = [ "vfs.c", "vfs_path.c", "fopen.c", "mmap.c", "vfs_nfs.c", "vfs_ramfs.c", "cache.c", "vfs_blockdevfs.c", "vfs_blockdevfs_ahci.c", "vfs_blockdevfs_ata.c", "vfs_cache.c", "vfs_fat.c", "vfs_fat_conv.c" ],
                  addLibraries = [ "ahci" ],
-                  mackerelDevices = [ "ata_identify", "fat_bpb", "fat16_ebpb", "fat32_ebpb", "fat_direntry" ],
+                  mackerelDevices = [ "ata_identify", "fat_bpb", "fat16_ebpb", "fat32_ebpb", "fat_direntry", "ahci_port", "ahci_hba" ],
                   flounderBindings = [ "trivfs", "bcache", "ahci_mgmt" ],
                   flounderExtraBindings = [ ("trivfs", ["rpcclient"]), ("bcache", ["rpcclient"]), ("ahci_mgmt", ["rpcclient"]), ("ata_rw28", ["ahci", "rpcclient"]) ],
                   flounderDefs = [ "monitor" ]
@@ -22,7 +22,7 @@
   build library { target = "vfs_nonfs",
                  cFiles = [ "vfs.c", "vfs_path.c", "fopen.c", "vfs_ramfs.c", "cache.c" ],
                   addCFlags = [ "-DDISABLE_NFS" ],
-                  mackerelDevices = [ "ata_identify", "fat_bpb", "fat16_ebpb", "fat32_ebpb", "fat_direntry" ],
+                  mackerelDevices = [ "ata_identify", "fat_bpb", "fat16_ebpb", "fat32_ebpb", "fat_direntry", "ahci_port", "ahci_hba"  ],
                   flounderBindings = [ "trivfs", "bcache", "ahci_mgmt" ],
                   flounderExtraBindings = [ ("trivfs", ["rpcclient"]), ("bcache", ["rpcclient"]), ("ahci_mgmt", ["rpcclient"]), ("ata_rw28", ["ahci", "rpcclient"]) ],
                   flounderDefs = [ "monitor" ]
index b241824..ad1397a 100644 (file)
@@ -19,6 +19,7 @@
 #include <acpi.h>
 #include <mm/mm.h>
 #include <dist2/getset.h>
+#include <dist2/barrier.h>
 #include <skb/skb.h>
 #include <pci/confspace/pci_confspace.h>
 #include "acpi_shared.h"
@@ -599,7 +600,23 @@ static int acpi_init(void)
     errval_t err = find_all_apics();
     assert(err_is_ok(err));
 
-    nameservice_register("signal_ioapic", 0); // TODO(gz) device mngr
+#ifdef USE_KALUGA_DVM
+    // Signal device manager that we have added records for everything
+    // available to us at boot time.
+    char* record = NULL;
+    err = dist_barrier_enter("barrier.acpi", &record, 2);
+    if (err_is_fail(err)) {
+        USER_PANIC_ERR(err, "Could not enter barrier.");
+    }
+    free(record);
+#else
+    err = nameservice_register("acpi_enumeration_done", 0);
+    if (err_is_fail(err)) {
+        DEBUG_ERR(err, "nameservice_register failed");
+        abort();
+    }
+#endif
+
     err = connect_to_ioapic();
     assert(err_is_ok(err));
 
index 895fbe2..a0d9909 100644 (file)
@@ -248,16 +248,6 @@ int main(int argc, char *argv[])
     int r = init_acpi();
     assert(r == 0);
 
-    // Signal device manager that we have added records for everything
-    // available to us at boot time.
-    char* record = NULL;
-    err = dist_barrier_enter("barrier.acpi", &record, 2);
-    if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Could not enter barrier.");
-    }
-    free(record);
-
-
     buttons_init();
 
     if (do_video_init) {
@@ -266,12 +256,5 @@ int main(int argc, char *argv[])
 
     start_service();
 
-    // TODO: device mngr --gz
-    err = nameservice_register("acpi_done", 0);
-    if (err_is_fail(err)) {
-        DEBUG_ERR(err, "nameservice_register failed");
-        abort();
-    }
-
     messages_handler_loop();
 }
index 4a9bf82..a528667 100644 (file)
@@ -14,6 +14,6 @@
                       cFiles = [ "main.c", "vbe.c", "int10.c" ],
                       architectures = [ "x86_64", "x86_32" ],
                       flounderBindings = ["fb"],
-                      addLibraries = [ "x86emu", "pci" ]
+                      addLibraries = [ "x86emu", "pci", "acpi_client" ]
                     }
 ]
index 1fdb7e3..332c485 100644 (file)
@@ -20,7 +20,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <barrelfish/barrelfish.h>
-#include <pci/pci.h>
+#include <acpi_client/acpi_client.h>
 #include <mackerel/mackerel.h>
 #include <inttypes.h>
 
@@ -253,7 +253,7 @@ void vbe_init(struct device_mem *bar_info, int nr_mapped_regions)
     // Map BIOS memory region
     struct capref bioscap;
     size_t size;
-    err = pci_get_vbe_bios_cap(&bioscap, &size);
+    err = acpi_get_vbe_bios_cap(&bioscap, &size);
     if (err_is_fail(err)) {
         DEBUG_ERR(err, "pci_get_vbe_bios_cap failed");
         return;
index 5e6ab67..ae8d965 100644 (file)
@@ -13,7 +13,7 @@
 [ build application { target = "fish",
                      cFiles = [ "fish.c", "font.c" ],
                      addLibraries = [ "vfs", "nfs", "ahci", "lwip",
-                      "contmng", "procon", "pci", "trace", "skb" ],
+                      "contmng", "procon", "acpi_client", "trace", "skb" ],
                      flounderBindings = [ "pixels" ]
                     }
 ]
index f0fe14c..fa5d7bb 100644 (file)
@@ -26,7 +26,7 @@
 #include <barrelfish/spawn_client.h>
 #include <barrelfish/terminal.h>
 #include <trace/trace.h>
-#include <pci/pci.h>
+#include <acpi_client/acpi_client.h>
 #include <skb/skb.h>
 #include <vfs/vfs.h>
 #include <vfs/vfs_path.h>
@@ -53,7 +53,7 @@ struct cmd {
 
 static char *cwd;
 
-static bool pci_connected = false;
+static bool acpi_connected = false;
 
 static int help(int argc, char *argv[]);
 
@@ -339,24 +339,24 @@ static int spawnpixels(int argc, char *argv[])
 
 static int reset(int argc, char *argv[])
 {
-    if (!pci_connected) {
-        int r = pci_client_connect();
+    if (!acpi_connected) {
+        int r = connect_to_acpi();
         assert(r == 0);
-        pci_connected = true;
+        acpi_connected = true;
     }
 
-    return pci_reset();
+    return acpi_reset();
 }
 
 static int poweroff(int argc, char *argv[])
 {
-    if (!pci_connected) {
-        int r = pci_client_connect();
+    if (!acpi_connected) {
+        int r = connect_to_acpi();
         assert(r == 0);
-        pci_connected = true;
+        acpi_connected = true;
     }
 
-    return pci_sleep(4);
+    return acpi_sleep(4);
 }
 
 static int ps(int argc, char *argv[])
index 4f59ac1..f428fcc 100644 (file)
@@ -145,16 +145,18 @@ int main(int argc, char *argv[])
         USER_PANIC_ERR(err, "Connect to SKB");
     }
 
-    // TODO: device mngr...
-    iref_t iref;
-    nameservice_blocking_lookup("signal_ioapic", &iref);
-
-    // TODO: Cap mngmt
     err = init_allocators();
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Init memory allocator");
     }
 
+#ifndef USE_KALUGA_DVM
+    err = nameservice_blocking_lookup("acpi_enumeration_done", 0);
+    if (err_is_fail(err)) {
+        USER_PANIC_ERR(err, "Waiting for acpi failed.");
+    }
+#endif
+
     err = init_all_apics();
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "I/O APIC Initialization");
index 7f56f5e..8c5161e 100644 (file)
@@ -12,7 +12,7 @@
 
 [ build application { target = "kaluga",
                       cFiles = [ "main.c", "queue.c", "boot_modules.c", "common.c",
-                                 "start_cpu.c", "start_pci.c", "startup.c" ],
+                                 "start_cpu.c", "start_pci.c", "driver_startup.c" ],
                          flounderDefs = [ "monitor" ],
                       flounderBindings = [ "dist2" ],
                       addLibraries = [ "skb", "dist2", "dist_parser", 
index 948c7b1..729d50f 100644 (file)
@@ -12,7 +12,7 @@ errval_t trigger_existing_and_watch(const char* query,
     char* output = NULL;
     char* record = NULL; // freed by cpu_change_event
     size_t len = 0;
-    dist2_trigger_t t = dist_mktrigger(SYS_ERR_OK, dist2_BINDING_EVENT,
+    dist2_trigger_t t = dist_mktrigger(0, dist2_BINDING_EVENT,
             TRIGGER_ALWAYS, event_handler, state);
 
     // Get current cores registered in system
@@ -51,6 +51,9 @@ errval_t trigger_existing_and_watch(const char* query,
             }
         }
         break;
+    case DIST2_ERR_NO_RECORD:
+        err = SYS_ERR_OK; // Overwrite (trigger is set)
+        break;
 
     default:
         // Do nothing (wait for trigger)
index 909b7de..b2adda2 100644 (file)
@@ -11,14 +11,21 @@ extern char **environ;
 errval_t default_start_function(coreid_t where, struct module_info* mi,
         char* record)
 {
+    assert(mi != NULL);
     errval_t err = SYS_ERR_OK;
 
-    if (!is_started(mi)) {
-        err = spawn_program(where, mi->path, mi->argv+1,
-                environ, 0, &mi->did);
-        if (err_is_fail(err)) {
-            DEBUG_ERR(err, "Spawning %s failed.", mi->path);
-        }
+    if (is_started(mi)) {
+        return KALUGA_ERR_DRIVER_ALREADY_STARTED;
+    }
+
+    if (!is_auto_driver(mi)) {
+        return KALUGA_ERR_DRIVER_NOT_AUTO;
+    }
+
+    err = spawn_program(where, mi->path, mi->argv+1,
+            environ, 0, &mi->did);
+    if (err_is_fail(err)) {
+        DEBUG_ERR(err, "Spawning %s failed.", mi->path);
     }
 
     return err;
@@ -27,33 +34,39 @@ errval_t default_start_function(coreid_t where, struct module_info* mi,
 errval_t start_networking(coreid_t core, struct module_info* driver,
         char* record)
 {
+    assert(driver != NULL);
     errval_t err = SYS_ERR_OK;
 
-    if (!is_started(driver)) {
-        err = spawn_program(core, driver->path, driver->argv+1,
-                environ, 0, &driver->did);
-        if (err_is_fail(err)) {
-            DEBUG_ERR(err, "Spawning %s failed.", driver->path);
-            return err;
-        }
-
-        struct module_info* netd = find_module("netd");
-        if (netd == NULL || !is_auto_driver(netd)) {
-            KALUGA_DEBUG("netd not found or not declared as auto. "
-                         "Driver will probably not work correctly.");
-            return err;
-        }
-
-        // XXX: Manually add cardname (overwrite first (auto) argument)
-        size_t name_len = strlen("cardname=")+strlen(driver->binary)+1;
-        char* cardname = malloc(name_len);
-        sprintf(cardname, "cardname=%s", driver->binary);
-        netd->argv[0] = cardname;
-        err = spawn_program(core, netd->path, netd->argv,
-                environ, 0, &netd->did);
-        free(cardname);
+    if (is_started(driver)) {
+        return KALUGA_ERR_DRIVER_ALREADY_STARTED;
+    }
+
+    if (!is_auto_driver(driver)) {
+        return KALUGA_ERR_DRIVER_NOT_AUTO;
     }
 
+    struct module_info* netd = find_module("netd");
+    if (netd == NULL || !is_auto_driver(netd)) {
+        KALUGA_DEBUG("netd not found or not declared as auto.");
+        return KALUGA_ERR_DRIVER_NOT_AUTO;
+    }
+
+    err = spawn_program(core, driver->path, driver->argv+1,
+            environ, 0, &driver->did);
+    if (err_is_fail(err)) {
+        DEBUG_ERR(err, "Spawning %s failed.", driver->path);
+        return err;
+    }
+
+    // XXX: Manually add cardname (overwrite first (auto) argument)
+    size_t name_len = strlen("cardname=")+strlen(driver->binary)+1;
+    char* cardname = malloc(name_len);
+    sprintf(cardname, "cardname=%s", driver->binary);
+    netd->argv[0] = cardname;
+    err = spawn_program(core, netd->path, netd->argv,
+            environ, 0, &netd->did);
+    free(cardname);
+
     return err;
 
 }
similarity index 69%
rename from usr/kaluga/startup.h
rename to usr/kaluga/driver_startup.h
index 81bb269..146b4f9 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef CUSTOM_STARTUP_H_
-#define CUSTOM_STARTUP_H_
+#ifndef DRIVER_STARTUP_H_
+#define DRIVER_STARTUP_H_
 
 #include <errors/errno.h>
 
@@ -8,4 +8,4 @@
 errval_t default_start_function(coreid_t, struct module_info*, char*);
 errval_t start_networking(coreid_t, struct module_info*, char*);
 
-#endif /* CUSTOM_STARTUP_H_ */
+#endif /* DRIVER_STARTUP_H_ */
index b2582f7..d71802d 100644 (file)
@@ -20,6 +20,6 @@ errval_t trigger_existing_and_watch(const char*,
 #include "boot_modules.h"
 #include "start_pci.h"
 #include "start_cpu.h"
-#include "startup.h"
+#include "driver_startup.h"
 
 #endif /* KALUGA_H_ */
index 84aa074..678b1c5 100644 (file)
@@ -104,27 +104,19 @@ int main(int argc, char** argv)
     // time in order to start-up properly.
     err = dist_barrier_enter("barrier.acpi", &record, 2);
 
-    err = watch_for_cores();
+    err = watch_for_ioapic();
     if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Watching for cores.");
+        USER_PANIC_ERR(err, "Watching I/O APICs.");
     }
 
-    err = watch_for_pci_root_bridge();
+    err = watch_for_cores();
     if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Watching for PCI root bridges.");
+        USER_PANIC_ERR(err, "Watching cores.");
     }
 
-    /*
-    err = watch_for_ioapic();
-    if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Watching I/O APICs.");
-    }*/
-
-    // 3. Watch for PCI
-    err = wait_for_pci();
+    err = watch_for_pci_root_bridge();
     if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "PCI Initialized.");
-        return EXIT_FAILURE;
+        USER_PANIC_ERR(err, "Watching PCI root bridges.");
     }
 
     err = watch_for_pci_devices();
index 72caacf..dcb54a0 100644 (file)
@@ -201,3 +201,57 @@ errval_t watch_for_cores(void)
 
     return err;
 }
+
+static void ioapic_change_event(dist2_mode_t mode, char* record, void* state)
+{
+    if (mode & DIST_ON_SET) {
+        struct module_info* mi = find_module("ioapic");
+        if (mi != NULL) {
+            // Pass apic id as 1st argument
+            static const char* fmt = "apicid=%u";
+            int len = snprintf(NULL, 0, fmt, my_arch_id);
+            char* apic_arg = malloc(len+1);
+            snprintf(apic_arg, len+1, fmt, my_arch_id);
+
+            mi->argv[2] = apic_arg;
+            errval_t err = mi->start_function(my_core_id, mi, record);
+            free(apic_arg);
+
+            switch (err_no(err)) {
+            case SYS_ERR_OK:
+                KALUGA_DEBUG("Spawned I/O APIC driver: %s\n", mi->binary);
+                break;
+
+            case KALUGA_ERR_DRIVER_ALREADY_STARTED:
+                KALUGA_DEBUG("%s already running.\n", mi->binary);
+                break;
+
+            case KALUGA_ERR_DRIVER_NOT_AUTO:
+                KALUGA_DEBUG("%s not declared as auto, ignore.\n", mi->binary);
+                break;
+
+            default:
+                DEBUG_ERR(err, "Unhandled error while starting %s\n", mi->binary);
+                break;
+            }
+        }
+    }
+    else if (mode & DIST_ON_DEL) {
+        KALUGA_DEBUG("Removed I/O APIC?");
+        assert(!"NYI");
+    }
+
+    free(record);
+}
+
+
+errval_t watch_for_ioapic(void)
+{
+    KALUGA_DEBUG("watch_for_ioapic\n");
+    static char* io_apics = "r'hw.ioapic.[0-9]+' { id: _, address: _, "
+                            "irqbase: _ }";
+
+    dist2_trigger_id_t tid;
+    return trigger_existing_and_watch(io_apics, ioapic_change_event,
+            &core_counter, &tid);
+}
index 60d991e..d0fa7ac 100644 (file)
@@ -4,5 +4,6 @@
 #include <errors/errno.h>
 
 errval_t watch_for_cores(void);
+errval_t watch_for_ioapic(void);
 
 #endif /* START_CPU_H_ */
index e3248ad..c6b2b97 100644 (file)
@@ -102,17 +102,15 @@ static void pci_change_event(dist2_mode_t mode, char* device_record, void* st)
 
         struct module_info* mi = find_module(binary_name);
         free(binary_name);
-        if (mi == NULL || !is_auto_driver(mi)) {
-            KALUGA_DEBUG("PCI driver not found or not declared as auto.\n");
-            goto out;
-        }
 
+        // Wait until the core where we start the driver
+        // is ready
         if (st == NULL && core != my_core_id) {
             err = wait_for_spawnd(core, device_record);
             if (err_no(err) == DIST2_ERR_NO_RECORD) {
                 KALUGA_DEBUG("Core where driver %s runs is not up yet.\n",
                         mi->binary);
-                // Don't want to free device record here...
+                // Don't want to free device record yet...
                 return;
             }
             else if (err_is_fail(err)) {
@@ -123,8 +121,24 @@ static void pci_change_event(dist2_mode_t mode, char* device_record, void* st)
 
         // If we've come here the core where we spawn the driver
         // is already up
-        KALUGA_DEBUG("Spawn PCI driver: %s\n", mi->binary);
-        mi->start_function(core, mi, device_record);
+        err = mi->start_function(core, mi, device_record);
+        switch (err_no(err)) {
+        case SYS_ERR_OK:
+            KALUGA_DEBUG("Spawned PCI driver: %s\n", mi->binary);
+            break;
+
+        case KALUGA_ERR_DRIVER_ALREADY_STARTED:
+            KALUGA_DEBUG("%s already running.\n", mi->binary);
+            break;
+
+        case KALUGA_ERR_DRIVER_NOT_AUTO:
+            KALUGA_DEBUG("%s not declared as auto, ignore.\n", mi->binary);
+            break;
+
+        default:
+            DEBUG_ERR(err, "Unhandled error while starting %s\n", mi->binary);
+            break;
+        }
     }
 
 out:
@@ -147,15 +161,31 @@ static void bridge_change_event(dist2_mode_t mode, char* bridge_record, void* st
         // No need to ask the SKB as we always start pci for
         // in case we find a root bridge
         struct module_info* mi = find_module("pci");
-        if (mi == NULL || !is_auto_driver(mi)) {
+        if (mi == NULL) {
             KALUGA_DEBUG("PCI driver not found or not declared as auto.");
             goto out;
         }
 
-        KALUGA_DEBUG("bridge_change_event: spawn mi->path: %s\n", mi->path);
         // XXX: always spawn on my_core_id; otherwise we need to check that
         // the other core is already up
-        mi->start_function(my_core_id, mi, bridge_record);
+        errval_t err = mi->start_function(my_core_id, mi, bridge_record);
+        switch (err_no(err)) {
+        case SYS_ERR_OK:
+            KALUGA_DEBUG("Spawned PCI bus driver: %s\n", mi->binary);
+            break;
+
+        case KALUGA_ERR_DRIVER_ALREADY_STARTED:
+            KALUGA_DEBUG("%s already running.\n", mi->binary);
+            break;
+
+        case KALUGA_ERR_DRIVER_NOT_AUTO:
+            KALUGA_DEBUG("%s not declared as auto, ignore.\n", mi->binary);
+            break;
+
+        default:
+            DEBUG_ERR(err, "Unhandled error while starting %s\n", mi->binary);
+            break;
+        }
     }
 
 out:
index 26dc5de..4e712ec 100644 (file)
                                             
                       mackerelDevices = [ "pci_hdr0", "pci_hdr1", "ht_config" ],
                       cFiles = [ "pcimain.c", "pci.c", "pci_service.c", 
-                                 "ht_config.c", "acpi_client.c", "ioapic_client.c",
-                                 "pcie.c" ],
+                                 "ht_config.c", "ioapic_client.c", "pcie.c" ],
                       addCFlags = [ "-Wno-redundant-decls" ],
-                      addLibraries = [ "mm", "skb", "pciconfspace", "dist2", "dist_parser", "thc" ],
+                      addLibraries = [ "mm", "skb", "pciconfspace", "acpi_client", 
+                                       "dist2", "dist_parser", "thc" ],
                       architectures = [ "x86_64", "x86_32" ]
                     }
 ]
diff --git a/usr/pci/acpi_client.c b/usr/pci/acpi_client.c
deleted file mode 100644 (file)
index 6cd3781..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * \file
- * \brief ACPI RPC Client
- */
-
-/*
- * Copyright (c) 2007, 2008, 2009, 2011, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#include <barrelfish/barrelfish.h>
-#include <barrelfish/nameservice_client.h>
-
-#include <if/acpi_defs.h>
-#include <if/acpi_rpcclient_defs.h>
-
-#include "acpi_client.h"
-
-static struct acpi_connection {
-    bool is_done;
-    errval_t err;
-} state;
-
-static struct acpi_rpc_client* rpc_client;
-
-struct acpi_rpc_client* get_acpi_rpc_client(void)
-{
-    assert(rpc_client != NULL);
-    return rpc_client;
-}
-
-static void rpc_bind_cb(void *st, errval_t err, struct acpi_binding* b)
-{
-    if (err_is_ok(err)) {
-        rpc_client = malloc(sizeof(struct acpi_rpc_client));
-        assert(rpc_client != NULL);
-
-        err = acpi_rpc_client_init(rpc_client, b);
-        if (err_is_fail(err)) {
-            free(rpc_client);
-        }
-    } // else: Do nothing
-
-    assert(!state.is_done);
-    state.is_done = true;
-    state.err = err;
-}
-
-errval_t connect_to_acpi(void)
-{
-    errval_t err;
-    iref_t iref;
-
-    err = nameservice_blocking_lookup("acpi", &iref);
-    if (err_is_fail(err)) {
-        return err;
-    }
-
-    state.is_done = false;
-    err = acpi_bind(iref, rpc_bind_cb, NULL, get_default_waitset(),
-            IDC_BIND_FLAGS_DEFAULT);
-    if (err_is_fail(err)) {
-        return err_push(err, FLOUNDER_ERR_BIND);
-    }
-
-    //  Wait for callback to complete
-    while (!state.is_done) {
-        messages_wait_and_handle_next();
-    }
-
-    return state.err;
-
-}
diff --git a/usr/pci/acpi_client.h b/usr/pci/acpi_client.h
deleted file mode 100644 (file)
index a4f6bc6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * \file
- * \brief ACPI RPC Client header file
- */
-
-/*
- * Copyright (c) 2007, 2008, 2009, 2011, ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
- */
-
-#ifndef ACPI_CLIENT_H_
-#define ACPI_CLIENT_H_
-
-#include <errors/errno.h>
-#include <if/acpi_rpcclient_defs.h>
-
-struct acpi_rpc_client* get_acpi_rpc_client(void);
-errval_t connect_to_acpi(void);
-
-#endif /* ACPI_CLIENT_H_ */
index a1e545e..4ca25ff 100644 (file)
 #include <mm/mm.h>
 #include <skb/skb.h>
 #include <dist2/getset.h>
+#include <acpi_client/acpi_client.h>
 
 #include "pci.h"
 #include "driver_mapping.h"
 #include "ht_config.h"
 #include "ht_config_dev.h"
 #include "pci_debug.h"
-#include "acpi_client.h"
 #include "ioapic_client.h"
 
 #define BAR_PROBE       0xffffffff
index 7c6a2af..15979ab 100644 (file)
 #include <stdlib.h>
 #include <mm/mm.h>
 #include <pci/confspace/pci_confspace.h>
+#include <acpi_client/acpi_client.h>
 
 #include "pci.h"
 #include "pci_debug.h"
-#include "acpi_client.h"
 
 errval_t pcie_setup_confspace(void) {
 
index 42a4119..d68056a 100644 (file)
@@ -24,9 +24,9 @@
 #include <mm/mm.h>
 #include <dist2/init.h>
 #include <skb/skb.h>
+#include <acpi_client/acpi_client.h>
 
 #include "pci.h"
-#include "acpi_client.h"
 #include "ioapic_client.h"
 #include "pci_debug.h"
 
@@ -125,6 +125,7 @@ static errval_t init_allocators(void)
 
 int main(int argc, char *argv[])
 {
+    debug_printf("pci staretd\n");
     errval_t err;
 
     err = dist_init();
@@ -132,12 +133,6 @@ int main(int argc, char *argv[])
        USER_PANIC_ERR(err, "dist initialization failed.");
     }
 
-    // TODO(gz): Device mngr
-    err = nameservice_blocking_lookup("acpi_done", 0);
-    if (err_is_fail(err)) {
-       USER_PANIC_ERR(err, "Waiting for acpi failed.");
-    }
-
     err = skb_client_connect();
     if (err_is_fail(err)) {
        USER_PANIC_ERR(err, "Connecting to SKB failed.");