~ubuntu-branches/ubuntu/vivid/qemu-linaro/vivid

« back to all changes in this revision

Viewing changes to hw/virtio-net.c

  • Committer: Ricardo Salveti de Araujo
  • Date: 2012-09-20 18:39:31 UTC
  • mfrom: (12922.1.2 qemu-linaro)
  • Revision ID: ricardo.salveti@linaro.org-20120920183931-sp3cg6kpdl8dmwo9
* New upstream release.
  - support emulated systems with more than 2G of memory. (LP: #1030588)
* Drop powerpc-missing-include.patch - merged upstream.
* Update debian/control:
  - drop perl build dependency.
  - add libfdt-dev build dependency.
* Update debian/qemu-keymaps.install file.
* Update debian/rules:
  - update QEMU_CPU for ARM architecture: armv4l -> armv7l.
  - update conf_audio_drv: default to PulseAudio since PA is the default on
    Ubuntu.
  - enable KVM on ARM architecture.
  - enable flat device tree support (--enable-fdt). (LP: #1030594)

Show diffs side-by-side

added added

removed removed

Lines of Context:
108
108
    if (!n->nic->nc.peer) {
109
109
        return;
110
110
    }
111
 
    if (n->nic->nc.peer->info->type != NET_CLIENT_TYPE_TAP) {
 
111
    if (n->nic->nc.peer->info->type != NET_CLIENT_OPTIONS_KIND_TAP) {
112
112
        return;
113
113
    }
114
114
 
163
163
    }
164
164
}
165
165
 
166
 
static void virtio_net_set_link_status(VLANClientState *nc)
 
166
static void virtio_net_set_link_status(NetClientState *nc)
167
167
{
168
168
    VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
169
169
    uint16_t old_status = n->status;
205
205
    if (!n->nic->nc.peer)
206
206
        return 0;
207
207
 
208
 
    if (n->nic->nc.peer->info->type != NET_CLIENT_TYPE_TAP)
 
208
    if (n->nic->nc.peer->info->type != NET_CLIENT_OPTIONS_KIND_TAP)
209
209
        return 0;
210
210
 
211
211
    n->has_vnet_hdr = tap_has_vnet_hdr(n->nic->nc.peer);
249
249
    }
250
250
 
251
251
    if (!n->nic->nc.peer ||
252
 
        n->nic->nc.peer->info->type != NET_CLIENT_TYPE_TAP) {
 
252
        n->nic->nc.peer->info->type != NET_CLIENT_OPTIONS_KIND_TAP) {
253
253
        return features;
254
254
    }
255
255
    if (!tap_get_vhost_net(n->nic->nc.peer)) {
288
288
                        (features >> VIRTIO_NET_F_GUEST_UFO)  & 1);
289
289
    }
290
290
    if (!n->nic->nc.peer ||
291
 
        n->nic->nc.peer->info->type != NET_CLIENT_TYPE_TAP) {
 
291
        n->nic->nc.peer->info->type != NET_CLIENT_OPTIONS_KIND_TAP) {
292
292
        return;
293
293
    }
294
294
    if (!tap_get_vhost_net(n->nic->nc.peer)) {
453
453
    qemu_notify_event();
454
454
}
455
455
 
456
 
static int virtio_net_can_receive(VLANClientState *nc)
 
456
static int virtio_net_can_receive(NetClientState *nc)
457
457
{
458
458
    VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
459
459
    if (!n->vdev.vm_running) {
593
593
    return 0;
594
594
}
595
595
 
596
 
static ssize_t virtio_net_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
 
596
static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t size)
597
597
{
598
598
    VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
599
599
    struct virtio_net_hdr_mrg_rxbuf *mhdr = NULL;
656
656
        }
657
657
 
658
658
        /* copy in packet.  ugh */
659
 
        len = iov_from_buf(sg, elem.in_num,
660
 
                           buf + offset, 0, size - offset);
 
659
        len = iov_from_buf(sg, elem.in_num, 0,
 
660
                           buf + offset, size - offset);
661
661
        total += len;
662
662
        offset += len;
663
663
        /* If buffers can't be merged, at this point we
690
690
 
691
691
static int32_t virtio_net_flush_tx(VirtIONet *n, VirtQueue *vq);
692
692
 
693
 
static void virtio_net_tx_complete(VLANClientState *nc, ssize_t len)
 
693
static void virtio_net_tx_complete(NetClientState *nc, ssize_t len)
694
694
{
695
695
    VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
696
696
 
891
891
{
892
892
    VirtIONet *n = opaque;
893
893
    int i;
 
894
    int ret;
894
895
 
895
896
    if (version_id < 2 || version_id > VIRTIO_NET_VM_VERSION)
896
897
        return -EINVAL;
897
898
 
898
 
    virtio_load(&n->vdev, f);
 
899
    ret = virtio_load(&n->vdev, f);
 
900
    if (ret) {
 
901
        return ret;
 
902
    }
899
903
 
900
904
    qemu_get_buffer(f, n->mac, ETH_ALEN);
901
905
    n->tx_waiting = qemu_get_be32(f);
976
980
    return 0;
977
981
}
978
982
 
979
 
static void virtio_net_cleanup(VLANClientState *nc)
 
983
static void virtio_net_cleanup(NetClientState *nc)
980
984
{
981
985
    VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
982
986
 
984
988
}
985
989
 
986
990
static NetClientInfo net_virtio_info = {
987
 
    .type = NET_CLIENT_TYPE_NIC,
 
991
    .type = NET_CLIENT_OPTIONS_KIND_NIC,
988
992
    .size = sizeof(NICState),
989
993
    .can_receive = virtio_net_can_receive,
990
994
    .receive = virtio_net_receive,
1073
1077
        qemu_bh_delete(n->tx_bh);
1074
1078
    }
1075
1079
 
1076
 
    qemu_del_vlan_client(&n->nic->nc);
 
1080
    qemu_del_net_client(&n->nic->nc);
1077
1081
    virtio_cleanup(&n->vdev);
1078
1082
}