> I would like for MI drivers to be able to override pci(9), bus_space(9), > and bus_dma(9) behavior for the purpose of handling exceptions, managing > bus resources, creating test harnesses, and counting events. > > Where pci(9), bus_space(9), and bus_dma(9) implementations are MD, > today, I would like to split them into MI and MD parts. This > will involve creating MI types, struct bus_space_tag and struct > pci_chipset_tag and corresponding MI typedefs, bus_space_tag_t and > pci_chipset_tag_t. Every MD tag will embed an MI tag, and a "pure" MI > tag can derive from an MD tag or from an MI tag.
Although I like the idea to move things to MI in general, I want to clarify *responsibility* of bus_space(9) and bus_dma(9). For example, bus_addr_t of a device instance should be taught to struct device as an attribute (or property or whatever you call). Then we can have a unified way to calculate the physical address of the device, by summing up its parents' bus_addr_t. For debugging part, isn't it what DTrace is for now? Masao