21 #include <linux/pci.h>
27 #include <linux/if_vlan.h>
31 #include <linux/slab.h>
37 #define DRV_VER "4.4.31.0u"
38 #define DRV_NAME "be2net"
39 #define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC"
40 #define BE3_NAME "ServerEngines BladeEngine3 10Gbps NIC"
41 #define OC_NAME "Emulex OneConnect 10Gbps NIC"
42 #define OC_NAME_BE OC_NAME "(be3)"
43 #define OC_NAME_LANCER OC_NAME "(Lancer)"
44 #define OC_NAME_SH OC_NAME "(Skyhawk)"
45 #define DRV_DESC "ServerEngines BladeEngine 10Gbps NIC Driver"
47 #define BE_VENDOR_ID 0x19a2
48 #define EMULEX_VENDOR_ID 0x10df
49 #define BE_DEVICE_ID1 0x211
50 #define BE_DEVICE_ID2 0x221
51 #define OC_DEVICE_ID1 0x700
52 #define OC_DEVICE_ID2 0x710
53 #define OC_DEVICE_ID3 0xe220
54 #define OC_DEVICE_ID4 0xe228
55 #define OC_DEVICE_ID5 0x720
56 #define OC_SUBSYS_DEVICE_ID1 0xE602
57 #define OC_SUBSYS_DEVICE_ID2 0xE642
58 #define OC_SUBSYS_DEVICE_ID3 0xE612
59 #define OC_SUBSYS_DEVICE_ID4 0xE652
61 static inline char *nic_name(
struct pci_dev *pdev)
81 #define BE_HDR_LEN ((u16) 64)
83 #define BE_RX_SKB_ALLOC_SIZE (BE_HDR_LEN + 64)
85 #define BE_MAX_JUMBO_FRAME_SIZE 9018
86 #define BE_MIN_MTU 256
88 #define BE_NUM_VLANS_SUPPORTED 64
89 #define BE_MAX_EQD 96u
90 #define BE_MAX_TX_FRAG_COUNT 30
92 #define EVNT_Q_LEN 1024
94 #define TX_CQ_LEN 1024
96 #define RX_CQ_LEN 1024
98 #define MCC_CQ_LEN 256
100 #define BE3_MAX_RSS_QS 8
101 #define BE2_MAX_RSS_QS 4
102 #define MAX_RSS_QS BE3_MAX_RSS_QS
103 #define MAX_RX_QS (MAX_RSS_QS + 1)
106 #define MAX_ROCE_EQS 5
107 #define MAX_MSIX_VECTORS (MAX_RSS_QS + MAX_ROCE_EQS)
108 #define BE_TX_BUDGET 256
109 #define BE_NAPI_WEIGHT 64
110 #define MAX_RX_POST BE_NAPI_WEIGHT
111 #define RX_FRAGS_REFILL_WM (RX_Q_LEN - MAX_RX_POST)
114 #define FW_VER_LEN 32
134 BUG_ON(limit & (limit - 1));
135 return val & (limit - 1);
140 *index = MODULO((*index + val), limit);
143 static inline void index_inc(
u16 *index,
u16 limit)
145 *index = MODULO((*index + 1), limit);
168 static inline void index_dec(
u16 *index,
u16 limit)
170 *index = MODULO((*index - 1), limit);
324 #define BE_FLAGS_LINK_STATUS_INIT 1
325 #define BE_FLAGS_WORKER_SCHEDULED (1 << 3)
326 #define BE_UC_PMAC_COUNT 30
327 #define BE_VF_UC_PMAC_COUNT 2
443 #define be_physfn(adapter) (!adapter->virtfn)
444 #define sriov_enabled(adapter) (adapter->num_vfs > 0)
445 #define sriov_want(adapter) (adapter->dev_num_vfs && num_vfs && \
447 #define for_all_vfs(adapter, vf_cfg, i) \
448 for (i = 0, vf_cfg = &adapter->vf_cfg[i]; i < adapter->num_vfs; \
457 #define lancer_chip(adapter) ((adapter->pdev->device == OC_DEVICE_ID3) || \
458 (adapter->pdev->device == OC_DEVICE_ID4))
460 #define skyhawk_chip(adapter) (adapter->pdev->device == OC_DEVICE_ID5)
463 #define be_roce_supported(adapter) ((adapter->if_type == SLI_INTF_TYPE_3 || \
464 adapter->sli_family == SKYHAWK_SLI_FAMILY) && \
465 (adapter->function_mode & RDMA_ENABLED))
469 #define msix_enabled(adapter) (adapter->num_msix_vec > 0)
470 #define num_irqs(adapter) (msix_enabled(adapter) ? \
471 adapter->num_msix_vec : 1)
472 #define tx_stats(txo) (&(txo)->stats)
473 #define rx_stats(rxo) (&(rxo)->stats)
476 #define default_rxo(adpt) (&adpt->rx_obj[adpt->num_rx_qs - 1])
478 #define for_all_rx_queues(adapter, rxo, i) \
479 for (i = 0, rxo = &adapter->rx_obj[i]; i < adapter->num_rx_qs; \
483 #define for_all_rss_queues(adapter, rxo, i) \
484 for (i = 0, rxo = &adapter->rx_obj[i]; i < (adapter->num_rx_qs - 1);\
487 #define for_all_tx_queues(adapter, txo, i) \
488 for (i = 0, txo = &adapter->tx_obj[i]; i < adapter->num_tx_qs; \
491 #define for_all_evt_queues(adapter, eqo, i) \
492 for (i = 0, eqo = &adapter->eq_obj[i]; i < adapter->num_evt_qs; \
495 #define is_mcc_eqo(eqo) (eqo->idx == 0)
496 #define mcc_eqo(adapter) (&adapter->eq_obj[0])
498 #define PAGE_SHIFT_4K 12
499 #define PAGE_SIZE_4K (1 << PAGE_SHIFT_4K)
502 #define PAGES_4K_SPANNED(_address, size) \
503 ((u32)((((size_t)(_address) & (PAGE_SIZE_4K - 1)) + \
504 (size) + (PAGE_SIZE_4K - 1)) >> PAGE_SHIFT_4K))
507 #define AMAP_BIT_OFFSET(_struct, field) \
508 (((size_t)&(((_struct *)0)->field))%32)
511 static inline u32 amap_mask(
u32 bitsize)
513 return (bitsize == 32 ? 0xFFFFFFFF : (1 << bitsize) - 1);
519 u32 *dw = (
u32 *) ptr + dw_offset;
521 *dw |= (mask &
value) << offset;
524 #define AMAP_SET_BITS(_struct, field, ptr, val) \
526 offsetof(_struct, field)/32, \
527 amap_mask(sizeof(((_struct *)0)->field)), \
528 AMAP_BIT_OFFSET(_struct, field), \
534 return mask & (*(dw + dw_offset) >> offset);
537 #define AMAP_GET_BITS(_struct, field, ptr) \
539 offsetof(_struct, field)/32, \
540 amap_mask(sizeof(((_struct *)0)->field)), \
541 AMAP_BIT_OFFSET(_struct, field))
543 #define be_dws_cpu_to_le(wrb, len) swap_dws(wrb, len)
544 #define be_dws_le_to_cpu(wrb, len) swap_dws(wrb, len)
545 static inline void swap_dws(
void *
wrb,
int len)
564 else if (ip_hdr(skb)->version == 6)
570 static inline u8 is_udp_pkt(
struct sk_buff *skb)
576 else if (ip_hdr(skb)->version == 6)
582 static inline bool is_ipv4_pkt(
struct sk_buff *skb)
593 mac[5] = (
u8)(addr & 0xFF);
594 mac[4] = (
u8)((addr >> 8) & 0xFF);
595 mac[3] = (
u8)((addr >> 16) & 0xFF);
600 static inline bool be_multi_rxq(
const struct be_adapter *adapter)
605 static inline bool be_error(
struct be_adapter *adapter)
610 static inline bool be_crit_error(
struct be_adapter *adapter)
615 static inline void be_clear_all_error(
struct be_adapter *adapter)
622 static inline bool be_is_wol_excluded(
struct be_adapter *adapter)
640 static inline bool be_type_2_3(
struct be_adapter *adapter)