Right now, I'm at a point in the kernel where it's trying calculate the mapping between ticks of the time stamp counter (TSC) MSR and time from a fake 8254 programmable interval timer provided by the chipset. Neither of these things are implemented, so the calculations end up being (some_constant) / ((0 - 0) / 50) which blows up. This is a problem I'll have to address by implementing some of these things.

Beyond that, when this function does work, it's supposed to do the following. It sets up the timer to wiggle it's output after a certain amount of time on the output connected to the PC speaker, records the TSC value, reads the state of the speaker driver (on or off) until the timer fires, reads the new TSC value, and then finds the conversion factor. This seems like it might take a long time just spinning waiting for the timer to go off, so it would be nice to put in one of those function skipping things that I know m5 supports for Alpha. Would somebody describe how that works?

Also, there are little bits of stuff connected to each other all over the place outside of the memory system. For instance, the timer, which is at one set of addresses, needs to be able to toggle the "speaker" which is readable from a completely separate address. I could either glob this stuff into one big device, or I need to establish connections between these devices that circumvents busses and all that. I don't think that's a problem at all, but it seemed a little unorthodox so I thought I'd bring it up.

Also, there is a weird way to access the CMOS which linux has used to get at the RTC information. First, you set an address at one IO port, and then the other IO port reads and writes that offset in the CMOS. I think that sort of access mechanism is going to be very common for x86, so I still think there needs to be some sort of gateway device that does this address space hiding, or translation, or bridging, or whatever you'd like to call it. This is just an IsaFake at the moment so that's fine.

Finally, I need to figure out how the ISA/legacy bus fits into the address spaces. I think it's basically mapped into the IO address space, but unfortunately I don't have access to the books Nate sent me from HP at the moment which have all that sort of information. I have a bunch of interviewing coming up which will keep me away from campus, but I'll try to get in there and grab those books one of these days. One thing I'm concerned about is how to handle needing an IsaFake as the default responder for the ISA bus, but also making the PCI stuff fits in there. I was under the impression that the PCI space was a default responder or something on one of the busses. I'm imagining my question here doesn't make perfect sense since I'm a little fuzzy on how this stuff is supposed to work, but hopefully that also means it's not that hard and I just need some thorough explanation.

Gabe
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to