aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/Kconfig8
-rw-r--r--drivers/net/ibmveth.c2
-rw-r--r--drivers/net/iseries_veth.c27
-rw-r--r--drivers/net/phy/Kconfig5
-rw-r--r--drivers/net/phy/Makefile1
-rw-r--r--drivers/net/phy/vitesse.c112
6 files changed, 140 insertions, 15 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 0c6b45a11d15..c3c1a8d5f7a3 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -2190,7 +2190,7 @@ config BNX2
2190 2190
2191config SPIDER_NET 2191config SPIDER_NET
2192 tristate "Spider Gigabit Ethernet driver" 2192 tristate "Spider Gigabit Ethernet driver"
2193 depends on PCI && PPC_CELL 2193 depends on PCI && PPC_IBM_CELL_BLADE
2194 select FW_LOADER 2194 select FW_LOADER
2195 help 2195 help
2196 This driver supports the Gigabit Ethernet chips present on the 2196 This driver supports the Gigabit Ethernet chips present on the
@@ -2198,11 +2198,11 @@ config SPIDER_NET
2198 2198
2199config GIANFAR 2199config GIANFAR
2200 tristate "Gianfar Ethernet" 2200 tristate "Gianfar Ethernet"
2201 depends on 85xx || 83xx 2201 depends on 85xx || 83xx || PPC_86xx
2202 select PHYLIB 2202 select PHYLIB
2203 help 2203 help
2204 This driver supports the Gigabit TSEC on the MPC85xx 2204 This driver supports the Gigabit TSEC on the MPC83xx, MPC85xx,
2205 family of chips, and the FEC on the 8540 2205 and MPC86xx family of chips, and the FEC on the 8540.
2206 2206
2207config GFAR_NAPI 2207config GFAR_NAPI
2208 bool "NAPI Support" 2208 bool "NAPI Support"
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c
index 666346f6469e..4c2e7279ba34 100644
--- a/drivers/net/ibmveth.c
+++ b/drivers/net/ibmveth.c
@@ -61,7 +61,7 @@
61#undef DEBUG 61#undef DEBUG
62 62
63#define ibmveth_printk(fmt, args...) \ 63#define ibmveth_printk(fmt, args...) \
64 printk(KERN_INFO "%s: " fmt, __FILE__, ## args) 64 printk(KERN_DEBUG "%s: " fmt, __FILE__, ## args)
65 65
66#define ibmveth_error_printk(fmt, args...) \ 66#define ibmveth_error_printk(fmt, args...) \
67 printk(KERN_ERR "(%s:%3.3d ua:%x) ERROR: " fmt, __FILE__, __LINE__ , adapter->vdev->unit_address, ## args) 67 printk(KERN_ERR "(%s:%3.3d ua:%x) ERROR: " fmt, __FILE__, __LINE__ , adapter->vdev->unit_address, ## args)
diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c
index f0f04be989d6..93394d76587a 100644
--- a/drivers/net/iseries_veth.c
+++ b/drivers/net/iseries_veth.c
@@ -69,6 +69,7 @@
69#include <linux/delay.h> 69#include <linux/delay.h>
70#include <linux/mm.h> 70#include <linux/mm.h>
71#include <linux/ethtool.h> 71#include <linux/ethtool.h>
72#include <linux/if_ether.h>
72 73
73#include <asm/abs_addr.h> 74#include <asm/abs_addr.h>
74#include <asm/iseries/mf.h> 75#include <asm/iseries/mf.h>
@@ -1035,11 +1036,22 @@ static struct ethtool_ops ops = {
1035 .get_link = veth_get_link, 1036 .get_link = veth_get_link,
1036}; 1037};
1037 1038
1038static struct net_device * __init veth_probe_one(int vlan, struct device *vdev) 1039static struct net_device * __init veth_probe_one(int vlan,
1040 struct vio_dev *vio_dev)
1039{ 1041{
1040 struct net_device *dev; 1042 struct net_device *dev;
1041 struct veth_port *port; 1043 struct veth_port *port;
1044 struct device *vdev = &vio_dev->dev;
1042 int i, rc; 1045 int i, rc;
1046 const unsigned char *mac_addr;
1047
1048 mac_addr = vio_get_attribute(vio_dev, "local-mac-address", NULL);
1049 if (mac_addr == NULL)
1050 mac_addr = vio_get_attribute(vio_dev, "mac-address", NULL);
1051 if (mac_addr == NULL) {
1052 veth_error("Unable to fetch MAC address from device tree.\n");
1053 return NULL;
1054 }
1043 1055
1044 dev = alloc_etherdev(sizeof (struct veth_port)); 1056 dev = alloc_etherdev(sizeof (struct veth_port));
1045 if (! dev) { 1057 if (! dev) {
@@ -1064,16 +1076,11 @@ static struct net_device * __init veth_probe_one(int vlan, struct device *vdev)
1064 } 1076 }
1065 port->dev = vdev; 1077 port->dev = vdev;
1066 1078
1067 dev->dev_addr[0] = 0x02; 1079 memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
1068 dev->dev_addr[1] = 0x01;
1069 dev->dev_addr[2] = 0xff;
1070 dev->dev_addr[3] = vlan;
1071 dev->dev_addr[4] = 0xff;
1072 dev->dev_addr[5] = this_lp;
1073 1080
1074 dev->mtu = VETH_MAX_MTU; 1081 dev->mtu = VETH_MAX_MTU;
1075 1082
1076 memcpy(&port->mac_addr, dev->dev_addr, 6); 1083 memcpy(&port->mac_addr, mac_addr, ETH_ALEN);
1077 1084
1078 dev->open = veth_open; 1085 dev->open = veth_open;
1079 dev->hard_start_xmit = veth_start_xmit; 1086 dev->hard_start_xmit = veth_start_xmit;
@@ -1608,7 +1615,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1608 struct net_device *dev; 1615 struct net_device *dev;
1609 struct veth_port *port; 1616 struct veth_port *port;
1610 1617
1611 dev = veth_probe_one(i, &vdev->dev); 1618 dev = veth_probe_one(i, vdev);
1612 if (dev == NULL) { 1619 if (dev == NULL) {
1613 veth_remove(vdev); 1620 veth_remove(vdev);
1614 return 1; 1621 return 1;
@@ -1641,7 +1648,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1641 * support. 1648 * support.
1642 */ 1649 */
1643static struct vio_device_id veth_device_table[] __devinitdata = { 1650static struct vio_device_id veth_device_table[] __devinitdata = {
1644 { "vlan", "" }, 1651 { "network", "IBM,iSeries-l-lan" },
1645 { "", "" } 1652 { "", "" }
1646}; 1653};
1647MODULE_DEVICE_TABLE(vio, veth_device_table); 1654MODULE_DEVICE_TABLE(vio, veth_device_table);
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index cda3e53d6917..2ba6d3a40e2e 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -44,6 +44,11 @@ config CICADA_PHY
44 depends on PHYLIB 44 depends on PHYLIB
45 ---help--- 45 ---help---
46 Currently supports the cis8204 46 Currently supports the cis8204
47config VITESSE_PHY
48 tristate "Drivers for the Vitesse PHYs"
49 depends on PHYLIB
50 ---help---
51 Currently supports the vsc8244
47 52
48config SMSC_PHY 53config SMSC_PHY
49 tristate "Drivers for SMSC PHYs" 54 tristate "Drivers for SMSC PHYs"
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index d9614134cc06..a00e61942525 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -9,3 +9,4 @@ obj-$(CONFIG_CICADA_PHY) += cicada.o
9obj-$(CONFIG_LXT_PHY) += lxt.o 9obj-$(CONFIG_LXT_PHY) += lxt.o
10obj-$(CONFIG_QSEMI_PHY) += qsemi.o 10obj-$(CONFIG_QSEMI_PHY) += qsemi.o
11obj-$(CONFIG_SMSC_PHY) += smsc.o 11obj-$(CONFIG_SMSC_PHY) += smsc.o
12obj-$(CONFIG_VITESSE_PHY) += vitesse.o
diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c
new file mode 100644
index 000000000000..ffd215d9a9be
--- /dev/null
+++ b/drivers/net/phy/vitesse.c
@@ -0,0 +1,112 @@
1/*
2 * Driver for Vitesse PHYs
3 *
4 * Author: Kriston Carson
5 *
6 * Copyright (c) 2005 Freescale Semiconductor, Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#include <linux/config.h>
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/mii.h>
19#include <linux/ethtool.h>
20#include <linux/phy.h>
21
22/* Vitesse Extended Control Register 1 */
23#define MII_VSC8244_EXT_CON1 0x17
24#define MII_VSC8244_EXTCON1_INIT 0x0000
25
26/* Vitesse Interrupt Mask Register */
27#define MII_VSC8244_IMASK 0x19
28#define MII_VSC8244_IMASK_IEN 0x8000
29#define MII_VSC8244_IMASK_SPEED 0x4000
30#define MII_VSC8244_IMASK_LINK 0x2000
31#define MII_VSC8244_IMASK_DUPLEX 0x1000
32#define MII_VSC8244_IMASK_MASK 0xf000
33
34/* Vitesse Interrupt Status Register */
35#define MII_VSC8244_ISTAT 0x1a
36#define MII_VSC8244_ISTAT_STATUS 0x8000
37#define MII_VSC8244_ISTAT_SPEED 0x4000
38#define MII_VSC8244_ISTAT_LINK 0x2000
39#define MII_VSC8244_ISTAT_DUPLEX 0x1000
40
41/* Vitesse Auxiliary Control/Status Register */
42#define MII_VSC8244_AUX_CONSTAT 0x1c
43#define MII_VSC8244_AUXCONSTAT_INIT 0x0004
44#define MII_VSC8244_AUXCONSTAT_DUPLEX 0x0020
45#define MII_VSC8244_AUXCONSTAT_SPEED 0x0018
46#define MII_VSC8244_AUXCONSTAT_GBIT 0x0010
47#define MII_VSC8244_AUXCONSTAT_100 0x0008
48
49MODULE_DESCRIPTION("Vitesse PHY driver");
50MODULE_AUTHOR("Kriston Carson");
51MODULE_LICENSE("GPL");
52
53static int vsc824x_config_init(struct phy_device *phydev)
54{
55 int err;
56
57 err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
58 MII_VSC8244_AUXCONSTAT_INIT);
59 if (err < 0)
60 return err;
61
62 err = phy_write(phydev, MII_VSC8244_EXT_CON1,
63 MII_VSC8244_EXTCON1_INIT);
64 return err;
65}
66
67static int vsc824x_ack_interrupt(struct phy_device *phydev)
68{
69 int err = phy_read(phydev, MII_VSC8244_ISTAT);
70
71 return (err < 0) ? err : 0;
72}
73
74static int vsc824x_config_intr(struct phy_device *phydev)
75{
76 int err;
77
78 if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
79 err = phy_write(phydev, MII_VSC8244_IMASK,
80 MII_VSC8244_IMASK_MASK);
81 else
82 err = phy_write(phydev, MII_VSC8244_IMASK, 0);
83 return err;
84}
85
86/* Vitesse 824x */
87static struct phy_driver vsc8244_driver = {
88 .phy_id = 0x000fc6c2,
89 .name = "Vitesse VSC8244",
90 .phy_id_mask = 0x000fffc0,
91 .features = PHY_GBIT_FEATURES,
92 .flags = PHY_HAS_INTERRUPT,
93 .config_init = &vsc824x_config_init,
94 .config_aneg = &genphy_config_aneg,
95 .read_status = &genphy_read_status,
96 .ack_interrupt = &vsc824x_ack_interrupt,
97 .config_intr = &vsc824x_config_intr,
98 .driver = { .owner = THIS_MODULE,},
99};
100
101static int __init vsc8244_init(void)
102{
103 return phy_driver_register(&vsc8244_driver);
104}
105
106static void __exit vsc8244_exit(void)
107{
108 phy_driver_unregister(&vsc8244_driver);
109}
110
111module_init(vsc8244_init);
112module_exit(vsc8244_exit);