f909f850d6
Instead of the host and guest independently enumerating ports, switch to a control message to add ports where the host supplies the port number so there's no ambiguity or a possibility of a race between the host and the guest port numbers. We now no longer need the 'nr_ports' config value. Since no kernel has been released with the MULTIPORT changes yet, we have a chance to fiddle with the config space without adding compatibility features. This is beneficial for management software, which would now be able to instantiate ports at known locations and avoid problems that arise with implicit numbering in the host and the guest. This removes the 'guessing game' part of it, and management software can now actually indicate which id to spawn a particular port on. Signed-off-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
#ifndef _LINUX_VIRTIO_CONSOLE_H
|
|
#define _LINUX_VIRTIO_CONSOLE_H
|
|
#include <linux/types.h>
|
|
#include <linux/virtio_ids.h>
|
|
#include <linux/virtio_config.h>
|
|
/*
|
|
* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
|
|
* anyone can use the definitions to implement compatible drivers/servers.
|
|
*
|
|
* Copyright (C) Red Hat, Inc., 2009, 2010
|
|
*/
|
|
|
|
/* Feature bits */
|
|
#define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */
|
|
#define VIRTIO_CONSOLE_F_MULTIPORT 1 /* Does host provide multiple ports? */
|
|
|
|
#define VIRTIO_CONSOLE_BAD_ID (~(u32)0)
|
|
|
|
struct virtio_console_config {
|
|
/* colums of the screens */
|
|
__u16 cols;
|
|
/* rows of the screens */
|
|
__u16 rows;
|
|
/* max. number of ports this device can hold */
|
|
__u32 max_nr_ports;
|
|
} __attribute__((packed));
|
|
|
|
/*
|
|
* A message that's passed between the Host and the Guest for a
|
|
* particular port.
|
|
*/
|
|
struct virtio_console_control {
|
|
__u32 id; /* Port number */
|
|
__u16 event; /* The kind of control event (see below) */
|
|
__u16 value; /* Extra information for the key */
|
|
};
|
|
|
|
/* Some events for control messages */
|
|
#define VIRTIO_CONSOLE_DEVICE_READY 0
|
|
#define VIRTIO_CONSOLE_PORT_ADD 1
|
|
#define VIRTIO_CONSOLE_PORT_REMOVE 2
|
|
#define VIRTIO_CONSOLE_PORT_READY 3
|
|
#define VIRTIO_CONSOLE_CONSOLE_PORT 4
|
|
#define VIRTIO_CONSOLE_RESIZE 5
|
|
#define VIRTIO_CONSOLE_PORT_OPEN 6
|
|
#define VIRTIO_CONSOLE_PORT_NAME 7
|
|
|
|
#ifdef __KERNEL__
|
|
int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int));
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif /* _LINUX_VIRTIO_CONSOLE_H */
|