From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54601) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UDaPs-0001C9-Jc for qemu-devel@nongnu.org; Thu, 07 Mar 2013 07:59:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UDaPq-0004Lt-ET for qemu-devel@nongnu.org; Thu, 07 Mar 2013 07:59:24 -0500 Received: from cantor2.suse.de ([195.135.220.15]:34036 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UDaPq-0004LF-1x for qemu-devel@nongnu.org; Thu, 07 Mar 2013 07:59:22 -0500 Message-ID: <51388F27.7000201@suse.de> Date: Thu, 07 Mar 2013 13:59:19 +0100 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1362554502-15248-1-git-send-email-dmitry@daynix.com> <1362554502-15248-6-git-send-email-dmitry@daynix.com> In-Reply-To: <1362554502-15248-6-git-send-email-dmitry@daynix.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v13 5/5] VMXNET3 device implementation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dmitry Fleytman Cc: Stefan Hajnoczi , qemu-devel@nongnu.org, Yan Vugenfirer , Anthony Liguori , Gerhard Wiesinger , Paolo Bonzini Am 06.03.2013 08:21, schrieb Dmitry Fleytman: > Signed-off-by: Dmitry Fleytman > Signed-off-by: Yan Vugenfirer > --- > 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 >=20 > 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=3Dy > CONFIG_MEGASAS_SCSI_PCI=3Dy > CONFIG_RTL8139_PCI=3Dy > CONFIG_E1000_PCI=3Dy > +CONFIG_VMXNET3_PCI=3Dy > CONFIG_IDE_CORE=3Dy > CONFIG_IDE_QDEV=3Dy > CONFIG_IDE_PCI=3Dy > 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) +=3D pcnet.o > common-obj-$(CONFIG_E1000_PCI) +=3D e1000.o > common-obj-$(CONFIG_RTL8139_PCI) +=3D rtl8139.o > common-obj-$(CONFIG_VMXNET3_PCI) +=3D vmxnet_tx_pkt.o vmxnet_rx_pkt.o > +common-obj-$(CONFIG_VMXNET3_PCI) +=3D vmxnet3.o > =20 > common-obj-$(CONFIG_SMC91C111) +=3D smc91c111.o > common-obj-$(CONFIG_LAN9118) +=3D 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 > =20 > /* 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 > + * Tamir Shomer > + * Yan Vugenfirer > + * > + * 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, v= alue))) > + > +#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)) =3D=3D (fl= ag)) > + > +#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 =3D { > + .name =3D "vmxnet3", .name =3D TYPE_VMXNET3, > + .parent =3D TYPE_PCI_DEVICE, > + .instance_size =3D sizeof(VMXNET3State), > + .class_init =3D vmxnet3_class_init, > +}; [snip] Cf. include/qom/object.h Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg