Re: [Qemu-devel] [PATCH v2 12/22] vmxnet3: Move some definitions to header file

2018-11-12 Thread Dmitry Fleytman
On Thu, Nov 8, 2018 at 6:09 PM Yuval Shaia  wrote:
>
> pvrdma setup requires vmxnet3 device on PCI function 0 and PVRDMA device
> on PCI function 1.
> pvrdma device needs to access vmxnet3 device object for several reasons:
> 1. Make sure PCI function 0 is vmxnet3.
> 2. To monitor vmxnet3 device state.
> 3. To configure node_guid accoring to vmxnet3 device's MAC address.
>
> To be able to access vmxnet3 device the definition of VMXNET3State is
> moved to a new header file.
>
> Signed-off-by: Yuval Shaia 

Reviewed-by: Dmitry Fleytman 

> ---
>  hw/net/vmxnet3.c  | 116 +---
>  hw/net/vmxnet3_defs.h | 133 ++
>  2 files changed, 134 insertions(+), 115 deletions(-)
>  create mode 100644 hw/net/vmxnet3_defs.h
>
> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> index 3648630386..54746a4030 100644
> --- a/hw/net/vmxnet3.c
> +++ b/hw/net/vmxnet3.c
> @@ -18,7 +18,6 @@
>  #include "qemu/osdep.h"
>  #include "hw/hw.h"
>  #include "hw/pci/pci.h"
> -#include "net/net.h"
>  #include "net/tap.h"
>  #include "net/checksum.h"
>  #include "sysemu/sysemu.h"
> @@ -29,6 +28,7 @@
>  #include "migration/register.h"
>
>  #include "vmxnet3.h"
> +#include "vmxnet3_defs.h"
>  #include "vmxnet_debug.h"
>  #include "vmware_utils.h"
>  #include "net_tx_pkt.h"
> @@ -131,23 +131,11 @@ typedef struct VMXNET3Class {
>  DeviceRealize parent_dc_realize;
>  } VMXNET3Class;
>
> -#define TYPE_VMXNET3 "vmxnet3"
> -#define VMXNET3(obj) OBJECT_CHECK(VMXNET3State, (obj), TYPE_VMXNET3)
> -
>  #define VMXNET3_DEVICE_CLASS(klass) \
>  OBJECT_CLASS_CHECK(VMXNET3Class, (klass), TYPE_VMXNET3)
>  #define VMXNET3_DEVICE_GET_CLASS(obj) \
>  OBJECT_GET_CLASS(VMXNET3Class, (obj), TYPE_VMXNET3)
>
> -/* Cyclic ring abstraction */
> -typedef struct {
> -hwaddr pa;
> -uint32_t size;
> -uint32_t cell_size;
> -uint32_t next;
> -uint8_t gen;
> -} Vmxnet3Ring;
> -
>  static inline void vmxnet3_ring_init(PCIDevice *d,
>  Vmxnet3Ring *ring,
>   hwaddr pa,
> @@ -245,108 +233,6 @@ vmxnet3_dump_rx_descr(struct Vmxnet3_RxDesc *descr)
>descr->rsvd, descr->dtype, descr->ext1, descr->btype);
>  }
>
> -/* Device state and helper functions */
> -#define VMXNET3_RX_RINGS_PER_QUEUE (2)
> -
> -typedef struct {
> -Vmxnet3Ring tx_ring;
> -Vmxnet3Ring comp_ring;
> -
> -uint8_t intr_idx;
> -hwaddr tx_stats_pa;
> -struct UPT1_TxStats txq_stats;
> -} Vmxnet3TxqDescr;
> -
> -typedef struct {
> -Vmxnet3Ring rx_ring[VMXNET3_RX_RINGS_PER_QUEUE];
> -Vmxnet3Ring comp_ring;
> -uint8_t intr_idx;
> -hwaddr rx_stats_pa;
> -struct UPT1_RxStats rxq_stats;
> -} Vmxnet3RxqDescr;
> -
> -typedef struct {
> -bool is_masked;
> -bool is_pending;
> -bool is_asserted;
> -} Vmxnet3IntState;
> -
> -typedef struct {
> -PCIDevice parent_obj;
> -NICState *nic;
> -NICConf conf;
> -MemoryRegion bar0;
> -MemoryRegion bar1;
> -MemoryRegion msix_bar;
> -
> -Vmxnet3RxqDescr rxq_descr[VMXNET3_DEVICE_MAX_RX_QUEUES];
> -Vmxnet3TxqDescr txq_descr[VMXNET3_DEVICE_MAX_TX_QUEUES];
> -
> -/* Whether MSI-X support was installed successfully */
> -bool msix_used;
> -hwaddr drv_shmem;
> -hwaddr temp_shared_guest_driver_memory;
> -
> -uint8_t txq_num;
> -
> -/* This boolean tells whether RX packet being indicated has to */
> -/* be split into head and body chunks from different RX rings  */
> -bool rx_packets_compound;
> -
> -bool rx_vlan_stripping;
> -bool lro_supported;
> -
> -uint8_t rxq_num;
> -
> -/* Network MTU */
> -uint32_t mtu;
> -
> -/* Maximum number of fragments for indicated TX packets */
> -uint32_t max_tx_frags;
> -
> -/* Maximum number of fragments for indicated RX packets */
> -uint16_t max_rx_frags;
> -
> -/* Index for events interrupt */
> -uint8_t event_int_idx;
> -
> -/* Whether automatic interrupts masking enabled */
> -bool auto_int_masking;
> -
> -bool peer_has_vhdr;
> -
> -/* TX packets to QEMU interface */
> -struct NetTxPkt *tx_pkt;
> -uint32_t offload_mode;
> -uint32_t cso_or_gso_size;
> -uint16_t tci;
> -bool needs_vlan;
> -
> -struct NetRxPkt *rx_pkt;
> -
> -bool tx_sop;
> -bool skip_current_tx_pkt;
> -
> -uint32_t device_active;
> -uint32_t last_command;
> -
> -uint32_t link_status_and_speed;
> -
> -Vmxnet3IntState interrupt_states[VMXNET3_MAX_INTRS];
> -
> -uint32_t temp_mac;   /* To store the low part first */
> -
> -MACAddr perm_mac;
> -uint32_t vlan_table[VMXNET3_VFT_SIZE];
> -uint32_t rx_mode;
> -MACAddr *mcast_list;
> -uint32_t mcast_list_len;
> -uint32_t 

[Qemu-devel] [PATCH v2 12/22] vmxnet3: Move some definitions to header file

2018-11-08 Thread Yuval Shaia
pvrdma setup requires vmxnet3 device on PCI function 0 and PVRDMA device
on PCI function 1.
pvrdma device needs to access vmxnet3 device object for several reasons:
1. Make sure PCI function 0 is vmxnet3.
2. To monitor vmxnet3 device state.
3. To configure node_guid accoring to vmxnet3 device's MAC address.

To be able to access vmxnet3 device the definition of VMXNET3State is
moved to a new header file.

Signed-off-by: Yuval Shaia 
---
 hw/net/vmxnet3.c  | 116 +---
 hw/net/vmxnet3_defs.h | 133 ++
 2 files changed, 134 insertions(+), 115 deletions(-)
 create mode 100644 hw/net/vmxnet3_defs.h

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 3648630386..54746a4030 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -18,7 +18,6 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/pci/pci.h"
-#include "net/net.h"
 #include "net/tap.h"
 #include "net/checksum.h"
 #include "sysemu/sysemu.h"
@@ -29,6 +28,7 @@
 #include "migration/register.h"
 
 #include "vmxnet3.h"
+#include "vmxnet3_defs.h"
 #include "vmxnet_debug.h"
 #include "vmware_utils.h"
 #include "net_tx_pkt.h"
@@ -131,23 +131,11 @@ typedef struct VMXNET3Class {
 DeviceRealize parent_dc_realize;
 } VMXNET3Class;
 
-#define TYPE_VMXNET3 "vmxnet3"
-#define VMXNET3(obj) OBJECT_CHECK(VMXNET3State, (obj), TYPE_VMXNET3)
-
 #define VMXNET3_DEVICE_CLASS(klass) \
 OBJECT_CLASS_CHECK(VMXNET3Class, (klass), TYPE_VMXNET3)
 #define VMXNET3_DEVICE_GET_CLASS(obj) \
 OBJECT_GET_CLASS(VMXNET3Class, (obj), TYPE_VMXNET3)
 
-/* Cyclic ring abstraction */
-typedef struct {
-hwaddr pa;
-uint32_t size;
-uint32_t cell_size;
-uint32_t next;
-uint8_t gen;
-} Vmxnet3Ring;
-
 static inline void vmxnet3_ring_init(PCIDevice *d,
 Vmxnet3Ring *ring,
  hwaddr pa,
@@ -245,108 +233,6 @@ vmxnet3_dump_rx_descr(struct Vmxnet3_RxDesc *descr)
   descr->rsvd, descr->dtype, descr->ext1, descr->btype);
 }
 
-/* Device state and helper functions */
-#define VMXNET3_RX_RINGS_PER_QUEUE (2)
-
-typedef struct {
-Vmxnet3Ring tx_ring;
-Vmxnet3Ring comp_ring;
-
-uint8_t intr_idx;
-hwaddr tx_stats_pa;
-struct UPT1_TxStats txq_stats;
-} Vmxnet3TxqDescr;
-
-typedef struct {
-Vmxnet3Ring rx_ring[VMXNET3_RX_RINGS_PER_QUEUE];
-Vmxnet3Ring comp_ring;
-uint8_t intr_idx;
-hwaddr rx_stats_pa;
-struct UPT1_RxStats rxq_stats;
-} Vmxnet3RxqDescr;
-
-typedef struct {
-bool is_masked;
-bool is_pending;
-bool is_asserted;
-} Vmxnet3IntState;
-
-typedef struct {
-PCIDevice parent_obj;
-NICState *nic;
-NICConf conf;
-MemoryRegion bar0;
-MemoryRegion bar1;
-MemoryRegion msix_bar;
-
-Vmxnet3RxqDescr rxq_descr[VMXNET3_DEVICE_MAX_RX_QUEUES];
-Vmxnet3TxqDescr txq_descr[VMXNET3_DEVICE_MAX_TX_QUEUES];
-
-/* Whether MSI-X support was installed successfully */
-bool msix_used;
-hwaddr drv_shmem;
-hwaddr temp_shared_guest_driver_memory;
-
-uint8_t txq_num;
-
-/* This boolean tells whether RX packet being indicated has to */
-/* be split into head and body chunks from different RX rings  */
-bool rx_packets_compound;
-
-bool rx_vlan_stripping;
-bool lro_supported;
-
-uint8_t rxq_num;
-
-/* Network MTU */
-uint32_t mtu;
-
-/* Maximum number of fragments for indicated TX packets */
-uint32_t max_tx_frags;
-
-/* Maximum number of fragments for indicated RX packets */
-uint16_t max_rx_frags;
-
-/* Index for events interrupt */
-uint8_t event_int_idx;
-
-/* Whether automatic interrupts masking enabled */
-bool auto_int_masking;
-
-bool peer_has_vhdr;
-
-/* TX packets to QEMU interface */
-struct NetTxPkt *tx_pkt;
-uint32_t offload_mode;
-uint32_t cso_or_gso_size;
-uint16_t tci;
-bool needs_vlan;
-
-struct NetRxPkt *rx_pkt;
-
-bool tx_sop;
-bool skip_current_tx_pkt;
-
-uint32_t device_active;
-uint32_t last_command;
-
-uint32_t link_status_and_speed;
-
-Vmxnet3IntState interrupt_states[VMXNET3_MAX_INTRS];
-
-uint32_t temp_mac;   /* To store the low part first */
-
-MACAddr perm_mac;
-uint32_t vlan_table[VMXNET3_VFT_SIZE];
-uint32_t rx_mode;
-MACAddr *mcast_list;
-uint32_t mcast_list_len;
-uint32_t mcast_list_buff_size; /* needed for live migration. */
-
-/* Compatibility flags for migration */
-uint32_t compat_flags;
-} VMXNET3State;
-
 /* Interrupt management */
 
 /*
diff --git a/hw/net/vmxnet3_defs.h b/hw/net/vmxnet3_defs.h
new file mode 100644
index 00..6c19d29b12
--- /dev/null
+++ b/hw/net/vmxnet3_defs.h
@@ -0,0 +1,133 @@
+/*
+ * QEMU VMWARE VMXNET3