Statistics
| Branch: | Revision:

root / hw / virtio-net.h @ bf4f74c0

History | View | Annotate | Download (2.8 kB)

1 fbe78f4f aliguori
/*
2 fbe78f4f aliguori
 * Virtio Network Device
3 fbe78f4f aliguori
 *
4 fbe78f4f aliguori
 * Copyright IBM, Corp. 2007
5 fbe78f4f aliguori
 *
6 fbe78f4f aliguori
 * Authors:
7 fbe78f4f aliguori
 *  Anthony Liguori   <aliguori@us.ibm.com>
8 fbe78f4f aliguori
 *
9 fbe78f4f aliguori
 * This work is licensed under the terms of the GNU GPL, version 2.  See
10 fbe78f4f aliguori
 * the COPYING file in the top-level directory.
11 fbe78f4f aliguori
 *
12 fbe78f4f aliguori
 */
13 fbe78f4f aliguori
14 fbe78f4f aliguori
#ifndef _QEMU_VIRTIO_NET_H
15 fbe78f4f aliguori
#define _QEMU_VIRTIO_NET_H
16 fbe78f4f aliguori
17 fbe78f4f aliguori
#include "virtio.h"
18 fbe78f4f aliguori
#include "net.h"
19 fbe78f4f aliguori
#include "pci.h"
20 fbe78f4f aliguori
21 fbe78f4f aliguori
/* from Linux's virtio_net.h */
22 fbe78f4f aliguori
23 fbe78f4f aliguori
/* The ID for virtio_net */
24 fbe78f4f aliguori
#define VIRTIO_ID_NET   1
25 fbe78f4f aliguori
26 fbe78f4f aliguori
/* The feature bitmap for virtio net */
27 fbe78f4f aliguori
#define VIRTIO_NET_F_CSUM       0       /* Host handles pkts w/ partial csum */
28 fbe78f4f aliguori
#define VIRTIO_NET_F_GUEST_CSUM 1       /* Guest handles pkts w/ partial csum */
29 fbe78f4f aliguori
#define VIRTIO_NET_F_MAC        5       /* Host has given MAC address. */
30 fbe78f4f aliguori
#define VIRTIO_NET_F_GSO        6       /* Host handles pkts w/ any GSO type */
31 fbe78f4f aliguori
#define VIRTIO_NET_F_GUEST_TSO4 7       /* Guest can handle TSOv4 in. */
32 fbe78f4f aliguori
#define VIRTIO_NET_F_GUEST_TSO6 8       /* Guest can handle TSOv6 in. */
33 fbe78f4f aliguori
#define VIRTIO_NET_F_GUEST_ECN  9       /* Guest can handle TSO[6] w/ ECN in. */
34 fbe78f4f aliguori
#define VIRTIO_NET_F_GUEST_UFO  10      /* Guest can handle UFO in. */
35 fbe78f4f aliguori
#define VIRTIO_NET_F_HOST_TSO4  11      /* Host can handle TSOv4 in. */
36 fbe78f4f aliguori
#define VIRTIO_NET_F_HOST_TSO6  12      /* Host can handle TSOv6 in. */
37 fbe78f4f aliguori
#define VIRTIO_NET_F_HOST_ECN   13      /* Host can handle TSO[6] w/ ECN in. */
38 fbe78f4f aliguori
#define VIRTIO_NET_F_HOST_UFO   14      /* Host can handle UFO in. */
39 fbe78f4f aliguori
#define VIRTIO_NET_F_MRG_RXBUF  15      /* Host can merge receive buffers. */
40 fbe78f4f aliguori
41 fbe78f4f aliguori
#define TX_TIMER_INTERVAL 150000 /* 150 us */
42 fbe78f4f aliguori
43 fbe78f4f aliguori
/* Maximum packet size we can receive from tap device: header + 64k */
44 fbe78f4f aliguori
#define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10))
45 fbe78f4f aliguori
46 fbe78f4f aliguori
/* The config defining mac address (6 bytes) */
47 fbe78f4f aliguori
struct virtio_net_config
48 fbe78f4f aliguori
{
49 fbe78f4f aliguori
    uint8_t mac[6];
50 fbe78f4f aliguori
} __attribute__((packed));
51 fbe78f4f aliguori
52 fbe78f4f aliguori
/* This is the first element of the scatter-gather list.  If you don't
53 fbe78f4f aliguori
 * specify GSO or CSUM features, you can simply ignore the header. */
54 fbe78f4f aliguori
struct virtio_net_hdr
55 fbe78f4f aliguori
{
56 fbe78f4f aliguori
#define VIRTIO_NET_HDR_F_NEEDS_CSUM     1       // Use csum_start, csum_offset
57 fbe78f4f aliguori
    uint8_t flags;
58 fbe78f4f aliguori
#define VIRTIO_NET_HDR_GSO_NONE         0       // Not a GSO frame
59 fbe78f4f aliguori
#define VIRTIO_NET_HDR_GSO_TCPV4        1       // GSO frame, IPv4 TCP (TSO)
60 fbe78f4f aliguori
#define VIRTIO_NET_HDR_GSO_UDP          3       // GSO frame, IPv4 UDP (UFO)
61 fbe78f4f aliguori
#define VIRTIO_NET_HDR_GSO_TCPV6        4       // GSO frame, IPv6 TCP
62 fbe78f4f aliguori
#define VIRTIO_NET_HDR_GSO_ECN          0x80    // TCP has ECN set
63 fbe78f4f aliguori
    uint8_t gso_type;
64 fbe78f4f aliguori
    uint16_t hdr_len;
65 fbe78f4f aliguori
    uint16_t gso_size;
66 fbe78f4f aliguori
    uint16_t csum_start;
67 fbe78f4f aliguori
    uint16_t csum_offset;
68 fbe78f4f aliguori
};
69 fbe78f4f aliguori
70 fbe78f4f aliguori
/* This is the version of the header to use when the MRG_RXBUF
71 fbe78f4f aliguori
 * feature has been negotiated. */
72 fbe78f4f aliguori
struct virtio_net_hdr_mrg_rxbuf
73 fbe78f4f aliguori
{
74 fbe78f4f aliguori
    struct virtio_net_hdr hdr;
75 fbe78f4f aliguori
    uint16_t num_buffers;   /* Number of merged rx buffers */
76 fbe78f4f aliguori
};
77 fbe78f4f aliguori
78 fbe78f4f aliguori
PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn);
79 fbe78f4f aliguori
80 fbe78f4f aliguori
#endif