Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-5.2-pull-request...
[qemu/ar7.git] / hw / net / vmxnet3_defs.h
blob65780c576d8411fb4db5b5b11ed705f11c9c4838
1 /*
2 * QEMU VMWARE VMXNET3 paravirtual NIC
4 * Copyright (c) 2012 Ravello Systems LTD (http://ravellosystems.com)
6 * Developed by Daynix Computing LTD (http://www.daynix.com)
8 * Authors:
9 * Dmitry Fleytman <dmitry@daynix.com>
10 * Tamir Shomer <tamirs@daynix.com>
11 * Yan Vugenfirer <yan@daynix.com>
13 * This work is licensed under the terms of the GNU GPL, version 2.
14 * See the COPYING file in the top-level directory.
17 #ifndef HW_NET_VMXNET3_DEFS_H
18 #define HW_NET_VMXNET3_DEFS_H
20 #include "net/net.h"
21 #include "hw/net/vmxnet3.h"
23 #define TYPE_VMXNET3 "vmxnet3"
24 #define VMXNET3(obj) OBJECT_CHECK(VMXNET3State, (obj), TYPE_VMXNET3)
26 /* Device state and helper functions */
27 #define VMXNET3_RX_RINGS_PER_QUEUE (2)
29 /* Cyclic ring abstraction */
30 typedef struct {
31 hwaddr pa;
32 uint32_t size;
33 uint32_t cell_size;
34 uint32_t next;
35 uint8_t gen;
36 } Vmxnet3Ring;
38 typedef struct {
39 Vmxnet3Ring tx_ring;
40 Vmxnet3Ring comp_ring;
42 uint8_t intr_idx;
43 hwaddr tx_stats_pa;
44 struct UPT1_TxStats txq_stats;
45 } Vmxnet3TxqDescr;
47 typedef struct {
48 Vmxnet3Ring rx_ring[VMXNET3_RX_RINGS_PER_QUEUE];
49 Vmxnet3Ring comp_ring;
50 uint8_t intr_idx;
51 hwaddr rx_stats_pa;
52 struct UPT1_RxStats rxq_stats;
53 } Vmxnet3RxqDescr;
55 typedef struct {
56 bool is_masked;
57 bool is_pending;
58 bool is_asserted;
59 } Vmxnet3IntState;
61 typedef struct {
62 PCIDevice parent_obj;
63 NICState *nic;
64 NICConf conf;
65 MemoryRegion bar0;
66 MemoryRegion bar1;
67 MemoryRegion msix_bar;
69 Vmxnet3RxqDescr rxq_descr[VMXNET3_DEVICE_MAX_RX_QUEUES];
70 Vmxnet3TxqDescr txq_descr[VMXNET3_DEVICE_MAX_TX_QUEUES];
72 /* Whether MSI-X support was installed successfully */
73 bool msix_used;
74 hwaddr drv_shmem;
75 hwaddr temp_shared_guest_driver_memory;
77 uint8_t txq_num;
79 /* This boolean tells whether RX packet being indicated has to */
80 /* be split into head and body chunks from different RX rings */
81 bool rx_packets_compound;
83 bool rx_vlan_stripping;
84 bool lro_supported;
86 uint8_t rxq_num;
88 /* Network MTU */
89 uint32_t mtu;
91 /* Maximum number of fragments for indicated TX packets */
92 uint32_t max_tx_frags;
94 /* Maximum number of fragments for indicated RX packets */
95 uint16_t max_rx_frags;
97 /* Index for events interrupt */
98 uint8_t event_int_idx;
100 /* Whether automatic interrupts masking enabled */
101 bool auto_int_masking;
103 bool peer_has_vhdr;
105 /* TX packets to QEMU interface */
106 struct NetTxPkt *tx_pkt;
107 uint32_t offload_mode;
108 uint32_t cso_or_gso_size;
109 uint16_t tci;
110 bool needs_vlan;
112 struct NetRxPkt *rx_pkt;
114 bool tx_sop;
115 bool skip_current_tx_pkt;
117 uint32_t device_active;
118 uint32_t last_command;
120 uint32_t link_status_and_speed;
122 Vmxnet3IntState interrupt_states[VMXNET3_MAX_INTRS];
124 uint32_t temp_mac; /* To store the low part first */
126 MACAddr perm_mac;
127 uint32_t vlan_table[VMXNET3_VFT_SIZE];
128 uint32_t rx_mode;
129 MACAddr *mcast_list;
130 uint32_t mcast_list_len;
131 uint32_t mcast_list_buff_size; /* needed for live migration. */
133 /* Compatibility flags for migration */
134 uint32_t compat_flags;
135 } VMXNET3State;
137 #endif