1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /****************************************************************************
3 * Driver for Solarflare network controllers and boards
4 * Copyright 2005-2006 Fen Systems Ltd.
5 * Copyright 2006-2013 Solarflare Communications Inc.
11 #include "net_driver.h"
14 int efx_net_open(struct net_device
*net_dev
);
15 int efx_net_stop(struct net_device
*net_dev
);
18 int efx_probe_tx_queue(struct efx_tx_queue
*tx_queue
);
19 void efx_remove_tx_queue(struct efx_tx_queue
*tx_queue
);
20 void efx_init_tx_queue(struct efx_tx_queue
*tx_queue
);
21 void efx_init_tx_queue_core_txq(struct efx_tx_queue
*tx_queue
);
22 void efx_fini_tx_queue(struct efx_tx_queue
*tx_queue
);
23 netdev_tx_t
efx_hard_start_xmit(struct sk_buff
*skb
,
24 struct net_device
*net_dev
);
25 netdev_tx_t
efx_enqueue_skb(struct efx_tx_queue
*tx_queue
, struct sk_buff
*skb
);
26 void efx_xmit_done(struct efx_tx_queue
*tx_queue
, unsigned int index
);
27 int efx_setup_tc(struct net_device
*net_dev
, enum tc_setup_type type
,
29 unsigned int efx_tx_max_skb_descs(struct efx_nic
*efx
);
30 extern unsigned int efx_piobuf_size
;
31 extern bool efx_separate_tx_channels
;
34 void efx_set_default_rx_indir_table(struct efx_nic
*efx
,
35 struct efx_rss_context
*ctx
);
36 void efx_rx_config_page_split(struct efx_nic
*efx
);
37 int efx_probe_rx_queue(struct efx_rx_queue
*rx_queue
);
38 void efx_remove_rx_queue(struct efx_rx_queue
*rx_queue
);
39 void efx_init_rx_queue(struct efx_rx_queue
*rx_queue
);
40 void efx_fini_rx_queue(struct efx_rx_queue
*rx_queue
);
41 void efx_fast_push_rx_descriptors(struct efx_rx_queue
*rx_queue
, bool atomic
);
42 void efx_rx_slow_fill(struct timer_list
*t
);
43 void __efx_rx_packet(struct efx_channel
*channel
);
44 void efx_rx_packet(struct efx_rx_queue
*rx_queue
, unsigned int index
,
45 unsigned int n_frags
, unsigned int len
, u16 flags
);
46 static inline void efx_rx_flush_packet(struct efx_channel
*channel
)
48 if (channel
->rx_pkt_n_frags
)
49 __efx_rx_packet(channel
);
51 void efx_schedule_slow_fill(struct efx_rx_queue
*rx_queue
);
53 #define EFX_MAX_DMAQ_SIZE 4096UL
54 #define EFX_DEFAULT_DMAQ_SIZE 1024UL
55 #define EFX_MIN_DMAQ_SIZE 512UL
57 #define EFX_MAX_EVQ_SIZE 16384UL
58 #define EFX_MIN_EVQ_SIZE 512UL
60 /* Maximum number of TCP segments we support for soft-TSO */
61 #define EFX_TSO_MAX_SEGS 100
63 /* The smallest [rt]xq_entries that the driver supports. RX minimum
64 * is a bit arbitrary. For TX, we must have space for at least 2
67 #define EFX_RXQ_MIN_ENT 128U
68 #define EFX_TXQ_MIN_ENT(efx) (2 * efx_tx_max_skb_descs(efx))
70 /* All EF10 architecture NICs steal one bit of the DMAQ size for various
71 * other purposes when counting TxQ entries, so we halve the queue size.
73 #define EFX_TXQ_MAX_ENT(efx) (EFX_WORKAROUND_EF10(efx) ? \
74 EFX_MAX_DMAQ_SIZE / 2 : EFX_MAX_DMAQ_SIZE)
76 static inline bool efx_rss_enabled(struct efx_nic
*efx
)
78 return efx
->rss_spread
> 1;
83 void efx_mac_reconfigure(struct efx_nic
*efx
);
86 * efx_filter_insert_filter - add or replace a filter
87 * @efx: NIC in which to insert the filter
88 * @spec: Specification for the filter
89 * @replace_equal: Flag for whether the specified filter may replace an
90 * existing filter with equal priority
92 * On success, return the filter ID.
93 * On failure, return a negative error code.
95 * If existing filters have equal match values to the new filter spec,
96 * then the new filter might replace them or the function might fail,
99 * 1. If the existing filters have lower priority, or @replace_equal
100 * is set and they have equal priority, replace them.
102 * 2. If the existing filters have higher priority, return -%EPERM.
104 * 3. If !efx_filter_is_mc_recipient(@spec), or the NIC does not
105 * support delivery to multiple recipients, return -%EEXIST.
107 * This implies that filters for multiple multicast recipients must
108 * all be inserted with the same priority and @replace_equal = %false.
110 static inline s32
efx_filter_insert_filter(struct efx_nic
*efx
,
111 struct efx_filter_spec
*spec
,
114 return efx
->type
->filter_insert(efx
, spec
, replace_equal
);
118 * efx_filter_remove_id_safe - remove a filter by ID, carefully
119 * @efx: NIC from which to remove the filter
120 * @priority: Priority of filter, as passed to @efx_filter_insert_filter
121 * @filter_id: ID of filter, as returned by @efx_filter_insert_filter
123 * This function will range-check @filter_id, so it is safe to call
124 * with a value passed from userland.
126 static inline int efx_filter_remove_id_safe(struct efx_nic
*efx
,
127 enum efx_filter_priority priority
,
130 return efx
->type
->filter_remove_safe(efx
, priority
, filter_id
);
134 * efx_filter_get_filter_safe - retrieve a filter by ID, carefully
135 * @efx: NIC from which to remove the filter
136 * @priority: Priority of filter, as passed to @efx_filter_insert_filter
137 * @filter_id: ID of filter, as returned by @efx_filter_insert_filter
138 * @spec: Buffer in which to store filter specification
140 * This function will range-check @filter_id, so it is safe to call
141 * with a value passed from userland.
144 efx_filter_get_filter_safe(struct efx_nic
*efx
,
145 enum efx_filter_priority priority
,
146 u32 filter_id
, struct efx_filter_spec
*spec
)
148 return efx
->type
->filter_get_safe(efx
, priority
, filter_id
, spec
);
151 static inline u32
efx_filter_count_rx_used(struct efx_nic
*efx
,
152 enum efx_filter_priority priority
)
154 return efx
->type
->filter_count_rx_used(efx
, priority
);
156 static inline u32
efx_filter_get_rx_id_limit(struct efx_nic
*efx
)
158 return efx
->type
->filter_get_rx_id_limit(efx
);
160 static inline s32
efx_filter_get_rx_ids(struct efx_nic
*efx
,
161 enum efx_filter_priority priority
,
164 return efx
->type
->filter_get_rx_ids(efx
, priority
, buf
, size
);
166 #ifdef CONFIG_RFS_ACCEL
167 int efx_filter_rfs(struct net_device
*net_dev
, const struct sk_buff
*skb
,
168 u16 rxq_index
, u32 flow_id
);
169 bool __efx_filter_rfs_expire(struct efx_channel
*channel
, unsigned int quota
);
170 static inline void efx_filter_rfs_expire(struct work_struct
*data
)
172 struct delayed_work
*dwork
= to_delayed_work(data
);
173 struct efx_channel
*channel
;
174 unsigned int time
, quota
;
176 channel
= container_of(dwork
, struct efx_channel
, filter_work
);
177 time
= jiffies
- channel
->rfs_last_expiry
;
178 quota
= channel
->rfs_filter_count
* time
/ (30 * HZ
);
179 if (quota
> 20 && __efx_filter_rfs_expire(channel
, min(channel
->rfs_filter_count
, quota
)))
180 channel
->rfs_last_expiry
+= time
;
181 /* Ensure we do more work eventually even if NAPI poll is not happening */
182 schedule_delayed_work(dwork
, 30 * HZ
);
184 #define efx_filter_rfs_enabled() 1
186 static inline void efx_filter_rfs_expire(struct work_struct
*data
) {}
187 #define efx_filter_rfs_enabled() 0
189 bool efx_filter_is_mc_recipient(const struct efx_filter_spec
*spec
);
191 bool efx_filter_spec_equal(const struct efx_filter_spec
*left
,
192 const struct efx_filter_spec
*right
);
193 u32
efx_filter_spec_hash(const struct efx_filter_spec
*spec
);
195 #ifdef CONFIG_RFS_ACCEL
196 bool efx_rps_check_rule(struct efx_arfs_rule
*rule
, unsigned int filter_idx
,
199 struct efx_arfs_rule
*efx_rps_hash_find(struct efx_nic
*efx
,
200 const struct efx_filter_spec
*spec
);
202 /* @new is written to indicate if entry was newly added (true) or if an old
203 * entry was found and returned (false).
205 struct efx_arfs_rule
*efx_rps_hash_add(struct efx_nic
*efx
,
206 const struct efx_filter_spec
*spec
,
209 void efx_rps_hash_del(struct efx_nic
*efx
, const struct efx_filter_spec
*spec
);
213 struct efx_rss_context
*efx_alloc_rss_context_entry(struct efx_nic
*efx
);
214 struct efx_rss_context
*efx_find_rss_context_entry(struct efx_nic
*efx
, u32 id
);
215 void efx_free_rss_context_entry(struct efx_rss_context
*ctx
);
216 static inline bool efx_rss_active(struct efx_rss_context
*ctx
)
218 return ctx
->context_id
!= EFX_EF10_RSS_CONTEXT_INVALID
;
222 int efx_channel_dummy_op_int(struct efx_channel
*channel
);
223 void efx_channel_dummy_op_void(struct efx_channel
*channel
);
224 int efx_realloc_channels(struct efx_nic
*efx
, u32 rxq_entries
, u32 txq_entries
);
227 int efx_reconfigure_port(struct efx_nic
*efx
);
228 int __efx_reconfigure_port(struct efx_nic
*efx
);
230 /* Ethtool support */
231 extern const struct ethtool_ops efx_ethtool_ops
;
234 int efx_reset(struct efx_nic
*efx
, enum reset_type method
);
235 void efx_reset_down(struct efx_nic
*efx
, enum reset_type method
);
236 int efx_reset_up(struct efx_nic
*efx
, enum reset_type method
, bool ok
);
237 int efx_try_recovery(struct efx_nic
*efx
);
240 void efx_schedule_reset(struct efx_nic
*efx
, enum reset_type type
);
241 unsigned int efx_usecs_to_ticks(struct efx_nic
*efx
, unsigned int usecs
);
242 unsigned int efx_ticks_to_usecs(struct efx_nic
*efx
, unsigned int ticks
);
243 int efx_init_irq_moderation(struct efx_nic
*efx
, unsigned int tx_usecs
,
244 unsigned int rx_usecs
, bool rx_adaptive
,
245 bool rx_may_override_tx
);
246 void efx_get_irq_moderation(struct efx_nic
*efx
, unsigned int *tx_usecs
,
247 unsigned int *rx_usecs
, bool *rx_adaptive
);
248 void efx_stop_eventq(struct efx_channel
*channel
);
249 void efx_start_eventq(struct efx_channel
*channel
);
251 /* Dummy PHY ops for PHY drivers */
252 int efx_port_dummy_op_int(struct efx_nic
*efx
);
253 void efx_port_dummy_op_void(struct efx_nic
*efx
);
255 /* Update the generic software stats in the passed stats array */
256 void efx_update_sw_stats(struct efx_nic
*efx
, u64
*stats
);
259 #ifdef CONFIG_SFC_MTD
260 int efx_mtd_add(struct efx_nic
*efx
, struct efx_mtd_partition
*parts
,
261 size_t n_parts
, size_t sizeof_part
);
262 static inline int efx_mtd_probe(struct efx_nic
*efx
)
264 return efx
->type
->mtd_probe(efx
);
266 void efx_mtd_rename(struct efx_nic
*efx
);
267 void efx_mtd_remove(struct efx_nic
*efx
);
269 static inline int efx_mtd_probe(struct efx_nic
*efx
) { return 0; }
270 static inline void efx_mtd_rename(struct efx_nic
*efx
) {}
271 static inline void efx_mtd_remove(struct efx_nic
*efx
) {}
274 #ifdef CONFIG_SFC_SRIOV
275 static inline unsigned int efx_vf_size(struct efx_nic
*efx
)
277 return 1 << efx
->vi_scale
;
281 static inline void efx_schedule_channel(struct efx_channel
*channel
)
283 netif_vdbg(channel
->efx
, intr
, channel
->efx
->net_dev
,
284 "channel %d scheduling NAPI poll on CPU%d\n",
285 channel
->channel
, raw_smp_processor_id());
287 napi_schedule(&channel
->napi_str
);
290 static inline void efx_schedule_channel_irq(struct efx_channel
*channel
)
292 channel
->event_test_cpu
= raw_smp_processor_id();
293 efx_schedule_channel(channel
);
296 void efx_link_status_changed(struct efx_nic
*efx
);
297 void efx_link_set_advertising(struct efx_nic
*efx
,
298 const unsigned long *advertising
);
299 void efx_link_clear_advertising(struct efx_nic
*efx
);
300 void efx_link_set_wanted_fc(struct efx_nic
*efx
, u8
);
302 static inline void efx_device_detach_sync(struct efx_nic
*efx
)
304 struct net_device
*dev
= efx
->net_dev
;
306 /* Lock/freeze all TX queues so that we can be sure the
307 * TX scheduler is stopped when we're done and before
308 * netif_device_present() becomes false.
310 netif_tx_lock_bh(dev
);
311 netif_device_detach(dev
);
312 netif_tx_unlock_bh(dev
);
315 static inline void efx_device_attach_if_not_resetting(struct efx_nic
*efx
)
317 if ((efx
->state
!= STATE_DISABLED
) && !efx
->reset_pending
)
318 netif_device_attach(efx
->net_dev
);
321 static inline bool efx_rwsem_assert_write_locked(struct rw_semaphore
*sem
)
323 if (WARN_ON(down_read_trylock(sem
))) {
330 int efx_xdp_tx_buffers(struct efx_nic
*efx
, int n
, struct xdp_frame
**xdpfs
,
333 #endif /* EFX_EFX_H */