On Sat, Oct 25, 2003 at 02:45:19PM +0200, Stefan Reinauer wrote:
Yes, I think so. I'm not sure exactly how much work is involved but I will give it a go (it is not necessary to do a full OF implementation right away...).
I can have a look on integrating the MOL OF functionality into BeginAgain, but for putting BeginAgain into MOL I'd prefer if you could try this first.
Certainly. I don't think putting the MOL OF code directly into BeginAgain is such a good idea, at least not the current incarnation of the of-mol code. My thought was to add the BeginAgain kernel to of-mol and then gradually start to use it for OF client services and for user interaction.
For MOL, the device tree is loaded from a config file (for MacOS, it is essentially a copy of a "real" device tree). Bus probing and similar things are not needed (although one could implement this if one really wants to). Cloning the device tree at OF startup is sufficient (just like most parts of the device tree is hardcoded in ROM in most machines).
Ah.. these device tree files I have seen. It's a really quick way of setting resources up for different kinds of systems. Are the different device trees needed for different purposes/machines?
Yes, different device trees are used for different purposes.
The Mac OS 9 device-tree originates from a B&W G3. Since only certain PCI-bridges and interrupt controllers are suppoerted by the OS, I have to use those in the device-tree. MacOS 9 also expects certain legacy hardware to be present (the via-cuda for instance).
In general, I prefer to use virtual MOL hardware rather then emulated real-world hardware since this is much more efficient (the MOL OS side driver just makes "system calls" to MOL rather than accessing hardware through PCI register).
The Mac OS X device tree has essentially been built from scratch. It contains more virtual MOL hardware than the Mac OS 9 tree. Since OSX is a much more open architecture, it is possible to write custom MOL drivers for things like interrupt controllers so there is no need to emulate any hardware at all.
Or is it just a matter of emulating the kind of machine that you have Mol running on?
No, MOL is completely hardware independent (except that 601 based CPUs are unsupported).
Do you have scripts for cloning the device tree in OpenFirmware?
No, not in OpenFirmware. Under linux, a copy of the device tree is available under /proc/device-tree so it is just a matter of reformatting things into a format more suitable for MOL.
The device tree should actually be hardcoded for all onboard devices and only expansion cards like PCI should be dynamically added.
Yes, this is essentially what MOL does. Only a few minor tweaks are done to the device tree at startup (MOL supports three parallell virtual network cards, but typically only a single one is used).
In BeginAgain I've implemented a plugin system that allows to emulate PCI cards in a simple manner. I planned to do the Framebuffer output this way, but since OpenBIOS lacks a PCI driver and a framebuffer driver you get nothing but a black window that you can write to with lowlevel functions..
If you don't disagree I'd like to move this discussion to openbios@lists.openbios.org in future.
Sure.
/Samuel