forked from Minki/linux
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: eHEA: Fix bonding support Blackfin ethernet driver: on chip ethernet MAC controller driver fix wrong argument of tc35815_read_plat_dev_addr() ARM/ETHER3: Handle multicast frames. SAA9730: Handle multicast frames. NI5010: Handle multicast frames. NS83820: Handle multicast frames. Fix RGMII-ID handling in gianfar Fix Vitesse RGMII-ID support Add phy-connection-type to gianfar nodes Fix Vitesse 824x PHY interrupt acking [PATCH] zd1211rw: Add ID for Siemens Gigaset USB Stick 54 [PATCH] zd1211rw: Add ID for Planex GW-US54GXS [PATCH] Update version ipw2200 stamp to 1.2.2 [PATCH] ipw2200: Fix ipw_isr() comments error on shared IRQ [PATCH] Fix ipw2200 set wrong power parameter causing firmware error [PATCH] ipw2100: Fix `iwpriv set_power` error [PATCH] softmac: Channel is listed twice in scan output
This commit is contained in:
commit
ce524c8360
@ -1250,6 +1250,12 @@ platforms are moved over to use the flattened-device-tree model.
|
||||
network device. This is used by the bootwrapper to interpret
|
||||
MAC addresses passed by the firmware when no information other
|
||||
than indices is available to associate an address with a device.
|
||||
- phy-connection-type : a string naming the controller/PHY interface type,
|
||||
i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii",
|
||||
"tbi", or "rtbi". This property is only really needed if the connection
|
||||
is of type "rgmii-id", as all other connection types are detected by
|
||||
hardware.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -732,6 +732,13 @@ L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
|
||||
BLACKFIN EMAC DRIVER
|
||||
P: Bryan Wu
|
||||
M: bryan.wu@analog.com
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
|
||||
BLACKFIN RTC DRIVER
|
||||
P: Mike Frysinger
|
||||
M: michael.frysinger@analog.com
|
||||
|
@ -131,6 +131,7 @@
|
||||
interrupts = <1d 2 1e 2 22 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
phy-handle = <&phy0>;
|
||||
phy-connection-type = "rgmii-id";
|
||||
};
|
||||
|
||||
ethernet@25000 {
|
||||
@ -150,6 +151,7 @@
|
||||
interrupts = <23 2 24 2 28 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
phy-handle = <&phy1>;
|
||||
phy-connection-type = "rgmii-id";
|
||||
};
|
||||
|
||||
ethernet@26000 {
|
||||
@ -169,6 +171,7 @@
|
||||
interrupts = <1F 2 20 2 21 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
phy-handle = <&phy2>;
|
||||
phy-connection-type = "rgmii-id";
|
||||
};
|
||||
|
||||
ethernet@27000 {
|
||||
@ -188,6 +191,7 @@
|
||||
interrupts = <25 2 26 2 27 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
phy-handle = <&phy3>;
|
||||
phy-connection-type = "rgmii-id";
|
||||
};
|
||||
serial@4500 {
|
||||
device_type = "serial";
|
||||
|
@ -197,6 +197,7 @@ static int __init gfar_of_init(void)
|
||||
struct gianfar_platform_data gfar_data;
|
||||
const unsigned int *id;
|
||||
const char *model;
|
||||
const char *ctype;
|
||||
const void *mac_addr;
|
||||
const phandle *ph;
|
||||
int n_res = 2;
|
||||
@ -254,6 +255,14 @@ static int __init gfar_of_init(void)
|
||||
FSL_GIANFAR_DEV_HAS_VLAN |
|
||||
FSL_GIANFAR_DEV_HAS_EXTENDED_HASH;
|
||||
|
||||
ctype = of_get_property(np, "phy-connection-type", NULL);
|
||||
|
||||
/* We only care about rgmii-id. The rest are autodetected */
|
||||
if (ctype && !strcmp(ctype, "rgmii-id"))
|
||||
gfar_data.interface = PHY_INTERFACE_MODE_RGMII_ID;
|
||||
else
|
||||
gfar_data.interface = PHY_INTERFACE_MODE_MII;
|
||||
|
||||
ph = of_get_property(np, "phy-handle", NULL);
|
||||
phy = of_find_node_by_phandle(*ph);
|
||||
|
||||
|
@ -838,6 +838,50 @@ config ULTRA32
|
||||
<file:Documentation/networking/net-modules.txt>. The module
|
||||
will be called smc-ultra32.
|
||||
|
||||
config BFIN_MAC
|
||||
tristate "Blackfin 536/537 on-chip mac support"
|
||||
depends on NET_ETHERNET && (BF537 || BF536) && (!BF537_PORT_H)
|
||||
select CRC32
|
||||
select BFIN_MAC_USE_L1 if DMA_UNCACHED_NONE
|
||||
help
|
||||
This is the driver for blackfin on-chip mac device. Say Y if you want it
|
||||
compiled into the kernel. This driver is also available as a module
|
||||
( = code which can be inserted in and removed from the running kernel
|
||||
whenever you want). The module will be called bfin_mac.
|
||||
|
||||
config BFIN_MAC_USE_L1
|
||||
bool "Use L1 memory for rx/tx packets"
|
||||
depends on BFIN_MAC && BF537
|
||||
default y
|
||||
help
|
||||
To get maximum network performace, you should use L1 memory as rx/tx buffers.
|
||||
Say N here if you want to reserve L1 memory for other uses.
|
||||
|
||||
config BFIN_TX_DESC_NUM
|
||||
int "Number of transmit buffer packets"
|
||||
depends on BFIN_MAC
|
||||
range 6 10 if BFIN_MAC_USE_L1
|
||||
range 10 100
|
||||
default "10"
|
||||
help
|
||||
Set the number of buffer packets used in driver.
|
||||
|
||||
config BFIN_RX_DESC_NUM
|
||||
int "Number of receive buffer packets"
|
||||
depends on BFIN_MAC
|
||||
range 20 100 if BFIN_MAC_USE_L1
|
||||
range 20 800
|
||||
default "20"
|
||||
help
|
||||
Set the number of buffer packets used in driver.
|
||||
|
||||
config BFIN_MAC_RMII
|
||||
bool "RMII PHY Interface (EXPERIMENTAL)"
|
||||
depends on BFIN_MAC && EXPERIMENTAL
|
||||
default n
|
||||
help
|
||||
Use Reduced PHY MII Interface
|
||||
|
||||
config SMC9194
|
||||
tristate "SMC 9194 support"
|
||||
depends on NET_VENDOR_SMC && (ISA || MAC && BROKEN)
|
||||
|
@ -200,6 +200,7 @@ obj-$(CONFIG_S2IO) += s2io.o
|
||||
obj-$(CONFIG_MYRI10GE) += myri10ge/
|
||||
obj-$(CONFIG_SMC91X) += smc91x.o
|
||||
obj-$(CONFIG_SMC911X) += smc911x.o
|
||||
obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
|
||||
obj-$(CONFIG_DM9000) += dm9000.o
|
||||
obj-$(CONFIG_FEC_8XX) += fec_8xx/
|
||||
obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o
|
||||
|
@ -464,7 +464,7 @@ static void ether3_setmulticastlist(struct net_device *dev)
|
||||
if (dev->flags & IFF_PROMISC) {
|
||||
/* promiscuous mode */
|
||||
priv(dev)->regs.config1 |= CFG1_RECVPROMISC;
|
||||
} else if (dev->flags & IFF_ALLMULTI) {
|
||||
} else if (dev->flags & IFF_ALLMULTI || dev->mc_count) {
|
||||
priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI;
|
||||
} else
|
||||
priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD;
|
||||
|
1009
drivers/net/bfin_mac.c
Normal file
1009
drivers/net/bfin_mac.c
Normal file
File diff suppressed because it is too large
Load Diff
132
drivers/net/bfin_mac.h
Normal file
132
drivers/net/bfin_mac.h
Normal file
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* File: drivers/net/bfin_mac.c
|
||||
* Based on:
|
||||
* Maintainer:
|
||||
* Bryan Wu <bryan.wu@analog.com>
|
||||
*
|
||||
* Original author:
|
||||
* Luke Yang <luke.yang@analog.com>
|
||||
*
|
||||
* Created:
|
||||
* Description:
|
||||
*
|
||||
* Modified:
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* This program is free software ; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation ; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program ; see the file COPYING.
|
||||
* If not, write to the Free Software Foundation,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* PHY REGISTER NAMES
|
||||
*/
|
||||
#define PHYREG_MODECTL 0x0000
|
||||
#define PHYREG_MODESTAT 0x0001
|
||||
#define PHYREG_PHYID1 0x0002
|
||||
#define PHYREG_PHYID2 0x0003
|
||||
#define PHYREG_ANAR 0x0004
|
||||
#define PHYREG_ANLPAR 0x0005
|
||||
#define PHYREG_ANER 0x0006
|
||||
#define PHYREG_NSR 0x0010
|
||||
#define PHYREG_LBREMR 0x0011
|
||||
#define PHYREG_REC 0x0012
|
||||
#define PHYREG_10CFG 0x0013
|
||||
#define PHYREG_PHY1_1 0x0014
|
||||
#define PHYREG_PHY1_2 0x0015
|
||||
#define PHYREG_PHY2 0x0016
|
||||
#define PHYREG_TW_1 0x0017
|
||||
#define PHYREG_TW_2 0x0018
|
||||
#define PHYREG_TEST 0x0019
|
||||
|
||||
#define PHY_RESET 0x8000
|
||||
#define PHY_ANEG_EN 0x1000
|
||||
#define PHY_DUPLEX 0x0100
|
||||
#define PHY_SPD_SET 0x2000
|
||||
|
||||
#define BFIN_MAC_CSUM_OFFLOAD
|
||||
|
||||
struct dma_descriptor {
|
||||
struct dma_descriptor *next_dma_desc;
|
||||
unsigned long start_addr;
|
||||
unsigned short config;
|
||||
unsigned short x_count;
|
||||
};
|
||||
|
||||
struct status_area_rx {
|
||||
#if defined(BFIN_MAC_CSUM_OFFLOAD)
|
||||
unsigned short ip_hdr_csum; /* ip header checksum */
|
||||
/* ip payload(udp or tcp or others) checksum */
|
||||
unsigned short ip_payload_csum;
|
||||
#endif
|
||||
unsigned long status_word; /* the frame status word */
|
||||
};
|
||||
|
||||
struct status_area_tx {
|
||||
unsigned long status_word; /* the frame status word */
|
||||
};
|
||||
|
||||
/* use two descriptors for a packet */
|
||||
struct net_dma_desc_rx {
|
||||
struct net_dma_desc_rx *next;
|
||||
struct sk_buff *skb;
|
||||
struct dma_descriptor desc_a;
|
||||
struct dma_descriptor desc_b;
|
||||
struct status_area_rx status;
|
||||
};
|
||||
|
||||
/* use two descriptors for a packet */
|
||||
struct net_dma_desc_tx {
|
||||
struct net_dma_desc_tx *next;
|
||||
struct sk_buff *skb;
|
||||
struct dma_descriptor desc_a;
|
||||
struct dma_descriptor desc_b;
|
||||
unsigned char packet[1560];
|
||||
struct status_area_tx status;
|
||||
};
|
||||
|
||||
struct bf537mac_local {
|
||||
/*
|
||||
* these are things that the kernel wants me to keep, so users
|
||||
* can find out semi-useless statistics of how well the card is
|
||||
* performing
|
||||
*/
|
||||
struct net_device_stats stats;
|
||||
|
||||
int version;
|
||||
|
||||
int FlowEnabled; /* record if data flow is active */
|
||||
int EtherIntIVG; /* IVG for the ethernet interrupt */
|
||||
int RXIVG; /* IVG for the RX completion */
|
||||
int TXIVG; /* IVG for the TX completion */
|
||||
int PhyAddr; /* PHY address */
|
||||
int OpMode; /* set these bits n the OPMODE regs */
|
||||
int Port10; /* set port speed to 10 Mbit/s */
|
||||
int GenChksums; /* IP checksums to be calculated */
|
||||
int NoRcveLnth; /* dont insert recv length at start of buffer */
|
||||
int StripPads; /* remove trailing pad bytes */
|
||||
int FullDuplex; /* set full duplex mode */
|
||||
int Negotiate; /* enable auto negotiation */
|
||||
int Loopback; /* loopback at the PHY */
|
||||
int Cache; /* Buffers may be cached */
|
||||
int FlowControl; /* flow control active */
|
||||
int CLKIN; /* clock in value in MHZ */
|
||||
unsigned short IntMask; /* interrupt mask */
|
||||
unsigned char Mac[6]; /* MAC address of the board */
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
extern void get_bf537_ether_addr(char *addr);
|
@ -39,7 +39,7 @@
|
||||
#include <asm/io.h>
|
||||
|
||||
#define DRV_NAME "ehea"
|
||||
#define DRV_VERSION "EHEA_0070"
|
||||
#define DRV_VERSION "EHEA_0071"
|
||||
|
||||
/* eHEA capability flags */
|
||||
#define DLPAR_PORT_ADD_REM 1
|
||||
|
@ -466,6 +466,8 @@ static struct ehea_cqe *ehea_proc_rwqes(struct net_device *dev,
|
||||
cqe->vlan_tag);
|
||||
else
|
||||
netif_receive_skb(skb);
|
||||
|
||||
dev->last_rx = jiffies;
|
||||
} else {
|
||||
pr->p_stats.poll_receive_errors++;
|
||||
port_reset = ehea_treat_poll_error(pr, rq, cqe,
|
||||
@ -1433,7 +1435,8 @@ static int ehea_broadcast_reg_helper(struct ehea_port *port, u32 hcallid)
|
||||
port->logical_port_id,
|
||||
reg_type, port->mac_addr, 0, hcallid);
|
||||
if (hret != H_SUCCESS) {
|
||||
ehea_error("reg_dereg_bcmc failed (tagged)");
|
||||
ehea_error("%sregistering bc address failed (tagged)",
|
||||
hcallid == H_REG_BCMC ? "" : "de");
|
||||
ret = -EIO;
|
||||
goto out_herr;
|
||||
}
|
||||
@ -1444,7 +1447,8 @@ static int ehea_broadcast_reg_helper(struct ehea_port *port, u32 hcallid)
|
||||
port->logical_port_id,
|
||||
reg_type, port->mac_addr, 0, hcallid);
|
||||
if (hret != H_SUCCESS) {
|
||||
ehea_error("reg_dereg_bcmc failed (vlan)");
|
||||
ehea_error("%sregistering bc address failed (vlan)",
|
||||
hcallid == H_REG_BCMC ? "" : "de");
|
||||
ret = -EIO;
|
||||
}
|
||||
out_herr:
|
||||
@ -2170,7 +2174,6 @@ static int ehea_up(struct net_device *dev)
|
||||
{
|
||||
int ret, i;
|
||||
struct ehea_port *port = netdev_priv(dev);
|
||||
u64 mac_addr = 0;
|
||||
|
||||
if (port->state == EHEA_PORT_UP)
|
||||
return 0;
|
||||
@ -2189,18 +2192,10 @@ static int ehea_up(struct net_device *dev)
|
||||
goto out_clean_pr;
|
||||
}
|
||||
|
||||
ret = ehea_broadcast_reg_helper(port, H_REG_BCMC);
|
||||
if (ret) {
|
||||
ret = -EIO;
|
||||
ehea_error("out_clean_pr");
|
||||
goto out_clean_pr;
|
||||
}
|
||||
mac_addr = (*(u64*)dev->dev_addr) >> 16;
|
||||
|
||||
ret = ehea_reg_interrupts(dev);
|
||||
if (ret) {
|
||||
ehea_error("out_dereg_bc");
|
||||
goto out_dereg_bc;
|
||||
ehea_error("reg_interrupts failed. ret:%d", ret);
|
||||
goto out_clean_pr;
|
||||
}
|
||||
|
||||
for(i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
|
||||
@ -2226,9 +2221,6 @@ static int ehea_up(struct net_device *dev)
|
||||
out_free_irqs:
|
||||
ehea_free_interrupts(dev);
|
||||
|
||||
out_dereg_bc:
|
||||
ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
|
||||
|
||||
out_clean_pr:
|
||||
ehea_clean_all_portres(port);
|
||||
out:
|
||||
@ -2273,7 +2265,6 @@ static int ehea_down(struct net_device *dev)
|
||||
&port->port_res[i].d_netdev->state))
|
||||
msleep(1);
|
||||
|
||||
ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
|
||||
port->state = EHEA_PORT_DOWN;
|
||||
|
||||
ret = ehea_clean_all_portres(port);
|
||||
@ -2655,12 +2646,18 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,
|
||||
|
||||
INIT_WORK(&port->reset_task, ehea_reset_port);
|
||||
|
||||
ret = ehea_broadcast_reg_helper(port, H_REG_BCMC);
|
||||
if (ret) {
|
||||
ret = -EIO;
|
||||
goto out_unreg_port;
|
||||
}
|
||||
|
||||
ehea_set_ethtool_ops(dev);
|
||||
|
||||
ret = register_netdev(dev);
|
||||
if (ret) {
|
||||
ehea_error("register_netdev failed. ret=%d", ret);
|
||||
goto out_unreg_port;
|
||||
goto out_dereg_bc;
|
||||
}
|
||||
|
||||
ret = ehea_get_jumboframe_status(port, &jumbo);
|
||||
@ -2675,6 +2672,9 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,
|
||||
|
||||
return port;
|
||||
|
||||
out_dereg_bc:
|
||||
ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
|
||||
|
||||
out_unreg_port:
|
||||
ehea_unregister_port(port);
|
||||
|
||||
@ -2694,6 +2694,7 @@ static void ehea_shutdown_single_port(struct ehea_port *port)
|
||||
{
|
||||
unregister_netdev(port->netdev);
|
||||
ehea_unregister_port(port);
|
||||
ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
|
||||
kfree(port->mc_list);
|
||||
free_netdev(port->netdev);
|
||||
port->adapter->active_ports--;
|
||||
|
@ -420,8 +420,18 @@ static phy_interface_t gfar_get_interface(struct net_device *dev)
|
||||
if (ecntrl & ECNTRL_REDUCED_MODE) {
|
||||
if (ecntrl & ECNTRL_REDUCED_MII_MODE)
|
||||
return PHY_INTERFACE_MODE_RMII;
|
||||
else
|
||||
else {
|
||||
phy_interface_t interface = priv->einfo->interface;
|
||||
|
||||
/*
|
||||
* This isn't autodetected right now, so it must
|
||||
* be set by the device tree or platform code.
|
||||
*/
|
||||
if (interface == PHY_INTERFACE_MODE_RGMII_ID)
|
||||
return PHY_INTERFACE_MODE_RGMII_ID;
|
||||
|
||||
return PHY_INTERFACE_MODE_RGMII;
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT)
|
||||
|
@ -670,14 +670,10 @@ static void ni5010_set_multicast_list(struct net_device *dev)
|
||||
|
||||
PRINTK2((KERN_DEBUG "%s: entering set_multicast_list\n", dev->name));
|
||||
|
||||
if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI) {
|
||||
if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI || dev->mc_list) {
|
||||
dev->flags |= IFF_PROMISC;
|
||||
outb(RMD_PROMISC, EDLC_RMODE); /* Enable promiscuous mode */
|
||||
PRINTK((KERN_DEBUG "%s: Entering promiscuous mode\n", dev->name));
|
||||
} else if (dev->mc_list) {
|
||||
/* Sorry, multicast not supported */
|
||||
PRINTK((KERN_DEBUG "%s: No multicast, entering broadcast mode\n", dev->name));
|
||||
outb(RMD_BROADCAST, EDLC_RMODE);
|
||||
} else {
|
||||
PRINTK((KERN_DEBUG "%s: Entering broadcast mode\n", dev->name));
|
||||
outb(RMD_BROADCAST, EDLC_RMODE); /* Disable promiscuous mode, use normal mode */
|
||||
|
@ -1582,7 +1582,7 @@ static void ns83820_set_multicast(struct net_device *ndev)
|
||||
else
|
||||
and_mask &= ~(RFCR_AAU | RFCR_AAM);
|
||||
|
||||
if (ndev->flags & IFF_ALLMULTI)
|
||||
if (ndev->flags & IFF_ALLMULTI || ndev->mc_count)
|
||||
or_mask |= RFCR_AAM;
|
||||
else
|
||||
and_mask &= ~RFCR_AAM;
|
||||
|
@ -21,6 +21,10 @@
|
||||
/* Vitesse Extended Control Register 1 */
|
||||
#define MII_VSC8244_EXT_CON1 0x17
|
||||
#define MII_VSC8244_EXTCON1_INIT 0x0000
|
||||
#define MII_VSC8244_EXTCON1_TX_SKEW_MASK 0x0c00
|
||||
#define MII_VSC8244_EXTCON1_RX_SKEW_MASK 0x0300
|
||||
#define MII_VSC8244_EXTCON1_TX_SKEW 0x0800
|
||||
#define MII_VSC8244_EXTCON1_RX_SKEW 0x0200
|
||||
|
||||
/* Vitesse Interrupt Mask Register */
|
||||
#define MII_VSC8244_IMASK 0x19
|
||||
@ -39,7 +43,7 @@
|
||||
|
||||
/* Vitesse Auxiliary Control/Status Register */
|
||||
#define MII_VSC8244_AUX_CONSTAT 0x1c
|
||||
#define MII_VSC8244_AUXCONSTAT_INIT 0x0004
|
||||
#define MII_VSC8244_AUXCONSTAT_INIT 0x0000
|
||||
#define MII_VSC8244_AUXCONSTAT_DUPLEX 0x0020
|
||||
#define MII_VSC8244_AUXCONSTAT_SPEED 0x0018
|
||||
#define MII_VSC8244_AUXCONSTAT_GBIT 0x0010
|
||||
@ -51,6 +55,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int vsc824x_config_init(struct phy_device *phydev)
|
||||
{
|
||||
int extcon;
|
||||
int err;
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
|
||||
@ -58,14 +63,34 @@ static int vsc824x_config_init(struct phy_device *phydev)
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_EXT_CON1,
|
||||
MII_VSC8244_EXTCON1_INIT);
|
||||
extcon = phy_read(phydev, MII_VSC8244_EXT_CON1);
|
||||
|
||||
if (extcon < 0)
|
||||
return err;
|
||||
|
||||
extcon &= ~(MII_VSC8244_EXTCON1_TX_SKEW_MASK |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW_MASK);
|
||||
|
||||
if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
|
||||
extcon |= (MII_VSC8244_EXTCON1_TX_SKEW |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW);
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_EXT_CON1, extcon);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int vsc824x_ack_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
int err = phy_read(phydev, MII_VSC8244_ISTAT);
|
||||
int err = 0;
|
||||
|
||||
/*
|
||||
* Don't bother to ACK the interrupts if interrupts
|
||||
* are disabled. The 824x cannot clear the interrupts
|
||||
* if they are disabled.
|
||||
*/
|
||||
if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
|
||||
err = phy_read(phydev, MII_VSC8244_ISTAT);
|
||||
|
||||
return (err < 0) ? err : 0;
|
||||
}
|
||||
@ -77,8 +102,19 @@ static int vsc824x_config_intr(struct phy_device *phydev)
|
||||
if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
|
||||
err = phy_write(phydev, MII_VSC8244_IMASK,
|
||||
MII_VSC8244_IMASK_MASK);
|
||||
else
|
||||
else {
|
||||
/*
|
||||
* The Vitesse PHY cannot clear the interrupt
|
||||
* once it has disabled them, so we clear them first
|
||||
*/
|
||||
err = phy_read(phydev, MII_VSC8244_ISTAT);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_IMASK, 0);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -940,15 +940,14 @@ static void lan_saa9730_set_multicast(struct net_device *dev)
|
||||
CAM_CONTROL_GROUP_ACC | CAM_CONTROL_BROAD_ACC,
|
||||
&lp->lan_saa9730_regs->CamCtl);
|
||||
} else {
|
||||
if (dev->flags & IFF_ALLMULTI) {
|
||||
if (dev->flags & IFF_ALLMULTI || dev->mc_count) {
|
||||
/* accept all multicast packets */
|
||||
writel(CAM_CONTROL_COMP_EN | CAM_CONTROL_GROUP_ACC |
|
||||
CAM_CONTROL_BROAD_ACC,
|
||||
&lp->lan_saa9730_regs->CamCtl);
|
||||
} else {
|
||||
/*
|
||||
* Will handle the multicast stuff later. -carstenl
|
||||
*/
|
||||
writel(CAM_CONTROL_COMP_EN | CAM_CONTROL_GROUP_ACC |
|
||||
CAM_CONTROL_BROAD_ACC,
|
||||
&lp->lan_saa9730_regs->CamCtl);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -626,7 +626,7 @@ static int __devinit tc35815_read_plat_dev_addr(struct net_device *dev)
|
||||
return -ENODEV;
|
||||
}
|
||||
#else
|
||||
static int __devinit tc35815_read_plat_dev_addr(struct device *dev)
|
||||
static int __devinit tc35815_read_plat_dev_addr(struct net_device *dev)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -7868,10 +7868,10 @@ static int ipw2100_wx_set_powermode(struct net_device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((mode < 1) || (mode > POWER_MODES))
|
||||
if ((mode < 0) || (mode > POWER_MODES))
|
||||
mode = IPW_POWER_AUTO;
|
||||
|
||||
if (priv->power_mode != mode)
|
||||
if (IPW_POWER_LEVEL(priv->power_mode) != mode)
|
||||
err = ipw2100_set_power_mode(priv, mode);
|
||||
done:
|
||||
mutex_unlock(&priv->action_mutex);
|
||||
@ -7902,7 +7902,7 @@ static int ipw2100_wx_get_powermode(struct net_device *dev,
|
||||
break;
|
||||
case IPW_POWER_AUTO:
|
||||
snprintf(extra, MAX_POWER_STRING,
|
||||
"Power save level: %d (Auto)", 0);
|
||||
"Power save level: %d (Auto)", level);
|
||||
break;
|
||||
default:
|
||||
timeout = timeout_duration[level - 1] / 1000;
|
||||
|
@ -70,7 +70,7 @@
|
||||
#define VQ
|
||||
#endif
|
||||
|
||||
#define IPW2200_VERSION "1.2.0" VK VD VM VP VR VQ
|
||||
#define IPW2200_VERSION "1.2.2" VK VD VM VP VR VQ
|
||||
#define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2200/2915 Network Driver"
|
||||
#define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation"
|
||||
#define DRV_VERSION IPW2200_VERSION
|
||||
@ -2506,7 +2506,7 @@ static int ipw_send_power_mode(struct ipw_priv *priv, u32 mode)
|
||||
break;
|
||||
}
|
||||
|
||||
param = cpu_to_le32(mode);
|
||||
param = cpu_to_le32(param);
|
||||
return ipw_send_cmd_pdu(priv, IPW_CMD_POWER_MODE, sizeof(param),
|
||||
¶m);
|
||||
}
|
||||
@ -9568,6 +9568,7 @@ static int ipw_wx_set_power(struct net_device *dev,
|
||||
priv->power_mode = IPW_POWER_ENABLED | IPW_POWER_BATTERY;
|
||||
else
|
||||
priv->power_mode = IPW_POWER_ENABLED | priv->power_mode;
|
||||
|
||||
err = ipw_send_power_mode(priv, IPW_POWER_LEVEL(priv->power_mode));
|
||||
if (err) {
|
||||
IPW_DEBUG_WX("failed setting power mode.\n");
|
||||
@ -9604,22 +9605,19 @@ static int ipw_wx_set_powermode(struct net_device *dev,
|
||||
struct ipw_priv *priv = ieee80211_priv(dev);
|
||||
int mode = *(int *)extra;
|
||||
int err;
|
||||
|
||||
mutex_lock(&priv->mutex);
|
||||
if ((mode < 1) || (mode > IPW_POWER_LIMIT)) {
|
||||
if ((mode < 1) || (mode > IPW_POWER_LIMIT))
|
||||
mode = IPW_POWER_AC;
|
||||
priv->power_mode = mode;
|
||||
} else {
|
||||
priv->power_mode = IPW_POWER_ENABLED | mode;
|
||||
}
|
||||
|
||||
if (priv->power_mode != mode) {
|
||||
if (IPW_POWER_LEVEL(priv->power_mode) != mode) {
|
||||
err = ipw_send_power_mode(priv, mode);
|
||||
|
||||
if (err) {
|
||||
IPW_DEBUG_WX("failed setting power mode.\n");
|
||||
mutex_unlock(&priv->mutex);
|
||||
return err;
|
||||
}
|
||||
priv->power_mode = IPW_POWER_ENABLED | mode;
|
||||
}
|
||||
mutex_unlock(&priv->mutex);
|
||||
return 0;
|
||||
@ -10555,7 +10553,7 @@ static irqreturn_t ipw_isr(int irq, void *data)
|
||||
spin_lock(&priv->irq_lock);
|
||||
|
||||
if (!(priv->status & STATUS_INT_ENABLED)) {
|
||||
/* Shared IRQ */
|
||||
/* IRQ is disabled */
|
||||
goto none;
|
||||
}
|
||||
|
||||
|
@ -72,6 +72,8 @@ static struct usb_device_id usb_ids[] = {
|
||||
{ USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
|
||||
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
|
||||
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
|
||||
{ USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
|
||||
{ USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
|
||||
/* "Driverless" devices that need ejecting */
|
||||
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
|
||||
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
|
||||
|
@ -53,6 +53,7 @@ struct gianfar_platform_data {
|
||||
u32 bus_id;
|
||||
u32 phy_id;
|
||||
u8 mac_addr[6];
|
||||
phy_interface_t interface;
|
||||
};
|
||||
|
||||
struct gianfar_mdio_data {
|
||||
|
@ -90,14 +90,11 @@ static char *ieee80211_translate_scan(struct ieee80211_device *ieee,
|
||||
}
|
||||
|
||||
/* Add channel and frequency */
|
||||
/* Note : userspace automatically computes channel using iwrange */
|
||||
iwe.cmd = SIOCGIWFREQ;
|
||||
iwe.u.freq.m = network->channel;
|
||||
iwe.u.freq.e = 0;
|
||||
iwe.u.freq.i = 0;
|
||||
start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
|
||||
|
||||
iwe.u.freq.m = ieee80211_channel_to_freq(ieee, network->channel);
|
||||
iwe.u.freq.e = 6;
|
||||
iwe.u.freq.i = 0;
|
||||
start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
|
||||
|
||||
/* Add encryption capability */
|
||||
|
Loading…
Reference in New Issue
Block a user