Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
e62112c5
Commit
e62112c5
authored
Jul 30, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
parents
031cf19e
68905eb4
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
948 additions
and
333 deletions
+948
-333
arch/arm/mach-kirkwood/rd88f6281-setup.c
arch/arm/mach-kirkwood/rd88f6281-setup.c
+3
-0
arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
+3
-0
arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
+3
-0
arch/arm/mach-orion5x/wnr854t-setup.c
arch/arm/mach-orion5x/wnr854t-setup.c
+3
-0
arch/arm/mach-orion5x/wrt350n-v2-setup.c
arch/arm/mach-orion5x/wrt350n-v2-setup.c
+3
-0
drivers/net/Kconfig
drivers/net/Kconfig
+2
-2
drivers/net/bfin_mac.c
drivers/net/bfin_mac.c
+81
-30
drivers/net/cxgb3/t3_hw.c
drivers/net/cxgb3/t3_hw.c
+1
-1
drivers/net/ehea/ehea_main.c
drivers/net/ehea/ehea_main.c
+2
-2
drivers/net/enc28j60.c
drivers/net/enc28j60.c
+4
-2
drivers/net/forcedeth.c
drivers/net/forcedeth.c
+58
-6
drivers/net/mv643xx_eth.c
drivers/net/mv643xx_eth.c
+236
-122
drivers/net/ne.c
drivers/net/ne.c
+3
-3
drivers/net/s2io.c
drivers/net/s2io.c
+23
-6
drivers/net/sh_eth.c
drivers/net/sh_eth.c
+166
-36
drivers/net/sh_eth.h
drivers/net/sh_eth.h
+314
-112
drivers/net/usb/dm9601.c
drivers/net/usb/dm9601.c
+42
-10
drivers/net/wd.c
drivers/net/wd.c
+1
-1
No files found.
arch/arm/mach-kirkwood/rd88f6281-setup.c
View file @
e62112c5
...
...
@@ -18,6 +18,7 @@
#include <linux/timer.h>
#include <linux/ata_platform.h>
#include <linux/mv643xx_eth.h>
#include <linux/ethtool.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/pci.h>
...
...
@@ -69,6 +70,8 @@ static struct platform_device rd88f6281_nand_flash = {
static
struct
mv643xx_eth_platform_data
rd88f6281_ge00_data
=
{
.
phy_addr
=
-
1
,
.
speed
=
SPEED_1000
,
.
duplex
=
DUPLEX_FULL
,
};
static
struct
mv_sata_platform_data
rd88f6281_sata_data
=
{
...
...
arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
View file @
e62112c5
...
...
@@ -15,6 +15,7 @@
#include <linux/irq.h>
#include <linux/mtd/physmap.h>
#include <linux/mv643xx_eth.h>
#include <linux/ethtool.h>
#include <asm/mach-types.h>
#include <asm/gpio.h>
#include <asm/leds.h>
...
...
@@ -88,6 +89,8 @@ static struct orion5x_mpp_mode rd88f5181l_fxo_mpp_modes[] __initdata = {
static
struct
mv643xx_eth_platform_data
rd88f5181l_fxo_eth_data
=
{
.
phy_addr
=
-
1
,
.
speed
=
SPEED_1000
,
.
duplex
=
DUPLEX_FULL
,
};
static
void
__init
rd88f5181l_fxo_init
(
void
)
...
...
arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
View file @
e62112c5
...
...
@@ -15,6 +15,7 @@
#include <linux/irq.h>
#include <linux/mtd/physmap.h>
#include <linux/mv643xx_eth.h>
#include <linux/ethtool.h>
#include <linux/i2c.h>
#include <asm/mach-types.h>
#include <asm/gpio.h>
...
...
@@ -89,6 +90,8 @@ static struct orion5x_mpp_mode rd88f5181l_ge_mpp_modes[] __initdata = {
static
struct
mv643xx_eth_platform_data
rd88f5181l_ge_eth_data
=
{
.
phy_addr
=
-
1
,
.
speed
=
SPEED_1000
,
.
duplex
=
DUPLEX_FULL
,
};
static
struct
i2c_board_info
__initdata
rd88f5181l_ge_i2c_rtc
=
{
...
...
arch/arm/mach-orion5x/wnr854t-setup.c
View file @
e62112c5
...
...
@@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <linux/mtd/physmap.h>
#include <linux/mv643xx_eth.h>
#include <linux/ethtool.h>
#include <asm/mach-types.h>
#include <asm/gpio.h>
#include <asm/mach/arch.h>
...
...
@@ -92,6 +93,8 @@ static struct platform_device wnr854t_nor_flash = {
static
struct
mv643xx_eth_platform_data
wnr854t_eth_data
=
{
.
phy_addr
=
-
1
,
.
speed
=
SPEED_1000
,
.
duplex
=
DUPLEX_FULL
,
};
static
void
__init
wnr854t_init
(
void
)
...
...
arch/arm/mach-orion5x/wrt350n-v2-setup.c
View file @
e62112c5
...
...
@@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <linux/mtd/physmap.h>
#include <linux/mv643xx_eth.h>
#include <linux/ethtool.h>
#include <asm/mach-types.h>
#include <asm/gpio.h>
#include <asm/mach/arch.h>
...
...
@@ -100,6 +101,8 @@ static struct platform_device wrt350n_v2_nor_flash = {
static
struct
mv643xx_eth_platform_data
wrt350n_v2_eth_data
=
{
.
phy_addr
=
-
1
,
.
speed
=
SPEED_1000
,
.
duplex
=
DUPLEX_FULL
,
};
static
void
__init
wrt350n_v2_init
(
void
)
...
...
drivers/net/Kconfig
View file @
e62112c5
...
...
@@ -510,14 +510,14 @@ config STNIC
config SH_ETH
tristate "Renesas SuperH Ethernet support"
depends on SUPERH && \
(CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712)
(CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712
|| CPU_SUBTYPE_SH7763
)
select CRC32
select MII
select MDIO_BITBANG
select PHYLIB
help
Renesas SuperH Ethernet device driver.
This driver support SH7710
and SH7712
.
This driver support SH7710
, SH7712 and SH7763
.
config SUNLANCE
tristate "Sun LANCE support"
...
...
drivers/net/bfin_mac.c
View file @
e62112c5
...
...
@@ -605,36 +605,87 @@ static void adjust_tx_list(void)
static
int
bfin_mac_hard_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
u
nsigned
int
data
;
u
16
*
data
;
current_tx_ptr
->
skb
=
skb
;
/*
* Is skb->data always 16-bit aligned?
* Do we need to memcpy((char *)(tail->packet + 2), skb->data, len)?
*/
if
((((
unsigned
int
)(
skb
->
data
))
&
0x02
)
==
2
)
{
/* move skb->data to current_tx_ptr payload */
data
=
(
unsigned
int
)(
skb
->
data
)
-
2
;
*
((
unsigned
short
*
)
data
)
=
(
unsigned
short
)(
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
unsigned
long
)
data
;
/* this is important! */
blackfin_dcache_flush_range
(
data
,
(
data
+
(
skb
->
len
))
+
2
);
if
(
ANOMALY_05000285
)
{
/*
* TXDWA feature is not avaible to older revision < 0.3 silicon
* of BF537
*
* Only if data buffer is ODD WORD alignment, we do not
* need to memcpy
*/
u32
data_align
=
(
u32
)(
skb
->
data
)
&
0x3
;
if
(
data_align
==
0x2
)
{
/* move skb->data to current_tx_ptr payload */
data
=
(
u16
*
)(
skb
->
data
)
-
1
;
*
data
=
(
u16
)(
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
u32
)
data
;
/* this is important! */
blackfin_dcache_flush_range
((
u32
)
data
,
(
u32
)((
u8
*
)
data
+
skb
->
len
+
4
));
}
else
{
*
((
u16
*
)(
current_tx_ptr
->
packet
))
=
(
u16
)(
skb
->
len
);
memcpy
((
u8
*
)(
current_tx_ptr
->
packet
+
2
),
skb
->
data
,
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
u32
)
current_tx_ptr
->
packet
;
if
(
current_tx_ptr
->
status
.
status_word
!=
0
)
current_tx_ptr
->
status
.
status_word
=
0
;
blackfin_dcache_flush_range
(
(
u32
)
current_tx_ptr
->
packet
,
(
u32
)(
current_tx_ptr
->
packet
+
skb
->
len
+
2
));
}
}
else
{
*
((
unsigned
short
*
)(
current_tx_ptr
->
packet
))
=
(
unsigned
short
)(
skb
->
len
);
memcpy
((
char
*
)(
current_tx_ptr
->
packet
+
2
),
skb
->
data
,
(
skb
->
len
));
current_tx_ptr
->
desc_a
.
start_addr
=
(
unsigned
long
)
current_tx_ptr
->
packet
;
if
(
current_tx_ptr
->
status
.
status_word
!=
0
)
current_tx_ptr
->
status
.
status_word
=
0
;
blackfin_dcache_flush_range
((
unsigned
int
)
current_tx_ptr
->
packet
,
(
unsigned
int
)(
current_tx_ptr
->
packet
+
skb
->
len
)
+
2
);
/*
* TXDWA feature is avaible to revision < 0.3 silicon of
* BF537 and always avaible to BF52x
*/
u32
data_align
=
(
u32
)(
skb
->
data
)
&
0x3
;
if
(
data_align
==
0x0
)
{
u16
sysctl
=
bfin_read_EMAC_SYSCTL
();
sysctl
|=
TXDWA
;
bfin_write_EMAC_SYSCTL
(
sysctl
);
/* move skb->data to current_tx_ptr payload */
data
=
(
u16
*
)(
skb
->
data
)
-
2
;
*
data
=
(
u16
)(
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
u32
)
data
;
/* this is important! */
blackfin_dcache_flush_range
(
(
u32
)
data
,
(
u32
)((
u8
*
)
data
+
skb
->
len
+
4
));
}
else
if
(
data_align
==
0x2
)
{
u16
sysctl
=
bfin_read_EMAC_SYSCTL
();
sysctl
&=
~
TXDWA
;
bfin_write_EMAC_SYSCTL
(
sysctl
);
/* move skb->data to current_tx_ptr payload */
data
=
(
u16
*
)(
skb
->
data
)
-
1
;
*
data
=
(
u16
)(
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
u32
)
data
;
/* this is important! */
blackfin_dcache_flush_range
(
(
u32
)
data
,
(
u32
)((
u8
*
)
data
+
skb
->
len
+
4
));
}
else
{
u16
sysctl
=
bfin_read_EMAC_SYSCTL
();
sysctl
&=
~
TXDWA
;
bfin_write_EMAC_SYSCTL
(
sysctl
);
*
((
u16
*
)(
current_tx_ptr
->
packet
))
=
(
u16
)(
skb
->
len
);
memcpy
((
u8
*
)(
current_tx_ptr
->
packet
+
2
),
skb
->
data
,
skb
->
len
);
current_tx_ptr
->
desc_a
.
start_addr
=
(
u32
)
current_tx_ptr
->
packet
;
if
(
current_tx_ptr
->
status
.
status_word
!=
0
)
current_tx_ptr
->
status
.
status_word
=
0
;
blackfin_dcache_flush_range
(
(
u32
)
current_tx_ptr
->
packet
,
(
u32
)(
current_tx_ptr
->
packet
+
skb
->
len
+
2
));
}
}
/* enable this packet's dma */
...
...
@@ -691,7 +742,6 @@ static void bfin_mac_rx(struct net_device *dev)
(
unsigned
long
)
skb
->
tail
);
dev
->
last_rx
=
jiffies
;
skb
->
dev
=
dev
;
skb
->
protocol
=
eth_type_trans
(
skb
,
dev
);
#if defined(BFIN_MAC_CSUM_OFFLOAD)
skb
->
csum
=
current_rx_ptr
->
status
.
ip_payload_csum
;
...
...
@@ -920,6 +970,7 @@ static int bfin_mac_open(struct net_device *dev)
phy_start
(
lp
->
phydev
);
phy_write
(
lp
->
phydev
,
MII_BMCR
,
BMCR_RESET
);
setup_system_regs
(
dev
);
setup_mac_addr
(
dev
->
dev_addr
);
bfin_mac_disable
();
bfin_mac_enable
();
pr_debug
(
"hardware init finished
\n
"
);
...
...
@@ -955,7 +1006,7 @@ static int bfin_mac_close(struct net_device *dev)
return
0
;
}
static
int
__init
bfin_mac_probe
(
struct
platform_device
*
pdev
)
static
int
__
dev
init
bfin_mac_probe
(
struct
platform_device
*
pdev
)
{
struct
net_device
*
ndev
;
struct
bfin_mac_local
*
lp
;
...
...
@@ -1081,7 +1132,7 @@ static int __init bfin_mac_probe(struct platform_device *pdev)
return
rc
;
}
static
int
bfin_mac_remove
(
struct
platform_device
*
pdev
)
static
int
__devexit
bfin_mac_remove
(
struct
platform_device
*
pdev
)
{
struct
net_device
*
ndev
=
platform_get_drvdata
(
pdev
);
struct
bfin_mac_local
*
lp
=
netdev_priv
(
ndev
);
...
...
@@ -1128,7 +1179,7 @@ static int bfin_mac_resume(struct platform_device *pdev)
static
struct
platform_driver
bfin_mac_driver
=
{
.
probe
=
bfin_mac_probe
,
.
remove
=
bfin_mac_remove
,
.
remove
=
__devexit_p
(
bfin_mac_remove
)
,
.
resume
=
bfin_mac_resume
,
.
suspend
=
bfin_mac_suspend
,
.
driver
=
{
...
...
drivers/net/cxgb3/t3_hw.c
View file @
e62112c5
...
...
@@ -683,7 +683,7 @@ enum {
SF_ERASE_SECTOR
=
0xd8
,
/* erase sector */
FW_FLASH_BOOT_ADDR
=
0x70000
,
/* start address of FW in flash */
FW_VERS_ADDR
=
0x7
7
ffc
,
/* flash address holding FW version */
FW_VERS_ADDR
=
0x7
f
ffc
,
/* flash address holding FW version */
FW_MIN_SIZE
=
8
/* at least version and csum */
};
...
...
drivers/net/ehea/ehea_main.c
View file @
e62112c5
...
...
@@ -2937,9 +2937,9 @@ static void ehea_rereg_mrs(struct work_struct *work)
}
}
}
mutex_unlock
(
&
dlpar_mem_lock
);
ehea_info
(
"re-initializing driver complete"
);
ehea_info
(
"re-initializing driver complete"
);
out:
mutex_unlock
(
&
dlpar_mem_lock
);
return
;
}
...
...
drivers/net/enc28j60.c
View file @
e62112c5
...
...
@@ -1547,8 +1547,10 @@ static int __devinit enc28j60_probe(struct spi_device *spi)
random_ether_addr
(
dev
->
dev_addr
);
enc28j60_set_hw_macaddr
(
dev
);
ret
=
request_irq
(
spi
->
irq
,
enc28j60_irq
,
IRQF_TRIGGER_FALLING
,
DRV_NAME
,
priv
);
/* Board setup must set the relevant edge trigger type;
* level triggers won't currently work.
*/
ret
=
request_irq
(
spi
->
irq
,
enc28j60_irq
,
0
,
DRV_NAME
,
priv
);
if
(
ret
<
0
)
{
if
(
netif_msg_probe
(
priv
))
dev_err
(
&
spi
->
dev
,
DRV_NAME
": request irq %d failed "
...
...
drivers/net/forcedeth.c
View file @
e62112c5
...
...
@@ -333,6 +333,7 @@ enum {
NvRegPowerState2
=
0x600
,
#define NVREG_POWERSTATE2_POWERUP_MASK 0x0F11
#define NVREG_POWERSTATE2_POWERUP_REV_A3 0x0001
#define NVREG_POWERSTATE2_PHY_RESET 0x0004
};
/* Big endian: should work, but is untested */
...
...
@@ -529,6 +530,7 @@ union ring_type {
#define PHY_REALTEK_INIT_REG4 0x14
#define PHY_REALTEK_INIT_REG5 0x18
#define PHY_REALTEK_INIT_REG6 0x11
#define PHY_REALTEK_INIT_REG7 0x01
#define PHY_REALTEK_INIT1 0x0000
#define PHY_REALTEK_INIT2 0x8e00
#define PHY_REALTEK_INIT3 0x0001
...
...
@@ -537,6 +539,9 @@ union ring_type {
#define PHY_REALTEK_INIT6 0xf5c7
#define PHY_REALTEK_INIT7 0x1000
#define PHY_REALTEK_INIT8 0x0003
#define PHY_REALTEK_INIT9 0x0008
#define PHY_REALTEK_INIT10 0x0005
#define PHY_REALTEK_INIT11 0x0200
#define PHY_REALTEK_INIT_MSK1 0x0003
#define PHY_GIGABIT 0x0100
...
...
@@ -1149,6 +1154,42 @@ static int phy_init(struct net_device *dev)
return
PHY_ERROR
;
}
}
if
(
np
->
phy_model
==
PHY_MODEL_REALTEK_8211
&&
np
->
phy_rev
==
PHY_REV_REALTEK_8211C
)
{
u32
powerstate
=
readl
(
base
+
NvRegPowerState2
);
/* need to perform hw phy reset */
powerstate
|=
NVREG_POWERSTATE2_PHY_RESET
;
writel
(
powerstate
,
base
+
NvRegPowerState2
);
msleep
(
25
);
powerstate
&=
~
NVREG_POWERSTATE2_PHY_RESET
;
writel
(
powerstate
,
base
+
NvRegPowerState2
);
msleep
(
25
);
reg
=
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG6
,
MII_READ
);
reg
|=
PHY_REALTEK_INIT9
;
if
(
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG6
,
reg
))
{
printk
(
KERN_INFO
"%s: phy init failed.
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
if
(
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG1
,
PHY_REALTEK_INIT10
))
{
printk
(
KERN_INFO
"%s: phy init failed.
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
reg
=
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG7
,
MII_READ
);
if
(
!
(
reg
&
PHY_REALTEK_INIT11
))
{
reg
|=
PHY_REALTEK_INIT11
;
if
(
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG7
,
reg
))
{
printk
(
KERN_INFO
"%s: phy init failed.
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
}
if
(
mii_rw
(
dev
,
np
->
phyaddr
,
PHY_REALTEK_INIT_REG1
,
PHY_REALTEK_INIT1
))
{
printk
(
KERN_INFO
"%s: phy init failed.
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
}
if
(
np
->
phy_model
==
PHY_MODEL_REALTEK_8201
)
{
if
(
np
->
device_id
==
PCI_DEVICE_ID_NVIDIA_NVENET_32
||
np
->
device_id
==
PCI_DEVICE_ID_NVIDIA_NVENET_33
||
...
...
@@ -1201,12 +1242,23 @@ static int phy_init(struct net_device *dev)
mii_control
=
mii_rw
(
dev
,
np
->
phyaddr
,
MII_BMCR
,
MII_READ
);
mii_control
|=
BMCR_ANENABLE
;
/* reset the phy
* (certain phys need bmcr to be setup with reset)
*/
if
(
phy_reset
(
dev
,
mii_control
))
{
printk
(
KERN_INFO
"%s: phy reset failed
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
if
(
np
->
phy_oui
==
PHY_OUI_REALTEK
&&
np
->
phy_model
==
PHY_MODEL_REALTEK_8211
&&
np
->
phy_rev
==
PHY_REV_REALTEK_8211C
)
{
/* start autoneg since we already performed hw reset above */
mii_control
|=
BMCR_ANRESTART
;
if
(
mii_rw
(
dev
,
np
->
phyaddr
,
MII_BMCR
,
mii_control
))
{
printk
(
KERN_INFO
"%s: phy init failed
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
}
else
{
/* reset the phy
* (certain phys need bmcr to be setup with reset)
*/
if
(
phy_reset
(
dev
,
mii_control
))
{
printk
(
KERN_INFO
"%s: phy reset failed
\n
"
,
pci_name
(
np
->
pci_dev
));
return
PHY_ERROR
;
}
}
/* phy vendor specific configuration */
...
...
drivers/net/mv643xx_eth.c
View file @
e62112c5
This diff is collapsed.
Click to expand it.
drivers/net/ne.c
View file @
e62112c5
...
...
@@ -536,7 +536,7 @@ static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
#ifdef CONFIG_NET_POLL_CONTROLLER
dev
->
poll_controller
=
eip_poll
;
#endif
NS8390_init
(
dev
,
0
);
NS8390
p
_init
(
dev
,
0
);
ret
=
register_netdev
(
dev
);
if
(
ret
)
...
...
@@ -794,7 +794,7 @@ static void ne_block_output(struct net_device *dev, int count,
if
(
time_after
(
jiffies
,
dma_start
+
2
*
HZ
/
100
))
{
/* 20ms */
printk
(
KERN_WARNING
"%s: timeout waiting for Tx RDC.
\n
"
,
dev
->
name
);
ne_reset_8390
(
dev
);
NS8390
_init
(
dev
,
1
);
NS8390
p_init
(
dev
,
1
);
break
;
}
...
...
@@ -855,7 +855,7 @@ static int ne_drv_resume(struct platform_device *pdev)
if
(
netif_running
(
dev
))
{
ne_reset_8390
(
dev
);
NS8390_init
(
dev
,
1
);
NS8390
p
_init
(
dev
,
1
);
netif_device_attach
(
dev
);
}
return
0
;
...
...
drivers/net/s2io.c
View file @
e62112c5
...
...
@@ -3143,7 +3143,7 @@ static void tx_intr_handler(struct fifo_info *fifo_data)
pkt_cnt
++
;
/* Updating the statistics block */
nic
->
stats
.
tx_bytes
+=
skb
->
len
;
nic
->
dev
->
stats
.
tx_bytes
+=
skb
->
len
;
nic
->
mac_control
.
stats_info
->
sw_stat
.
mem_freed
+=
skb
->
truesize
;
dev_kfree_skb_irq
(
skb
);
...
...
@@ -4896,25 +4896,42 @@ static struct net_device_stats *s2io_get_stats(struct net_device *dev)
/* Configure Stats for immediate updt */
s2io_updt_stats
(
sp
);
/* Using sp->stats as a staging area, because reset (due to mtu
change, for example) will clear some hardware counters */
dev
->
stats
.
tx_packets
+=
le32_to_cpu
(
mac_control
->
stats_info
->
tmac_frms
)
-
sp
->
stats
.
tx_packets
;
sp
->
stats
.
tx_packets
=
le32_to_cpu
(
mac_control
->
stats_info
->
tmac_frms
);
dev
->
stats
.
tx_errors
+=
le32_to_cpu
(
mac_control
->
stats_info
->
tmac_any_err_frms
)
-
sp
->
stats
.
tx_errors
;
sp
->
stats
.
tx_errors
=
le32_to_cpu
(
mac_control
->
stats_info
->
tmac_any_err_frms
);
dev
->
stats
.
rx_errors
+=
le64_to_cpu
(
mac_control
->
stats_info
->
rmac_drop_frms
)
-
sp
->
stats
.
rx_errors
;
sp
->
stats
.
rx_errors
=
le64_to_cpu
(
mac_control
->
stats_info
->
rmac_drop_frms
);
dev
->
stats
.
multicast
=
le32_to_cpu
(
mac_control
->
stats_info
->
rmac_vld_mcst_frms
)
-
sp
->
stats
.
multicast
;
sp
->
stats
.
multicast
=
le32_to_cpu
(
mac_control
->
stats_info
->
rmac_vld_mcst_frms
);
dev
->
stats
.
rx_length_errors
=
le64_to_cpu
(
mac_control
->
stats_info
->
rmac_long_frms
)
-
sp
->
stats
.
rx_length_errors
;
sp
->
stats
.
rx_length_errors
=
le64_to_cpu
(
mac_control
->
stats_info
->
rmac_long_frms
);
/* collect per-ring rx_packets and rx_bytes */
sp
->
stats
.
rx_packets
=
sp
->
stats
.
rx_bytes
=
0
;
dev
->
stats
.
rx_packets
=
dev
->
stats
.
rx_bytes
=
0
;
for
(
i
=
0
;
i
<
config
->
rx_ring_num
;
i
++
)
{
sp
->
stats
.
rx_packets
+=
mac_control
->
rings
[
i
].
rx_packets
;
sp
->
stats
.
rx_bytes
+=
mac_control
->
rings
[
i
].
rx_bytes
;
dev
->
stats
.
rx_packets
+=
mac_control
->
rings
[
i
].
rx_packets
;
dev
->
stats
.
rx_bytes
+=
mac_control
->
rings
[
i
].
rx_bytes
;
}
return
(
&
sp
->
stats
);
return
(
&
dev
->
stats
);
}
/**
...
...
@@ -7419,7 +7436,7 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
if
(
err_mask
!=
0x5
)
{
DBG_PRINT
(
ERR_DBG
,
"%s: Rx error Value: 0x%x
\n
"
,
dev
->
name
,
err_mask
);
sp
->
stats
.
rx_crc_errors
++
;
dev
->
stats
.
rx_crc_errors
++
;
sp
->
mac_control
.
stats_info
->
sw_stat
.
mem_freed
+=
skb
->
truesize
;
dev_kfree_skb
(
skb
);
...
...
drivers/net/sh_eth.c
View file @
e62112c5
This diff is collapsed.
Click to expand it.
drivers/net/sh_eth.h
View file @
e62112c5
This diff is collapsed.
Click to expand it.
drivers/net/usb/dm9601.c
View file @
e62112c5
...
...
@@ -55,12 +55,28 @@
static
int
dm_read
(
struct
usbnet
*
dev
,
u8
reg
,
u16
length
,
void
*
data
)
{
void
*
buf
;
int
err
=
-
ENOMEM
;
devdbg
(
dev
,
"dm_read() reg=0x%02x length=%d"
,
reg
,
length
);
return
usb_control_msg
(
dev
->
udev
,
usb_rcvctrlpipe
(
dev
->
udev
,
0
),
DM_READ_REGS
,
USB_DIR_IN
|
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
0
,
reg
,
data
,
length
,
USB_CTRL_SET_TIMEOUT
);
buf
=
kmalloc
(
length
,
GFP_KERNEL
);
if
(
!
buf
)
goto
out
;
err
=
usb_control_msg
(
dev
->
udev
,
usb_rcvctrlpipe
(
dev
->
udev
,
0
),
DM_READ_REGS
,
USB_DIR_IN
|
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
0
,
reg
,
buf
,
length
,
USB_CTRL_SET_TIMEOUT
);
if
(
err
==
length
)
memcpy
(
data
,
buf
,
length
);
else
if
(
err
>=
0
)
err
=
-
EINVAL
;
kfree
(
buf
);
out:
return
err
;
}
static
int
dm_read_reg
(
struct
usbnet
*
dev
,
u8
reg
,
u8
*
value
)
...
...
@@ -70,12 +86,28 @@ static int dm_read_reg(struct usbnet *dev, u8 reg, u8 *value)
static
int
dm_write
(
struct
usbnet
*
dev
,
u8
reg
,
u16
length
,
void
*
data
)
{
void
*
buf
=
NULL
;
int
err
=
-
ENOMEM
;
devdbg
(
dev
,
"dm_write() reg=0x%02x, length=%d"
,
reg
,
length
);
return
usb_control_msg
(
dev
->
udev
,
usb_sndctrlpipe
(
dev
->
udev
,
0
),
DM_WRITE_REGS
,
USB_DIR_OUT
|
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
0
,
reg
,
data
,
length
,
USB_CTRL_SET_TIMEOUT
);
if
(
data
)
{
buf
=
kmalloc
(
length
,
GFP_KERNEL
);
if
(
!
buf
)
goto
out
;
memcpy
(
buf
,
data
,
length
);
}
err
=
usb_control_msg
(
dev
->
udev
,
usb_sndctrlpipe
(
dev
->
udev
,
0
),
DM_WRITE_REGS
,
USB_DIR_OUT
|
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
0
,
reg
,
buf
,
length
,
USB_CTRL_SET_TIMEOUT
);
kfree
(
buf
);
if
(
err
>=
0
&&
err
<
length
)
err
=
-
EINVAL
;
out:
return
err
;
}
static
int
dm_write_reg
(
struct
usbnet
*
dev
,
u8
reg
,
u8
value
)
...
...
drivers/net/wd.c
View file @
e62112c5
...
...
@@ -337,7 +337,7 @@ static int __init wd_probe1(struct net_device *dev, int ioaddr)
#ifdef CONFIG_NET_POLL_CONTROLLER
dev
->
poll_controller
=
ei_poll
;
#endif
NS8390_init
(
dev
,
0
);
NS8390
p
_init
(
dev
,
0
);
#if 1
/* Enable interrupt generation on softconfig cards -- M.U */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment