0001
0002
0003
0004 #ifndef _ICE_XSK_H_
0005 #define _ICE_XSK_H_
0006 #include "ice_txrx.h"
0007
0008 #define PKTS_PER_BATCH 8
0009
0010 #ifdef __clang__
0011 #define loop_unrolled_for _Pragma("clang loop unroll_count(8)") for
0012 #elif __GNUC__ >= 8
0013 #define loop_unrolled_for _Pragma("GCC unroll 8") for
0014 #else
0015 #define loop_unrolled_for for
0016 #endif
0017
0018 struct ice_vsi;
0019
0020 #ifdef CONFIG_XDP_SOCKETS
0021 int ice_xsk_pool_setup(struct ice_vsi *vsi, struct xsk_buff_pool *pool,
0022 u16 qid);
0023 int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget);
0024 int ice_xsk_wakeup(struct net_device *netdev, u32 queue_id, u32 flags);
0025 bool ice_alloc_rx_bufs_zc(struct ice_rx_ring *rx_ring, u16 count);
0026 bool ice_xsk_any_rx_ring_ena(struct ice_vsi *vsi);
0027 void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring);
0028 void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring);
0029 bool ice_xmit_zc(struct ice_tx_ring *xdp_ring);
0030 int ice_realloc_zc_buf(struct ice_vsi *vsi, bool zc);
0031 #else
0032 static inline bool ice_xmit_zc(struct ice_tx_ring __always_unused *xdp_ring)
0033 {
0034 return false;
0035 }
0036
0037 static inline int
0038 ice_xsk_pool_setup(struct ice_vsi __always_unused *vsi,
0039 struct xsk_buff_pool __always_unused *pool,
0040 u16 __always_unused qid)
0041 {
0042 return -EOPNOTSUPP;
0043 }
0044
0045 static inline int
0046 ice_clean_rx_irq_zc(struct ice_rx_ring __always_unused *rx_ring,
0047 int __always_unused budget)
0048 {
0049 return 0;
0050 }
0051
0052 static inline bool
0053 ice_alloc_rx_bufs_zc(struct ice_rx_ring __always_unused *rx_ring,
0054 u16 __always_unused count)
0055 {
0056 return false;
0057 }
0058
0059 static inline bool ice_xsk_any_rx_ring_ena(struct ice_vsi __always_unused *vsi)
0060 {
0061 return false;
0062 }
0063
0064 static inline int
0065 ice_xsk_wakeup(struct net_device __always_unused *netdev,
0066 u32 __always_unused queue_id, u32 __always_unused flags)
0067 {
0068 return -EOPNOTSUPP;
0069 }
0070
0071 static inline void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring) { }
0072 static inline void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring) { }
0073
0074 static inline int
0075 ice_realloc_zc_buf(struct ice_vsi __always_unused *vsi,
0076 bool __always_unused zc)
0077 {
0078 return 0;
0079 }
0080 #endif
0081 #endif