~ubuntu-branches/ubuntu/quantal/linux-linaro-mx51/quantal

« back to all changes in this revision

Viewing changes to drivers/net/gianfar.c

  • Committer: Package Import Robot
  • Author(s): John Rigby, John Rigby
  • Date: 2011-09-26 10:44:23 UTC
  • Revision ID: package-import@ubuntu.com-20110926104423-3o58a3c1bj7x00rs
Tags: 3.0.0-1007.9
[ John Rigby ]

Enable crypto modules and remove crypto-modules from
exclude-module files
LP: #826021

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
 * Maintainer: Kumar Gala
11
11
 * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com>
12
12
 *
13
 
 * Copyright 2002-2009 Freescale Semiconductor, Inc.
 
13
 * Copyright 2002-2009, 2011 Freescale Semiconductor, Inc.
14
14
 * Copyright 2007 MontaVista Software, Inc.
15
15
 *
16
16
 * This program is free software; you can redistribute  it and/or modify it
365
365
                gfar_write(&regs->rir0, DEFAULT_RIR0);
366
366
        }
367
367
 
368
 
        if (priv->rx_csum_enable)
 
368
        if (ndev->features & NETIF_F_RXCSUM)
369
369
                rctrl |= RCTRL_CHECKSUMMING;
370
370
 
371
371
        if (priv->extended_hash) {
463
463
        .ndo_start_xmit = gfar_start_xmit,
464
464
        .ndo_stop = gfar_close,
465
465
        .ndo_change_mtu = gfar_change_mtu,
 
466
        .ndo_set_features = gfar_set_features,
466
467
        .ndo_set_multicast_list = gfar_set_multi,
467
468
        .ndo_tx_timeout = gfar_timeout,
468
469
        .ndo_do_ioctl = gfar_ioctl,
475
476
#endif
476
477
};
477
478
 
478
 
unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
479
 
unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
480
 
 
481
479
void lock_rx_qs(struct gfar_private *priv)
482
480
{
483
481
        int i = 0x0;
513
511
/* Returns 1 if incoming frames use an FCB */
514
512
static inline int gfar_uses_fcb(struct gfar_private *priv)
515
513
{
516
 
        return priv->vlgrp || priv->rx_csum_enable ||
 
514
        return priv->vlgrp || (priv->ndev->features & NETIF_F_RXCSUM) ||
517
515
                (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER);
518
516
}
519
517
 
867
865
 
868
866
        rqfar--;
869
867
        rqfcr = RQFCR_CLE | RQFCR_PID_MASK | RQFCR_CMP_EXACT;
870
 
        ftp_rqfpr[rqfar] = rqfpr;
871
 
        ftp_rqfcr[rqfar] = rqfcr;
 
868
        priv->ftp_rqfpr[rqfar] = rqfpr;
 
869
        priv->ftp_rqfcr[rqfar] = rqfcr;
872
870
        gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
873
871
 
874
872
        rqfar--;
875
873
        rqfcr = RQFCR_CMP_NOMATCH;
876
 
        ftp_rqfpr[rqfar] = rqfpr;
877
 
        ftp_rqfcr[rqfar] = rqfcr;
 
874
        priv->ftp_rqfpr[rqfar] = rqfpr;
 
875
        priv->ftp_rqfcr[rqfar] = rqfcr;
878
876
        gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
879
877
 
880
878
        rqfar--;
881
879
        rqfcr = RQFCR_CMP_EXACT | RQFCR_PID_PARSE | RQFCR_CLE | RQFCR_AND;
882
880
        rqfpr = class;
883
 
        ftp_rqfcr[rqfar] = rqfcr;
884
 
        ftp_rqfpr[rqfar] = rqfpr;
 
881
        priv->ftp_rqfcr[rqfar] = rqfcr;
 
882
        priv->ftp_rqfpr[rqfar] = rqfpr;
885
883
        gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
886
884
 
887
885
        rqfar--;
888
886
        rqfcr = RQFCR_CMP_EXACT | RQFCR_PID_MASK | RQFCR_AND;
889
887
        rqfpr = class;
890
 
        ftp_rqfcr[rqfar] = rqfcr;
891
 
        ftp_rqfpr[rqfar] = rqfpr;
 
888
        priv->ftp_rqfcr[rqfar] = rqfcr;
 
889
        priv->ftp_rqfpr[rqfar] = rqfpr;
892
890
        gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
893
891
 
894
892
        return rqfar;
903
901
 
904
902
        /* Default rule */
905
903
        rqfcr = RQFCR_CMP_MATCH;
906
 
        ftp_rqfcr[rqfar] = rqfcr;
907
 
        ftp_rqfpr[rqfar] = rqfpr;
 
904
        priv->ftp_rqfcr[rqfar] = rqfcr;
 
905
        priv->ftp_rqfpr[rqfar] = rqfpr;
908
906
        gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
909
907
 
910
908
        rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6);
920
918
        /* Rest are masked rules */
921
919
        rqfcr = RQFCR_CMP_NOMATCH;
922
920
        for (i = 0; i < rqfar; i++) {
923
 
                ftp_rqfcr[i] = rqfcr;
924
 
                ftp_rqfpr[i] = rqfpr;
 
921
                priv->ftp_rqfcr[i] = rqfcr;
 
922
                priv->ftp_rqfpr[i] = rqfpr;
925
923
                gfar_write_filer(priv, i, rqfcr, rqfpr);
926
924
        }
927
925
}
1030
1028
                netif_napi_add(dev, &priv->gfargrp[i].napi, gfar_poll, GFAR_DEV_WEIGHT);
1031
1029
 
1032
1030
        if (priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) {
1033
 
                priv->rx_csum_enable = 1;
1034
 
                dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_HIGHDMA;
1035
 
        } else
1036
 
                priv->rx_csum_enable = 0;
 
1031
                dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG |
 
1032
                        NETIF_F_RXCSUM;
 
1033
                dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG |
 
1034
                        NETIF_F_RXCSUM | NETIF_F_HIGHDMA;
 
1035
        }
1037
1036
 
1038
1037
        priv->vlgrp = NULL;
1039
1038
 
2290
2289
        return 0;
2291
2290
}
2292
2291
 
 
2292
/* Check if rx parser should be activated */
 
2293
void gfar_check_rx_parser_mode(struct gfar_private *priv)
 
2294
{
 
2295
        struct gfar __iomem *regs;
 
2296
        u32 tempval;
 
2297
 
 
2298
        regs = priv->gfargrp[0].regs;
 
2299
 
 
2300
        tempval = gfar_read(&regs->rctrl);
 
2301
        /* If parse is no longer required, then disable parser */
 
2302
        if (tempval & RCTRL_REQ_PARSER)
 
2303
                tempval |= RCTRL_PRSDEP_INIT;
 
2304
        else
 
2305
                tempval &= ~RCTRL_PRSDEP_INIT;
 
2306
        gfar_write(&regs->rctrl, tempval);
 
2307
}
 
2308
 
2293
2309
 
2294
2310
/* Enables and disables VLAN insertion/extraction */
2295
2311
static void gfar_vlan_rx_register(struct net_device *dev,
2326
2342
                /* Disable VLAN tag extraction */
2327
2343
                tempval = gfar_read(&regs->rctrl);
2328
2344
                tempval &= ~RCTRL_VLEX;
2329
 
                /* If parse is no longer required, then disable parser */
2330
 
                if (tempval & RCTRL_REQ_PARSER)
2331
 
                        tempval |= RCTRL_PRSDEP_INIT;
2332
 
                else
2333
 
                        tempval &= ~RCTRL_PRSDEP_INIT;
2334
2345
                gfar_write(&regs->rctrl, tempval);
 
2346
 
 
2347
                gfar_check_rx_parser_mode(priv);
2335
2348
        }
2336
2349
 
2337
2350
        gfar_change_mtu(dev, dev->mtu);
2697
2710
        if (priv->padding)
2698
2711
                skb_pull(skb, priv->padding);
2699
2712
 
2700
 
        if (priv->rx_csum_enable)
 
2713
        if (dev->features & NETIF_F_RXCSUM)
2701
2714
                gfar_rx_checksum(skb, fcb);
2702
2715
 
2703
2716
        /* Tell the skb what kind of packet this is */