Commit | Line | Data |
---|---|---|
25c089d7 YM |
1 | /* QLogic qed NIC Driver |
2 | * Copyright (c) 2015 QLogic Corporation | |
3 | * | |
4 | * This software is available under the terms of the GNU General Public License | |
5 | * (GPL) Version 2, available from the file COPYING in the main directory of | |
6 | * this source tree. | |
7 | */ | |
8 | ||
9 | #include <linux/types.h> | |
10 | #include <asm/byteorder.h> | |
11 | #include <asm/param.h> | |
12 | #include <linux/delay.h> | |
13 | #include <linux/dma-mapping.h> | |
14 | #include <linux/etherdevice.h> | |
15 | #include <linux/interrupt.h> | |
16 | #include <linux/kernel.h> | |
17 | #include <linux/module.h> | |
18 | #include <linux/pci.h> | |
19 | #include <linux/slab.h> | |
20 | #include <linux/stddef.h> | |
21 | #include <linux/string.h> | |
22 | #include <linux/version.h> | |
23 | #include <linux/workqueue.h> | |
24 | #include <linux/bitops.h> | |
25 | #include <linux/bug.h> | |
26 | #include "qed.h" | |
27 | #include <linux/qed/qed_chain.h> | |
28 | #include "qed_cxt.h" | |
29 | #include "qed_dev_api.h" | |
30 | #include <linux/qed/qed_eth_if.h> | |
31 | #include "qed_hsi.h" | |
32 | #include "qed_hw.h" | |
33 | #include "qed_int.h" | |
34 | #include "qed_reg_addr.h" | |
35 | #include "qed_sp.h" | |
36 | ||
37 | static int qed_fill_eth_dev_info(struct qed_dev *cdev, | |
38 | struct qed_dev_eth_info *info) | |
39 | { | |
40 | int i; | |
41 | ||
42 | memset(info, 0, sizeof(*info)); | |
43 | ||
44 | info->num_tc = 1; | |
45 | ||
46 | if (cdev->int_params.out.int_mode == QED_INT_MODE_MSIX) { | |
47 | for_each_hwfn(cdev, i) | |
48 | info->num_queues += FEAT_NUM(&cdev->hwfns[i], | |
49 | QED_PF_L2_QUE); | |
50 | if (cdev->int_params.fp_msix_cnt) | |
51 | info->num_queues = min_t(u8, info->num_queues, | |
52 | cdev->int_params.fp_msix_cnt); | |
53 | } else { | |
54 | info->num_queues = cdev->num_hwfns; | |
55 | } | |
56 | ||
57 | info->num_vlan_filters = RESC_NUM(&cdev->hwfns[0], QED_VLAN); | |
58 | ether_addr_copy(info->port_mac, | |
59 | cdev->hwfns[0].hw_info.hw_mac_addr); | |
60 | ||
61 | qed_fill_dev_info(cdev, &info->common); | |
62 | ||
63 | return 0; | |
64 | } | |
65 | ||
66 | static const struct qed_eth_ops qed_eth_ops_pass = { | |
67 | .common = &qed_common_ops_pass, | |
68 | .fill_dev_info = &qed_fill_eth_dev_info, | |
69 | }; | |
70 | ||
71 | const struct qed_eth_ops *qed_get_eth_ops(u32 version) | |
72 | { | |
73 | if (version != QED_ETH_INTERFACE_VERSION) { | |
74 | pr_notice("Cannot supply ethtool operations [%08x != %08x]\n", | |
75 | version, QED_ETH_INTERFACE_VERSION); | |
76 | return NULL; | |
77 | } | |
78 | ||
79 | return &qed_eth_ops_pass; | |
80 | } | |
81 | EXPORT_SYMBOL(qed_get_eth_ops); | |
82 | ||
83 | void qed_put_eth_ops(void) | |
84 | { | |
85 | /* TODO - reference count for module? */ | |
86 | } | |
87 | EXPORT_SYMBOL(qed_put_eth_ops); |