libdrv: usbhc_iface now shares memory instead of sending data
Two more things that come along:
1) The two callbacks (read, write) were joined. As they were joined in
the only implementation (ddf_helpers) anyway, and now the code is
almost the same, we took the opportunity and joined them. The bad
thing about it is that there are not enough IPC arguments to
transfer the direction, so we still have to use two "interface IPC
methods".
2) The copying is still done by the former methods (usbhc_read and
usbhc_write) to ensure the page alignment, so this method just
moves the burden of copying from kernel to the caller (which is why
this is actually a performance regression).
But, the two sides can now resolve their issues separately. The caller
can prepare the memory area in advance, and HC can use the memory
directly if it can.