On Sun, Jun 13, 2010 at 3:49 PM, Paul Brook <p...@codesourcery.com> wrote: >> I think we could solve all problems (well, maybe not world peace, yet) >> by switching to message based system for all of DMA and IRQs. >> >> Each device would have a message input port and way to output messages. >> >> Examples: >> >> Zero copy memory access from device D1 to D2 to host memory (D3) with >> access broken to page length units and errors occurring on the last >> byte: >> D1 send_msg(ID, MSG_MEM_WRITE, DMA address, length) -> D2 >>... >> IRQ delivery chain D1->D2->D3 with coalescing, messages, delivery >> reporting and EOI: >> D1 send_msg(ID, MSG_IRQ_RAISE, payload) -> D2 > > This feels like a terrible idea to me. It introduces an unnecessary RPC > indirection layer without actually solving any of the problems. It just makes > it harder (if not impossible) for the compiler to verify any of the interfaces > between objects.
For the memory access case, in practice the interface could be sysbus_memory_rw(DeviceState *parent, target_phys_addr_t addr, target_phys_addr_t size) in place of send_msg() and sysbus_memory_rw_cb(DeviceState *dev, void *ptr, size_t size, int status) in place of send_replymsg() so we'd have compiler type checks.