Virtio-serial API: Difference between revisions
From KVM
(Pointer to how port naming and discovery works) |
(Formatting) |
||
Line 11: | Line 11: | ||
|- | |- | ||
|Opening port | |Opening port | ||
|open(2). Returns >= 0 on success. Only one open allowed at a time for a port. | |<code>open(2)</code>. | ||
* Returns >= 0 on success. | |||
* Only one open allowed at a time for a port. | |||
| | | | ||
|- | |- | ||
|Reading | |Reading | ||
|read(2). Blocking as well as non-blocking reads available. Return 0 if host is not connected. Block or - | |read(2). | ||
* Blocking as well as non-blocking reads available. | |||
* Return 0 if host is not connected. | |||
* Block or <code>-EAGAIN</code> if data not available. | |||
* Errno will contain <code>-ENODEV</code> if port or device get hot-unplugged | |||
| | | | ||
|- | |- | ||
|Writing | |Writing | ||
|write(2). Blocking as well as non-blocking. If host is not connected, write blocks or returns - | |<code>write(2)</code>. | ||
* Blocking as well as non-blocking. | |||
* If host is not connected, write blocks or returns <code>-EAGAIN</code>. | |||
* Errno will contain <code>-ENODEV</code> if port or device got hot-unplugged. | |||
| | | | ||
|- | |- | ||
|Poll | |Poll | ||
|poll(). POLLIN, POLLOUT with usual meaning. POLLHUP when host is not connected or when port or device got unplugged | |<code>poll()</code>. | ||
* <code>POLLIN, POLLOUT</code> with usual meaning. | |||
* <code>POLLHUP</code> when host is not connected or when port or device got unplugged | |||
|- | |- | ||
| | |<code>Asynchronous notifications</code> | ||
|From kernel 2.6.37, SIGIO will be sent to guest apps that set O_ASYNC flag on the fd. SIGIO will be sent on host connection up, down and port unplug events. | |From kernel 2.6.37, <code>SIGIO</code> will be sent to guest apps that set <code>O_ASYNC</code> flag on the fd using <code>fcntl(2)</code>. <code>SIGIO</code> will be sent on host connection up, down and port unplug events. | ||
| | | | ||
|- | |- |
Revision as of 06:18, 2 September 2010
Guest API
Function | Linux guest | Windows guest |
---|---|---|
Port discovery | symlinks from /dev/virtio-port/<portname> to /dev/vportNpn as mentioned in http://www.linux-kvm.org/page/VMchannel_Requirements#Invocation
|
|
Opening port | open(2) .
|
|
Reading | read(2).
|
|
Writing | write(2) .
|
|
Poll | poll() .
| |
Asynchronous notifications
|
From kernel 2.6.37, SIGIO will be sent to guest apps that set O_ASYNC flag on the fd using fcntl(2) . SIGIO will be sent on host connection up, down and port unplug events.
|
For an example of a C program that uses the virtio-serial Linux guest API, see auto-virtserial-guest.c
Host API
There's an in-qemu host API exposed by the virtio-serial code. The following is true for the in-qemu API for qemu version 0.13 and for the qemu version found in Red Hat Enterprise Linux 6.0, straight from hw/virtio-serial.h:
|
In addition to this, the VirtIOSerialPortInfo struct has a function pointer for a callback to be called when guest writes some data to the port:
|
For an example use of this API, see hw/virtio-console.c