Index: branches/meklort/i386/boot2/boot.c =================================================================== --- branches/meklort/i386/boot2/boot.c (revision 151) +++ branches/meklort/i386/boot2/boot.c (revision 152) @@ -72,7 +72,7 @@ bool gScanSingleDrive; int bvCount = 0; -//int menucount = 0; +//int menucount = 0; int gDeviceCount = 0; BVRef bvr; @@ -86,7 +86,6 @@ static bool gUnloadPXEOnExit = false; -extern int usb_loop(); /* * How long to wait (in seconds) to load the * kernel after displaying the "boot:" prompt. @@ -162,6 +161,8 @@ sleep(kBootErrorTimeout); } + md0Ramdisk(); + setupFakeEfi(); verbose("Starting Darwin %s\n",( archCpuType == CPU_TYPE_I386 ) ? "x86" : "x86_64"); Index: branches/meklort/i386/boot2/ramdisk.c =================================================================== --- branches/meklort/i386/boot2/ramdisk.c (revision 151) +++ branches/meklort/i386/boot2/ramdisk.c (revision 152) @@ -16,6 +16,67 @@ bool gRAMDiskBTAliased = false; char gRAMDiskFile[512]; + +// Notify OS X that a ramdisk has been setup. XNU with attach this to /dev/md0 +void md0Ramdisk() +{ + RAMDiskParam ramdiskPtr; + char* filename = 0; + int fh = 0; + + // Look for a ramdisk at Postboot.img (TODO: make configurable) + filename = "rd(0,0)/Extra/Postboot.img"; + if((fh = open(filename, 0)) == -1) + { + filename = "/Extra/Postboot.img"; // Check /Extra if not in rd(0,0) + fh = open(filename, 0); + + } + + + if (fh != -1) + { + verbose("Enabling ramdisk %s\n", filename); + + ramdiskPtr.size = file_size(fh); + ramdiskPtr.base = AllocateKernelMemory(ramdiskPtr.size); + + if(ramdiskPtr.size && ramdiskPtr.base) + { + // Read new ramdisk image contents in kernel memory. + if (read(fh, (char*) ramdiskPtr.base, ramdiskPtr.size) == ramdiskPtr.size) + { + AllocateMemoryRange("RAMDisk", ramdiskPtr.base, ramdiskPtr.size, kBootDriverTypeInvalid); + Node* node = DT__FindNode("/chosen/memory-map", false); + if(node != NULL) + { + DT__AddProperty(node, "RAMDisk", sizeof(RAMDiskParam), (void*)&ramdiskPtr); + + } + else + { + verbose("Unable to notify Mac OS X of the ramdisk %s.\n", filename); + } + + } + else { + verbose("Unable to read ramdisk %s\n", filename); + } + + } else { + verbose("Ramdisk %s is empty.\n", filename); + } + + + close(fh); + + } + else { + verbose("Unable to open %s\n", filename); + } +} + + void umountRAMDisk() { if (gRAMDiskMI != NULL)