FCoE support in cxgb4 driver
Subsystems (4)
cover FCoE support in cxgb4 driver
This patch series enables FCoE support in cxgb4 driver, it enables FCOE_CRC and FCOE_MTU net device features.
This series is created against net-next tree.
Thanks
Varun Prakash (3):
cxgb4: add cxgb4_fcoe.h and macro definitions for FCoE
cxgb4: add cxgb4_fcoe.c for FCoE
cxgb4: update Kconfig and Makefile for FCoE support
drivers/net/ethernet/chelsio/Kconfig | 11 ++ drivers/net/ethernet/chelsio/cxgb4/Makefile | 1 + drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 7 ++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c | 122 +++++++++++++++++++++++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h | 57 +++++++++++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 8 ++ drivers/net/ethernet/chelsio/cxgb4/sge.c | 74 +++++++++++++- drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 25 +++++ 8 files changed, 302 insertions(+), 3 deletions(-) create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h
PATCH 1/3 cxgb4: add cxgb4_fcoe.h and macro definitions for FCoE
This patch adds new header file cxgb4_fcoe.h and defines new macros for FCoE support in cxgb4 driver.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 7 +++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h | 57 +++++++++++++++++++++++ drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 25 ++++++++++ 3 files changed, 89 insertions(+), 0 deletions(-) create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +7 -0
@@ -387,6 +387,10 @@ struct sge_rspq;#include "cxgb4_dcb.h" +#ifdef CONFIG_CHELSIO_T4_FCOE +#include "cxgb4_fcoe.h" +#endif /* CONFIG_CHELSIO_T4_FCOE */ +struct port_info {struct adapter *adapter;u16 viid;
@@ -406,6 +410,9 @@ struct port_info {#ifdef CONFIG_CHELSIO_T4_DCB struct port_dcb_info dcb;/* Data Center Bridging support */ #endif +#ifdef CONFIG_CHELSIO_T4_FCOE +struct cxgb_fcoe fcoe; +#endif /* CONFIG_CHELSIO_T4_FCOE */ };struct dentry ;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h new file +57 -0
57 lines not on this page · raw message
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h +25 -0
@@ -794,6 +794,14 @@ struct cpl_rx_pkt {__be16 err_vec; }; +#define RXF_PSH_S 20 +#define RXF_PSH_V (x) ((x) << RXF_PSH_S) +#define RXF_PSH_F RXF_PSH_V(1U) + +#define RXF_SYN_S 21 +#define RXF_SYN_V (x) ((x) << RXF_SYN_S) +#define RXF_SYN_F RXF_SYN_V(1U) +#define RXF_UDP_S 22#define RXF_UDP_V (x) ((x) << RXF_UDP_S)#define RXF_UDP_F RXF_UDP_V(1U)
@@ -810,6 +818,18 @@ struct cpl_rx_pkt {#define RXF_IP6_V (x) ((x) << RXF_IP6_S)#define RXF_IP6_F RXF_IP6_V(1U) +#define RXF_SYN_COOKIE_S 26 +#define RXF_SYN_COOKIE_V (x) ((x) << RXF_SYN_COOKIE_S) +#define RXF_SYN_COOKIE_F RXF_SYN_COOKIE_V(1U) + +#define RXF_FCOE_S 26 +#define RXF_FCOE_V (x) ((x) << RXF_FCOE_S) +#define RXF_FCOE_F RXF_FCOE_V(1U) + +#define RXF_LRO_S 27 +#define RXF_LRO_V (x) ((x) << RXF_LRO_S) +#define RXF_LRO_F RXF_LRO_V(1U) +/* rx_pkt.l2info fields */ #define RX_ETHHDR_LEN_S 0#define RX_ETHHDR_LEN_M 0x1F
@@ -846,6 +866,11 @@ struct cpl_rx_pkt {#define RX_IPHDR_LEN_V (x) ((x) << RX_IPHDR_LEN_S)#define RX_IPHDR_LEN_G (x) (((x) >> RX_IPHDR_LEN_S) & RX_IPHDR_LEN_M) +/* rx_pkt.err_vec fields */ +#define RXERR_CSUM_S 13 +#define RXERR_CSUM_V (x) ((x) << RXERR_CSUM_S) +#define RXERR_CSUM_F RXERR_CSUM_V(1U) +struct cpl_trace_pkt {u8 opcode;u8 intf;
Signature · 1 line
1.7.1
PATCH 2/3 cxgb4: add cxgb4_fcoe.c for FCoE
In reply to Varun PrakashThis patch adds cxgb4_fcoe.c and enables FCOE_CRC, FCOE_MTU net device features.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c | 122 +++++++++++++++++++++++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 8 ++ drivers/net/ethernet/chelsio/cxgb4/sge.c | 74 +++++++++++++- 3 files changed, 201 insertions(+), 3 deletions(-) create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c new file +122 -0
@@ -0,0 +1,122 @@ +/* +* This file is part of the Chelsio T4 Ethernet driver for Linux. +* +* Copyright (c) 2015 Chelsio Communications, Inc. All rights reserved. +* +* This software is available to you under a choice of one of two +* licenses. You may choose to be licensed under the terms of the GNU +* General Public License (GPL) Version 2, available from the file +* COPYING in the main directory of this source tree, or the +* OpenIB.org BSD license below: +* +* Redistribution and use in source and binary forms, with or +* without modification, are permitted provided that the following +* conditions are met: +* +* - Redistributions of source code must retain the above +* copyright notice, this list of conditions and the following +* disclaimer. +* +* - Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ + +#ifdef CONFIG_CHELSIO_T4_FCOE + +#include <scsi/fc/fc_fs.h> +#include <scsi/libfcoe.h> +#include "cxgb4.h" + +bool cxgb_fcoe_sof_eof_supported (struct adapter *adap,struct sk_buff *skb) +{ +struct fcoe_hdr *fcoeh = (struct fcoe_hdr *)skb_network_header (skb); +u8 sof = fcoeh->fcoe_sof; +u8 eof =0 ; + +if ((sof !=FC_SOF_I3 ) && (sof !=FC_SOF_N3 )) { +dev_err (adap->pdev_dev,"Unsupported SOF 0x%x\n" , sof); +return 0 ; + } + +skb_copy_bits (skb, skb->len -4 , &eof,1 ); + +if ((eof !=FC_EOF_N ) && (eof !=FC_EOF_T )) { +dev_err (adap->pdev_dev,"Unsupported EOF 0x%x\n" , eof); +return 0 ; + } + +return 1 ; +} + +/** +* cxgb_fcoe_enable - enable FCoE offload features +* @netdev: net device +* +* Returns 0 on success or -EINVAL on failure. +*/ +int cxgb_fcoe_enable (struct net_device *netdev) +{ +struct port_info *pi =netdev_priv (netdev); +struct adapter *adap = pi->adapter; +struct cxgb_fcoe *fcoe = &pi->fcoe; + +if (is_t4 (adap->params.chip)) +return -EINVAL ; + +if (!(adap->flags &FULL_INIT_DONE )) +return -EINVAL ; + +dev_info (adap->pdev_dev,"Enabling FCoE offload features\n" ); + + netdev->features |=NETIF_F_FCOE_CRC ; + netdev->vlan_features |=NETIF_F_FCOE_CRC ; + netdev->features |=NETIF_F_FCOE_MTU ; + netdev->vlan_features |=NETIF_F_FCOE_MTU ; + +netdev_features_change (netdev); + + fcoe->flags |=CXGB_FCOE_ENABLED ; + +return 0 ; +} + +/** +* cxgb_fcoe_disable - disable FCoE offload +* @netdev: net device +* +* Returns 0 on success or -EINVAL on failure. +*/ +int cxgb_fcoe_disable (struct net_device *netdev) +{ +struct port_info *pi =netdev_priv (netdev); +struct adapter *adap = pi->adapter; +struct cxgb_fcoe *fcoe = &pi->fcoe; + +if (!(fcoe->flags &CXGB_FCOE_ENABLED )) +return -EINVAL ; + +dev_info (adap->pdev_dev,"Disabling FCoE offload features\n" ); + + fcoe->flags &= ~CXGB_FCOE_ENABLED ; + + netdev->features &= ~NETIF_F_FCOE_CRC ; + netdev->vlan_features &= ~NETIF_F_FCOE_CRC ; + netdev->features &= ~NETIF_F_FCOE_MTU ; + netdev->vlan_features &= ~NETIF_F_FCOE_MTU ; + +netdev_features_change (netdev); + +return 0 ; +} +#endif /* CONFIG_CHELSIO_T4_FCOE */
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +8 -0
@@ -1271,6 +1271,10 @@ static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb, txq =0 ; }else { txq = (vlan_tci &VLAN_PRIO_MASK ) >>VLAN_PRIO_SHIFT ; +#ifdef CONFIG_CHELSIO_T4_FCOE +if (skb->protocol ==htons (ETH_P_FCOE )) + txq = skb->priority &0x7 ; +#endif /* CONFIG_CHELSIO_T4_FCOE */ }return txq; }
@@ -4578,6 +4582,10 @@ static const struct net_device_ops cxgb4_netdev_ops = {#ifdef CONFIG_NET_POLL_CONTROLLER .ndo_poll_controller = cxgb_netpoll,#endif +#ifdef CONFIG_CHELSIO_T4_FCOE + .ndo_fcoe_enable = cxgb_fcoe_enable, + .ndo_fcoe_disable = cxgb_fcoe_disable, +#endif /* CONFIG_CHELSIO_T4_FCOE */ #ifdef CONFIG_NET_RX_BUSY_POLL .ndo_busy_poll = cxgb_busy_poll,#endif
drivers/net/ethernet/chelsio/cxgb4/sge.c +71 -3
122 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH 3/3 cxgb4: update Kconfig and Makefile for FCoE support
In reply to Varun Prakash--- drivers/net/ethernet/chelsio/Kconfig | 11 +++++++++++ drivers/net/ethernet/chelsio/cxgb4/Makefile | 1 + 2 files changed, 12 insertions(+), 0 deletions(-)
drivers/net/ethernet/chelsio/Kconfig +11 -0
@@ -97,6 +97,17 @@ config CHELSIO_T4_DCB If unsure, say N. +config CHELSIO_T4_FCOE + bool "Fibre Channel over Ethernet (FCoE) Support for Chelsio T5 cards" + default n + depends on CHELSIO_T4 && CHELSIO_T4_DCB && FCOE + ---help--- + Enable FCoE offload features. + Say Y here if you want to enable Fibre Channel over Ethernet (FCoE) support + in the driver. + + If unsure, say N. + config CHELSIO_T4VF tristate "Chelsio Communications T4/T5 Virtual Function Ethernet support" depends on PCI
drivers/net/ethernet/chelsio/cxgb4/Makefile +1 -0
@@ -6,4 +6,5 @@ obj-$(CONFIG_CHELSIO_T4) += cxgb4.o cxgb4-objs := cxgb4_main.o l2t.o t4_hw.o sge.o clip_tbl.o cxgb4-$(CONFIG_CHELSIO_T4_DCB) += cxgb4_dcb.o +cxgb4-$(CONFIG_CHELSIO_T4_FCOE) += cxgb4_fcoe.o cxgb4-$(CONFIG_DEBUG_FS) += cxgb4_debugfs.o
Signature · 1 line
1.7.1
David Miller
maintainerFrom: Varun Prakash <[email protected]>
Date: Tue, 24 Mar 2015 19:14:44 +0530
Quoted 4 lines
This patch series enables FCoE support in cxgb4 driver, it enables
FCOE_CRCandFCOE_MTUnet device features.This series is created against net-next tree.
Series applied, thank you.