diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ixgbe/ixgbe.h | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 29 |
2 files changed, 20 insertions, 11 deletions
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h index d291d1cbe041..05a24055ac2f 100644 --- a/drivers/net/ixgbe/ixgbe.h +++ b/drivers/net/ixgbe/ixgbe.h | |||
@@ -75,6 +75,8 @@ | |||
75 | #define IXGBE_RXBUFFER_128 128 /* Used for packet split */ | 75 | #define IXGBE_RXBUFFER_128 128 /* Used for packet split */ |
76 | #define IXGBE_RXBUFFER_256 256 /* Used for packet split */ | 76 | #define IXGBE_RXBUFFER_256 256 /* Used for packet split */ |
77 | #define IXGBE_RXBUFFER_2048 2048 | 77 | #define IXGBE_RXBUFFER_2048 2048 |
78 | #define IXGBE_RXBUFFER_4096 4096 | ||
79 | #define IXGBE_RXBUFFER_8192 8192 | ||
78 | #define IXGBE_MAX_RXBUFFER 16384 /* largest size for a single descriptor */ | 80 | #define IXGBE_MAX_RXBUFFER 16384 /* largest size for a single descriptor */ |
79 | 81 | ||
80 | #define IXGBE_RX_HDR_SIZE IXGBE_RXBUFFER_256 | 82 | #define IXGBE_RX_HDR_SIZE IXGBE_RXBUFFER_256 |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index b53f26501173..4ab17ab7fbce 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -1995,21 +1995,28 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter) | |||
1995 | rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j)); | 1995 | rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j)); |
1996 | rscctrl |= IXGBE_RSCCTL_RSCEN; | 1996 | rscctrl |= IXGBE_RSCCTL_RSCEN; |
1997 | /* | 1997 | /* |
1998 | * if packet split is enabled we can only support up | 1998 | * we must limit the number of descriptors so that the |
1999 | * to max frags + 1 descriptors. | 1999 | * total size of max desc * buf_len is not greater |
2000 | * than 65535 | ||
2000 | */ | 2001 | */ |
2001 | if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) | 2002 | if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) { |
2002 | #if (MAX_SKB_FRAGS < 3) | 2003 | #if (MAX_SKB_FRAGS > 16) |
2003 | rscctrl |= IXGBE_RSCCTL_MAXDESC_1; | 2004 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; |
2004 | #elif (MAX_SKB_FRAGS < 7) | 2005 | #elif (MAX_SKB_FRAGS > 8) |
2005 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; | ||
2006 | #elif (MAX_SKB_FRAGS < 15) | ||
2007 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; | 2006 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; |
2007 | #elif (MAX_SKB_FRAGS > 4) | ||
2008 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; | ||
2008 | #else | 2009 | #else |
2009 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; | 2010 | rscctrl |= IXGBE_RSCCTL_MAXDESC_1; |
2010 | #endif | 2011 | #endif |
2011 | else | 2012 | } else { |
2012 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; | 2013 | if (rx_buf_len < IXGBE_RXBUFFER_4096) |
2014 | rscctrl |= IXGBE_RSCCTL_MAXDESC_16; | ||
2015 | else if (rx_buf_len < IXGBE_RXBUFFER_8192) | ||
2016 | rscctrl |= IXGBE_RSCCTL_MAXDESC_8; | ||
2017 | else | ||
2018 | rscctrl |= IXGBE_RSCCTL_MAXDESC_4; | ||
2019 | } | ||
2013 | IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(j), rscctrl); | 2020 | IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(j), rscctrl); |
2014 | } | 2021 | } |
2015 | /* Disable RSC for ACK packets */ | 2022 | /* Disable RSC for ACK packets */ |