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 
8126cdfe1SMaciej Fijalkowski #define PKTS_PER_BATCH 8
9126cdfe1SMaciej Fijalkowski 
10126cdfe1SMaciej Fijalkowski #ifdef __clang__
11126cdfe1SMaciej Fijalkowski #define loop_unrolled_for _Pragma("clang loop unroll_count(8)") for
1213d04d79SMaciej Fijalkowski #elif __GNUC__ >= 8
13126cdfe1SMaciej Fijalkowski #define loop_unrolled_for _Pragma("GCC unroll 8") for
14126cdfe1SMaciej Fijalkowski #else
15126cdfe1SMaciej Fijalkowski #define loop_unrolled_for for
16126cdfe1SMaciej Fijalkowski #endif
17126cdfe1SMaciej Fijalkowski 
182d4238f5SKrzysztof Kazimierczak struct ice_vsi;
192d4238f5SKrzysztof Kazimierczak 
202d4238f5SKrzysztof Kazimierczak #ifdef CONFIG_XDP_SOCKETS
211742b3d5SMagnus Karlsson int ice_xsk_pool_setup(struct ice_vsi *vsi, struct xsk_buff_pool *pool,
221742b3d5SMagnus Karlsson 		       u16 qid);
23e72bba21SMaciej Fijalkowski int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget);
242d4238f5SKrzysztof Kazimierczak int ice_xsk_wakeup(struct net_device *netdev, u32 queue_id, u32 flags);
25e72bba21SMaciej Fijalkowski bool ice_alloc_rx_bufs_zc(struct ice_rx_ring *rx_ring, u16 count);
262d4238f5SKrzysztof Kazimierczak bool ice_xsk_any_rx_ring_ena(struct ice_vsi *vsi);
27e72bba21SMaciej Fijalkowski void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring);
28e72bba21SMaciej Fijalkowski void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring);
29*29322791SMaciej Fijalkowski bool ice_xmit_zc(struct ice_tx_ring *xdp_ring);
307e753eb6SPrzemyslaw Patynowski int ice_realloc_zc_buf(struct ice_vsi *vsi, bool zc);
312d4238f5SKrzysztof Kazimierczak #else
ice_xmit_zc(struct ice_tx_ring __always_unused * xdp_ring)32*29322791SMaciej Fijalkowski static inline bool ice_xmit_zc(struct ice_tx_ring __always_unused *xdp_ring)
33126cdfe1SMaciej Fijalkowski {
34126cdfe1SMaciej Fijalkowski 	return false;
35126cdfe1SMaciej Fijalkowski }
36126cdfe1SMaciej Fijalkowski 
372d4238f5SKrzysztof Kazimierczak static inline int
ice_xsk_pool_setup(struct ice_vsi __always_unused * vsi,struct xsk_buff_pool __always_unused * pool,u16 __always_unused qid)381742b3d5SMagnus Karlsson ice_xsk_pool_setup(struct ice_vsi __always_unused *vsi,
391742b3d5SMagnus Karlsson 		   struct xsk_buff_pool __always_unused *pool,
402d4238f5SKrzysztof Kazimierczak 		   u16 __always_unused qid)
412d4238f5SKrzysztof Kazimierczak {
42dced8ad3SAnirudh Venkataramanan 	return -EOPNOTSUPP;
432d4238f5SKrzysztof Kazimierczak }
442d4238f5SKrzysztof Kazimierczak 
452d4238f5SKrzysztof Kazimierczak static inline int
ice_clean_rx_irq_zc(struct ice_rx_ring __always_unused * rx_ring,int __always_unused budget)46e72bba21SMaciej Fijalkowski ice_clean_rx_irq_zc(struct ice_rx_ring __always_unused *rx_ring,
472d4238f5SKrzysztof Kazimierczak 		    int __always_unused budget)
482d4238f5SKrzysztof Kazimierczak {
492d4238f5SKrzysztof Kazimierczak 	return 0;
502d4238f5SKrzysztof Kazimierczak }
512d4238f5SKrzysztof Kazimierczak 
522d4238f5SKrzysztof Kazimierczak static inline bool
ice_alloc_rx_bufs_zc(struct ice_rx_ring __always_unused * rx_ring,u16 __always_unused count)53e72bba21SMaciej Fijalkowski ice_alloc_rx_bufs_zc(struct ice_rx_ring __always_unused *rx_ring,
542d4238f5SKrzysztof Kazimierczak 		     u16 __always_unused count)
552d4238f5SKrzysztof Kazimierczak {
562d4238f5SKrzysztof Kazimierczak 	return false;
572d4238f5SKrzysztof Kazimierczak }
582d4238f5SKrzysztof Kazimierczak 
ice_xsk_any_rx_ring_ena(struct ice_vsi __always_unused * vsi)592d4238f5SKrzysztof Kazimierczak static inline bool ice_xsk_any_rx_ring_ena(struct ice_vsi __always_unused *vsi)
602d4238f5SKrzysztof Kazimierczak {
612d4238f5SKrzysztof Kazimierczak 	return false;
622d4238f5SKrzysztof Kazimierczak }
632d4238f5SKrzysztof Kazimierczak 
642d4238f5SKrzysztof Kazimierczak static inline int
ice_xsk_wakeup(struct net_device __always_unused * netdev,u32 __always_unused queue_id,u32 __always_unused flags)652d4238f5SKrzysztof Kazimierczak ice_xsk_wakeup(struct net_device __always_unused *netdev,
662d4238f5SKrzysztof Kazimierczak 	       u32 __always_unused queue_id, u32 __always_unused flags)
672d4238f5SKrzysztof Kazimierczak {
68dced8ad3SAnirudh Venkataramanan 	return -EOPNOTSUPP;
692d4238f5SKrzysztof Kazimierczak }
702d4238f5SKrzysztof Kazimierczak 
ice_xsk_clean_rx_ring(struct ice_rx_ring * rx_ring)71e72bba21SMaciej Fijalkowski static inline void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring) { }
ice_xsk_clean_xdp_ring(struct ice_tx_ring * xdp_ring)72e72bba21SMaciej Fijalkowski static inline void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring) { }
737e753eb6SPrzemyslaw Patynowski 
747e753eb6SPrzemyslaw Patynowski static inline int
ice_realloc_zc_buf(struct ice_vsi __always_unused * vsi,bool __always_unused zc)757e753eb6SPrzemyslaw Patynowski ice_realloc_zc_buf(struct ice_vsi __always_unused *vsi,
767e753eb6SPrzemyslaw Patynowski 		   bool __always_unused zc)
777e753eb6SPrzemyslaw Patynowski {
787e753eb6SPrzemyslaw Patynowski 	return 0;
797e753eb6SPrzemyslaw Patynowski }
802d4238f5SKrzysztof Kazimierczak #endif /* CONFIG_XDP_SOCKETS */
812d4238f5SKrzysztof Kazimierczak #endif /* !_ICE_XSK_H_ */
82