2 * Copyright 2008 Cisco Systems, Inc. All rights reserved.
3 * Copyright 2007 Nuova Systems, Inc. All rights reserved.
5 * This program is free software; you may redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
9 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
10 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
12 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
13 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
14 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 #include <linux/module.h>
21 #include <linux/kernel.h>
22 #include <linux/string.h>
23 #include <linux/errno.h>
24 #include <linux/types.h>
25 #include <linux/init.h>
26 #include <linux/workqueue.h>
27 #include <linux/pci.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/if_ether.h>
31 #include <linux/if_vlan.h>
32 #include <linux/ethtool.h>
35 #include <linux/ipv6.h>
36 #include <linux/tcp.h>
37 #include <net/ip6_checksum.h>
39 #include "cq_enet_desc.h"
41 #include "vnic_intr.h"
42 #include "vnic_stats.h"
46 #define ENIC_NOTIFY_TIMER_PERIOD (2 * HZ)
48 /* Supported devices */
49 static struct pci_device_id enic_id_table
[] = {
50 { PCI_VDEVICE(CISCO
, 0x0043) },
51 { 0, } /* end of table */
54 MODULE_DESCRIPTION(DRV_DESCRIPTION
);
55 MODULE_AUTHOR("Scott Feldman <scofeldm@cisco.com>");
56 MODULE_LICENSE("GPL");
57 MODULE_VERSION(DRV_VERSION
);
58 MODULE_DEVICE_TABLE(pci
, enic_id_table
);
61 char name
[ETH_GSTRING_LEN
];
65 #define ENIC_TX_STAT(stat) \
66 { .name = #stat, .offset = offsetof(struct vnic_tx_stats, stat) / 8 }
67 #define ENIC_RX_STAT(stat) \
68 { .name = #stat, .offset = offsetof(struct vnic_rx_stats, stat) / 8 }
70 static const struct enic_stat enic_tx_stats
[] = {
71 ENIC_TX_STAT(tx_frames_ok
),
72 ENIC_TX_STAT(tx_unicast_frames_ok
),
73 ENIC_TX_STAT(tx_multicast_frames_ok
),
74 ENIC_TX_STAT(tx_broadcast_frames_ok
),
75 ENIC_TX_STAT(tx_bytes_ok
),
76 ENIC_TX_STAT(tx_unicast_bytes_ok
),
77 ENIC_TX_STAT(tx_multicast_bytes_ok
),
78 ENIC_TX_STAT(tx_broadcast_bytes_ok
),
79 ENIC_TX_STAT(tx_drops
),
80 ENIC_TX_STAT(tx_errors
),
84 static const struct enic_stat enic_rx_stats
[] = {
85 ENIC_RX_STAT(rx_frames_ok
),
86 ENIC_RX_STAT(rx_frames_total
),
87 ENIC_RX_STAT(rx_unicast_frames_ok
),
88 ENIC_RX_STAT(rx_multicast_frames_ok
),
89 ENIC_RX_STAT(rx_broadcast_frames_ok
),
90 ENIC_RX_STAT(rx_bytes_ok
),
91 ENIC_RX_STAT(rx_unicast_bytes_ok
),
92 ENIC_RX_STAT(rx_multicast_bytes_ok
),
93 ENIC_RX_STAT(rx_broadcast_bytes_ok
),
94 ENIC_RX_STAT(rx_drop
),
95 ENIC_RX_STAT(rx_no_bufs
),
96 ENIC_RX_STAT(rx_errors
),
98 ENIC_RX_STAT(rx_crc_errors
),
99 ENIC_RX_STAT(rx_frames_64
),
100 ENIC_RX_STAT(rx_frames_127
),
101 ENIC_RX_STAT(rx_frames_255
),
102 ENIC_RX_STAT(rx_frames_511
),
103 ENIC_RX_STAT(rx_frames_1023
),
104 ENIC_RX_STAT(rx_frames_1518
),
105 ENIC_RX_STAT(rx_frames_to_max
),
108 static const unsigned int enic_n_tx_stats
= ARRAY_SIZE(enic_tx_stats
);
109 static const unsigned int enic_n_rx_stats
= ARRAY_SIZE(enic_rx_stats
);
111 static int enic_get_settings(struct net_device
*netdev
,
112 struct ethtool_cmd
*ecmd
)
114 struct enic
*enic
= netdev_priv(netdev
);
116 ecmd
->supported
= (SUPPORTED_10000baseT_Full
| SUPPORTED_FIBRE
);
117 ecmd
->advertising
= (ADVERTISED_10000baseT_Full
| ADVERTISED_FIBRE
);
118 ecmd
->port
= PORT_FIBRE
;
119 ecmd
->transceiver
= XCVR_EXTERNAL
;
121 if (netif_carrier_ok(netdev
)) {
122 ecmd
->speed
= vnic_dev_port_speed(enic
->vdev
);
123 ecmd
->duplex
= DUPLEX_FULL
;
129 ecmd
->autoneg
= AUTONEG_DISABLE
;
134 static void enic_get_drvinfo(struct net_device
*netdev
,
135 struct ethtool_drvinfo
*drvinfo
)
137 struct enic
*enic
= netdev_priv(netdev
);
138 struct vnic_devcmd_fw_info
*fw_info
;
140 spin_lock(&enic
->devcmd_lock
);
141 vnic_dev_fw_info(enic
->vdev
, &fw_info
);
142 spin_unlock(&enic
->devcmd_lock
);
144 strncpy(drvinfo
->driver
, DRV_NAME
, sizeof(drvinfo
->driver
));
145 strncpy(drvinfo
->version
, DRV_VERSION
, sizeof(drvinfo
->version
));
146 strncpy(drvinfo
->fw_version
, fw_info
->fw_version
,
147 sizeof(drvinfo
->fw_version
));
148 strncpy(drvinfo
->bus_info
, pci_name(enic
->pdev
),
149 sizeof(drvinfo
->bus_info
));
152 static void enic_get_strings(struct net_device
*netdev
, u32 stringset
, u8
*data
)
158 for (i
= 0; i
< enic_n_tx_stats
; i
++) {
159 memcpy(data
, enic_tx_stats
[i
].name
, ETH_GSTRING_LEN
);
160 data
+= ETH_GSTRING_LEN
;
162 for (i
= 0; i
< enic_n_rx_stats
; i
++) {
163 memcpy(data
, enic_rx_stats
[i
].name
, ETH_GSTRING_LEN
);
164 data
+= ETH_GSTRING_LEN
;
170 static int enic_get_sset_count(struct net_device
*netdev
, int sset
)
174 return enic_n_tx_stats
+ enic_n_rx_stats
;
180 static void enic_get_ethtool_stats(struct net_device
*netdev
,
181 struct ethtool_stats
*stats
, u64
*data
)
183 struct enic
*enic
= netdev_priv(netdev
);
184 struct vnic_stats
*vstats
;
187 spin_lock(&enic
->devcmd_lock
);
188 vnic_dev_stats_dump(enic
->vdev
, &vstats
);
189 spin_unlock(&enic
->devcmd_lock
);
191 for (i
= 0; i
< enic_n_tx_stats
; i
++)
192 *(data
++) = ((u64
*)&vstats
->tx
)[enic_tx_stats
[i
].offset
];
193 for (i
= 0; i
< enic_n_rx_stats
; i
++)
194 *(data
++) = ((u64
*)&vstats
->rx
)[enic_rx_stats
[i
].offset
];
197 static u32
enic_get_rx_csum(struct net_device
*netdev
)
199 struct enic
*enic
= netdev_priv(netdev
);
200 return enic
->csum_rx_enabled
;
203 static int enic_set_rx_csum(struct net_device
*netdev
, u32 data
)
205 struct enic
*enic
= netdev_priv(netdev
);
207 if (data
&& !ENIC_SETTING(enic
, RXCSUM
))
210 enic
->csum_rx_enabled
= !!data
;
215 static int enic_set_tx_csum(struct net_device
*netdev
, u32 data
)
217 struct enic
*enic
= netdev_priv(netdev
);
219 if (data
&& !ENIC_SETTING(enic
, TXCSUM
))
223 netdev
->features
|= NETIF_F_HW_CSUM
;
225 netdev
->features
&= ~NETIF_F_HW_CSUM
;
230 static int enic_set_tso(struct net_device
*netdev
, u32 data
)
232 struct enic
*enic
= netdev_priv(netdev
);
234 if (data
&& !ENIC_SETTING(enic
, TSO
))
239 NETIF_F_TSO
| NETIF_F_TSO6
| NETIF_F_TSO_ECN
;
242 ~(NETIF_F_TSO
| NETIF_F_TSO6
| NETIF_F_TSO_ECN
);
247 static u32
enic_get_msglevel(struct net_device
*netdev
)
249 struct enic
*enic
= netdev_priv(netdev
);
250 return enic
->msg_enable
;
253 static void enic_set_msglevel(struct net_device
*netdev
, u32 value
)
255 struct enic
*enic
= netdev_priv(netdev
);
256 enic
->msg_enable
= value
;
259 static struct ethtool_ops enic_ethtool_ops
= {
260 .get_settings
= enic_get_settings
,
261 .get_drvinfo
= enic_get_drvinfo
,
262 .get_msglevel
= enic_get_msglevel
,
263 .set_msglevel
= enic_set_msglevel
,
264 .get_link
= ethtool_op_get_link
,
265 .get_strings
= enic_get_strings
,
266 .get_sset_count
= enic_get_sset_count
,
267 .get_ethtool_stats
= enic_get_ethtool_stats
,
268 .get_rx_csum
= enic_get_rx_csum
,
269 .set_rx_csum
= enic_set_rx_csum
,
270 .get_tx_csum
= ethtool_op_get_tx_csum
,
271 .set_tx_csum
= enic_set_tx_csum
,
272 .get_sg
= ethtool_op_get_sg
,
273 .set_sg
= ethtool_op_set_sg
,
274 .get_tso
= ethtool_op_get_tso
,
275 .set_tso
= enic_set_tso
,
276 .get_flags
= ethtool_op_get_flags
,
277 .set_flags
= ethtool_op_set_flags
,
280 static void enic_free_wq_buf(struct vnic_wq
*wq
, struct vnic_wq_buf
*buf
)
282 struct enic
*enic
= vnic_dev_priv(wq
->vdev
);
285 pci_unmap_single(enic
->pdev
, buf
->dma_addr
,
286 buf
->len
, PCI_DMA_TODEVICE
);
288 pci_unmap_page(enic
->pdev
, buf
->dma_addr
,
289 buf
->len
, PCI_DMA_TODEVICE
);
292 dev_kfree_skb_any(buf
->os_buf
);
295 static void enic_wq_free_buf(struct vnic_wq
*wq
,
296 struct cq_desc
*cq_desc
, struct vnic_wq_buf
*buf
, void *opaque
)
298 enic_free_wq_buf(wq
, buf
);
301 static int enic_wq_service(struct vnic_dev
*vdev
, struct cq_desc
*cq_desc
,
302 u8 type
, u16 q_number
, u16 completed_index
, void *opaque
)
304 struct enic
*enic
= vnic_dev_priv(vdev
);
306 spin_lock(&enic
->wq_lock
[q_number
]);
308 vnic_wq_service(&enic
->wq
[q_number
], cq_desc
,
309 completed_index
, enic_wq_free_buf
,
312 if (netif_queue_stopped(enic
->netdev
) &&
313 vnic_wq_desc_avail(&enic
->wq
[q_number
]) >= MAX_SKB_FRAGS
+ 1)
314 netif_wake_queue(enic
->netdev
);
316 spin_unlock(&enic
->wq_lock
[q_number
]);
321 static void enic_log_q_error(struct enic
*enic
)
326 for (i
= 0; i
< enic
->wq_count
; i
++) {
327 error_status
= vnic_wq_error_status(&enic
->wq
[i
]);
329 printk(KERN_ERR PFX
"%s: WQ[%d] error_status %d\n",
330 enic
->netdev
->name
, i
, error_status
);
333 for (i
= 0; i
< enic
->rq_count
; i
++) {
334 error_status
= vnic_rq_error_status(&enic
->rq
[i
]);
336 printk(KERN_ERR PFX
"%s: RQ[%d] error_status %d\n",
337 enic
->netdev
->name
, i
, error_status
);
341 static void enic_link_check(struct enic
*enic
)
343 int link_status
= vnic_dev_link_status(enic
->vdev
);
344 int carrier_ok
= netif_carrier_ok(enic
->netdev
);
346 if (link_status
&& !carrier_ok
) {
347 printk(KERN_INFO PFX
"%s: Link UP\n", enic
->netdev
->name
);
348 netif_carrier_on(enic
->netdev
);
349 } else if (!link_status
&& carrier_ok
) {
350 printk(KERN_INFO PFX
"%s: Link DOWN\n", enic
->netdev
->name
);
351 netif_carrier_off(enic
->netdev
);
355 static void enic_mtu_check(struct enic
*enic
)
357 u32 mtu
= vnic_dev_mtu(enic
->vdev
);
359 if (mtu
!= enic
->port_mtu
) {
360 if (mtu
< enic
->netdev
->mtu
)
361 printk(KERN_WARNING PFX
362 "%s: interface MTU (%d) set higher "
363 "than switch port MTU (%d)\n",
364 enic
->netdev
->name
, enic
->netdev
->mtu
, mtu
);
365 enic
->port_mtu
= mtu
;
369 static void enic_msglvl_check(struct enic
*enic
)
371 u32 msg_enable
= vnic_dev_msg_lvl(enic
->vdev
);
373 if (msg_enable
!= enic
->msg_enable
) {
374 printk(KERN_INFO PFX
"%s: msg lvl changed from 0x%x to 0x%x\n",
375 enic
->netdev
->name
, enic
->msg_enable
, msg_enable
);
376 enic
->msg_enable
= msg_enable
;
380 static void enic_notify_check(struct enic
*enic
)
382 enic_msglvl_check(enic
);
383 enic_mtu_check(enic
);
384 enic_link_check(enic
);
387 #define ENIC_TEST_INTR(pba, i) (pba & (1 << i))
389 static irqreturn_t
enic_isr_legacy(int irq
, void *data
)
391 struct net_device
*netdev
= data
;
392 struct enic
*enic
= netdev_priv(netdev
);
395 vnic_intr_mask(&enic
->intr
[ENIC_INTX_WQ_RQ
]);
397 pba
= vnic_intr_legacy_pba(enic
->legacy_pba
);
399 vnic_intr_unmask(&enic
->intr
[ENIC_INTX_WQ_RQ
]);
400 return IRQ_NONE
; /* not our interrupt */
403 if (ENIC_TEST_INTR(pba
, ENIC_INTX_NOTIFY
)) {
404 vnic_intr_return_all_credits(&enic
->intr
[ENIC_INTX_NOTIFY
]);
405 enic_notify_check(enic
);
408 if (ENIC_TEST_INTR(pba
, ENIC_INTX_ERR
)) {
409 vnic_intr_return_all_credits(&enic
->intr
[ENIC_INTX_ERR
]);
410 enic_log_q_error(enic
);
411 /* schedule recovery from WQ/RQ error */
412 schedule_work(&enic
->reset
);
416 if (ENIC_TEST_INTR(pba
, ENIC_INTX_WQ_RQ
)) {
417 if (napi_schedule_prep(&enic
->napi
))
418 __napi_schedule(&enic
->napi
);
420 vnic_intr_unmask(&enic
->intr
[ENIC_INTX_WQ_RQ
]);
426 static irqreturn_t
enic_isr_msi(int irq
, void *data
)
428 struct enic
*enic
= data
;
430 /* With MSI, there is no sharing of interrupts, so this is
431 * our interrupt and there is no need to ack it. The device
432 * is not providing per-vector masking, so the OS will not
433 * write to PCI config space to mask/unmask the interrupt.
434 * We're using mask_on_assertion for MSI, so the device
435 * automatically masks the interrupt when the interrupt is
436 * generated. Later, when exiting polling, the interrupt
437 * will be unmasked (see enic_poll).
439 * Also, the device uses the same PCIe Traffic Class (TC)
440 * for Memory Write data and MSI, so there are no ordering
441 * issues; the MSI will always arrive at the Root Complex
442 * _after_ corresponding Memory Writes (i.e. descriptor
446 napi_schedule(&enic
->napi
);
451 static irqreturn_t
enic_isr_msix_rq(int irq
, void *data
)
453 struct enic
*enic
= data
;
455 /* schedule NAPI polling for RQ cleanup */
456 napi_schedule(&enic
->napi
);
461 static irqreturn_t
enic_isr_msix_wq(int irq
, void *data
)
463 struct enic
*enic
= data
;
464 unsigned int wq_work_to_do
= -1; /* no limit */
465 unsigned int wq_work_done
;
467 wq_work_done
= vnic_cq_service(&enic
->cq
[ENIC_CQ_WQ
],
468 wq_work_to_do
, enic_wq_service
, NULL
);
470 vnic_intr_return_credits(&enic
->intr
[ENIC_MSIX_WQ
],
473 1 /* reset intr timer */);
478 static irqreturn_t
enic_isr_msix_err(int irq
, void *data
)
480 struct enic
*enic
= data
;
482 vnic_intr_return_all_credits(&enic
->intr
[ENIC_MSIX_ERR
]);
484 enic_log_q_error(enic
);
486 /* schedule recovery from WQ/RQ error */
487 schedule_work(&enic
->reset
);
492 static irqreturn_t
enic_isr_msix_notify(int irq
, void *data
)
494 struct enic
*enic
= data
;
496 vnic_intr_return_all_credits(&enic
->intr
[ENIC_MSIX_NOTIFY
]);
497 enic_notify_check(enic
);
502 static inline void enic_queue_wq_skb_cont(struct enic
*enic
,
503 struct vnic_wq
*wq
, struct sk_buff
*skb
,
504 unsigned int len_left
)
508 /* Queue additional data fragments */
509 for (frag
= skb_shinfo(skb
)->frags
; len_left
; frag
++) {
510 len_left
-= frag
->size
;
511 enic_queue_wq_desc_cont(wq
, skb
,
512 pci_map_page(enic
->pdev
, frag
->page
,
513 frag
->page_offset
, frag
->size
,
516 (len_left
== 0)); /* EOP? */
520 static inline void enic_queue_wq_skb_vlan(struct enic
*enic
,
521 struct vnic_wq
*wq
, struct sk_buff
*skb
,
522 int vlan_tag_insert
, unsigned int vlan_tag
)
524 unsigned int head_len
= skb_headlen(skb
);
525 unsigned int len_left
= skb
->len
- head_len
;
526 int eop
= (len_left
== 0);
528 /* Queue the main skb fragment */
529 enic_queue_wq_desc(wq
, skb
,
530 pci_map_single(enic
->pdev
, skb
->data
,
531 head_len
, PCI_DMA_TODEVICE
),
533 vlan_tag_insert
, vlan_tag
,
537 enic_queue_wq_skb_cont(enic
, wq
, skb
, len_left
);
540 static inline void enic_queue_wq_skb_csum_l4(struct enic
*enic
,
541 struct vnic_wq
*wq
, struct sk_buff
*skb
,
542 int vlan_tag_insert
, unsigned int vlan_tag
)
544 unsigned int head_len
= skb_headlen(skb
);
545 unsigned int len_left
= skb
->len
- head_len
;
546 unsigned int hdr_len
= skb_transport_offset(skb
);
547 unsigned int csum_offset
= hdr_len
+ skb
->csum_offset
;
548 int eop
= (len_left
== 0);
550 /* Queue the main skb fragment */
551 enic_queue_wq_desc_csum_l4(wq
, skb
,
552 pci_map_single(enic
->pdev
, skb
->data
,
553 head_len
, PCI_DMA_TODEVICE
),
557 vlan_tag_insert
, vlan_tag
,
561 enic_queue_wq_skb_cont(enic
, wq
, skb
, len_left
);
564 static inline void enic_queue_wq_skb_tso(struct enic
*enic
,
565 struct vnic_wq
*wq
, struct sk_buff
*skb
, unsigned int mss
,
566 int vlan_tag_insert
, unsigned int vlan_tag
)
568 unsigned int head_len
= skb_headlen(skb
);
569 unsigned int len_left
= skb
->len
- head_len
;
570 unsigned int hdr_len
= skb_transport_offset(skb
) + tcp_hdrlen(skb
);
571 int eop
= (len_left
== 0);
573 /* Preload TCP csum field with IP pseudo hdr calculated
574 * with IP length set to zero. HW will later add in length
575 * to each TCP segment resulting from the TSO.
578 if (skb
->protocol
== cpu_to_be16(ETH_P_IP
)) {
579 ip_hdr(skb
)->check
= 0;
580 tcp_hdr(skb
)->check
= ~csum_tcpudp_magic(ip_hdr(skb
)->saddr
,
581 ip_hdr(skb
)->daddr
, 0, IPPROTO_TCP
, 0);
582 } else if (skb
->protocol
== cpu_to_be16(ETH_P_IPV6
)) {
583 tcp_hdr(skb
)->check
= ~csum_ipv6_magic(&ipv6_hdr(skb
)->saddr
,
584 &ipv6_hdr(skb
)->daddr
, 0, IPPROTO_TCP
, 0);
587 /* Queue the main skb fragment */
588 enic_queue_wq_desc_tso(wq
, skb
,
589 pci_map_single(enic
->pdev
, skb
->data
,
590 head_len
, PCI_DMA_TODEVICE
),
593 vlan_tag_insert
, vlan_tag
,
597 enic_queue_wq_skb_cont(enic
, wq
, skb
, len_left
);
600 static inline void enic_queue_wq_skb(struct enic
*enic
,
601 struct vnic_wq
*wq
, struct sk_buff
*skb
)
603 unsigned int mss
= skb_shinfo(skb
)->gso_size
;
604 unsigned int vlan_tag
= 0;
605 int vlan_tag_insert
= 0;
607 if (enic
->vlan_group
&& vlan_tx_tag_present(skb
)) {
608 /* VLAN tag from trunking driver */
610 vlan_tag
= vlan_tx_tag_get(skb
);
614 enic_queue_wq_skb_tso(enic
, wq
, skb
, mss
,
615 vlan_tag_insert
, vlan_tag
);
616 else if (skb
->ip_summed
== CHECKSUM_PARTIAL
)
617 enic_queue_wq_skb_csum_l4(enic
, wq
, skb
,
618 vlan_tag_insert
, vlan_tag
);
620 enic_queue_wq_skb_vlan(enic
, wq
, skb
,
621 vlan_tag_insert
, vlan_tag
);
624 /* netif_tx_lock held, process context with BHs disabled, or BH */
625 static int enic_hard_start_xmit(struct sk_buff
*skb
, struct net_device
*netdev
)
627 struct enic
*enic
= netdev_priv(netdev
);
628 struct vnic_wq
*wq
= &enic
->wq
[0];
636 /* Non-TSO sends must fit within ENIC_NON_TSO_MAX_DESC descs,
637 * which is very likely. In the off chance it's going to take
638 * more than * ENIC_NON_TSO_MAX_DESC, linearize the skb.
641 if (skb_shinfo(skb
)->gso_size
== 0 &&
642 skb_shinfo(skb
)->nr_frags
+ 1 > ENIC_NON_TSO_MAX_DESC
&&
643 skb_linearize(skb
)) {
648 spin_lock_irqsave(&enic
->wq_lock
[0], flags
);
650 if (vnic_wq_desc_avail(wq
) < skb_shinfo(skb
)->nr_frags
+ 1) {
651 netif_stop_queue(netdev
);
652 /* This is a hard error, log it */
653 printk(KERN_ERR PFX
"%s: BUG! Tx ring full when "
654 "queue awake!\n", netdev
->name
);
655 spin_unlock_irqrestore(&enic
->wq_lock
[0], flags
);
656 return NETDEV_TX_BUSY
;
659 enic_queue_wq_skb(enic
, wq
, skb
);
661 if (vnic_wq_desc_avail(wq
) < MAX_SKB_FRAGS
+ 1)
662 netif_stop_queue(netdev
);
664 netdev
->trans_start
= jiffies
;
666 spin_unlock_irqrestore(&enic
->wq_lock
[0], flags
);
671 /* dev_base_lock rwlock held, nominally process context */
672 static struct net_device_stats
*enic_get_stats(struct net_device
*netdev
)
674 struct enic
*enic
= netdev_priv(netdev
);
675 struct net_device_stats
*net_stats
= &netdev
->stats
;
676 struct vnic_stats
*stats
;
678 spin_lock(&enic
->devcmd_lock
);
679 vnic_dev_stats_dump(enic
->vdev
, &stats
);
680 spin_unlock(&enic
->devcmd_lock
);
682 net_stats
->tx_packets
= stats
->tx
.tx_frames_ok
;
683 net_stats
->tx_bytes
= stats
->tx
.tx_bytes_ok
;
684 net_stats
->tx_errors
= stats
->tx
.tx_errors
;
685 net_stats
->tx_dropped
= stats
->tx
.tx_drops
;
687 net_stats
->rx_packets
= stats
->rx
.rx_frames_ok
;
688 net_stats
->rx_bytes
= stats
->rx
.rx_bytes_ok
;
689 net_stats
->rx_errors
= stats
->rx
.rx_errors
;
690 net_stats
->multicast
= stats
->rx
.rx_multicast_frames_ok
;
691 net_stats
->rx_crc_errors
= enic
->rq_bad_fcs
;
692 net_stats
->rx_dropped
= stats
->rx
.rx_no_bufs
;
697 static void enic_reset_mcaddrs(struct enic
*enic
)
702 static int enic_set_mac_addr(struct net_device
*netdev
, char *addr
)
704 if (!is_valid_ether_addr(addr
))
705 return -EADDRNOTAVAIL
;
707 memcpy(netdev
->dev_addr
, addr
, netdev
->addr_len
);
712 /* netif_tx_lock held, BHs disabled */
713 static void enic_set_multicast_list(struct net_device
*netdev
)
715 struct enic
*enic
= netdev_priv(netdev
);
716 struct dev_mc_list
*list
= netdev
->mc_list
;
718 int multicast
= (netdev
->flags
& IFF_MULTICAST
) ? 1 : 0;
719 int broadcast
= (netdev
->flags
& IFF_BROADCAST
) ? 1 : 0;
720 int promisc
= (netdev
->flags
& IFF_PROMISC
) ? 1 : 0;
721 int allmulti
= (netdev
->flags
& IFF_ALLMULTI
) ||
722 (netdev
->mc_count
> ENIC_MULTICAST_PERFECT_FILTERS
);
723 u8 mc_addr
[ENIC_MULTICAST_PERFECT_FILTERS
][ETH_ALEN
];
724 unsigned int mc_count
= netdev
->mc_count
;
727 if (mc_count
> ENIC_MULTICAST_PERFECT_FILTERS
)
728 mc_count
= ENIC_MULTICAST_PERFECT_FILTERS
;
730 spin_lock(&enic
->devcmd_lock
);
732 vnic_dev_packet_filter(enic
->vdev
, directed
,
733 multicast
, broadcast
, promisc
, allmulti
);
735 /* Is there an easier way? Trying to minimize to
736 * calls to add/del multicast addrs. We keep the
737 * addrs from the last call in enic->mc_addr and
738 * look for changes to add/del.
741 for (i
= 0; list
&& i
< mc_count
; i
++) {
742 memcpy(mc_addr
[i
], list
->dmi_addr
, ETH_ALEN
);
746 for (i
= 0; i
< enic
->mc_count
; i
++) {
747 for (j
= 0; j
< mc_count
; j
++)
748 if (compare_ether_addr(enic
->mc_addr
[i
],
752 enic_del_multicast_addr(enic
, enic
->mc_addr
[i
]);
755 for (i
= 0; i
< mc_count
; i
++) {
756 for (j
= 0; j
< enic
->mc_count
; j
++)
757 if (compare_ether_addr(mc_addr
[i
],
758 enic
->mc_addr
[j
]) == 0)
760 if (j
== enic
->mc_count
)
761 enic_add_multicast_addr(enic
, mc_addr
[i
]);
764 /* Save the list to compare against next time
767 for (i
= 0; i
< mc_count
; i
++)
768 memcpy(enic
->mc_addr
[i
], mc_addr
[i
], ETH_ALEN
);
770 enic
->mc_count
= mc_count
;
772 spin_unlock(&enic
->devcmd_lock
);
775 /* rtnl lock is held */
776 static void enic_vlan_rx_register(struct net_device
*netdev
,
777 struct vlan_group
*vlan_group
)
779 struct enic
*enic
= netdev_priv(netdev
);
780 enic
->vlan_group
= vlan_group
;
783 /* rtnl lock is held */
784 static void enic_vlan_rx_add_vid(struct net_device
*netdev
, u16 vid
)
786 struct enic
*enic
= netdev_priv(netdev
);
788 spin_lock(&enic
->devcmd_lock
);
789 enic_add_vlan(enic
, vid
);
790 spin_unlock(&enic
->devcmd_lock
);
793 /* rtnl lock is held */
794 static void enic_vlan_rx_kill_vid(struct net_device
*netdev
, u16 vid
)
796 struct enic
*enic
= netdev_priv(netdev
);
798 spin_lock(&enic
->devcmd_lock
);
799 enic_del_vlan(enic
, vid
);
800 spin_unlock(&enic
->devcmd_lock
);
803 /* netif_tx_lock held, BHs disabled */
804 static void enic_tx_timeout(struct net_device
*netdev
)
806 struct enic
*enic
= netdev_priv(netdev
);
807 schedule_work(&enic
->reset
);
810 static void enic_free_rq_buf(struct vnic_rq
*rq
, struct vnic_rq_buf
*buf
)
812 struct enic
*enic
= vnic_dev_priv(rq
->vdev
);
817 pci_unmap_single(enic
->pdev
, buf
->dma_addr
,
818 buf
->len
, PCI_DMA_FROMDEVICE
);
819 dev_kfree_skb_any(buf
->os_buf
);
822 static inline struct sk_buff
*enic_rq_alloc_skb(unsigned int size
)
826 skb
= dev_alloc_skb(size
+ NET_IP_ALIGN
);
829 skb_reserve(skb
, NET_IP_ALIGN
);
834 static int enic_rq_alloc_buf(struct vnic_rq
*rq
)
836 struct enic
*enic
= vnic_dev_priv(rq
->vdev
);
838 unsigned int len
= enic
->netdev
->mtu
+ ETH_HLEN
;
839 unsigned int os_buf_index
= 0;
842 skb
= enic_rq_alloc_skb(len
);
846 dma_addr
= pci_map_single(enic
->pdev
, skb
->data
,
847 len
, PCI_DMA_FROMDEVICE
);
849 enic_queue_rq_desc(rq
, skb
, os_buf_index
,
855 static int enic_get_skb_header(struct sk_buff
*skb
, void **iphdr
,
856 void **tcph
, u64
*hdr_flags
, void *priv
)
858 struct cq_enet_rq_desc
*cq_desc
= priv
;
862 u8 type
, color
, eop
, sop
, ingress_port
, vlan_stripped
;
863 u8 fcoe
, fcoe_sof
, fcoe_fc_crc_ok
, fcoe_enc_error
, fcoe_eof
;
864 u8 tcp_udp_csum_ok
, udp
, tcp
, ipv4_csum_ok
;
865 u8 ipv6
, ipv4
, ipv4_fragment
, fcs_ok
, rss_type
, csum_not_calc
;
867 u16 q_number
, completed_index
, bytes_written
, vlan
, checksum
;
870 cq_enet_rq_desc_dec(cq_desc
,
871 &type
, &color
, &q_number
, &completed_index
,
872 &ingress_port
, &fcoe
, &eop
, &sop
, &rss_type
,
873 &csum_not_calc
, &rss_hash
, &bytes_written
,
874 &packet_error
, &vlan_stripped
, &vlan
, &checksum
,
875 &fcoe_sof
, &fcoe_fc_crc_ok
, &fcoe_enc_error
,
876 &fcoe_eof
, &tcp_udp_csum_ok
, &udp
, &tcp
,
877 &ipv4_csum_ok
, &ipv6
, &ipv4
, &ipv4_fragment
,
880 if (!(ipv4
&& tcp
&& !ipv4_fragment
))
883 skb_reset_network_header(skb
);
886 ip_len
= ip_hdrlen(skb
);
887 skb_set_transport_header(skb
, ip_len
);
889 /* check if ip header and tcp header are complete */
890 if (ntohs(iph
->tot_len
) < ip_len
+ tcp_hdrlen(skb
))
893 *hdr_flags
= LRO_IPV4
| LRO_TCP
;
894 *tcph
= tcp_hdr(skb
);
900 static void enic_rq_indicate_buf(struct vnic_rq
*rq
,
901 struct cq_desc
*cq_desc
, struct vnic_rq_buf
*buf
,
902 int skipped
, void *opaque
)
904 struct enic
*enic
= vnic_dev_priv(rq
->vdev
);
905 struct net_device
*netdev
= enic
->netdev
;
908 u8 type
, color
, eop
, sop
, ingress_port
, vlan_stripped
;
909 u8 fcoe
, fcoe_sof
, fcoe_fc_crc_ok
, fcoe_enc_error
, fcoe_eof
;
910 u8 tcp_udp_csum_ok
, udp
, tcp
, ipv4_csum_ok
;
911 u8 ipv6
, ipv4
, ipv4_fragment
, fcs_ok
, rss_type
, csum_not_calc
;
913 u16 q_number
, completed_index
, bytes_written
, vlan
, checksum
;
920 prefetch(skb
->data
- NET_IP_ALIGN
);
921 pci_unmap_single(enic
->pdev
, buf
->dma_addr
,
922 buf
->len
, PCI_DMA_FROMDEVICE
);
924 cq_enet_rq_desc_dec((struct cq_enet_rq_desc
*)cq_desc
,
925 &type
, &color
, &q_number
, &completed_index
,
926 &ingress_port
, &fcoe
, &eop
, &sop
, &rss_type
,
927 &csum_not_calc
, &rss_hash
, &bytes_written
,
928 &packet_error
, &vlan_stripped
, &vlan
, &checksum
,
929 &fcoe_sof
, &fcoe_fc_crc_ok
, &fcoe_enc_error
,
930 &fcoe_eof
, &tcp_udp_csum_ok
, &udp
, &tcp
,
931 &ipv4_csum_ok
, &ipv6
, &ipv4
, &ipv4_fragment
,
936 if (bytes_written
> 0 && !fcs_ok
)
939 dev_kfree_skb_any(skb
);
944 if (eop
&& bytes_written
> 0) {
949 skb_put(skb
, bytes_written
);
950 skb
->protocol
= eth_type_trans(skb
, netdev
);
952 if (enic
->csum_rx_enabled
&& !csum_not_calc
) {
953 skb
->csum
= htons(checksum
);
954 skb
->ip_summed
= CHECKSUM_COMPLETE
;
959 if (enic
->vlan_group
&& vlan_stripped
) {
961 if ((netdev
->features
& NETIF_F_LRO
) && ipv4
)
962 lro_vlan_hwaccel_receive_skb(&enic
->lro_mgr
,
963 skb
, enic
->vlan_group
,
966 vlan_hwaccel_receive_skb(skb
,
967 enic
->vlan_group
, vlan
);
971 if ((netdev
->features
& NETIF_F_LRO
) && ipv4
)
972 lro_receive_skb(&enic
->lro_mgr
, skb
, cq_desc
);
974 netif_receive_skb(skb
);
983 dev_kfree_skb_any(skb
);
987 static int enic_rq_service(struct vnic_dev
*vdev
, struct cq_desc
*cq_desc
,
988 u8 type
, u16 q_number
, u16 completed_index
, void *opaque
)
990 struct enic
*enic
= vnic_dev_priv(vdev
);
992 vnic_rq_service(&enic
->rq
[q_number
], cq_desc
,
993 completed_index
, VNIC_RQ_RETURN_DESC
,
994 enic_rq_indicate_buf
, opaque
);
999 static void enic_rq_drop_buf(struct vnic_rq
*rq
,
1000 struct cq_desc
*cq_desc
, struct vnic_rq_buf
*buf
,
1001 int skipped
, void *opaque
)
1003 struct enic
*enic
= vnic_dev_priv(rq
->vdev
);
1004 struct sk_buff
*skb
= buf
->os_buf
;
1009 pci_unmap_single(enic
->pdev
, buf
->dma_addr
,
1010 buf
->len
, PCI_DMA_FROMDEVICE
);
1012 dev_kfree_skb_any(skb
);
1015 static int enic_rq_service_drop(struct vnic_dev
*vdev
, struct cq_desc
*cq_desc
,
1016 u8 type
, u16 q_number
, u16 completed_index
, void *opaque
)
1018 struct enic
*enic
= vnic_dev_priv(vdev
);
1020 vnic_rq_service(&enic
->rq
[q_number
], cq_desc
,
1021 completed_index
, VNIC_RQ_RETURN_DESC
,
1022 enic_rq_drop_buf
, opaque
);
1027 static int enic_poll(struct napi_struct
*napi
, int budget
)
1029 struct enic
*enic
= container_of(napi
, struct enic
, napi
);
1030 struct net_device
*netdev
= enic
->netdev
;
1031 unsigned int rq_work_to_do
= budget
;
1032 unsigned int wq_work_to_do
= -1; /* no limit */
1033 unsigned int work_done
, rq_work_done
, wq_work_done
;
1035 /* Service RQ (first) and WQ
1038 rq_work_done
= vnic_cq_service(&enic
->cq
[ENIC_CQ_RQ
],
1039 rq_work_to_do
, enic_rq_service
, NULL
);
1041 wq_work_done
= vnic_cq_service(&enic
->cq
[ENIC_CQ_WQ
],
1042 wq_work_to_do
, enic_wq_service
, NULL
);
1044 /* Accumulate intr event credits for this polling
1045 * cycle. An intr event is the completion of a
1046 * a WQ or RQ packet.
1049 work_done
= rq_work_done
+ wq_work_done
;
1052 vnic_intr_return_credits(&enic
->intr
[ENIC_INTX_WQ_RQ
],
1054 0 /* don't unmask intr */,
1055 0 /* don't reset intr timer */);
1057 if (rq_work_done
> 0) {
1062 vnic_rq_fill(&enic
->rq
[0], enic_rq_alloc_buf
);
1066 /* If no work done, flush all LROs and exit polling
1069 if (netdev
->features
& NETIF_F_LRO
)
1070 lro_flush_all(&enic
->lro_mgr
);
1072 napi_complete(napi
);
1073 vnic_intr_unmask(&enic
->intr
[ENIC_INTX_WQ_RQ
]);
1076 return rq_work_done
;
1079 static int enic_poll_msix(struct napi_struct
*napi
, int budget
)
1081 struct enic
*enic
= container_of(napi
, struct enic
, napi
);
1082 struct net_device
*netdev
= enic
->netdev
;
1083 unsigned int work_to_do
= budget
;
1084 unsigned int work_done
;
1089 work_done
= vnic_cq_service(&enic
->cq
[ENIC_CQ_RQ
],
1090 work_to_do
, enic_rq_service
, NULL
);
1092 if (work_done
> 0) {
1097 vnic_rq_fill(&enic
->rq
[0], enic_rq_alloc_buf
);
1099 /* Return intr event credits for this polling
1100 * cycle. An intr event is the completion of a
1104 vnic_intr_return_credits(&enic
->intr
[ENIC_MSIX_RQ
],
1106 0 /* don't unmask intr */,
1107 0 /* don't reset intr timer */);
1110 /* If no work done, flush all LROs and exit polling
1113 if (netdev
->features
& NETIF_F_LRO
)
1114 lro_flush_all(&enic
->lro_mgr
);
1116 napi_complete(napi
);
1117 vnic_intr_unmask(&enic
->intr
[ENIC_MSIX_RQ
]);
1123 static void enic_notify_timer(unsigned long data
)
1125 struct enic
*enic
= (struct enic
*)data
;
1127 enic_notify_check(enic
);
1129 mod_timer(&enic
->notify_timer
,
1130 round_jiffies(jiffies
+ ENIC_NOTIFY_TIMER_PERIOD
));
1133 static void enic_free_intr(struct enic
*enic
)
1135 struct net_device
*netdev
= enic
->netdev
;
1138 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1139 case VNIC_DEV_INTR_MODE_INTX
:
1140 free_irq(enic
->pdev
->irq
, netdev
);
1142 case VNIC_DEV_INTR_MODE_MSI
:
1143 free_irq(enic
->pdev
->irq
, enic
);
1145 case VNIC_DEV_INTR_MODE_MSIX
:
1146 for (i
= 0; i
< ARRAY_SIZE(enic
->msix
); i
++)
1147 if (enic
->msix
[i
].requested
)
1148 free_irq(enic
->msix_entry
[i
].vector
,
1149 enic
->msix
[i
].devid
);
1156 static int enic_request_intr(struct enic
*enic
)
1158 struct net_device
*netdev
= enic
->netdev
;
1162 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1164 case VNIC_DEV_INTR_MODE_INTX
:
1166 err
= request_irq(enic
->pdev
->irq
, enic_isr_legacy
,
1167 IRQF_SHARED
, netdev
->name
, netdev
);
1170 case VNIC_DEV_INTR_MODE_MSI
:
1172 err
= request_irq(enic
->pdev
->irq
, enic_isr_msi
,
1173 0, netdev
->name
, enic
);
1176 case VNIC_DEV_INTR_MODE_MSIX
:
1178 sprintf(enic
->msix
[ENIC_MSIX_RQ
].devname
,
1179 "%.11s-rx-0", netdev
->name
);
1180 enic
->msix
[ENIC_MSIX_RQ
].isr
= enic_isr_msix_rq
;
1181 enic
->msix
[ENIC_MSIX_RQ
].devid
= enic
;
1183 sprintf(enic
->msix
[ENIC_MSIX_WQ
].devname
,
1184 "%.11s-tx-0", netdev
->name
);
1185 enic
->msix
[ENIC_MSIX_WQ
].isr
= enic_isr_msix_wq
;
1186 enic
->msix
[ENIC_MSIX_WQ
].devid
= enic
;
1188 sprintf(enic
->msix
[ENIC_MSIX_ERR
].devname
,
1189 "%.11s-err", netdev
->name
);
1190 enic
->msix
[ENIC_MSIX_ERR
].isr
= enic_isr_msix_err
;
1191 enic
->msix
[ENIC_MSIX_ERR
].devid
= enic
;
1193 sprintf(enic
->msix
[ENIC_MSIX_NOTIFY
].devname
,
1194 "%.11s-notify", netdev
->name
);
1195 enic
->msix
[ENIC_MSIX_NOTIFY
].isr
= enic_isr_msix_notify
;
1196 enic
->msix
[ENIC_MSIX_NOTIFY
].devid
= enic
;
1198 for (i
= 0; i
< ARRAY_SIZE(enic
->msix
); i
++) {
1199 err
= request_irq(enic
->msix_entry
[i
].vector
,
1200 enic
->msix
[i
].isr
, 0,
1201 enic
->msix
[i
].devname
,
1202 enic
->msix
[i
].devid
);
1204 enic_free_intr(enic
);
1207 enic
->msix
[i
].requested
= 1;
1219 static int enic_notify_set(struct enic
*enic
)
1223 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1224 case VNIC_DEV_INTR_MODE_INTX
:
1225 err
= vnic_dev_notify_set(enic
->vdev
, ENIC_INTX_NOTIFY
);
1227 case VNIC_DEV_INTR_MODE_MSIX
:
1228 err
= vnic_dev_notify_set(enic
->vdev
, ENIC_MSIX_NOTIFY
);
1231 err
= vnic_dev_notify_set(enic
->vdev
, -1 /* no intr */);
1238 static void enic_notify_timer_start(struct enic
*enic
)
1240 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1241 case VNIC_DEV_INTR_MODE_MSI
:
1242 mod_timer(&enic
->notify_timer
, jiffies
);
1245 /* Using intr for notification for INTx/MSI-X */
1250 /* rtnl lock is held, process context */
1251 static int enic_open(struct net_device
*netdev
)
1253 struct enic
*enic
= netdev_priv(netdev
);
1257 err
= enic_request_intr(enic
);
1259 printk(KERN_ERR PFX
"%s: Unable to request irq.\n",
1264 err
= enic_notify_set(enic
);
1267 "%s: Failed to alloc notify buffer, aborting.\n",
1269 goto err_out_free_intr
;
1272 for (i
= 0; i
< enic
->rq_count
; i
++) {
1273 err
= vnic_rq_fill(&enic
->rq
[i
], enic_rq_alloc_buf
);
1276 "%s: Unable to alloc receive buffers.\n",
1278 goto err_out_notify_unset
;
1282 for (i
= 0; i
< enic
->wq_count
; i
++)
1283 vnic_wq_enable(&enic
->wq
[i
]);
1284 for (i
= 0; i
< enic
->rq_count
; i
++)
1285 vnic_rq_enable(&enic
->rq
[i
]);
1287 enic_add_station_addr(enic
);
1288 enic_set_multicast_list(netdev
);
1290 netif_wake_queue(netdev
);
1291 napi_enable(&enic
->napi
);
1292 vnic_dev_enable(enic
->vdev
);
1294 for (i
= 0; i
< enic
->intr_count
; i
++)
1295 vnic_intr_unmask(&enic
->intr
[i
]);
1297 enic_notify_timer_start(enic
);
1301 err_out_notify_unset
:
1302 vnic_dev_notify_unset(enic
->vdev
);
1304 enic_free_intr(enic
);
1309 /* rtnl lock is held, process context */
1310 static int enic_stop(struct net_device
*netdev
)
1312 struct enic
*enic
= netdev_priv(netdev
);
1316 del_timer_sync(&enic
->notify_timer
);
1318 vnic_dev_disable(enic
->vdev
);
1319 napi_disable(&enic
->napi
);
1320 netif_stop_queue(netdev
);
1322 for (i
= 0; i
< enic
->intr_count
; i
++)
1323 vnic_intr_mask(&enic
->intr
[i
]);
1325 for (i
= 0; i
< enic
->wq_count
; i
++) {
1326 err
= vnic_wq_disable(&enic
->wq
[i
]);
1330 for (i
= 0; i
< enic
->rq_count
; i
++) {
1331 err
= vnic_rq_disable(&enic
->rq
[i
]);
1336 vnic_dev_notify_unset(enic
->vdev
);
1337 enic_free_intr(enic
);
1339 (void)vnic_cq_service(&enic
->cq
[ENIC_CQ_RQ
],
1340 -1, enic_rq_service_drop
, NULL
);
1341 (void)vnic_cq_service(&enic
->cq
[ENIC_CQ_WQ
],
1342 -1, enic_wq_service
, NULL
);
1344 for (i
= 0; i
< enic
->wq_count
; i
++)
1345 vnic_wq_clean(&enic
->wq
[i
], enic_free_wq_buf
);
1346 for (i
= 0; i
< enic
->rq_count
; i
++)
1347 vnic_rq_clean(&enic
->rq
[i
], enic_free_rq_buf
);
1348 for (i
= 0; i
< enic
->cq_count
; i
++)
1349 vnic_cq_clean(&enic
->cq
[i
]);
1350 for (i
= 0; i
< enic
->intr_count
; i
++)
1351 vnic_intr_clean(&enic
->intr
[i
]);
1356 static int enic_change_mtu(struct net_device
*netdev
, int new_mtu
)
1358 struct enic
*enic
= netdev_priv(netdev
);
1359 int running
= netif_running(netdev
);
1361 if (new_mtu
< ENIC_MIN_MTU
|| new_mtu
> ENIC_MAX_MTU
)
1367 netdev
->mtu
= new_mtu
;
1369 if (netdev
->mtu
> enic
->port_mtu
)
1370 printk(KERN_WARNING PFX
1371 "%s: interface MTU (%d) set higher "
1372 "than port MTU (%d)\n",
1373 netdev
->name
, netdev
->mtu
, enic
->port_mtu
);
1381 #ifdef CONFIG_NET_POLL_CONTROLLER
1382 static void enic_poll_controller(struct net_device
*netdev
)
1384 struct enic
*enic
= netdev_priv(netdev
);
1385 struct vnic_dev
*vdev
= enic
->vdev
;
1387 switch (vnic_dev_get_intr_mode(vdev
)) {
1388 case VNIC_DEV_INTR_MODE_MSIX
:
1389 enic_isr_msix_rq(enic
->pdev
->irq
, enic
);
1390 enic_isr_msix_wq(enic
->pdev
->irq
, enic
);
1392 case VNIC_DEV_INTR_MODE_MSI
:
1393 enic_isr_msi(enic
->pdev
->irq
, enic
);
1395 case VNIC_DEV_INTR_MODE_INTX
:
1396 enic_isr_legacy(enic
->pdev
->irq
, netdev
);
1404 static int enic_dev_wait(struct vnic_dev
*vdev
,
1405 int (*start
)(struct vnic_dev
*, int),
1406 int (*finished
)(struct vnic_dev
*, int *),
1413 BUG_ON(in_interrupt());
1415 err
= start(vdev
, arg
);
1419 /* Wait for func to complete...2 seconds max
1422 time
= jiffies
+ (HZ
* 2);
1425 err
= finished(vdev
, &done
);
1432 schedule_timeout_uninterruptible(HZ
/ 10);
1434 } while (time_after(time
, jiffies
));
1439 static int enic_dev_open(struct enic
*enic
)
1443 err
= enic_dev_wait(enic
->vdev
, vnic_dev_open
,
1444 vnic_dev_open_done
, 0);
1447 "vNIC device open failed, err %d.\n", err
);
1452 static int enic_dev_soft_reset(struct enic
*enic
)
1456 err
= enic_dev_wait(enic
->vdev
, vnic_dev_soft_reset
,
1457 vnic_dev_soft_reset_done
, 0);
1460 "vNIC soft reset failed, err %d.\n", err
);
1465 static int enic_set_niccfg(struct enic
*enic
)
1467 const u8 rss_default_cpu
= 0;
1468 const u8 rss_hash_type
= 0;
1469 const u8 rss_hash_bits
= 0;
1470 const u8 rss_base_cpu
= 0;
1471 const u8 rss_enable
= 0;
1472 const u8 tso_ipid_split_en
= 0;
1473 const u8 ig_vlan_strip_en
= 1;
1475 /* Enable VLAN tag stripping. RSS not enabled (yet).
1478 return enic_set_nic_cfg(enic
,
1479 rss_default_cpu
, rss_hash_type
,
1480 rss_hash_bits
, rss_base_cpu
,
1481 rss_enable
, tso_ipid_split_en
,
1485 static void enic_reset(struct work_struct
*work
)
1487 struct enic
*enic
= container_of(work
, struct enic
, reset
);
1489 if (!netif_running(enic
->netdev
))
1494 spin_lock(&enic
->devcmd_lock
);
1495 vnic_dev_hang_notify(enic
->vdev
);
1496 spin_unlock(&enic
->devcmd_lock
);
1498 enic_stop(enic
->netdev
);
1499 enic_dev_soft_reset(enic
);
1500 vnic_dev_init(enic
->vdev
, 0);
1501 enic_reset_mcaddrs(enic
);
1502 enic_init_vnic_resources(enic
);
1503 enic_set_niccfg(enic
);
1504 enic_open(enic
->netdev
);
1509 static int enic_set_intr_mode(struct enic
*enic
)
1511 unsigned int n
= ARRAY_SIZE(enic
->rq
);
1512 unsigned int m
= ARRAY_SIZE(enic
->wq
);
1515 /* Set interrupt mode (INTx, MSI, MSI-X) depending
1516 * system capabilities.
1520 * We need n RQs, m WQs, n+m CQs, and n+m+2 INTRs
1521 * (the second to last INTR is used for WQ/RQ errors)
1522 * (the last INTR is used for notifications)
1525 BUG_ON(ARRAY_SIZE(enic
->msix_entry
) < n
+ m
+ 2);
1526 for (i
= 0; i
< n
+ m
+ 2; i
++)
1527 enic
->msix_entry
[i
].entry
= i
;
1529 if (enic
->config
.intr_mode
< 1 &&
1530 enic
->rq_count
>= n
&&
1531 enic
->wq_count
>= m
&&
1532 enic
->cq_count
>= n
+ m
&&
1533 enic
->intr_count
>= n
+ m
+ 2 &&
1534 !pci_enable_msix(enic
->pdev
, enic
->msix_entry
, n
+ m
+ 2)) {
1538 enic
->cq_count
= n
+ m
;
1539 enic
->intr_count
= n
+ m
+ 2;
1541 vnic_dev_set_intr_mode(enic
->vdev
, VNIC_DEV_INTR_MODE_MSIX
);
1548 * We need 1 RQ, 1 WQ, 2 CQs, and 1 INTR
1551 if (enic
->config
.intr_mode
< 2 &&
1552 enic
->rq_count
>= 1 &&
1553 enic
->wq_count
>= 1 &&
1554 enic
->cq_count
>= 2 &&
1555 enic
->intr_count
>= 1 &&
1556 !pci_enable_msi(enic
->pdev
)) {
1561 enic
->intr_count
= 1;
1563 vnic_dev_set_intr_mode(enic
->vdev
, VNIC_DEV_INTR_MODE_MSI
);
1570 * We need 1 RQ, 1 WQ, 2 CQs, and 3 INTRs
1571 * (the first INTR is used for WQ/RQ)
1572 * (the second INTR is used for WQ/RQ errors)
1573 * (the last INTR is used for notifications)
1576 if (enic
->config
.intr_mode
< 3 &&
1577 enic
->rq_count
>= 1 &&
1578 enic
->wq_count
>= 1 &&
1579 enic
->cq_count
>= 2 &&
1580 enic
->intr_count
>= 3) {
1585 enic
->intr_count
= 3;
1587 vnic_dev_set_intr_mode(enic
->vdev
, VNIC_DEV_INTR_MODE_INTX
);
1592 vnic_dev_set_intr_mode(enic
->vdev
, VNIC_DEV_INTR_MODE_UNKNOWN
);
1597 static void enic_clear_intr_mode(struct enic
*enic
)
1599 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1600 case VNIC_DEV_INTR_MODE_MSIX
:
1601 pci_disable_msix(enic
->pdev
);
1603 case VNIC_DEV_INTR_MODE_MSI
:
1604 pci_disable_msi(enic
->pdev
);
1610 vnic_dev_set_intr_mode(enic
->vdev
, VNIC_DEV_INTR_MODE_UNKNOWN
);
1613 static void enic_iounmap(struct enic
*enic
)
1615 if (enic
->bar0
.vaddr
)
1616 iounmap(enic
->bar0
.vaddr
);
1619 static const struct net_device_ops enic_netdev_ops
= {
1620 .ndo_open
= enic_open
,
1621 .ndo_stop
= enic_stop
,
1622 .ndo_start_xmit
= enic_hard_start_xmit
,
1623 .ndo_get_stats
= enic_get_stats
,
1624 .ndo_validate_addr
= eth_validate_addr
,
1625 .ndo_set_mac_address
= eth_mac_addr
,
1626 .ndo_set_multicast_list
= enic_set_multicast_list
,
1627 .ndo_change_mtu
= enic_change_mtu
,
1628 .ndo_vlan_rx_register
= enic_vlan_rx_register
,
1629 .ndo_vlan_rx_add_vid
= enic_vlan_rx_add_vid
,
1630 .ndo_vlan_rx_kill_vid
= enic_vlan_rx_kill_vid
,
1631 .ndo_tx_timeout
= enic_tx_timeout
,
1632 #ifdef CONFIG_NET_POLL_CONTROLLER
1633 .ndo_poll_controller
= enic_poll_controller
,
1637 static int __devinit
enic_probe(struct pci_dev
*pdev
,
1638 const struct pci_device_id
*ent
)
1640 struct net_device
*netdev
;
1646 /* Allocate net device structure and initialize. Private
1647 * instance data is initialized to zero.
1650 netdev
= alloc_etherdev(sizeof(struct enic
));
1652 printk(KERN_ERR PFX
"Etherdev alloc failed, aborting.\n");
1656 pci_set_drvdata(pdev
, netdev
);
1658 SET_NETDEV_DEV(netdev
, &pdev
->dev
);
1660 enic
= netdev_priv(netdev
);
1661 enic
->netdev
= netdev
;
1664 /* Setup PCI resources
1667 err
= pci_enable_device(pdev
);
1670 "Cannot enable PCI device, aborting.\n");
1671 goto err_out_free_netdev
;
1674 err
= pci_request_regions(pdev
, DRV_NAME
);
1677 "Cannot request PCI regions, aborting.\n");
1678 goto err_out_disable_device
;
1681 pci_set_master(pdev
);
1683 /* Query PCI controller on system for DMA addressing
1684 * limitation for the device. Try 40-bit first, and
1688 err
= pci_set_dma_mask(pdev
, DMA_40BIT_MASK
);
1690 err
= pci_set_dma_mask(pdev
, DMA_32BIT_MASK
);
1693 "No usable DMA configuration, aborting.\n");
1694 goto err_out_release_regions
;
1696 err
= pci_set_consistent_dma_mask(pdev
, DMA_32BIT_MASK
);
1699 "Unable to obtain 32-bit DMA "
1700 "for consistent allocations, aborting.\n");
1701 goto err_out_release_regions
;
1704 err
= pci_set_consistent_dma_mask(pdev
, DMA_40BIT_MASK
);
1707 "Unable to obtain 40-bit DMA "
1708 "for consistent allocations, aborting.\n");
1709 goto err_out_release_regions
;
1714 /* Map vNIC resources from BAR0
1717 if (!(pci_resource_flags(pdev
, 0) & IORESOURCE_MEM
)) {
1719 "BAR0 not memory-map'able, aborting.\n");
1721 goto err_out_release_regions
;
1724 enic
->bar0
.vaddr
= pci_iomap(pdev
, 0, enic
->bar0
.len
);
1725 enic
->bar0
.bus_addr
= pci_resource_start(pdev
, 0);
1726 enic
->bar0
.len
= pci_resource_len(pdev
, 0);
1728 if (!enic
->bar0
.vaddr
) {
1730 "Cannot memory-map BAR0 res hdr, aborting.\n");
1732 goto err_out_release_regions
;
1735 /* Register vNIC device
1738 enic
->vdev
= vnic_dev_register(NULL
, enic
, pdev
, &enic
->bar0
);
1741 "vNIC registration failed, aborting.\n");
1743 goto err_out_iounmap
;
1746 /* Issue device open to get device in known state
1749 err
= enic_dev_open(enic
);
1752 "vNIC dev open failed, aborting.\n");
1753 goto err_out_vnic_unregister
;
1756 /* Issue device init to initialize the vnic-to-switch link.
1757 * We'll start with carrier off and wait for link UP
1758 * notification later to turn on carrier. We don't need
1759 * to wait here for the vnic-to-switch link initialization
1760 * to complete; link UP notification is the indication that
1761 * the process is complete.
1764 netif_carrier_off(netdev
);
1766 err
= vnic_dev_init(enic
->vdev
, 0);
1769 "vNIC dev init failed, aborting.\n");
1770 goto err_out_dev_close
;
1773 /* Get vNIC configuration
1776 err
= enic_get_vnic_config(enic
);
1779 "Get vNIC configuration failed, aborting.\n");
1780 goto err_out_dev_close
;
1783 /* Get available resource counts
1786 enic_get_res_counts(enic
);
1788 /* Set interrupt mode based on resource counts and system
1792 err
= enic_set_intr_mode(enic
);
1795 "Failed to set intr mode, aborting.\n");
1796 goto err_out_dev_close
;
1799 /* Allocate and configure vNIC resources
1802 err
= enic_alloc_vnic_resources(enic
);
1805 "Failed to alloc vNIC resources, aborting.\n");
1806 goto err_out_free_vnic_resources
;
1809 enic_init_vnic_resources(enic
);
1811 err
= enic_set_niccfg(enic
);
1814 "Failed to config nic, aborting.\n");
1815 goto err_out_free_vnic_resources
;
1818 /* Setup notification timer, HW reset task, and locks
1821 init_timer(&enic
->notify_timer
);
1822 enic
->notify_timer
.function
= enic_notify_timer
;
1823 enic
->notify_timer
.data
= (unsigned long)enic
;
1825 INIT_WORK(&enic
->reset
, enic_reset
);
1827 for (i
= 0; i
< enic
->wq_count
; i
++)
1828 spin_lock_init(&enic
->wq_lock
[i
]);
1830 spin_lock_init(&enic
->devcmd_lock
);
1832 /* Register net device
1835 enic
->port_mtu
= enic
->config
.mtu
;
1836 (void)enic_change_mtu(netdev
, enic
->port_mtu
);
1838 err
= enic_set_mac_addr(netdev
, enic
->mac_addr
);
1841 "Invalid MAC address, aborting.\n");
1842 goto err_out_free_vnic_resources
;
1845 netdev
->netdev_ops
= &enic_netdev_ops
;
1846 netdev
->watchdog_timeo
= 2 * HZ
;
1847 netdev
->ethtool_ops
= &enic_ethtool_ops
;
1849 switch (vnic_dev_get_intr_mode(enic
->vdev
)) {
1851 netif_napi_add(netdev
, &enic
->napi
, enic_poll
, 64);
1853 case VNIC_DEV_INTR_MODE_MSIX
:
1854 netif_napi_add(netdev
, &enic
->napi
, enic_poll_msix
, 64);
1858 netdev
->features
|= NETIF_F_HW_VLAN_TX
| NETIF_F_HW_VLAN_RX
;
1859 if (ENIC_SETTING(enic
, TXCSUM
))
1860 netdev
->features
|= NETIF_F_SG
| NETIF_F_HW_CSUM
;
1861 if (ENIC_SETTING(enic
, TSO
))
1862 netdev
->features
|= NETIF_F_TSO
|
1863 NETIF_F_TSO6
| NETIF_F_TSO_ECN
;
1864 if (ENIC_SETTING(enic
, LRO
))
1865 netdev
->features
|= NETIF_F_LRO
;
1867 netdev
->features
|= NETIF_F_HIGHDMA
;
1869 enic
->csum_rx_enabled
= ENIC_SETTING(enic
, RXCSUM
);
1871 enic
->lro_mgr
.max_aggr
= ENIC_LRO_MAX_AGGR
;
1872 enic
->lro_mgr
.max_desc
= ENIC_LRO_MAX_DESC
;
1873 enic
->lro_mgr
.lro_arr
= enic
->lro_desc
;
1874 enic
->lro_mgr
.get_skb_header
= enic_get_skb_header
;
1875 enic
->lro_mgr
.features
= LRO_F_NAPI
| LRO_F_EXTRACT_VLAN_ID
;
1876 enic
->lro_mgr
.dev
= netdev
;
1877 enic
->lro_mgr
.ip_summed
= CHECKSUM_COMPLETE
;
1878 enic
->lro_mgr
.ip_summed_aggr
= CHECKSUM_UNNECESSARY
;
1880 err
= register_netdev(netdev
);
1883 "Cannot register net device, aborting.\n");
1884 goto err_out_free_vnic_resources
;
1889 err_out_free_vnic_resources
:
1890 enic_free_vnic_resources(enic
);
1892 vnic_dev_close(enic
->vdev
);
1893 err_out_vnic_unregister
:
1894 enic_clear_intr_mode(enic
);
1895 vnic_dev_unregister(enic
->vdev
);
1898 err_out_release_regions
:
1899 pci_release_regions(pdev
);
1900 err_out_disable_device
:
1901 pci_disable_device(pdev
);
1902 err_out_free_netdev
:
1903 pci_set_drvdata(pdev
, NULL
);
1904 free_netdev(netdev
);
1909 static void __devexit
enic_remove(struct pci_dev
*pdev
)
1911 struct net_device
*netdev
= pci_get_drvdata(pdev
);
1914 struct enic
*enic
= netdev_priv(netdev
);
1916 flush_scheduled_work();
1917 unregister_netdev(netdev
);
1918 enic_free_vnic_resources(enic
);
1919 vnic_dev_close(enic
->vdev
);
1920 enic_clear_intr_mode(enic
);
1921 vnic_dev_unregister(enic
->vdev
);
1923 pci_release_regions(pdev
);
1924 pci_disable_device(pdev
);
1925 pci_set_drvdata(pdev
, NULL
);
1926 free_netdev(netdev
);
1930 static struct pci_driver enic_driver
= {
1932 .id_table
= enic_id_table
,
1933 .probe
= enic_probe
,
1934 .remove
= __devexit_p(enic_remove
),
1937 static int __init
enic_init_module(void)
1939 printk(KERN_INFO PFX
"%s, ver %s\n", DRV_DESCRIPTION
, DRV_VERSION
);
1941 return pci_register_driver(&enic_driver
);
1944 static void __exit
enic_cleanup_module(void)
1946 pci_unregister_driver(&enic_driver
);
1949 module_init(enic_init_module
);
1950 module_exit(enic_cleanup_module
);