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