net: stmmac: add Rx HWTS metadata to XDP ZC receive pkt
Add receive hardware timestamp metadata support via kfunc to XDP Zero Copy receive packets. Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e3f9c3e348
commit
9570df3533
@ -1614,6 +1614,12 @@ static int stmmac_alloc_rx_buffers_zc(struct stmmac_priv *priv,
|
||||
struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
|
||||
int i;
|
||||
|
||||
/* struct stmmac_xdp_buff is using cb field (maximum size of 24 bytes)
|
||||
* in struct xdp_buff_xsk to stash driver specific information. Thus,
|
||||
* use this macro to make sure no size violations.
|
||||
*/
|
||||
XSK_CHECK_PRIV_TYPE(struct stmmac_xdp_buff);
|
||||
|
||||
for (i = 0; i < dma_conf->dma_rx_size; i++) {
|
||||
struct stmmac_rx_buffer *buf;
|
||||
dma_addr_t dma_addr;
|
||||
@ -4998,6 +5004,16 @@ static bool stmmac_rx_refill_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct stmmac_xdp_buff *xsk_buff_to_stmmac_ctx(struct xdp_buff *xdp)
|
||||
{
|
||||
/* In XDP zero copy data path, xdp field in struct xdp_buff_xsk is used
|
||||
* to represent incoming packet, whereas cb field in the same structure
|
||||
* is used to store driver specific info. Thus, struct stmmac_xdp_buff
|
||||
* is laid on top of xdp and cb fields of struct xdp_buff_xsk.
|
||||
*/
|
||||
return (struct stmmac_xdp_buff *)xdp;
|
||||
}
|
||||
|
||||
static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
|
||||
{
|
||||
struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
|
||||
@ -5027,6 +5043,7 @@ static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
|
||||
}
|
||||
while (count < limit) {
|
||||
struct stmmac_rx_buffer *buf;
|
||||
struct stmmac_xdp_buff *ctx;
|
||||
unsigned int buf1_len = 0;
|
||||
struct dma_desc *np, *p;
|
||||
int entry;
|
||||
@ -5112,6 +5129,11 @@ read_again:
|
||||
goto read_again;
|
||||
}
|
||||
|
||||
ctx = xsk_buff_to_stmmac_ctx(buf->xdp);
|
||||
ctx->priv = priv;
|
||||
ctx->desc = p;
|
||||
ctx->ndesc = np;
|
||||
|
||||
/* XDP ZC Frame only support primary buffers for now */
|
||||
buf1_len = stmmac_rx_buf1_len(priv, p, status, len);
|
||||
len += buf1_len;
|
||||
|
Loading…
x
Reference in New Issue
Block a user