diff mbox

[v2,RFC] virtio: uniform virtio device IDs

Message ID 1423201286-16503-1-git-send-email-tiejun.chen@intel.com
State New
Headers show

Commit Message

Tiejun Chen Feb. 6, 2015, 5:41 a.m. UTC
Actually we define these device IDs in virtio standard, so
we'd better put them into one common place to manage conveniently.
Here I also add VIRTIO_ID_RESERVE according to virtio spec.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
---
 hw/9pfs/virtio-9p.h                |  2 --
 include/hw/virtio/virtio-balloon.h |  3 ---
 include/hw/virtio/virtio-blk.h     |  3 ---
 include/hw/virtio/virtio-rng.h     |  3 ---
 include/hw/virtio/virtio-scsi.h    |  3 ---
 include/hw/virtio/virtio-serial.h  |  3 ---
 include/hw/virtio/virtio.h         | 16 ++++++++++++++++
 pc-bios/s390-ccw/virtio.h          |  8 +-------
 8 files changed, 17 insertions(+), 24 deletions(-)

Comments

Cornelia Huck Feb. 6, 2015, 12:14 p.m. UTC | #1
On Fri,  6 Feb 2015 13:41:26 +0800
Tiejun Chen <tiejun.chen@intel.com> wrote:

> Actually we define these device IDs in virtio standard, so
> we'd better put them into one common place to manage conveniently.
> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> ---
>  hw/9pfs/virtio-9p.h                |  2 --
>  include/hw/virtio/virtio-balloon.h |  3 ---
>  include/hw/virtio/virtio-blk.h     |  3 ---
>  include/hw/virtio/virtio-rng.h     |  3 ---
>  include/hw/virtio/virtio-scsi.h    |  3 ---
>  include/hw/virtio/virtio-serial.h  |  3 ---
>  include/hw/virtio/virtio.h         | 16 ++++++++++++++++
>  pc-bios/s390-ccw/virtio.h          |  8 +-------
>  8 files changed, 17 insertions(+), 24 deletions(-)
> 

> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index f24997d..9ad6bb2 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -23,6 +23,22 @@
>  #include "hw/virtio/virtio-9p.h"
>  #endif
> 
> +/* Refer to Linux's linux/virtio_ids.h */

Why not refer to the virtio spec instead? :) And maybe add in the ids
that already have been reserved.

> +
> +enum virtio_dev_type {
> +    VIRTIO_ID_RESERVED  = 0, /* invalid virtio device */
> +    VIRTIO_ID_NET = 1, /* virtio net */
> +    VIRTIO_ID_BLOCK	= 2, /* virtio block */
> +    VIRTIO_ID_CONSOLE = 3, /* virtio console */
> +    VIRTIO_ID_RNG = 4, /* virtio rng */
> +    VIRTIO_ID_BALLOON = 5, /* virtio balloon */

/* virtio balloon (legacy) */

> +    VIRTIO_ID_RPMSG	= 7, /* virtio remote processor messaging */
> +    VIRTIO_ID_SCSI = 8, /* virtio scsi */
> +    VIRTIO_ID_9P = 9, /* 9p virtio console */
> +    VIRTIO_ID_RPROC_SERIAL = 11, /* virtio remoteproc serial link */
> +    VIRTIO_ID_CAIF = 12, /* Virtio caif */
> +};
> +
>  /* from Linux's linux/virtio_config.h */
> 
>  /* Status byte for guest to report progress, and synchronize features. */
> diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
> index c23466b..2eabcb4 100644
> --- a/pc-bios/s390-ccw/virtio.h
> +++ b/pc-bios/s390-ccw/virtio.h
> @@ -11,6 +11,7 @@
>  #ifndef VIRTIO_H
>  #define VIRTIO_H
> 
> +#include "hw/virtio/virtio.h"

This won't work, the bios can't use the common headers.

>  #include "s390-ccw.h"
> 
>  /* Status byte for guest to report progress, and synchronize features. */
> @@ -23,13 +24,6 @@
>  /* We've given up on this device. */
>  #define VIRTIO_CONFIG_S_FAILED          0x80
> 
> -enum virtio_dev_type {
> -    VIRTIO_ID_NET = 1,
> -    VIRTIO_ID_BLOCK = 2,
> -    VIRTIO_ID_CONSOLE = 3,
> -    VIRTIO_ID_BALLOON = 5,
> -};

Even though this one is incomplete; but we don't need anything but the
block id anyway.

> -
>  struct virtio_dev_header {
>      enum virtio_dev_type type : 8;
>      u8  num_vq;
Stefan Hajnoczi Feb. 6, 2015, 4:28 p.m. UTC | #2
On Fri, Feb 06, 2015 at 01:41:26PM +0800, Tiejun Chen wrote:
> Actually we define these device IDs in virtio standard, so
> we'd better put them into one common place to manage conveniently.
> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> ---
>  hw/9pfs/virtio-9p.h                |  2 --
>  include/hw/virtio/virtio-balloon.h |  3 ---
>  include/hw/virtio/virtio-blk.h     |  3 ---
>  include/hw/virtio/virtio-rng.h     |  3 ---
>  include/hw/virtio/virtio-scsi.h    |  3 ---
>  include/hw/virtio/virtio-serial.h  |  3 ---
>  include/hw/virtio/virtio.h         | 16 ++++++++++++++++
>  pc-bios/s390-ccw/virtio.h          |  8 +-------
>  8 files changed, 17 insertions(+), 24 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Michael S. Tsirkin Feb. 8, 2015, 10:48 a.m. UTC | #3
On Fri, Feb 06, 2015 at 01:14:46PM +0100, Cornelia Huck wrote:
> On Fri,  6 Feb 2015 13:41:26 +0800
> Tiejun Chen <tiejun.chen@intel.com> wrote:
> 
> > Actually we define these device IDs in virtio standard, so
> > we'd better put them into one common place to manage conveniently.
> > Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> > 
> > Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>

We really should just write a script to import the headers
from the linux kernel.
They will need some tweaks to avoid dependencies on
linux/types, but this seems easy to do - better than
trying to keep things in sync manually.
Tiejun Chen Feb. 9, 2015, 6:56 a.m. UTC | #4
On 2015/2/6 20:14, Cornelia Huck wrote:
> On Fri,  6 Feb 2015 13:41:26 +0800
> Tiejun Chen <tiejun.chen@intel.com> wrote:
>
>> Actually we define these device IDs in virtio standard, so
>> we'd better put them into one common place to manage conveniently.
>> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
>>
>> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
>> ---
>>   hw/9pfs/virtio-9p.h                |  2 --
>>   include/hw/virtio/virtio-balloon.h |  3 ---
>>   include/hw/virtio/virtio-blk.h     |  3 ---
>>   include/hw/virtio/virtio-rng.h     |  3 ---
>>   include/hw/virtio/virtio-scsi.h    |  3 ---
>>   include/hw/virtio/virtio-serial.h  |  3 ---
>>   include/hw/virtio/virtio.h         | 16 ++++++++++++++++
>>   pc-bios/s390-ccw/virtio.h          |  8 +-------
>>   8 files changed, 17 insertions(+), 24 deletions(-)
>>
>
>> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
>> index f24997d..9ad6bb2 100644
>> --- a/include/hw/virtio/virtio.h
>> +++ b/include/hw/virtio/virtio.h
>> @@ -23,6 +23,22 @@
>>   #include "hw/virtio/virtio-9p.h"
>>   #endif
>>
>> +/* Refer to Linux's linux/virtio_ids.h */
>
> Why not refer to the virtio spec instead? :) And maybe add in the ids

Actually they're same now but this really is a potential risk.

> that already have been reserved.

So what about this?

@@ -23,6 +23,22 @@
  #include "hw/virtio/virtio-9p.h"
  #endif

+/* Refer to VirtIO Spec 1.0. */
+
+#define VIRTIO_ID_RESERVED  0           /* reserved (invalid)*/
+#define VIRTIO_ID_NET       1           /* network card */
+#define VIRTIO_ID_BLOCK     2           /* block device */
+#define VIRTIO_ID_CONSOLE   3           /* console */
+#define VIRTIO_ID_RNG       4           /* entropy source */
+#define VIRTIO_ID_BALLOON   5           /* memory ballooning */
+#define VIRTIO_ID_IOMEMORY  6           /* ioMemory */
+#define VIRTIO_ID_RPMSG     7           /* rpmsg */
+#define VIRTIO_ID_SCSI      8           /* SCSI host */
+#define VIRTIO_ID_9P        9           /* 9P transport */
+#define VIRTIO_ID_MAC80211_WALN 10      /* mac80211 wlan */
+#define VIRTIO_ID_RPROC_SERIAL  11      /* rproc seria */
+#define VIRTIO_ID_CAIF      12          /* virtio CAIF */
+
  /* from Linux's linux/virtio_config.h */

  /* Status byte for guest to report progress, and synchronize features. */


>
>> +
>> +enum virtio_dev_type {
>> +    VIRTIO_ID_RESERVED  = 0, /* invalid virtio device */
>> +    VIRTIO_ID_NET = 1, /* virtio net */
>> +    VIRTIO_ID_BLOCK	= 2, /* virtio block */
>> +    VIRTIO_ID_CONSOLE = 3, /* virtio console */
>> +    VIRTIO_ID_RNG = 4, /* virtio rng */
>> +    VIRTIO_ID_BALLOON = 5, /* virtio balloon */
>
> /* virtio balloon (legacy) */
>
>> +    VIRTIO_ID_RPMSG	= 7, /* virtio remote processor messaging */
>> +    VIRTIO_ID_SCSI = 8, /* virtio scsi */
>> +    VIRTIO_ID_9P = 9, /* 9p virtio console */
>> +    VIRTIO_ID_RPROC_SERIAL = 11, /* virtio remoteproc serial link */
>> +    VIRTIO_ID_CAIF = 12, /* Virtio caif */
>> +};
>> +
>>   /* from Linux's linux/virtio_config.h */
>>
>>   /* Status byte for guest to report progress, and synchronize features. */
>> diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
>> index c23466b..2eabcb4 100644
>> --- a/pc-bios/s390-ccw/virtio.h
>> +++ b/pc-bios/s390-ccw/virtio.h
>> @@ -11,6 +11,7 @@
>>   #ifndef VIRTIO_H
>>   #define VIRTIO_H
>>
>> +#include "hw/virtio/virtio.h"
>
> This won't work, the bios can't use the common headers.

Thanks for your caught.

>
>>   #include "s390-ccw.h"
>>
>>   /* Status byte for guest to report progress, and synchronize features. */
>> @@ -23,13 +24,6 @@
>>   /* We've given up on this device. */
>>   #define VIRTIO_CONFIG_S_FAILED          0x80
>>
>> -enum virtio_dev_type {
>> -    VIRTIO_ID_NET = 1,
>> -    VIRTIO_ID_BLOCK = 2,
>> -    VIRTIO_ID_CONSOLE = 3,
>> -    VIRTIO_ID_BALLOON = 5,
>> -};
>
> Even though this one is incomplete; but we don't need anything but the
> block id anyway.
>
>> -
>>   struct virtio_dev_header {
>>       enum virtio_dev_type type : 8;
>>       u8  num_vq;
>
>

I will remove all s390 stuff in this patch.

Thanks
Tiejun
Tiejun Chen Feb. 9, 2015, 6:58 a.m. UTC | #5
On 2015/2/7 0:28, Stefan Hajnoczi wrote:
> On Fri, Feb 06, 2015 at 01:41:26PM +0800, Tiejun Chen wrote:
>> Actually we define these device IDs in virtio standard, so
>> we'd better put them into one common place to manage conveniently.
>> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
>>
>> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
>> ---
>>   hw/9pfs/virtio-9p.h                |  2 --
>>   include/hw/virtio/virtio-balloon.h |  3 ---
>>   include/hw/virtio/virtio-blk.h     |  3 ---
>>   include/hw/virtio/virtio-rng.h     |  3 ---
>>   include/hw/virtio/virtio-scsi.h    |  3 ---
>>   include/hw/virtio/virtio-serial.h  |  3 ---
>>   include/hw/virtio/virtio.h         | 16 ++++++++++++++++
>>   pc-bios/s390-ccw/virtio.h          |  8 +-------
>>   8 files changed, 17 insertions(+), 24 deletions(-)
>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Thanks for you review.

Just a little change will be introduced in next revision.

Tiejun
Michael S. Tsirkin Feb. 9, 2015, 7:57 p.m. UTC | #6
On Fri, Feb 06, 2015 at 01:41:26PM +0800, Tiejun Chen wrote:
> Actually we define these device IDs in virtio standard, so
> we'd better put them into one common place to manage conveniently.
> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>

So I just posted a script that pulls in headers from
a linux tree, doing minor changes required to
make the headers portable, such as
linux/types.h -> inttypes.h

I think it's a better idea, a virtio 1.0
work will benefit from this too.

> ---
>  hw/9pfs/virtio-9p.h                |  2 --
>  include/hw/virtio/virtio-balloon.h |  3 ---
>  include/hw/virtio/virtio-blk.h     |  3 ---
>  include/hw/virtio/virtio-rng.h     |  3 ---
>  include/hw/virtio/virtio-scsi.h    |  3 ---
>  include/hw/virtio/virtio-serial.h  |  3 ---
>  include/hw/virtio/virtio.h         | 16 ++++++++++++++++
>  pc-bios/s390-ccw/virtio.h          |  8 +-------
>  8 files changed, 17 insertions(+), 24 deletions(-)
> 
> diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
> index 2c3603a..228e05d 100644
> --- a/hw/9pfs/virtio-9p.h
> +++ b/hw/9pfs/virtio-9p.h
> @@ -146,8 +146,6 @@ struct V9fsPDU
>  
>  /* from Linux's linux/virtio_9p.h */
>  
> -/* The ID for virtio console */
> -#define VIRTIO_ID_9P    9
>  #define MAX_REQ         128
>  #define MAX_TAG_LEN     32
>  
> diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h
> index f863bfe..6e0a775 100644
> --- a/include/hw/virtio/virtio-balloon.h
> +++ b/include/hw/virtio/virtio-balloon.h
> @@ -24,9 +24,6 @@
>  
>  /* from Linux's linux/virtio_balloon.h */
>  
> -/* The ID for virtio_balloon */
> -#define VIRTIO_ID_BALLOON 5
> -
>  /* The feature bitmap for virtio balloon */
>  #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
>  #define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
> diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
> index 4652b70..6ee3e8f 100644
> --- a/include/hw/virtio/virtio-blk.h
> +++ b/include/hw/virtio/virtio-blk.h
> @@ -25,9 +25,6 @@
>  
>  /* from Linux's linux/virtio_blk.h */
>  
> -/* The ID for virtio_block */
> -#define VIRTIO_ID_BLOCK 2
> -
>  /* Feature bits */
>  #define VIRTIO_BLK_F_BARRIER    0       /* Does host support barriers? */
>  #define VIRTIO_BLK_F_SIZE_MAX   1       /* Indicates maximum segment size */
> diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h
> index 14e85a5..e2bb6ce 100644
> --- a/include/hw/virtio/virtio-rng.h
> +++ b/include/hw/virtio/virtio-rng.h
> @@ -21,9 +21,6 @@
>  #define VIRTIO_RNG_GET_PARENT_CLASS(obj) \
>          OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG)
>  
> -/* The Virtio ID for the virtio rng device */
> -#define VIRTIO_ID_RNG    4
> -
>  struct VirtIORNGConf {
>      RngBackend *rng;
>      uint64_t max_bytes;
> diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
> index bf17cc9..9606f43 100644
> --- a/include/hw/virtio/virtio-scsi.h
> +++ b/include/hw/virtio/virtio-scsi.h
> @@ -29,9 +29,6 @@
>          OBJECT_CHECK(VirtIOSCSI, (obj), TYPE_VIRTIO_SCSI)
>  
>  
> -/* The ID for virtio_scsi */
> -#define VIRTIO_ID_SCSI  8
> -
>  /* Feature Bits */
>  #define VIRTIO_SCSI_F_INOUT                    0
>  #define VIRTIO_SCSI_F_HOTPLUG                  1
> diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h
> index 11af978..1dcced6 100644
> --- a/include/hw/virtio/virtio-serial.h
> +++ b/include/hw/virtio/virtio-serial.h
> @@ -20,9 +20,6 @@
>  
>  /* == Interface shared between the guest kernel and qemu == */
>  
> -/* The Virtio ID for virtio console / serial ports */
> -#define VIRTIO_ID_CONSOLE		3
> -
>  /* Features supported */
>  #define VIRTIO_CONSOLE_F_MULTIPORT	1
>  
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index f24997d..9ad6bb2 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -23,6 +23,22 @@
>  #include "hw/virtio/virtio-9p.h"
>  #endif
>  
> +/* Refer to Linux's linux/virtio_ids.h */
> +
> +enum virtio_dev_type {
> +    VIRTIO_ID_RESERVED  = 0, /* invalid virtio device */
> +    VIRTIO_ID_NET = 1, /* virtio net */
> +    VIRTIO_ID_BLOCK	= 2, /* virtio block */
> +    VIRTIO_ID_CONSOLE = 3, /* virtio console */
> +    VIRTIO_ID_RNG = 4, /* virtio rng */
> +    VIRTIO_ID_BALLOON = 5, /* virtio balloon */
> +    VIRTIO_ID_RPMSG	= 7, /* virtio remote processor messaging */
> +    VIRTIO_ID_SCSI = 8, /* virtio scsi */
> +    VIRTIO_ID_9P = 9, /* 9p virtio console */
> +    VIRTIO_ID_RPROC_SERIAL = 11, /* virtio remoteproc serial link */
> +    VIRTIO_ID_CAIF = 12, /* Virtio caif */
> +};
> +
>  /* from Linux's linux/virtio_config.h */
>  
>  /* Status byte for guest to report progress, and synchronize features. */
> diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
> index c23466b..2eabcb4 100644
> --- a/pc-bios/s390-ccw/virtio.h
> +++ b/pc-bios/s390-ccw/virtio.h
> @@ -11,6 +11,7 @@
>  #ifndef VIRTIO_H
>  #define VIRTIO_H
>  
> +#include "hw/virtio/virtio.h"
>  #include "s390-ccw.h"
>  
>  /* Status byte for guest to report progress, and synchronize features. */
> @@ -23,13 +24,6 @@
>  /* We've given up on this device. */
>  #define VIRTIO_CONFIG_S_FAILED          0x80
>  
> -enum virtio_dev_type {
> -    VIRTIO_ID_NET = 1,
> -    VIRTIO_ID_BLOCK = 2,
> -    VIRTIO_ID_CONSOLE = 3,
> -    VIRTIO_ID_BALLOON = 5,
> -};
> -
>  struct virtio_dev_header {
>      enum virtio_dev_type type : 8;
>      u8  num_vq;
> -- 
> 1.9.1
Amit Shah Feb. 11, 2015, 11:18 a.m. UTC | #7
On (Fri) 06 Feb 2015 [13:41:26], Tiejun Chen wrote:
> Actually we define these device IDs in virtio standard, so
> we'd better put them into one common place to manage conveniently.
> Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>

Reviewed-by: Amit Shah <amit.shah@redhat.com>

		Amit
Amit Shah Feb. 11, 2015, 11:55 a.m. UTC | #8
On (Mon) 09 Feb 2015 [20:57:42], Michael S. Tsirkin wrote:
> On Fri, Feb 06, 2015 at 01:41:26PM +0800, Tiejun Chen wrote:
> > Actually we define these device IDs in virtio standard, so
> > we'd better put them into one common place to manage conveniently.
> > Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> > 
> > Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> 
> So I just posted a script that pulls in headers from
> a linux tree, doing minor changes required to
> make the headers portable, such as
> linux/types.h -> inttypes.h

We used to do this for kvm headers earlier..

Anyway I don't feel strongly about it.  Cornelia's objection that it
doesn't work on non-Linux hosts also holds..

		Amit
Michael S. Tsirkin Feb. 11, 2015, 12:37 p.m. UTC | #9
On Wed, Feb 11, 2015 at 05:25:29PM +0530, Amit Shah wrote:
> On (Mon) 09 Feb 2015 [20:57:42], Michael S. Tsirkin wrote:
> > On Fri, Feb 06, 2015 at 01:41:26PM +0800, Tiejun Chen wrote:
> > > Actually we define these device IDs in virtio standard, so
> > > we'd better put them into one common place to manage conveniently.
> > > Here I also add VIRTIO_ID_RESERVE according to virtio spec.
> > > 
> > > Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
> > 
> > So I just posted a script that pulls in headers from
> > a linux tree, doing minor changes required to
> > make the headers portable, such as
> > linux/types.h -> inttypes.h
> 
> We used to do this for kvm headers earlier..
> 
> Anyway I don't feel strongly about it.  Cornelia's objection that it
> doesn't work on non-Linux hosts also holds..
> 
> 		Amit

Imported headers clearly can work on non linux hosts.
diff mbox

Patch

diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
index 2c3603a..228e05d 100644
--- a/hw/9pfs/virtio-9p.h
+++ b/hw/9pfs/virtio-9p.h
@@ -146,8 +146,6 @@  struct V9fsPDU
 
 /* from Linux's linux/virtio_9p.h */
 
-/* The ID for virtio console */
-#define VIRTIO_ID_9P    9
 #define MAX_REQ         128
 #define MAX_TAG_LEN     32
 
diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h
index f863bfe..6e0a775 100644
--- a/include/hw/virtio/virtio-balloon.h
+++ b/include/hw/virtio/virtio-balloon.h
@@ -24,9 +24,6 @@ 
 
 /* from Linux's linux/virtio_balloon.h */
 
-/* The ID for virtio_balloon */
-#define VIRTIO_ID_BALLOON 5
-
 /* The feature bitmap for virtio balloon */
 #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
 #define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
index 4652b70..6ee3e8f 100644
--- a/include/hw/virtio/virtio-blk.h
+++ b/include/hw/virtio/virtio-blk.h
@@ -25,9 +25,6 @@ 
 
 /* from Linux's linux/virtio_blk.h */
 
-/* The ID for virtio_block */
-#define VIRTIO_ID_BLOCK 2
-
 /* Feature bits */
 #define VIRTIO_BLK_F_BARRIER    0       /* Does host support barriers? */
 #define VIRTIO_BLK_F_SIZE_MAX   1       /* Indicates maximum segment size */
diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h
index 14e85a5..e2bb6ce 100644
--- a/include/hw/virtio/virtio-rng.h
+++ b/include/hw/virtio/virtio-rng.h
@@ -21,9 +21,6 @@ 
 #define VIRTIO_RNG_GET_PARENT_CLASS(obj) \
         OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG)
 
-/* The Virtio ID for the virtio rng device */
-#define VIRTIO_ID_RNG    4
-
 struct VirtIORNGConf {
     RngBackend *rng;
     uint64_t max_bytes;
diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index bf17cc9..9606f43 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -29,9 +29,6 @@ 
         OBJECT_CHECK(VirtIOSCSI, (obj), TYPE_VIRTIO_SCSI)
 
 
-/* The ID for virtio_scsi */
-#define VIRTIO_ID_SCSI  8
-
 /* Feature Bits */
 #define VIRTIO_SCSI_F_INOUT                    0
 #define VIRTIO_SCSI_F_HOTPLUG                  1
diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h
index 11af978..1dcced6 100644
--- a/include/hw/virtio/virtio-serial.h
+++ b/include/hw/virtio/virtio-serial.h
@@ -20,9 +20,6 @@ 
 
 /* == Interface shared between the guest kernel and qemu == */
 
-/* The Virtio ID for virtio console / serial ports */
-#define VIRTIO_ID_CONSOLE		3
-
 /* Features supported */
 #define VIRTIO_CONSOLE_F_MULTIPORT	1
 
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index f24997d..9ad6bb2 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -23,6 +23,22 @@ 
 #include "hw/virtio/virtio-9p.h"
 #endif
 
+/* Refer to Linux's linux/virtio_ids.h */
+
+enum virtio_dev_type {
+    VIRTIO_ID_RESERVED  = 0, /* invalid virtio device */
+    VIRTIO_ID_NET = 1, /* virtio net */
+    VIRTIO_ID_BLOCK	= 2, /* virtio block */
+    VIRTIO_ID_CONSOLE = 3, /* virtio console */
+    VIRTIO_ID_RNG = 4, /* virtio rng */
+    VIRTIO_ID_BALLOON = 5, /* virtio balloon */
+    VIRTIO_ID_RPMSG	= 7, /* virtio remote processor messaging */
+    VIRTIO_ID_SCSI = 8, /* virtio scsi */
+    VIRTIO_ID_9P = 9, /* 9p virtio console */
+    VIRTIO_ID_RPROC_SERIAL = 11, /* virtio remoteproc serial link */
+    VIRTIO_ID_CAIF = 12, /* Virtio caif */
+};
+
 /* from Linux's linux/virtio_config.h */
 
 /* Status byte for guest to report progress, and synchronize features. */
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
index c23466b..2eabcb4 100644
--- a/pc-bios/s390-ccw/virtio.h
+++ b/pc-bios/s390-ccw/virtio.h
@@ -11,6 +11,7 @@ 
 #ifndef VIRTIO_H
 #define VIRTIO_H
 
+#include "hw/virtio/virtio.h"
 #include "s390-ccw.h"
 
 /* Status byte for guest to report progress, and synchronize features. */
@@ -23,13 +24,6 @@ 
 /* We've given up on this device. */
 #define VIRTIO_CONFIG_S_FAILED          0x80
 
-enum virtio_dev_type {
-    VIRTIO_ID_NET = 1,
-    VIRTIO_ID_BLOCK = 2,
-    VIRTIO_ID_CONSOLE = 3,
-    VIRTIO_ID_BALLOON = 5,
-};
-
 struct virtio_dev_header {
     enum virtio_dev_type type : 8;
     u8  num_vq;