12d4238f5SKrzysztof Kazimierczak /* SPDX-License-Identifier: GPL-2.0 */
22d4238f5SKrzysztof Kazimierczak /* Copyright (c) 2019, Intel Corporation. */
32d4238f5SKrzysztof Kazimierczak 
42d4238f5SKrzysztof Kazimierczak #ifndef _ICE_XSK_H_
52d4238f5SKrzysztof Kazimierczak #define _ICE_XSK_H_
62d4238f5SKrzysztof Kazimierczak #include "ice_txrx.h"
72d4238f5SKrzysztof Kazimierczak #include "ice.h"
82d4238f5SKrzysztof Kazimierczak 
92d4238f5SKrzysztof Kazimierczak struct ice_vsi;
102d4238f5SKrzysztof Kazimierczak 
112d4238f5SKrzysztof Kazimierczak #ifdef CONFIG_XDP_SOCKETS
121742b3d5SMagnus Karlsson int ice_xsk_pool_setup(struct ice_vsi *vsi, struct xsk_buff_pool *pool,
131742b3d5SMagnus Karlsson 		       u16 qid);
14*e72bba21SMaciej Fijalkowski int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget);
15*e72bba21SMaciej Fijalkowski bool ice_clean_tx_irq_zc(struct ice_tx_ring *xdp_ring, int budget);
162d4238f5SKrzysztof Kazimierczak int ice_xsk_wakeup(struct net_device *netdev, u32 queue_id, u32 flags);
17*e72bba21SMaciej Fijalkowski bool ice_alloc_rx_bufs_zc(struct ice_rx_ring *rx_ring, u16 count);
182d4238f5SKrzysztof Kazimierczak bool ice_xsk_any_rx_ring_ena(struct ice_vsi *vsi);
19*e72bba21SMaciej Fijalkowski void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring);
20*e72bba21SMaciej Fijalkowski void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring);
212d4238f5SKrzysztof Kazimierczak #else
222d4238f5SKrzysztof Kazimierczak static inline int
231742b3d5SMagnus Karlsson ice_xsk_pool_setup(struct ice_vsi __always_unused *vsi,
241742b3d5SMagnus Karlsson 		   struct xsk_buff_pool __always_unused *pool,
252d4238f5SKrzysztof Kazimierczak 		   u16 __always_unused qid)
262d4238f5SKrzysztof Kazimierczak {
27dced8ad3SAnirudh Venkataramanan 	return -EOPNOTSUPP;
282d4238f5SKrzysztof Kazimierczak }
292d4238f5SKrzysztof Kazimierczak 
302d4238f5SKrzysztof Kazimierczak static inline int
31*e72bba21SMaciej Fijalkowski ice_clean_rx_irq_zc(struct ice_rx_ring __always_unused *rx_ring,
322d4238f5SKrzysztof Kazimierczak 		    int __always_unused budget)
332d4238f5SKrzysztof Kazimierczak {
342d4238f5SKrzysztof Kazimierczak 	return 0;
352d4238f5SKrzysztof Kazimierczak }
362d4238f5SKrzysztof Kazimierczak 
372d4238f5SKrzysztof Kazimierczak static inline bool
38*e72bba21SMaciej Fijalkowski ice_clean_tx_irq_zc(struct ice_tx_ring __always_unused *xdp_ring,
392d4238f5SKrzysztof Kazimierczak 		    int __always_unused budget)
402d4238f5SKrzysztof Kazimierczak {
412d4238f5SKrzysztof Kazimierczak 	return false;
422d4238f5SKrzysztof Kazimierczak }
432d4238f5SKrzysztof Kazimierczak 
442d4238f5SKrzysztof Kazimierczak static inline bool
45*e72bba21SMaciej Fijalkowski ice_alloc_rx_bufs_zc(struct ice_rx_ring __always_unused *rx_ring,
462d4238f5SKrzysztof Kazimierczak 		     u16 __always_unused count)
472d4238f5SKrzysztof Kazimierczak {
482d4238f5SKrzysztof Kazimierczak 	return false;
492d4238f5SKrzysztof Kazimierczak }
502d4238f5SKrzysztof Kazimierczak 
512d4238f5SKrzysztof Kazimierczak static inline bool ice_xsk_any_rx_ring_ena(struct ice_vsi __always_unused *vsi)
522d4238f5SKrzysztof Kazimierczak {
532d4238f5SKrzysztof Kazimierczak 	return false;
542d4238f5SKrzysztof Kazimierczak }
552d4238f5SKrzysztof Kazimierczak 
562d4238f5SKrzysztof Kazimierczak static inline int
572d4238f5SKrzysztof Kazimierczak ice_xsk_wakeup(struct net_device __always_unused *netdev,
582d4238f5SKrzysztof Kazimierczak 	       u32 __always_unused queue_id, u32 __always_unused flags)
592d4238f5SKrzysztof Kazimierczak {
60dced8ad3SAnirudh Venkataramanan 	return -EOPNOTSUPP;
612d4238f5SKrzysztof Kazimierczak }
622d4238f5SKrzysztof Kazimierczak 
63*e72bba21SMaciej Fijalkowski static inline void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring) { }
64*e72bba21SMaciej Fijalkowski static inline void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring) { }
652d4238f5SKrzysztof Kazimierczak #endif /* CONFIG_XDP_SOCKETS */
662d4238f5SKrzysztof Kazimierczak #endif /* !_ICE_XSK_H_ */
67