diff options
author | Alban Bedel <albeu@free.fr> | 2014-11-08 06:48:35 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-10 15:30:02 -0500 |
commit | ef786f106fe878a90f90b67aa95201a266de12de (patch) | |
tree | f86f301625bb6d7620aec4a9ea213034083dd142 | |
parent | b92172661e63c1f3528015bb378954c1a9e5bf4a (diff) |
8139too: Allow setting MTU larger than 1500
Replace the default ndo_change_mtu callback with one that allow
setting MTU that the driver can handle.
Signed-off-by: Alban Bedel <albeu@free.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/realtek/8139too.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c index 007b38cce69a..8387de985c06 100644 --- a/drivers/net/ethernet/realtek/8139too.c +++ b/drivers/net/ethernet/realtek/8139too.c | |||
@@ -185,6 +185,9 @@ static int debug = -1; | |||
185 | /* max supported ethernet frame size -- must be at least (dev->mtu+14+4).*/ | 185 | /* max supported ethernet frame size -- must be at least (dev->mtu+14+4).*/ |
186 | #define MAX_ETH_FRAME_SIZE 1536 | 186 | #define MAX_ETH_FRAME_SIZE 1536 |
187 | 187 | ||
188 | /* max supported payload size */ | ||
189 | #define MAX_ETH_DATA_SIZE (MAX_ETH_FRAME_SIZE - ETH_HLEN - ETH_FCS_LEN) | ||
190 | |||
188 | /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */ | 191 | /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */ |
189 | #define TX_BUF_SIZE MAX_ETH_FRAME_SIZE | 192 | #define TX_BUF_SIZE MAX_ETH_FRAME_SIZE |
190 | #define TX_BUF_TOT_LEN (TX_BUF_SIZE * NUM_TX_DESC) | 193 | #define TX_BUF_TOT_LEN (TX_BUF_SIZE * NUM_TX_DESC) |
@@ -920,11 +923,19 @@ static int rtl8139_set_features(struct net_device *dev, netdev_features_t featur | |||
920 | return 0; | 923 | return 0; |
921 | } | 924 | } |
922 | 925 | ||
926 | static int rtl8139_change_mtu(struct net_device *dev, int new_mtu) | ||
927 | { | ||
928 | if (new_mtu < 68 || new_mtu > MAX_ETH_DATA_SIZE) | ||
929 | return -EINVAL; | ||
930 | dev->mtu = new_mtu; | ||
931 | return 0; | ||
932 | } | ||
933 | |||
923 | static const struct net_device_ops rtl8139_netdev_ops = { | 934 | static const struct net_device_ops rtl8139_netdev_ops = { |
924 | .ndo_open = rtl8139_open, | 935 | .ndo_open = rtl8139_open, |
925 | .ndo_stop = rtl8139_close, | 936 | .ndo_stop = rtl8139_close, |
926 | .ndo_get_stats64 = rtl8139_get_stats64, | 937 | .ndo_get_stats64 = rtl8139_get_stats64, |
927 | .ndo_change_mtu = eth_change_mtu, | 938 | .ndo_change_mtu = rtl8139_change_mtu, |
928 | .ndo_validate_addr = eth_validate_addr, | 939 | .ndo_validate_addr = eth_validate_addr, |
929 | .ndo_set_mac_address = rtl8139_set_mac_address, | 940 | .ndo_set_mac_address = rtl8139_set_mac_address, |
930 | .ndo_start_xmit = rtl8139_start_xmit, | 941 | .ndo_start_xmit = rtl8139_start_xmit, |