2016-04-20 00:00:20 +05:30
/*
* Copyright ( c ) 2016 Chelsio Communications , Inc .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation .
*
*/
# ifndef __CXGBIT_LRO_H__
# define __CXGBIT_LRO_H__
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/errno.h>
# include <linux/types.h>
# include <linux/skbuff.h>
# define LRO_FLUSH_LEN_MAX 65535
struct cxgbit_lro_cb {
struct cxgbit_sock * csk ;
u32 pdu_totallen ;
u32 offset ;
u8 pdu_idx ;
bool complete ;
} ;
enum cxgbit_pducb_flags {
PDUCBF_RX_HDR = ( 1 < < 0 ) , /* received pdu header */
PDUCBF_RX_DATA = ( 1 < < 1 ) , /* received pdu payload */
PDUCBF_RX_STATUS = ( 1 < < 2 ) , /* received ddp status */
PDUCBF_RX_DATA_DDPD = ( 1 < < 3 ) , /* pdu payload ddp'd */
2017-01-13 20:53:25 +05:30
PDUCBF_RX_DDP_CMP = ( 1 < < 4 ) , /* ddp completion */
PDUCBF_RX_HCRC_ERR = ( 1 < < 5 ) , /* header digest error */
PDUCBF_RX_DCRC_ERR = ( 1 < < 6 ) , /* data digest error */
2016-04-20 00:00:20 +05:30
} ;
struct cxgbit_lro_pdu_cb {
u8 flags ;
u8 frags ;
u8 hfrag_idx ;
u8 nr_dfrags ;
u8 dfrag_idx ;
bool complete ;
u32 seq ;
u32 pdulen ;
u32 hlen ;
u32 dlen ;
u32 doffset ;
u32 ddigest ;
void * hdr ;
} ;
# define LRO_SKB_MAX_HEADROOM \
( sizeof ( struct cxgbit_lro_cb ) + \
( MAX_SKB_FRAGS * sizeof ( struct cxgbit_lro_pdu_cb ) ) )
# define LRO_SKB_MIN_HEADROOM \
( sizeof ( struct cxgbit_lro_cb ) + \
sizeof ( struct cxgbit_lro_pdu_cb ) )
# define cxgbit_skb_lro_cb(skb) ((struct cxgbit_lro_cb *)skb->data)
# define cxgbit_skb_lro_pdu_cb(skb, i) \
( ( struct cxgbit_lro_pdu_cb * ) ( skb - > data + sizeof ( struct cxgbit_lro_cb ) \
+ ( i * sizeof ( struct cxgbit_lro_pdu_cb ) ) ) )
# define CPL_RX_ISCSI_DDP_STATUS_DDP_SHIFT 16 /* ddp'able */
# define CPL_RX_ISCSI_DDP_STATUS_PAD_SHIFT 19 /* pad error */
# define CPL_RX_ISCSI_DDP_STATUS_HCRC_SHIFT 20 /* hcrc error */
# define CPL_RX_ISCSI_DDP_STATUS_DCRC_SHIFT 21 /* dcrc error */
# endif /*__CXGBIT_LRO_H_*/