126ce8eb0SAlexander Lobakin /* SPDX-License-Identifier: GPL-2.0-only */ 226ce8eb0SAlexander Lobakin /* Copyright (C) 2025 Intel Corporation */ 326ce8eb0SAlexander Lobakin 426ce8eb0SAlexander Lobakin #ifndef __LIBETH_PRIV_H 526ce8eb0SAlexander Lobakin #define __LIBETH_PRIV_H 626ce8eb0SAlexander Lobakin 726ce8eb0SAlexander Lobakin #include <linux/types.h> 826ce8eb0SAlexander Lobakin 926ce8eb0SAlexander Lobakin /* XDP */ 1026ce8eb0SAlexander Lobakin 11*5495c58cSAlexander Lobakin enum xdp_action; 12b3ad8450SAlexander Lobakin struct libeth_xdp_buff; 13b3ad8450SAlexander Lobakin struct libeth_xdp_tx_frame; 1426ce8eb0SAlexander Lobakin struct skb_shared_info; 1526ce8eb0SAlexander Lobakin struct xdp_frame_bulk; 1626ce8eb0SAlexander Lobakin 1740e846d1SAlexander Lobakin extern const struct xsk_tx_metadata_ops libeth_xsktmo_slow; 1840e846d1SAlexander Lobakin 19b3ad8450SAlexander Lobakin void libeth_xsk_tx_return_bulk(const struct libeth_xdp_tx_frame *bq, 20b3ad8450SAlexander Lobakin u32 count); 21*5495c58cSAlexander Lobakin u32 libeth_xsk_prog_exception(struct libeth_xdp_buff *xdp, enum xdp_action act, 22*5495c58cSAlexander Lobakin int ret); 23b3ad8450SAlexander Lobakin 2426ce8eb0SAlexander Lobakin struct libeth_xdp_ops { 2526ce8eb0SAlexander Lobakin void (*bulk)(const struct skb_shared_info *sinfo, 2626ce8eb0SAlexander Lobakin struct xdp_frame_bulk *bq, bool frags); 27b3ad8450SAlexander Lobakin void (*xsk)(struct libeth_xdp_buff *xdp); 2826ce8eb0SAlexander Lobakin }; 2926ce8eb0SAlexander Lobakin 3026ce8eb0SAlexander Lobakin void libeth_attach_xdp(const struct libeth_xdp_ops *ops); 3126ce8eb0SAlexander Lobakin libeth_detach_xdp(void)3226ce8eb0SAlexander Lobakinstatic inline void libeth_detach_xdp(void) 3326ce8eb0SAlexander Lobakin { 3426ce8eb0SAlexander Lobakin libeth_attach_xdp(NULL); 3526ce8eb0SAlexander Lobakin } 3626ce8eb0SAlexander Lobakin 3726ce8eb0SAlexander Lobakin #endif /* __LIBETH_PRIV_H */ 38