162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2019, Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _ICE_XSK_H_
562306a36Sopenharmony_ci#define _ICE_XSK_H_
662306a36Sopenharmony_ci#include "ice_txrx.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define PKTS_PER_BATCH 8
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifdef __clang__
1162306a36Sopenharmony_ci#define loop_unrolled_for _Pragma("clang loop unroll_count(8)") for
1262306a36Sopenharmony_ci#elif __GNUC__ >= 8
1362306a36Sopenharmony_ci#define loop_unrolled_for _Pragma("GCC unroll 8") for
1462306a36Sopenharmony_ci#else
1562306a36Sopenharmony_ci#define loop_unrolled_for for
1662306a36Sopenharmony_ci#endif
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct ice_vsi;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#ifdef CONFIG_XDP_SOCKETS
2162306a36Sopenharmony_ciint ice_xsk_pool_setup(struct ice_vsi *vsi, struct xsk_buff_pool *pool,
2262306a36Sopenharmony_ci		       u16 qid);
2362306a36Sopenharmony_ciint ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget);
2462306a36Sopenharmony_ciint ice_xsk_wakeup(struct net_device *netdev, u32 queue_id, u32 flags);
2562306a36Sopenharmony_cibool ice_alloc_rx_bufs_zc(struct ice_rx_ring *rx_ring, u16 count);
2662306a36Sopenharmony_cibool ice_xsk_any_rx_ring_ena(struct ice_vsi *vsi);
2762306a36Sopenharmony_civoid ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring);
2862306a36Sopenharmony_civoid ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring);
2962306a36Sopenharmony_cibool ice_xmit_zc(struct ice_tx_ring *xdp_ring);
3062306a36Sopenharmony_ciint ice_realloc_zc_buf(struct ice_vsi *vsi, bool zc);
3162306a36Sopenharmony_ci#else
3262306a36Sopenharmony_cistatic inline bool ice_xmit_zc(struct ice_tx_ring __always_unused *xdp_ring)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	return false;
3562306a36Sopenharmony_ci}
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistatic inline int
3862306a36Sopenharmony_ciice_xsk_pool_setup(struct ice_vsi __always_unused *vsi,
3962306a36Sopenharmony_ci		   struct xsk_buff_pool __always_unused *pool,
4062306a36Sopenharmony_ci		   u16 __always_unused qid)
4162306a36Sopenharmony_ci{
4262306a36Sopenharmony_ci	return -EOPNOTSUPP;
4362306a36Sopenharmony_ci}
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic inline int
4662306a36Sopenharmony_ciice_clean_rx_irq_zc(struct ice_rx_ring __always_unused *rx_ring,
4762306a36Sopenharmony_ci		    int __always_unused budget)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	return 0;
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic inline bool
5362306a36Sopenharmony_ciice_alloc_rx_bufs_zc(struct ice_rx_ring __always_unused *rx_ring,
5462306a36Sopenharmony_ci		     u16 __always_unused count)
5562306a36Sopenharmony_ci{
5662306a36Sopenharmony_ci	return false;
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistatic inline bool ice_xsk_any_rx_ring_ena(struct ice_vsi __always_unused *vsi)
6062306a36Sopenharmony_ci{
6162306a36Sopenharmony_ci	return false;
6262306a36Sopenharmony_ci}
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_cistatic inline int
6562306a36Sopenharmony_ciice_xsk_wakeup(struct net_device __always_unused *netdev,
6662306a36Sopenharmony_ci	       u32 __always_unused queue_id, u32 __always_unused flags)
6762306a36Sopenharmony_ci{
6862306a36Sopenharmony_ci	return -EOPNOTSUPP;
6962306a36Sopenharmony_ci}
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_cistatic inline void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring) { }
7262306a36Sopenharmony_cistatic inline void ice_xsk_clean_xdp_ring(struct ice_tx_ring *xdp_ring) { }
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_cistatic inline int
7562306a36Sopenharmony_ciice_realloc_zc_buf(struct ice_vsi __always_unused *vsi,
7662306a36Sopenharmony_ci		   bool __always_unused zc)
7762306a36Sopenharmony_ci{
7862306a36Sopenharmony_ci	return 0;
7962306a36Sopenharmony_ci}
8062306a36Sopenharmony_ci#endif /* CONFIG_XDP_SOCKETS */
8162306a36Sopenharmony_ci#endif /* !_ICE_XSK_H_ */
82