A more generic way of passing caps to user-space drivers.
[barrelfish] / usr / kaluga / main.c
index 5cd6890..f12ba5a 100644 (file)
@@ -44,6 +44,10 @@ static void add_start_function_overrides(void)
 {
     set_start_function("e1000n", start_networking);
     set_start_function("rtl8029", start_networking);
+
+    // OMAP4 drivers
+    set_start_function("fdif", start_omap);
+    set_start_function("mmchs", start_omap);
 }
 
 static void parse_arguments(int argc, char** argv)
@@ -71,16 +75,25 @@ int main(int argc, char** argv)
 
     errval_t err;
 
-    coreid_t my_core_id = disp_get_core_id();
+    my_core_id = disp_get_core_id();
     parse_arguments(argc, argv);
 
+    err = oct_init();
+    if (err_is_fail(err)) {
+        USER_PANIC_ERR(err, "Initialize octopus service.");
+    }
+
+    err = init_boot_modules();
+    if (err_is_fail(err)) {
+        USER_PANIC_ERR(err, "Parse boot modules.");
+    }
+    add_start_function_overrides();
+
+#ifdef __x86__
     // We need to run on core 0
     // (we are responsible for booting all the other cores)
     assert(my_core_id == BSP_CORE_ID);
-    printf("Kaluga running.\n");
-#ifdef __arm__
-    debug_printf("Kaluga running on ARM. Skipping skb_client_connect()...\n");
-#else
+    printf("Kaluga running on x86.\n");
 
     err = skb_client_connect();
     if (err_is_fail(err)) {
@@ -92,52 +105,23 @@ int main(int argc, char** argv)
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Device DB not loaded.");
     }
-#endif
-    printf("Kaluga: intializing octopus\n");
-
-    err = oct_init();
-    if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Initialize octopus service.");
-    }
 
-    printf("Kaluga: parse boot modules...\n");
-
-    err = init_boot_modules();
-    if (err_is_fail(err)) {
-        USER_PANIC_ERR(err, "Parse boot modules.");
-    }
-    add_start_function_overrides();
-#ifdef __arm__
-    debug_printf("Kaluga running on ARM. Skipping oct_barrier_enter()...\n");
-#else
     // The current boot protocol needs us to have
     // knowledge about how many CPUs are available at boot
     // time in order to start-up properly.
     char* record = NULL;
     err = oct_barrier_enter("barrier.acpi", &record, 2);
-#endif
-
-#ifdef __arm__
-    debug_printf("Kaluga running on ARM. Skipping cores(), pci_root_bridge(), ...\n");
-
-    err = start_sdcard();
-    assert(err_is_ok(err));
-#else
 
     err = watch_for_cores();
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Watching cores.");
     }
 
-    printf("Kaluga: pci_root_bridge\n");
-
     err = watch_for_pci_root_bridge();
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Watching PCI root bridges.");
     }
 
-    printf("Kaluga: pci_devices\n");
-
     err = watch_for_pci_devices();
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Watching PCI devices.");
@@ -149,8 +133,15 @@ int main(int argc, char** argv)
     // It might be better to get rid of this completely
     err = oct_set("all_spawnds_up { iref: 0 }");
     assert(err_is_ok(err));
+#else
+    printf("Kaluga running on ARM.\n");
+    err = init_cap_manager();
+    assert(err_is_ok(err));
+
+    struct module_info* mi = find_module("fdif");
+    err = mi->start_function(0, mi, "hw.arm.omap44xx.fdif {}");
+    assert(err_is_ok(err));
 #endif
-    printf("Kaluga: THC_Finish()\n");
 
     THCFinish();
     return EXIT_SUCCESS;