net/octeontx2: setup link config based on BP level
[dpdk.git] / drivers / net / octeontx / base / octeontx_pki_var.h
index c793b65..4445369 100644 (file)
@@ -7,8 +7,17 @@
 
 #include <rte_byteorder.h>
 
-#define OCTTX_PACKET_WQE_SKIP          128
-#define OCTTX_PACKET_FIRST_SKIP                240
+#define OCTTX_PACKET_WQE_SKIP                  128
+#define OCTTX_PACKET_FIRST_SKIP_MAXREGVAL      496
+#define OCTTX_PACKET_FIRST_SKIP_MAXLEN         512
+#define OCTTX_PACKET_FIRST_SKIP_ADJUST(x)                              \
+               (RTE_MIN(x, OCTTX_PACKET_FIRST_SKIP_MAXREGVAL))
+#define OCTTX_PACKET_FIRST_SKIP_SUM(p)                                 \
+                               (OCTTX_PACKET_WQE_SKIP                  \
+                               + rte_pktmbuf_priv_size(p)              \
+                               + RTE_PKTMBUF_HEADROOM)
+#define OCTTX_PACKET_FIRST_SKIP(p)                                     \
+       OCTTX_PACKET_FIRST_SKIP_ADJUST(OCTTX_PACKET_FIRST_SKIP_SUM(p))
 #define OCTTX_PACKET_LATER_SKIP                128
 
 /* WQE descriptor */
@@ -206,4 +215,36 @@ enum lf_type_e {
        LF_UDP_VXLAN    = OCCTX_PKI_LTYPE_UDP_VXLAN,
        LF_NVGRE        = OCCTX_PKI_LTYPE_NVGRE,
 };
+
+/* Word 0 of HW segment buflink structure */
+typedef union octtx_pki_buflink_w0_u {
+       uint64_t v;
+       struct {
+               uint64_t        size:16;
+               uint64_t        rsvd1:15;
+               uint64_t        invfree:1;
+               /** Aura number of the next segment */
+               uint64_t        aura:16;
+               uint64_t        sw:9;
+               uint64_t        later_invfree:1;
+               uint64_t        rsvd2:5;
+               /** 1 if aura number is set */
+               uint64_t        has_aura:1;
+       } s;
+} octtx_pki_buflink_w0_t;
+
+/* Word 1 of HW segment buflink structure */
+typedef union octtx_pki_buflink_w1_u {
+       uint64_t v;
+       struct {
+               uint64_t        addr;
+       } s;
+} octtx_pki_buflink_w1_t;
+
+/* HW structure linking packet segments into singly linked list */
+typedef struct octtx_pki_buflink_s {
+       octtx_pki_buflink_w0_t    w0; /* Word 0 of the buflink */
+       octtx_pki_buflink_w1_t    w1; /* Word 1 of the buflink */
+} octtx_pki_buflink_t;
+
 #endif /* __OCTEONTX_PKI_VAR_H__ */