RDMA/nes: Support for Packed And Unaligned fpdus
Support for Packed and Unaligned (PAU) FPDUs is needed for interoperability between NES and non-NES nodes. When the NES hardware detects a PAU frame, it will pass it to the driver to process the frame. NES driver creates a new frame for each FPDU and forwards it to the hardware to be sent to its associated qp. Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com> Signed-off-by: Faisal Latif <Faisal.Latif@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:

committed by
Roland Dreier

parent
6224c7eeff
commit
0f0bee8bbc
@@ -102,6 +102,7 @@
|
||||
#define NES_DRV_OPT_NO_INLINE_DATA 0x00000080
|
||||
#define NES_DRV_OPT_DISABLE_INT_MOD 0x00000100
|
||||
#define NES_DRV_OPT_DISABLE_VIRT_WQ 0x00000200
|
||||
#define NES_DRV_OPT_ENABLE_PAU 0x00000400
|
||||
|
||||
#define NES_AEQ_EVENT_TIMEOUT 2500
|
||||
#define NES_DISCONNECT_EVENT_TIMEOUT 2000
|
||||
@@ -128,6 +129,7 @@
|
||||
#define NES_DBG_IW_RX 0x00020000
|
||||
#define NES_DBG_IW_TX 0x00040000
|
||||
#define NES_DBG_SHUTDOWN 0x00080000
|
||||
#define NES_DBG_PAU 0x00100000
|
||||
#define NES_DBG_RSVD1 0x10000000
|
||||
#define NES_DBG_RSVD2 0x20000000
|
||||
#define NES_DBG_RSVD3 0x40000000
|
||||
@@ -162,6 +164,7 @@ do { \
|
||||
#include "nes_context.h"
|
||||
#include "nes_user.h"
|
||||
#include "nes_cm.h"
|
||||
#include "nes_mgt.h"
|
||||
|
||||
extern int max_mtu;
|
||||
#define max_frame_len (max_mtu+ETH_HLEN)
|
||||
@@ -202,6 +205,8 @@ extern atomic_t cm_nodes_created;
|
||||
extern atomic_t cm_nodes_destroyed;
|
||||
extern atomic_t cm_accel_dropped_pkts;
|
||||
extern atomic_t cm_resets_recvd;
|
||||
extern atomic_t pau_qps_created;
|
||||
extern atomic_t pau_qps_destroyed;
|
||||
|
||||
extern u32 int_mod_timer_init;
|
||||
extern u32 int_mod_cq_depth_256;
|
||||
@@ -273,6 +278,14 @@ struct nes_device {
|
||||
u8 link_recheck;
|
||||
};
|
||||
|
||||
/* Receive skb private area - must fit in skb->cb area */
|
||||
struct nes_rskb_cb {
|
||||
u64 busaddr;
|
||||
u32 maplen;
|
||||
u32 seqnum;
|
||||
u8 *data_start;
|
||||
struct nes_qp *nesqp;
|
||||
};
|
||||
|
||||
static inline __le32 get_crc_value(struct nes_v4_quad *nes_quad)
|
||||
{
|
||||
@@ -305,8 +318,8 @@ set_wqe_32bit_value(__le32 *wqe_words, u32 index, u32 value)
|
||||
static inline void
|
||||
nes_fill_init_cqp_wqe(struct nes_hw_cqp_wqe *cqp_wqe, struct nes_device *nesdev)
|
||||
{
|
||||
set_wqe_64bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_COMP_CTX_LOW_IDX,
|
||||
(u64)((unsigned long) &nesdev->cqp));
|
||||
cqp_wqe->wqe_words[NES_CQP_WQE_COMP_CTX_LOW_IDX] = 0;
|
||||
cqp_wqe->wqe_words[NES_CQP_WQE_COMP_CTX_HIGH_IDX] = 0;
|
||||
cqp_wqe->wqe_words[NES_CQP_WQE_COMP_SCRATCH_LOW_IDX] = 0;
|
||||
cqp_wqe->wqe_words[NES_CQP_WQE_COMP_SCRATCH_HIGH_IDX] = 0;
|
||||
cqp_wqe->wqe_words[NES_CQP_STAG_WQE_PBL_BLK_COUNT_IDX] = 0;
|
||||
|
Reference in New Issue
Block a user