Hello, I've started having a look at Zheng Da's user-level driver integration. I've cleaned his tree a bit, and now considering adding patches to the debian packages for wider testing. The patches however add a few kernel RPCs, which we should probably agree on first, at the minimum that their existence makes sense, so we can reserve slots in upstream gnumach. Basically, it's about allocating physically-contiguous memory for DMAs, and getting IRQ events:
/* * This routine is created for allocating DMA buffers. * We are going to get a contiguous physical memory * and its physical address in addition to the virtual address. */ routine vm_allocate_contiguous( host_priv : host_priv_t; target_task : vm_task_t; out vaddr : vm_address_t; out paddr : vm_address_t; size : vm_size_t); /* Requesting IRQ events on a port */ routine device_intr_notify( master_port : mach_port_t; in irq : int; in id : int; in flags : int; in receive_port : mach_port_send_t ); The actual event: simpleroutine mach_notify_irq( notify : notify_port_t; name : int); And a way to mask/unmask irqs: /* * enable/disable the specified irq. */ routine device_irq_enable( master_port : mach_port_t; irq : int; status : char); Should this be rather split into device_irq_enable/disable and drop the status paramter? Samuel