source: trunk/target/linux/ixp4xx/patches-3.3/304-ixp4xx_eth_jumboframe.patch @ 31275

Last change on this file since 31275 was 31275, checked in by nbd, 4 years ago

ixp4xx: add support for linux 3.3.1

File size: 1.9 KB
  • drivers/net/ethernet/xscale/ixp4xx_eth.c

    a b  
    5757 
    5858#define POOL_ALLOC_SIZE         (sizeof(struct desc) * (RX_DESCS + TX_DESCS)) 
    5959#define REGS_SIZE               0x1000 
    60 #define MAX_MRU                 1536 /* 0x600 */ 
     60#define MAX_MRU                 (14320 - ETH_HLEN - ETH_FCS_LEN) 
    6161#define RX_BUFF_SIZE            ALIGN((NET_IP_ALIGN) + MAX_MRU, 4) 
    6262 
    6363#define NAPI_WEIGHT             16 
    static void destroy_queues(struct port * 
    12611261        } 
    12621262} 
    12631263 
     1264static int eth_do_change_mtu(struct net_device *dev, int mtu) 
     1265{ 
     1266        struct port *port; 
     1267        struct msg msg; 
     1268        /* adjust for ethernet headers */ 
     1269        int framesize = mtu + ETH_HLEN + ETH_FCS_LEN; 
     1270 
     1271        port = netdev_priv(dev); 
     1272 
     1273        memset(&msg, 0, sizeof(msg)); 
     1274        msg.cmd = NPE_SETMAXFRAMELENGTHS; 
     1275        msg.eth_id = port->id; 
     1276 
     1277        /* max rx/tx 64 byte blocks */ 
     1278        msg.byte2 = ((framesize + 63) / 64) << 8; 
     1279        msg.byte3 = ((framesize + 63) / 64) << 8; 
     1280 
     1281        msg.byte4 = msg.byte6 = framesize >> 8; 
     1282        msg.byte5 = msg.byte7 = framesize & 0xff; 
     1283 
     1284        if (npe_send_recv_message(port->npe, &msg, "ETH_SET_MAX_FRAME_LENGTH")) 
     1285                return -EIO; 
     1286 
     1287        return 0; 
     1288} 
     1289 
    12641290static int eth_open(struct net_device *dev) 
    12651291{ 
    12661292        struct port *port = netdev_priv(dev); 
    static int eth_open(struct net_device *d 
    13121338        if (npe_send_recv_message(port->npe, &msg, "ETH_SET_FIREWALL_MODE")) 
    13131339                return -EIO; 
    13141340 
     1341        eth_do_change_mtu(dev, dev->mtu); 
     1342 
    13151343        if ((err = request_queues(port)) != 0) 
    13161344                return err; 
    13171345 
    static int eth_close(struct net_device * 
    14511479        return 0; 
    14521480} 
    14531481 
     1482static int ixp_eth_change_mtu(struct net_device *dev, int mtu) 
     1483{ 
     1484        int ret; 
     1485 
     1486        if (mtu > MAX_MRU) 
     1487                return -EINVAL; 
     1488 
     1489        if (dev->flags & IFF_UP) { 
     1490                ret = eth_do_change_mtu(dev, mtu); 
     1491                if (ret < 0) 
     1492                        return ret; 
     1493        } 
     1494 
     1495        dev->mtu = mtu; 
     1496 
     1497        return 0; 
     1498} 
     1499 
    14541500static const struct net_device_ops ixp4xx_netdev_ops = { 
     1501        .ndo_change_mtu = ixp_eth_change_mtu, 
    14551502        .ndo_open = eth_open, 
    14561503        .ndo_stop = eth_close, 
    14571504        .ndo_start_xmit = eth_xmit, 
Note: See TracBrowser for help on using the repository browser.