Thanks, Andreas

Now I see.
We'll resubmit our patches soon.

Dmitry.


On Thu, Mar 7, 2013 at 2:59 PM, Andreas Färber <afaer...@suse.de> wrote:

> Am 06.03.2013 08:21, schrieb Dmitry Fleytman:
> > Signed-off-by: Dmitry Fleytman <dmi...@daynix.com>
> > Signed-off-by: Yan Vugenfirer <y...@daynix.com>
> > ---
> >  default-configs/pci.mak |    1 +
> >  hw/Makefile.objs        |    1 +
> >  hw/pci/pci.h            |    1 +
> >  hw/vmxnet3.c            | 2460
> +++++++++++++++++++++++++++++++++++++++++++++++
> >  hw/vmxnet3.h            |  760 +++++++++++++++
> >  5 files changed, 3223 insertions(+)
> >  create mode 100644 hw/vmxnet3.c
> >  create mode 100644 hw/vmxnet3.h
> >
> > diff --git a/default-configs/pci.mak b/default-configs/pci.mak
> > index ee2d18d..ce56d58 100644
> > --- a/default-configs/pci.mak
> > +++ b/default-configs/pci.mak
> > @@ -13,6 +13,7 @@ CONFIG_LSI_SCSI_PCI=y
> >  CONFIG_MEGASAS_SCSI_PCI=y
> >  CONFIG_RTL8139_PCI=y
> >  CONFIG_E1000_PCI=y
> > +CONFIG_VMXNET3_PCI=y
> >  CONFIG_IDE_CORE=y
> >  CONFIG_IDE_QDEV=y
> >  CONFIG_IDE_PCI=y
> > diff --git a/hw/Makefile.objs b/hw/Makefile.objs
> > index 14922cb..026aff6 100644
> > --- a/hw/Makefile.objs
> > +++ b/hw/Makefile.objs
> > @@ -120,6 +120,7 @@ common-obj-$(CONFIG_PCNET_COMMON) += pcnet.o
> >  common-obj-$(CONFIG_E1000_PCI) += e1000.o
> >  common-obj-$(CONFIG_RTL8139_PCI) += rtl8139.o
> >  common-obj-$(CONFIG_VMXNET3_PCI) += vmxnet_tx_pkt.o vmxnet_rx_pkt.o
> > +common-obj-$(CONFIG_VMXNET3_PCI) += vmxnet3.o
> >
> >  common-obj-$(CONFIG_SMC91C111) += smc91c111.o
> >  common-obj-$(CONFIG_LAN9118) += lan9118.o
> > diff --git a/hw/pci/pci.h b/hw/pci/pci.h
> > index f340fe5..3beb70b 100644
> > --- a/hw/pci/pci.h
> > +++ b/hw/pci/pci.h
> > @@ -60,6 +60,7 @@
> >  #define PCI_DEVICE_ID_VMWARE_NET         0x0720
> >  #define PCI_DEVICE_ID_VMWARE_SCSI        0x0730
> >  #define PCI_DEVICE_ID_VMWARE_IDE         0x1729
> > +#define PCI_DEVICE_ID_VMWARE_VMXNET3     0x07B0
> >
> >  /* Intel (0x8086) */
> >  #define PCI_DEVICE_ID_INTEL_82551IT      0x1209
> > diff --git a/hw/vmxnet3.c b/hw/vmxnet3.c
> > new file mode 100644
> > index 0000000..75b7181
> > --- /dev/null
> > +++ b/hw/vmxnet3.c
> > @@ -0,0 +1,2460 @@
> > +/*
> > + * QEMU VMWARE VMXNET3 paravirtual NIC
> > + *
> > + * Copyright (c) 2012 Ravello Systems LTD (http://ravellosystems.com)
> > + *
> > + * Developed by Daynix Computing LTD (http://www.daynix.com)
> > + *
> > + * Authors:
> > + * Dmitry Fleytman <dmi...@daynix.com>
> > + * Tamir Shomer <tam...@daynix.com>
> > + * Yan Vugenfirer <y...@daynix.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or
> later.
> > + * See the COPYING file in the top-level directory.
> > + *
> > + */
> > +
> > +#include "hw.h"
> > +#include "pci/pci.h"
> > +#include "net/net.h"
> > +#include "virtio-net.h"
> > +#include "net/tap.h"
> > +#include "net/checksum.h"
> > +#include "sysemu/sysemu.h"
> > +#include "qemu-common.h"
> > +#include "qemu/bswap.h"
> > +#include "pci/msix.h"
> > +#include "pci/msi.h"
> > +
> > +#include "vmxnet3.h"
> > +#include "vmxnet_debug.h"
> > +#include "vmware_utils.h"
> > +#include "vmxnet_tx_pkt.h"
> > +#include "vmxnet_rx_pkt.h"
> > +
> > +#define PCI_DEVICE_ID_VMWARE_VMXNET3_REVISION 0x1
> > +#define VMXNET3_MSIX_BAR_SIZE 0x2000
> > +
> > +#define VMXNET3_BAR0_IDX      (0)
> > +#define VMXNET3_BAR1_IDX      (1)
> > +#define VMXNET3_MSIX_BAR_IDX  (2)
> > +
> > +#define VMXNET3_OFF_MSIX_TABLE (0x000)
> > +#define VMXNET3_OFF_MSIX_PBA   (0x800)
> > +
> > +/* Link speed in Mbps should be shifted by 16 */
> > +#define VMXNET3_LINK_SPEED      (1000 << 16)
> > +
> > +/* Link status: 1 - up, 0 - down. */
> > +#define VMXNET3_LINK_STATUS_UP  0x1
> > +
> > +/* Least significant bit should be set for revision and version */
> > +#define VMXNET3_DEVICE_VERSION    0x1
> > +#define VMXNET3_DEVICE_REVISION   0x1
> > +
> > +/* Macros for rings descriptors access */
> > +#define VMXNET3_READ_TX_QUEUE_DESCR8(dpa, field) \
> > +    (vmw_shmem_ld8(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field)))
> > +
> > +#define VMXNET3_WRITE_TX_QUEUE_DESCR8(dpa, field, value) \
> > +    (vmw_shmem_st8(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field,
> value)))
> > +
> > +#define VMXNET3_READ_TX_QUEUE_DESCR32(dpa, field) \
> > +    (vmw_shmem_ld32(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field)))
> > +
> > +#define VMXNET3_WRITE_TX_QUEUE_DESCR32(dpa, field, value) \
> > +    (vmw_shmem_st32(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field),
> value))
> > +
> > +#define VMXNET3_READ_TX_QUEUE_DESCR64(dpa, field) \
> > +    (vmw_shmem_ld64(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field)))
> > +
> > +#define VMXNET3_WRITE_TX_QUEUE_DESCR64(dpa, field, value) \
> > +    (vmw_shmem_st64(dpa + offsetof(struct Vmxnet3_TxQueueDesc, field),
> value))
> > +
> > +#define VMXNET3_READ_RX_QUEUE_DESCR64(dpa, field) \
> > +    (vmw_shmem_ld64(dpa + offsetof(struct Vmxnet3_RxQueueDesc, field)))
> > +
> > +#define VMXNET3_READ_RX_QUEUE_DESCR32(dpa, field) \
> > +    (vmw_shmem_ld32(dpa + offsetof(struct Vmxnet3_RxQueueDesc, field)))
> > +
> > +#define VMXNET3_WRITE_RX_QUEUE_DESCR64(dpa, field, value) \
> > +    (vmw_shmem_st64(dpa + offsetof(struct Vmxnet3_RxQueueDesc, field),
> value))
> > +
> > +#define VMXNET3_WRITE_RX_QUEUE_DESCR8(dpa, field, value) \
> > +    (vmw_shmem_st8(dpa + offsetof(struct Vmxnet3_RxQueueDesc, field),
> value))
> > +
> > +/* Macros for guest driver shared area access */
> > +#define VMXNET3_READ_DRV_SHARED64(shpa, field) \
> > +    (vmw_shmem_ld64(shpa + offsetof(struct Vmxnet3_DriverShared,
> field)))
> > +
> > +#define VMXNET3_READ_DRV_SHARED32(shpa, field) \
> > +    (vmw_shmem_ld32(shpa + offsetof(struct Vmxnet3_DriverShared,
> field)))
> > +
> > +#define VMXNET3_WRITE_DRV_SHARED32(shpa, field, val) \
> > +    (vmw_shmem_st32(shpa + offsetof(struct Vmxnet3_DriverShared,
> field), val))
> > +
> > +#define VMXNET3_READ_DRV_SHARED16(shpa, field) \
> > +    (vmw_shmem_ld16(shpa + offsetof(struct Vmxnet3_DriverShared,
> field)))
> > +
> > +#define VMXNET3_READ_DRV_SHARED8(shpa, field) \
> > +    (vmw_shmem_ld8(shpa + offsetof(struct Vmxnet3_DriverShared, field)))
> > +
> > +#define VMXNET3_READ_DRV_SHARED(shpa, field, b, l) \
> > +    (vmw_shmem_read(shpa + offsetof(struct Vmxnet3_DriverShared,
> field), b, l))
> > +
> > +#define VMXNET_FLAG_IS_SET(field, flag) (((field) & (flag)) == (flag))
> > +
> > +#define VMXNET3(pci_dev) container_of((pci_dev), VMXNET3State,
> parent_obj)
>
> This still accessing parent_obj field and wrongly makes type assumptions
> about the argument. It should be:
>
> #define TYPE_VMXNET3 "vmxnet3"
> #define VMXNET3(obj) OBJECT_CHECK(VMXNET3State, (obj), TYPE_VMXNET3)
>
> [...]
> > +static const TypeInfo vmxnet3_info = {
> > +    .name          = "vmxnet3",
>
> .name = TYPE_VMXNET3,
>
> > +    .parent        = TYPE_PCI_DEVICE,
> > +    .instance_size = sizeof(VMXNET3State),
> > +    .class_init    = vmxnet3_class_init,
> > +};
> [snip]
>
> Cf. include/qom/object.h
>
> Andreas
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
>

Reply via email to