Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git] / lunaix-os / kernel / fs / probe_boot.c
index 4f38c6ac90cc2d93c250c7171db3e708de5e8e19..fe384f774c7759cf8bcc9121b7f78e30e7a55485 100644 (file)
@@ -1,8 +1,9 @@
-#include <lunaix/fs/iso9660.h>
 #include <lunaix/fs/probe_boot.h>
 #include <lunaix/mm/valloc.h>
 #include <lunaix/syslog.h>
 
+#include "iso9660/iso9660.h"
+
 LOG_MODULE("PROBE")
 
 #define LUNAIX_ID 0x414e554cUL // "LUNA"
@@ -10,24 +11,30 @@ LOG_MODULE("PROBE")
 struct device*
 probe_boot_medium()
 {
-    struct device* block_cat = device_getbyname(NULL, "block", 5);
+    struct device_meta* block_cat = device_getbyname(NULL, "block", 5);
     if (!block_cat) {
         return NULL;
     }
 
     struct iso_vol_primary* volp = valloc(ISO9660_BLKSZ);
 
-    struct device *pos, *n;
+    struct device* dev = NULL;
+    struct device_meta *pos, *n;
     llist_for_each(pos, n, &block_cat->children, siblings)
     {
+        dev = resolve_device(pos);
+        if (!dev) {
+            continue;
+        }
+
         int errno =
-          pos->ops.read(pos, (void*)volp, ISO9660_READ_OFF, ISO9660_BLKSZ);
+          dev->ops.read(dev, (void*)volp, ISO9660_READ_OFF, ISO9660_BLKSZ);
         if (errno < 0) {
-            kprintf(KWARN "can not probe %x:%s (%d)\n",
-                    pos->dev_id,
-                    pos->name.value,
-                    errno);
-            pos = NULL;
+            kprintf(KINFO "failed %xh:%xh, /dev/%s",
+                    dev->ident.fn_grp,
+                    dev->ident.unique,
+                    dev->name.value);
+            dev = NULL;
             goto done;
         }
 
@@ -36,15 +43,18 @@ probe_boot_medium()
         }
 
         if (*(u32_t*)volp->sys_id == LUNAIX_ID) {
-            kprintf(KINFO "[%x:%s] %s\n",
-                    pos->dev_id,
-                    pos->name.value,
+            kprintf(KINFO "%xh:%xh, /dev/%s, %s",
+                    dev->ident.fn_grp,
+                    dev->ident.unique,
+                    dev->name.value,
                     (char*)volp->vol_id);
-            break;
+            goto done;
         }
     }
 
+    return NULL;
+
 done:
     vfree(volp);
-    return pos;
+    return dev;
 }
\ No newline at end of file