Commit d4ab8819 authored by Yi Zou's avatar Yi Zou Committed by David S. Miller

ixgbe: Add support for using FCoE DDP in 82599 as FCoE targets

The FCoE DDP in 82599 can be used for both FCoE initiator as well as FCoE
target, depending on the indication of the exchange being the responder or
originator in the F_CTL (frame control) field in the encapsulated Fiber
Channel frame header (T10 Spec., FC-FS). For the initiator, OX_ID is used
for FCoE DDP, where for the target RX_ID is used for FCoE DDP.
Signed-off-by: default avatarYi Zou <yi.zou@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 09ad1cc0
...@@ -292,6 +292,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, ...@@ -292,6 +292,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
struct sk_buff *skb) struct sk_buff *skb)
{ {
u16 xid; u16 xid;
u32 fctl;
u32 sterr, fceofe, fcerr, fcstat; u32 sterr, fceofe, fcerr, fcstat;
int rc = -EINVAL; int rc = -EINVAL;
struct ixgbe_fcoe *fcoe; struct ixgbe_fcoe *fcoe;
...@@ -312,7 +313,12 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, ...@@ -312,7 +313,12 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
skb_set_transport_header(skb, skb_network_offset(skb) + skb_set_transport_header(skb, skb_network_offset(skb) +
sizeof(struct fcoe_hdr)); sizeof(struct fcoe_hdr));
fh = (struct fc_frame_header *)skb_transport_header(skb); fh = (struct fc_frame_header *)skb_transport_header(skb);
xid = be16_to_cpu(fh->fh_ox_id); fctl = ntoh24(fh->fh_f_ctl);
if (fctl & FC_FC_EX_CTX)
xid = be16_to_cpu(fh->fh_ox_id);
else
xid = be16_to_cpu(fh->fh_rx_id);
if (xid >= IXGBE_FCOE_DDP_MAX) if (xid >= IXGBE_FCOE_DDP_MAX)
goto ddp_out; goto ddp_out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment