hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/net/ethernet/sfc/efx.h
....@@ -1,64 +1,58 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /****************************************************************************
23 * Driver for Solarflare network controllers and boards
34 * Copyright 2005-2006 Fen Systems Ltd.
45 * Copyright 2006-2013 Solarflare Communications Inc.
5
- *
6
- * This program is free software; you can redistribute it and/or modify it
7
- * under the terms of the GNU General Public License version 2 as published
8
- * by the Free Software Foundation, incorporated herein by reference.
96 */
107
118 #ifndef EFX_EFX_H
129 #define EFX_EFX_H
1310
11
+#include <linux/indirect_call_wrapper.h>
1412 #include "net_driver.h"
13
+#include "ef100_rx.h"
14
+#include "ef100_tx.h"
1515 #include "filter.h"
1616
1717 int efx_net_open(struct net_device *net_dev);
1818 int efx_net_stop(struct net_device *net_dev);
1919
2020 /* TX */
21
-int efx_probe_tx_queue(struct efx_tx_queue *tx_queue);
22
-void efx_remove_tx_queue(struct efx_tx_queue *tx_queue);
23
-void efx_init_tx_queue(struct efx_tx_queue *tx_queue);
2421 void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue);
25
-void efx_fini_tx_queue(struct efx_tx_queue *tx_queue);
2622 netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
2723 struct net_device *net_dev);
28
-netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
24
+netdev_tx_t __efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
25
+static inline netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
26
+{
27
+ return INDIRECT_CALL_2(tx_queue->efx->type->tx_enqueue,
28
+ ef100_enqueue_skb, __efx_enqueue_skb,
29
+ tx_queue, skb);
30
+}
2931 void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
32
+void efx_xmit_done_single(struct efx_tx_queue *tx_queue);
3033 int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
3134 void *type_data);
32
-unsigned int efx_tx_max_skb_descs(struct efx_nic *efx);
3335 extern unsigned int efx_piobuf_size;
34
-extern bool efx_separate_tx_channels;
3536
3637 /* RX */
37
-void efx_set_default_rx_indir_table(struct efx_nic *efx,
38
- struct efx_rss_context *ctx);
39
-void efx_rx_config_page_split(struct efx_nic *efx);
40
-int efx_probe_rx_queue(struct efx_rx_queue *rx_queue);
41
-void efx_remove_rx_queue(struct efx_rx_queue *rx_queue);
42
-void efx_init_rx_queue(struct efx_rx_queue *rx_queue);
43
-void efx_fini_rx_queue(struct efx_rx_queue *rx_queue);
44
-void efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue, bool atomic);
45
-void efx_rx_slow_fill(struct timer_list *t);
4638 void __efx_rx_packet(struct efx_channel *channel);
4739 void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
4840 unsigned int n_frags, unsigned int len, u16 flags);
4941 static inline void efx_rx_flush_packet(struct efx_channel *channel)
5042 {
5143 if (channel->rx_pkt_n_frags)
52
- __efx_rx_packet(channel);
44
+ INDIRECT_CALL_2(channel->efx->type->rx_packet,
45
+ __ef100_rx_packet, __efx_rx_packet,
46
+ channel);
5347 }
54
-void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue);
55
-
56
-#define EFX_MAX_DMAQ_SIZE 4096UL
57
-#define EFX_DEFAULT_DMAQ_SIZE 1024UL
58
-#define EFX_MIN_DMAQ_SIZE 512UL
59
-
60
-#define EFX_MAX_EVQ_SIZE 16384UL
61
-#define EFX_MIN_EVQ_SIZE 512UL
48
+static inline bool efx_rx_buf_hash_valid(struct efx_nic *efx, const u8 *prefix)
49
+{
50
+ if (efx->type->rx_buf_hash_valid)
51
+ return INDIRECT_CALL_1(efx->type->rx_buf_hash_valid,
52
+ ef100_rx_buf_hash_valid,
53
+ prefix);
54
+ return true;
55
+}
6256
6357 /* Maximum number of TCP segments we support for soft-TSO */
6458 #define EFX_TSO_MAX_SEGS 100
....@@ -82,8 +76,6 @@
8276 }
8377
8478 /* Filters */
85
-
86
-void efx_mac_reconfigure(struct efx_nic *efx);
8779
8880 /**
8981 * efx_filter_insert_filter - add or replace a filter
....@@ -166,76 +158,17 @@
166158 {
167159 return efx->type->filter_get_rx_ids(efx, priority, buf, size);
168160 }
169
-#ifdef CONFIG_RFS_ACCEL
170
-int efx_filter_rfs(struct net_device *net_dev, const struct sk_buff *skb,
171
- u16 rxq_index, u32 flow_id);
172
-bool __efx_filter_rfs_expire(struct efx_nic *efx, unsigned quota);
173
-static inline void efx_filter_rfs_expire(struct work_struct *data)
174
-{
175
- struct efx_channel *channel = container_of(data, struct efx_channel,
176
- filter_work);
177
-
178
- if (channel->rfs_filters_added >= 60 &&
179
- __efx_filter_rfs_expire(channel->efx, 100))
180
- channel->rfs_filters_added -= 60;
181
-}
182
-#define efx_filter_rfs_enabled() 1
183
-#else
184
-static inline void efx_filter_rfs_expire(struct work_struct *data) {}
185
-#define efx_filter_rfs_enabled() 0
186
-#endif
187
-bool efx_filter_is_mc_recipient(const struct efx_filter_spec *spec);
188
-
189
-bool efx_filter_spec_equal(const struct efx_filter_spec *left,
190
- const struct efx_filter_spec *right);
191
-u32 efx_filter_spec_hash(const struct efx_filter_spec *spec);
192
-
193
-#ifdef CONFIG_RFS_ACCEL
194
-bool efx_rps_check_rule(struct efx_arfs_rule *rule, unsigned int filter_idx,
195
- bool *force);
196
-
197
-struct efx_arfs_rule *efx_rps_hash_find(struct efx_nic *efx,
198
- const struct efx_filter_spec *spec);
199
-
200
-/* @new is written to indicate if entry was newly added (true) or if an old
201
- * entry was found and returned (false).
202
- */
203
-struct efx_arfs_rule *efx_rps_hash_add(struct efx_nic *efx,
204
- const struct efx_filter_spec *spec,
205
- bool *new);
206
-
207
-void efx_rps_hash_del(struct efx_nic *efx, const struct efx_filter_spec *spec);
208
-#endif
209161
210162 /* RSS contexts */
211
-struct efx_rss_context *efx_alloc_rss_context_entry(struct efx_nic *efx);
212
-struct efx_rss_context *efx_find_rss_context_entry(struct efx_nic *efx, u32 id);
213
-void efx_free_rss_context_entry(struct efx_rss_context *ctx);
214163 static inline bool efx_rss_active(struct efx_rss_context *ctx)
215164 {
216
- return ctx->context_id != EFX_EF10_RSS_CONTEXT_INVALID;
165
+ return ctx->context_id != EFX_MCDI_RSS_CONTEXT_INVALID;
217166 }
218
-
219
-/* Channels */
220
-int efx_channel_dummy_op_int(struct efx_channel *channel);
221
-void efx_channel_dummy_op_void(struct efx_channel *channel);
222
-int efx_realloc_channels(struct efx_nic *efx, u32 rxq_entries, u32 txq_entries);
223
-
224
-/* Ports */
225
-int efx_reconfigure_port(struct efx_nic *efx);
226
-int __efx_reconfigure_port(struct efx_nic *efx);
227167
228168 /* Ethtool support */
229169 extern const struct ethtool_ops efx_ethtool_ops;
230170
231
-/* Reset handling */
232
-int efx_reset(struct efx_nic *efx, enum reset_type method);
233
-void efx_reset_down(struct efx_nic *efx, enum reset_type method);
234
-int efx_reset_up(struct efx_nic *efx, enum reset_type method, bool ok);
235
-int efx_try_recovery(struct efx_nic *efx);
236
-
237171 /* Global */
238
-void efx_schedule_reset(struct efx_nic *efx, enum reset_type type);
239172 unsigned int efx_usecs_to_ticks(struct efx_nic *efx, unsigned int usecs);
240173 unsigned int efx_ticks_to_usecs(struct efx_nic *efx, unsigned int ticks);
241174 int efx_init_irq_moderation(struct efx_nic *efx, unsigned int tx_usecs,
....@@ -243,12 +176,6 @@
243176 bool rx_may_override_tx);
244177 void efx_get_irq_moderation(struct efx_nic *efx, unsigned int *tx_usecs,
245178 unsigned int *rx_usecs, bool *rx_adaptive);
246
-void efx_stop_eventq(struct efx_channel *channel);
247
-void efx_start_eventq(struct efx_channel *channel);
248
-
249
-/* Dummy PHY ops for PHY drivers */
250
-int efx_port_dummy_op_int(struct efx_nic *efx);
251
-void efx_port_dummy_op_void(struct efx_nic *efx);
252179
253180 /* Update the generic software stats in the passed stats array */
254181 void efx_update_sw_stats(struct efx_nic *efx, u64 *stats);
....@@ -275,27 +202,6 @@
275202 return 1 << efx->vi_scale;
276203 }
277204 #endif
278
-
279
-static inline void efx_schedule_channel(struct efx_channel *channel)
280
-{
281
- netif_vdbg(channel->efx, intr, channel->efx->net_dev,
282
- "channel %d scheduling NAPI poll on CPU%d\n",
283
- channel->channel, raw_smp_processor_id());
284
-
285
- napi_schedule(&channel->napi_str);
286
-}
287
-
288
-static inline void efx_schedule_channel_irq(struct efx_channel *channel)
289
-{
290
- channel->event_test_cpu = raw_smp_processor_id();
291
- efx_schedule_channel(channel);
292
-}
293
-
294
-void efx_link_status_changed(struct efx_nic *efx);
295
-void efx_link_set_advertising(struct efx_nic *efx,
296
- const unsigned long *advertising);
297
-void efx_link_clear_advertising(struct efx_nic *efx);
298
-void efx_link_set_wanted_fc(struct efx_nic *efx, u8);
299205
300206 static inline void efx_device_detach_sync(struct efx_nic *efx)
301207 {
....@@ -325,4 +231,7 @@
325231 return true;
326232 }
327233
234
+int efx_xdp_tx_buffers(struct efx_nic *efx, int n, struct xdp_frame **xdpfs,
235
+ bool flush);
236
+
328237 #endif /* EFX_EFX_H */