aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/vmxnet3/vmxnet3_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/vmxnet3/vmxnet3_int.h')
-rw-r--r--drivers/net/vmxnet3/vmxnet3_int.h102
1 files changed, 64 insertions, 38 deletions
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 2121c735cabd..e08d75e3f170 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -55,6 +55,7 @@
55#include <linux/if_vlan.h> 55#include <linux/if_vlan.h>
56#include <linux/if_arp.h> 56#include <linux/if_arp.h>
57#include <linux/inetdevice.h> 57#include <linux/inetdevice.h>
58#include <linux/log2.h>
58 59
59#include "vmxnet3_defs.h" 60#include "vmxnet3_defs.h"
60 61
@@ -68,11 +69,15 @@
68/* 69/*
69 * Version numbers 70 * Version numbers
70 */ 71 */
71#define VMXNET3_DRIVER_VERSION_STRING "1.0.14.0-k" 72#define VMXNET3_DRIVER_VERSION_STRING "1.1.18.0-k"
72 73
73/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ 74/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
74#define VMXNET3_DRIVER_VERSION_NUM 0x01000E00 75#define VMXNET3_DRIVER_VERSION_NUM 0x01011200
75 76
77#if defined(CONFIG_PCI_MSI)
78 /* RSS only makes sense if MSI-X is supported. */
79 #define VMXNET3_RSS
80#endif
76 81
77/* 82/*
78 * Capabilities 83 * Capabilities
@@ -218,16 +223,19 @@ struct vmxnet3_tx_ctx {
218}; 223};
219 224
220struct vmxnet3_tx_queue { 225struct vmxnet3_tx_queue {
226 char name[IFNAMSIZ+8]; /* To identify interrupt */
227 struct vmxnet3_adapter *adapter;
221 spinlock_t tx_lock; 228 spinlock_t tx_lock;
222 struct vmxnet3_cmd_ring tx_ring; 229 struct vmxnet3_cmd_ring tx_ring;
223 struct vmxnet3_tx_buf_info *buf_info; 230 struct vmxnet3_tx_buf_info *buf_info;
224 struct vmxnet3_tx_data_ring data_ring; 231 struct vmxnet3_tx_data_ring data_ring;
225 struct vmxnet3_comp_ring comp_ring; 232 struct vmxnet3_comp_ring comp_ring;
226 struct Vmxnet3_TxQueueCtrl *shared; 233 struct Vmxnet3_TxQueueCtrl *shared;
227 struct vmxnet3_tq_driver_stats stats; 234 struct vmxnet3_tq_driver_stats stats;
228 bool stopped; 235 bool stopped;
229 int num_stop; /* # of times the queue is 236 int num_stop; /* # of times the queue is
230 * stopped */ 237 * stopped */
238 int qid;
231} __attribute__((__aligned__(SMP_CACHE_BYTES))); 239} __attribute__((__aligned__(SMP_CACHE_BYTES)));
232 240
233enum vmxnet3_rx_buf_type { 241enum vmxnet3_rx_buf_type {
@@ -259,6 +267,9 @@ struct vmxnet3_rq_driver_stats {
259}; 267};
260 268
261struct vmxnet3_rx_queue { 269struct vmxnet3_rx_queue {
270 char name[IFNAMSIZ + 8]; /* To identify interrupt */
271 struct vmxnet3_adapter *adapter;
272 struct napi_struct napi;
262 struct vmxnet3_cmd_ring rx_ring[2]; 273 struct vmxnet3_cmd_ring rx_ring[2];
263 struct vmxnet3_comp_ring comp_ring; 274 struct vmxnet3_comp_ring comp_ring;
264 struct vmxnet3_rx_ctx rx_ctx; 275 struct vmxnet3_rx_ctx rx_ctx;
@@ -271,7 +282,16 @@ struct vmxnet3_rx_queue {
271 struct vmxnet3_rq_driver_stats stats; 282 struct vmxnet3_rq_driver_stats stats;
272} __attribute__((__aligned__(SMP_CACHE_BYTES))); 283} __attribute__((__aligned__(SMP_CACHE_BYTES)));
273 284
274#define VMXNET3_LINUX_MAX_MSIX_VECT 1 285#define VMXNET3_DEVICE_MAX_TX_QUEUES 8
286#define VMXNET3_DEVICE_MAX_RX_QUEUES 8 /* Keep this value as a power of 2 */
287
288/* Should be less than UPT1_RSS_MAX_IND_TABLE_SIZE */
289#define VMXNET3_RSS_IND_TABLE_SIZE (VMXNET3_DEVICE_MAX_RX_QUEUES * 4)
290
291#define VMXNET3_LINUX_MAX_MSIX_VECT (VMXNET3_DEVICE_MAX_TX_QUEUES + \
292 VMXNET3_DEVICE_MAX_RX_QUEUES + 1)
293#define VMXNET3_LINUX_MIN_MSIX_VECT 2 /* 1 for tx-rx pair and 1 for event */
294
275 295
276struct vmxnet3_intr { 296struct vmxnet3_intr {
277 enum vmxnet3_intr_mask_mode mask_mode; 297 enum vmxnet3_intr_mask_mode mask_mode;
@@ -279,35 +299,43 @@ struct vmxnet3_intr {
279 u8 num_intrs; /* # of intr vectors */ 299 u8 num_intrs; /* # of intr vectors */
280 u8 event_intr_idx; /* idx of the intr vector for event */ 300 u8 event_intr_idx; /* idx of the intr vector for event */
281 u8 mod_levels[VMXNET3_LINUX_MAX_MSIX_VECT]; /* moderation level */ 301 u8 mod_levels[VMXNET3_LINUX_MAX_MSIX_VECT]; /* moderation level */
302 char event_msi_vector_name[IFNAMSIZ+11];
282#ifdef CONFIG_PCI_MSI 303#ifdef CONFIG_PCI_MSI
283 struct msix_entry msix_entries[VMXNET3_LINUX_MAX_MSIX_VECT]; 304 struct msix_entry msix_entries[VMXNET3_LINUX_MAX_MSIX_VECT];
284#endif 305#endif
285}; 306};
286 307
308/* Interrupt sharing schemes, share_intr */
309#define VMXNET3_INTR_BUDDYSHARE 0 /* Corresponding tx,rx queues share irq */
310#define VMXNET3_INTR_TXSHARE 1 /* All tx queues share one irq */
311#define VMXNET3_INTR_DONTSHARE 2 /* each queue has its own irq */
312
313
287#define VMXNET3_STATE_BIT_RESETTING 0 314#define VMXNET3_STATE_BIT_RESETTING 0
288#define VMXNET3_STATE_BIT_QUIESCED 1 315#define VMXNET3_STATE_BIT_QUIESCED 1
289struct vmxnet3_adapter { 316struct vmxnet3_adapter {
290 struct vmxnet3_tx_queue tx_queue; 317 struct vmxnet3_tx_queue tx_queue[VMXNET3_DEVICE_MAX_TX_QUEUES];
291 struct vmxnet3_rx_queue rx_queue; 318 struct vmxnet3_rx_queue rx_queue[VMXNET3_DEVICE_MAX_RX_QUEUES];
292 struct napi_struct napi; 319 struct vlan_group *vlan_grp;
293 struct vlan_group *vlan_grp; 320 struct vmxnet3_intr intr;
294 321 spinlock_t cmd_lock;
295 struct vmxnet3_intr intr; 322 struct Vmxnet3_DriverShared *shared;
296 323 struct Vmxnet3_PMConf *pm_conf;
297 struct Vmxnet3_DriverShared *shared; 324 struct Vmxnet3_TxQueueDesc *tqd_start; /* all tx queue desc */
298 struct Vmxnet3_PMConf *pm_conf; 325 struct Vmxnet3_RxQueueDesc *rqd_start; /* all rx queue desc */
299 struct Vmxnet3_TxQueueDesc *tqd_start; /* first tx queue desc */ 326 struct net_device *netdev;
300 struct Vmxnet3_RxQueueDesc *rqd_start; /* first rx queue desc */ 327 struct net_device_stats net_stats;
301 struct net_device *netdev; 328 struct pci_dev *pdev;
302 struct pci_dev *pdev; 329
303 330 u8 __iomem *hw_addr0; /* for BAR 0 */
304 u8 *hw_addr0; /* for BAR 0 */ 331 u8 __iomem *hw_addr1; /* for BAR 1 */
305 u8 *hw_addr1; /* for BAR 1 */ 332
306 333#ifdef VMXNET3_RSS
307 /* feature control */ 334 struct UPT1_RSSConf *rss_conf;
308 bool rxcsum; 335 bool rss;
309 bool lro; 336#endif
310 bool jumbo_frame; 337 u32 num_rx_queues;
338 u32 num_tx_queues;
311 339
312 /* rx buffer related */ 340 /* rx buffer related */
313 unsigned skb_buf_size; 341 unsigned skb_buf_size;
@@ -327,17 +355,18 @@ struct vmxnet3_adapter {
327 unsigned long state; /* VMXNET3_STATE_BIT_xxx */ 355 unsigned long state; /* VMXNET3_STATE_BIT_xxx */
328 356
329 int dev_number; 357 int dev_number;
358 int share_intr;
330}; 359};
331 360
332#define VMXNET3_WRITE_BAR0_REG(adapter, reg, val) \ 361#define VMXNET3_WRITE_BAR0_REG(adapter, reg, val) \
333 writel(cpu_to_le32(val), (adapter)->hw_addr0 + (reg)) 362 writel((val), (adapter)->hw_addr0 + (reg))
334#define VMXNET3_READ_BAR0_REG(adapter, reg) \ 363#define VMXNET3_READ_BAR0_REG(adapter, reg) \
335 le32_to_cpu(readl((adapter)->hw_addr0 + (reg))) 364 readl((adapter)->hw_addr0 + (reg))
336 365
337#define VMXNET3_WRITE_BAR1_REG(adapter, reg, val) \ 366#define VMXNET3_WRITE_BAR1_REG(adapter, reg, val) \
338 writel(cpu_to_le32(val), (adapter)->hw_addr1 + (reg)) 367 writel((val), (adapter)->hw_addr1 + (reg))
339#define VMXNET3_READ_BAR1_REG(adapter, reg) \ 368#define VMXNET3_READ_BAR1_REG(adapter, reg) \
340 le32_to_cpu(readl((adapter)->hw_addr1 + (reg))) 369 readl((adapter)->hw_addr1 + (reg))
341 370
342#define VMXNET3_WAKE_QUEUE_THRESHOLD(tq) (5) 371#define VMXNET3_WAKE_QUEUE_THRESHOLD(tq) (5)
343#define VMXNET3_RX_ALLOC_THRESHOLD(rq, ring_idx, adapter) \ 372#define VMXNET3_RX_ALLOC_THRESHOLD(rq, ring_idx, adapter) \
@@ -353,10 +382,6 @@ struct vmxnet3_adapter {
353#define VMXNET3_MAX_ETH_HDR_SIZE 22 382#define VMXNET3_MAX_ETH_HDR_SIZE 22
354#define VMXNET3_MAX_SKB_BUF_SIZE (3*1024) 383#define VMXNET3_MAX_SKB_BUF_SIZE (3*1024)
355 384
356void set_flag_le16(__le16 *data, u16 flag);
357void set_flag_le64(__le64 *data, u64 flag);
358void reset_flag_le64(__le64 *data, u64 flag);
359
360int 385int
361vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter); 386vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter);
362 387
@@ -370,12 +395,13 @@ void
370vmxnet3_reset_dev(struct vmxnet3_adapter *adapter); 395vmxnet3_reset_dev(struct vmxnet3_adapter *adapter);
371 396
372void 397void
373vmxnet3_tq_destroy(struct vmxnet3_tx_queue *tq, 398vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter);
374 struct vmxnet3_adapter *adapter);
375 399
376void 400void
377vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq, 401vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter);
378 struct vmxnet3_adapter *adapter); 402
403int
404vmxnet3_set_features(struct net_device *netdev, u32 features);
379 405
380int 406int
381vmxnet3_create_queues(struct vmxnet3_adapter *adapter, 407vmxnet3_create_queues(struct vmxnet3_adapter *adapter,