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 >