0001
0002
0003
0004 #ifndef _NFP_DP_NFD3_H_
0005 #define _NFP_DP_NFD3_H_
0006
0007 struct sk_buff;
0008 struct net_device;
0009
0010
0011
0012 #define NFD3_DESC_TX_EOP BIT(7)
0013 #define NFD3_DESC_TX_OFFSET_MASK GENMASK(6, 0)
0014 #define NFD3_DESC_TX_MSS_MASK GENMASK(13, 0)
0015
0016
0017 #define NFD3_DESC_TX_CSUM BIT(7)
0018 #define NFD3_DESC_TX_IP4_CSUM BIT(6)
0019 #define NFD3_DESC_TX_TCP_CSUM BIT(5)
0020 #define NFD3_DESC_TX_UDP_CSUM BIT(4)
0021 #define NFD3_DESC_TX_VLAN BIT(3)
0022 #define NFD3_DESC_TX_LSO BIT(2)
0023 #define NFD3_DESC_TX_ENCAP BIT(1)
0024 #define NFD3_DESC_TX_O_IP4_CSUM BIT(0)
0025
0026 struct nfp_nfd3_tx_desc {
0027 union {
0028 struct {
0029 u8 dma_addr_hi;
0030 __le16 dma_len;
0031 u8 offset_eop;
0032
0033
0034 __le32 dma_addr_lo;
0035
0036 __le16 mss;
0037 u8 lso_hdrlen;
0038 u8 flags;
0039 union {
0040 struct {
0041 u8 l3_offset;
0042 u8 l4_offset;
0043 };
0044 __le16 vlan;
0045 };
0046 __le16 data_len;
0047 } __packed;
0048 __le32 vals[4];
0049 __le64 vals8[2];
0050 };
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 struct nfp_nfd3_tx_buf {
0069 union {
0070 struct sk_buff *skb;
0071 void *frag;
0072 struct xdp_buff *xdp;
0073 };
0074 dma_addr_t dma_addr;
0075 union {
0076 struct {
0077 short int fidx;
0078 u16 pkt_cnt;
0079 };
0080 struct {
0081 bool is_xsk_tx;
0082 };
0083 };
0084 u32 real_len;
0085 };
0086
0087 void
0088 nfp_nfd3_rx_csum(const struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,
0089 const struct nfp_net_rx_desc *rxd,
0090 const struct nfp_meta_parsed *meta, struct sk_buff *skb);
0091 bool
0092 nfp_nfd3_parse_meta(struct net_device *netdev, struct nfp_meta_parsed *meta,
0093 void *data, void *pkt, unsigned int pkt_len, int meta_len);
0094 void nfp_nfd3_tx_complete(struct nfp_net_tx_ring *tx_ring, int budget);
0095 int nfp_nfd3_poll(struct napi_struct *napi, int budget);
0096 netdev_tx_t nfp_nfd3_tx(struct sk_buff *skb, struct net_device *netdev);
0097 bool
0098 nfp_nfd3_ctrl_tx_one(struct nfp_net *nn, struct nfp_net_r_vector *r_vec,
0099 struct sk_buff *skb, bool old);
0100 void nfp_nfd3_ctrl_poll(struct tasklet_struct *t);
0101 void nfp_nfd3_rx_ring_fill_freelist(struct nfp_net_dp *dp,
0102 struct nfp_net_rx_ring *rx_ring);
0103 void nfp_nfd3_xsk_tx_free(struct nfp_nfd3_tx_buf *txbuf);
0104 int nfp_nfd3_xsk_poll(struct napi_struct *napi, int budget);
0105
0106 #endif