Merge tag 'wireless-drivers-next-for-davem-2016-05-02' of git://git.kernel.org/pub...
[cascardo/linux.git] / include / linux / qed / qed_eth_if.h
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 #ifndef _QED_ETH_IF_H
10 #define _QED_ETH_IF_H
11
12 #include <linux/list.h>
13 #include <linux/if_link.h>
14 #include <linux/qed/eth_common.h>
15 #include <linux/qed/qed_if.h>
16
17 struct qed_dev_eth_info {
18         struct qed_dev_info common;
19
20         u8      num_queues;
21         u8      num_tc;
22
23         u8      port_mac[ETH_ALEN];
24         u8      num_vlan_filters;
25 };
26
27 struct qed_update_vport_rss_params {
28         u16     rss_ind_table[128];
29         u32     rss_key[10];
30         u8      rss_caps;
31 };
32
33 struct qed_update_vport_params {
34         u8 vport_id;
35         u8 update_vport_active_flg;
36         u8 vport_active_flg;
37         u8 update_accept_any_vlan_flg;
38         u8 accept_any_vlan;
39         u8 update_rss_flg;
40         struct qed_update_vport_rss_params rss_params;
41 };
42
43 struct qed_start_vport_params {
44         bool remove_inner_vlan;
45         bool gro_enable;
46         bool drop_ttl0;
47         u8 vport_id;
48         u16 mtu;
49 };
50
51 struct qed_stop_rxq_params {
52         u8 rss_id;
53         u8 rx_queue_id;
54         u8 vport_id;
55         bool eq_completion_only;
56 };
57
58 struct qed_stop_txq_params {
59         u8 rss_id;
60         u8 tx_queue_id;
61 };
62
63 enum qed_filter_rx_mode_type {
64         QED_FILTER_RX_MODE_TYPE_REGULAR,
65         QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC,
66         QED_FILTER_RX_MODE_TYPE_PROMISC,
67 };
68
69 enum qed_filter_xcast_params_type {
70         QED_FILTER_XCAST_TYPE_ADD,
71         QED_FILTER_XCAST_TYPE_DEL,
72         QED_FILTER_XCAST_TYPE_REPLACE,
73 };
74
75 struct qed_filter_ucast_params {
76         enum qed_filter_xcast_params_type type;
77         u8 vlan_valid;
78         u16 vlan;
79         u8 mac_valid;
80         unsigned char mac[ETH_ALEN];
81 };
82
83 struct qed_filter_mcast_params {
84         enum qed_filter_xcast_params_type type;
85         u8 num;
86         unsigned char mac[64][ETH_ALEN];
87 };
88
89 union qed_filter_type_params {
90         enum qed_filter_rx_mode_type accept_flags;
91         struct qed_filter_ucast_params ucast;
92         struct qed_filter_mcast_params mcast;
93 };
94
95 enum qed_filter_type {
96         QED_FILTER_TYPE_UCAST,
97         QED_FILTER_TYPE_MCAST,
98         QED_FILTER_TYPE_RX_MODE,
99         QED_MAX_FILTER_TYPES,
100 };
101
102 struct qed_filter_params {
103         enum qed_filter_type type;
104         union qed_filter_type_params filter;
105 };
106
107 struct qed_queue_start_common_params {
108         u8 rss_id;
109         u8 queue_id;
110         u8 vport_id;
111         u16 sb;
112         u16 sb_idx;
113 };
114
115 struct qed_tunn_params {
116         u16 vxlan_port;
117         u8 update_vxlan_port;
118         u16 geneve_port;
119         u8 update_geneve_port;
120 };
121
122 struct qed_eth_cb_ops {
123         struct qed_common_cb_ops common;
124 };
125
126 struct qed_eth_ops {
127         const struct qed_common_ops *common;
128
129         int (*fill_dev_info)(struct qed_dev *cdev,
130                              struct qed_dev_eth_info *info);
131
132         void (*register_ops)(struct qed_dev *cdev,
133                              struct qed_eth_cb_ops *ops,
134                              void *cookie);
135
136         int (*vport_start)(struct qed_dev *cdev,
137                            struct qed_start_vport_params *params);
138
139         int (*vport_stop)(struct qed_dev *cdev,
140                           u8 vport_id);
141
142         int (*vport_update)(struct qed_dev *cdev,
143                             struct qed_update_vport_params *params);
144
145         int (*q_rx_start)(struct qed_dev *cdev,
146                           struct qed_queue_start_common_params *params,
147                           u16 bd_max_bytes,
148                           dma_addr_t bd_chain_phys_addr,
149                           dma_addr_t cqe_pbl_addr,
150                           u16 cqe_pbl_size,
151                           void __iomem **pp_prod);
152
153         int (*q_rx_stop)(struct qed_dev *cdev,
154                          struct qed_stop_rxq_params *params);
155
156         int (*q_tx_start)(struct qed_dev *cdev,
157                           struct qed_queue_start_common_params *params,
158                           dma_addr_t pbl_addr,
159                           u16 pbl_size,
160                           void __iomem **pp_doorbell);
161
162         int (*q_tx_stop)(struct qed_dev *cdev,
163                          struct qed_stop_txq_params *params);
164
165         int (*filter_config)(struct qed_dev *cdev,
166                              struct qed_filter_params *params);
167
168         int (*fastpath_stop)(struct qed_dev *cdev);
169
170         int (*eth_cqe_completion)(struct qed_dev *cdev,
171                                   u8 rss_id,
172                                   struct eth_slow_path_rx_cqe *cqe);
173
174         void (*get_vport_stats)(struct qed_dev *cdev,
175                                 struct qed_eth_stats *stats);
176
177         int (*tunn_config)(struct qed_dev *cdev,
178                            struct qed_tunn_params *params);
179 };
180
181 const struct qed_eth_ops *qed_get_eth_ops(void);
182 void qed_put_eth_ops(void);
183
184 #endif