~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/net/mii.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
                result |= ADVERTISED_100baseT_Half;
50
50
        if (advert & ADVERTISE_100FULL)
51
51
                result |= ADVERTISED_100baseT_Full;
 
52
        if (advert & ADVERTISE_PAUSE_CAP)
 
53
                result |= ADVERTISED_Pause;
 
54
        if (advert & ADVERTISE_PAUSE_ASYM)
 
55
                result |= ADVERTISED_Asym_Pause;
52
56
 
53
57
        return result;
54
58
}
58
62
 * @mii: MII interface
59
63
 * @ecmd: requested ethtool_cmd
60
64
 *
 
65
 * The @ecmd parameter is expected to have been cleared before calling
 
66
 * mii_ethtool_gset().
 
67
 *
61
68
 * Returns 0 for success, negative on error.
62
69
 */
63
70
int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
118
125
 
119
126
                if (nego & (ADVERTISED_1000baseT_Full |
120
127
                            ADVERTISED_1000baseT_Half)) {
121
 
                        ecmd->speed = SPEED_1000;
 
128
                        ethtool_cmd_speed_set(ecmd, SPEED_1000);
122
129
                        ecmd->duplex = !!(nego & ADVERTISED_1000baseT_Full);
123
130
                } else if (nego & (ADVERTISED_100baseT_Full |
124
131
                                   ADVERTISED_100baseT_Half)) {
125
 
                        ecmd->speed = SPEED_100;
 
132
                        ethtool_cmd_speed_set(ecmd, SPEED_100);
126
133
                        ecmd->duplex = !!(nego & ADVERTISED_100baseT_Full);
127
134
                } else {
128
 
                        ecmd->speed = SPEED_10;
 
135
                        ethtool_cmd_speed_set(ecmd, SPEED_10);
129
136
                        ecmd->duplex = !!(nego & ADVERTISED_10baseT_Full);
130
137
                }
131
138
        } else {
132
139
                ecmd->autoneg = AUTONEG_DISABLE;
133
140
 
134
 
                ecmd->speed = ((bmcr & BMCR_SPEED1000 &&
135
 
                                (bmcr & BMCR_SPEED100) == 0) ? SPEED_1000 :
136
 
                               (bmcr & BMCR_SPEED100) ? SPEED_100 : SPEED_10);
 
141
                ethtool_cmd_speed_set(ecmd,
 
142
                                      ((bmcr & BMCR_SPEED1000 &&
 
143
                                        (bmcr & BMCR_SPEED100) == 0) ?
 
144
                                       SPEED_1000 :
 
145
                                       ((bmcr & BMCR_SPEED100) ?
 
146
                                        SPEED_100 : SPEED_10)));
137
147
                ecmd->duplex = (bmcr & BMCR_FULLDPLX) ? DUPLEX_FULL : DUPLEX_HALF;
138
148
        }
139
149
 
154
164
int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
155
165
{
156
166
        struct net_device *dev = mii->dev;
 
167
        u32 speed = ethtool_cmd_speed(ecmd);
157
168
 
158
 
        if (ecmd->speed != SPEED_10 &&
159
 
            ecmd->speed != SPEED_100 &&
160
 
            ecmd->speed != SPEED_1000)
 
169
        if (speed != SPEED_10 &&
 
170
            speed != SPEED_100 &&
 
171
            speed != SPEED_1000)
161
172
                return -EINVAL;
162
173
        if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
163
174
                return -EINVAL;
169
180
                return -EINVAL;
170
181
        if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
171
182
                return -EINVAL;
172
 
        if ((ecmd->speed == SPEED_1000) && (!mii->supports_gmii))
 
183
        if ((speed == SPEED_1000) && (!mii->supports_gmii))
173
184
                return -EINVAL;
174
185
 
175
186
        /* ignore supported, maxtxpkt, maxrxpkt */
227
238
                bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR);
228
239
                tmp = bmcr & ~(BMCR_ANENABLE | BMCR_SPEED100 |
229
240
                               BMCR_SPEED1000 | BMCR_FULLDPLX);
230
 
                if (ecmd->speed == SPEED_1000)
 
241
                if (speed == SPEED_1000)
231
242
                        tmp |= BMCR_SPEED1000;
232
 
                else if (ecmd->speed == SPEED_100)
 
243
                else if (speed == SPEED_100)
233
244
                        tmp |= BMCR_SPEED100;
234
245
                if (ecmd->duplex == DUPLEX_FULL) {
235
246
                        tmp |= BMCR_FULLDPLX;
354
365
        if (!new_carrier) {
355
366
                netif_carrier_off(mii->dev);
356
367
                if (ok_to_print)
357
 
                        printk(KERN_INFO "%s: link down\n", mii->dev->name);
 
368
                        netdev_info(mii->dev, "link down\n");
358
369
                return 0; /* duplex did not change */
359
370
        }
360
371
 
381
392
                duplex = 1;
382
393
 
383
394
        if (ok_to_print)
384
 
                printk(KERN_INFO "%s: link up, %sMbps, %s-duplex, lpa 0x%04X\n",
385
 
                       mii->dev->name,
386
 
                       lpa2 & (LPA_1000FULL | LPA_1000HALF) ? "1000" :
387
 
                       media & (ADVERTISE_100FULL | ADVERTISE_100HALF) ? "100" : "10",
388
 
                       duplex ? "full" : "half",
389
 
                       lpa);
 
395
                netdev_info(mii->dev, "link up, %uMbps, %s-duplex, lpa 0x%04X\n",
 
396
                            lpa2 & (LPA_1000FULL | LPA_1000HALF) ? 1000 :
 
397
                            media & (ADVERTISE_100FULL | ADVERTISE_100HALF) ?
 
398
                            100 : 10,
 
399
                            duplex ? "full" : "half",
 
400
                            lpa);
390
401
 
391
402
        if ((init_media) || (mii->full_duplex != duplex)) {
392
403
                mii->full_duplex = duplex;