Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
cf10b285
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
156
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cf10b285
编写于
1月 09, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
上级
14591de1
166c3436
变更
28
隐藏空白更改
内联
并排
Showing
28 changed file
with
341 addition
and
252 deletion
+341
-252
Documentation/networking/bonding.txt
Documentation/networking/bonding.txt
+0
-2
MAINTAINERS
MAINTAINERS
+0
-1
drivers/net/3c503.c
drivers/net/3c503.c
+8
-8
drivers/net/Kconfig
drivers/net/Kconfig
+2
-2
drivers/net/ac3200.c
drivers/net/ac3200.c
+8
-8
drivers/net/bonding/bonding.h
drivers/net/bonding/bonding.h
+4
-4
drivers/net/e1000/e1000_param.c
drivers/net/e1000/e1000_param.c
+7
-3
drivers/net/e2100.c
drivers/net/e2100.c
+7
-7
drivers/net/es3210.c
drivers/net/es3210.c
+7
-7
drivers/net/forcedeth.c
drivers/net/forcedeth.c
+100
-64
drivers/net/gianfar.h
drivers/net/gianfar.h
+2
-2
drivers/net/hp-plus.c
drivers/net/hp-plus.c
+6
-6
drivers/net/hp.c
drivers/net/hp.c
+6
-6
drivers/net/ibm_emac/ibm_emac.h
drivers/net/ibm_emac/ibm_emac.h
+2
-1
drivers/net/ibm_emac/ibm_emac_core.c
drivers/net/ibm_emac/ibm_emac_core.c
+1
-1
drivers/net/lance.c
drivers/net/lance.c
+11
-11
drivers/net/lne390.c
drivers/net/lne390.c
+7
-7
drivers/net/mv643xx_eth.c
drivers/net/mv643xx_eth.c
+1
-1
drivers/net/ne.c
drivers/net/ne.c
+9
-9
drivers/net/ne2.c
drivers/net/ne2.c
+8
-8
drivers/net/sk98lin/skge.c
drivers/net/sk98lin/skge.c
+76
-53
drivers/net/smc-ultra.c
drivers/net/smc-ultra.c
+12
-12
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+1
-1
drivers/net/wd.c
drivers/net/wd.c
+7
-7
drivers/net/wireless/ipw2100.c
drivers/net/wireless/ipw2100.c
+4
-1
net/ieee80211/ieee80211_crypt_wep.c
net/ieee80211/ieee80211_crypt_wep.c
+43
-18
net/ieee80211/ieee80211_tx.c
net/ieee80211/ieee80211_tx.c
+1
-1
net/ieee80211/ieee80211_wx.c
net/ieee80211/ieee80211_wx.c
+1
-1
未找到文件。
Documentation/networking/bonding.txt
浏览文件 @
cf10b285
...
...
@@ -945,7 +945,6 @@ bond0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4
collisions:0 txqueuelen:0
eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4
inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0
TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0
...
...
@@ -953,7 +952,6 @@ eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4
Interrupt:10 Base address:0x1080
eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4
inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0
TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0
...
...
MAINTAINERS
浏览文件 @
cf10b285
...
...
@@ -1697,7 +1697,6 @@ S: Maintained
MARVELL MV64340 ETHERNET DRIVER
P: Manish Lachwani
M: Manish_Lachwani@pmc-sierra.com
L: linux-mips@linux-mips.org
L: netdev@vger.kernel.org
S: Supported
...
...
drivers/net/3c503.c
浏览文件 @
cf10b285
...
...
@@ -148,14 +148,6 @@ el2_pio_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: el2_close() handles free_irq */
release_region
(
dev
->
base_addr
,
EL2_IO_EXTENT
);
if
(
ei_status
.
mem
)
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
el2_probe
(
int
unit
)
{
...
...
@@ -726,6 +718,14 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: el2_close() handles free_irq */
release_region
(
dev
->
base_addr
,
EL2_IO_EXTENT
);
if
(
ei_status
.
mem
)
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/Kconfig
浏览文件 @
cf10b285
...
...
@@ -129,7 +129,7 @@ config NET_SB1000
If you don't have this card, of course say N.
source "drivers/net/arcnet/Kconfig"
source "drivers/net/arcnet/Kconfig"
source "drivers/net/phy/Kconfig"
...
...
@@ -844,7 +844,7 @@ config SMC9194
config DM9000
tristate "DM9000 support"
depends on
ARM
&& NET_ETHERNET
depends on
(ARM || MIPS)
&& NET_ETHERNET
select CRC32
select MII
---help---
...
...
drivers/net/ac3200.c
浏览文件 @
cf10b285
...
...
@@ -123,14 +123,6 @@ static int __init do_ac3200_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* Someday free_irq may be in ac_close_card() */
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
AC_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
ac3200_probe
(
int
unit
)
{
...
...
@@ -406,6 +398,14 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* Someday free_irq may be in ac_close_card() */
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
AC_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/bonding/bonding.h
浏览文件 @
cf10b285
...
...
@@ -205,7 +205,7 @@ struct bonding {
*
* Caller must hold bond lock for read
*/
extern
inline
struct
slave
*
bond_get_slave_by_dev
(
struct
bonding
*
bond
,
struct
net_device
*
slave_dev
)
static
inline
struct
slave
*
bond_get_slave_by_dev
(
struct
bonding
*
bond
,
struct
net_device
*
slave_dev
)
{
struct
slave
*
slave
=
NULL
;
int
i
;
...
...
@@ -219,7 +219,7 @@ extern inline struct slave *bond_get_slave_by_dev(struct bonding *bond, struct n
return
slave
;
}
extern
inline
struct
bonding
*
bond_get_bond_by_slave
(
struct
slave
*
slave
)
static
inline
struct
bonding
*
bond_get_bond_by_slave
(
struct
slave
*
slave
)
{
if
(
!
slave
||
!
slave
->
dev
->
master
)
{
return
NULL
;
...
...
@@ -228,13 +228,13 @@ extern inline struct bonding *bond_get_bond_by_slave(struct slave *slave)
return
(
struct
bonding
*
)
slave
->
dev
->
master
->
priv
;
}
extern
inline
void
bond_set_slave_inactive_flags
(
struct
slave
*
slave
)
static
inline
void
bond_set_slave_inactive_flags
(
struct
slave
*
slave
)
{
slave
->
state
=
BOND_STATE_BACKUP
;
slave
->
dev
->
flags
|=
IFF_NOARP
;
}
extern
inline
void
bond_set_slave_active_flags
(
struct
slave
*
slave
)
static
inline
void
bond_set_slave_active_flags
(
struct
slave
*
slave
)
{
slave
->
state
=
BOND_STATE_ACTIVE
;
slave
->
dev
->
flags
&=
~
IFF_NOARP
;
...
...
drivers/net/e1000/e1000_param.c
浏览文件 @
cf10b285
...
...
@@ -545,7 +545,7 @@ e1000_check_fiber_options(struct e1000_adapter *adapter)
static
void
__devinit
e1000_check_copper_options
(
struct
e1000_adapter
*
adapter
)
{
int
speed
,
dplx
;
int
speed
,
dplx
,
an
;
int
bd
=
adapter
->
bd_number
;
{
/* Speed */
...
...
@@ -641,8 +641,12 @@ e1000_check_copper_options(struct e1000_adapter *adapter)
.
p
=
an_list
}}
};
int
an
=
AutoNeg
[
bd
];
e1000_validate_option
(
&
an
,
&
opt
,
adapter
);
if
(
num_AutoNeg
>
bd
)
{
an
=
AutoNeg
[
bd
];
e1000_validate_option
(
&
an
,
&
opt
,
adapter
);
}
else
{
an
=
opt
.
def
;
}
adapter
->
hw
.
autoneg_advertised
=
an
;
}
...
...
drivers/net/e2100.c
浏览文件 @
cf10b285
...
...
@@ -140,13 +140,6 @@ static int __init do_e2100_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: e21_close() handles free_irq */
iounmap
(
ei_status
.
mem
);
release_region
(
dev
->
base_addr
,
E21_IO_EXTENT
);
}
#ifndef MODULE
struct
net_device
*
__init
e2100_probe
(
int
unit
)
{
...
...
@@ -463,6 +456,13 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: e21_close() handles free_irq */
iounmap
(
ei_status
.
mem
);
release_region
(
dev
->
base_addr
,
E21_IO_EXTENT
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/es3210.c
浏览文件 @
cf10b285
...
...
@@ -155,13 +155,6 @@ static int __init do_es_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
ES_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
es_probe
(
int
unit
)
{
...
...
@@ -456,6 +449,13 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
ES_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/forcedeth.c
浏览文件 @
cf10b285
...
...
@@ -101,6 +101,7 @@
* 0.46: 20 Oct 2005: Add irq optimization modes.
* 0.47: 26 Oct 2005: Add phyaddr 0 in phy scan.
* 0.48: 24 Dec 2005: Disable TSO, bugfix for pci_map_single
* 0.49: 10 Dec 2005: Fix tso for large buffers.
*
* Known bugs:
* We suspect that on some hardware no TX done interrupts are generated.
...
...
@@ -112,7 +113,7 @@
* DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
* superfluous timer interrupts from the nic.
*/
#define FORCEDETH_VERSION "0.4
8
"
#define FORCEDETH_VERSION "0.4
9
"
#define DRV_NAME "forcedeth"
#include <linux/module.h>
...
...
@@ -349,6 +350,8 @@ typedef union _ring_type {
#define NV_TX2_VALID (1<<31)
#define NV_TX2_TSO (1<<28)
#define NV_TX2_TSO_SHIFT 14
#define NV_TX2_TSO_MAX_SHIFT 14
#define NV_TX2_TSO_MAX_SIZE (1<<NV_TX2_TSO_MAX_SHIFT)
#define NV_TX2_CHECKSUM_L3 (1<<27)
#define NV_TX2_CHECKSUM_L4 (1<<26)
...
...
@@ -408,15 +411,15 @@ typedef union _ring_type {
#define NV_WATCHDOG_TIMEO (5*HZ)
#define RX_RING 128
#define TX_RING
64
#define TX_RING
256
/*
* If your nic mysteriously hangs then try to reduce the limits
* to 1/0: It might be required to set NV_TX_LASTPACKET in the
* last valid ring entry. But this would be impossible to
* implement - probably a disassembly error.
*/
#define TX_LIMIT_STOP
63
#define TX_LIMIT_START
62
#define TX_LIMIT_STOP
255
#define TX_LIMIT_START
254
/* rx/tx mac addr + type + vlan + align + slack*/
#define NV_RX_HEADERS (64)
...
...
@@ -535,6 +538,7 @@ struct fe_priv {
unsigned
int
next_tx
,
nic_tx
;
struct
sk_buff
*
tx_skbuff
[
TX_RING
];
dma_addr_t
tx_dma
[
TX_RING
];
unsigned
int
tx_dma_len
[
TX_RING
];
u32
tx_flags
;
};
...
...
@@ -935,6 +939,7 @@ static void nv_init_tx(struct net_device *dev)
else
np
->
tx_ring
.
ex
[
i
].
FlagLen
=
0
;
np
->
tx_skbuff
[
i
]
=
NULL
;
np
->
tx_dma
[
i
]
=
0
;
}
}
...
...
@@ -945,30 +950,27 @@ static int nv_init_ring(struct net_device *dev)
return
nv_alloc_rx
(
dev
);
}
static
void
nv_release_txskb
(
struct
net_device
*
dev
,
unsigned
int
skbnr
)
static
int
nv_release_txskb
(
struct
net_device
*
dev
,
unsigned
int
skbnr
)
{
struct
fe_priv
*
np
=
netdev_priv
(
dev
);
struct
sk_buff
*
skb
=
np
->
tx_skbuff
[
skbnr
];
unsigned
int
j
,
entry
,
fragments
;
dprintk
(
KERN_INFO
"%s: nv_release_txskb for skbnr %d, skb %p
\n
"
,
dev
->
name
,
skbnr
,
np
->
tx_skbuff
[
skbnr
]);
entry
=
skbnr
;
if
((
fragments
=
skb_shinfo
(
skb
)
->
nr_frags
)
!=
0
)
{
for
(
j
=
fragments
;
j
>=
1
;
j
--
)
{
skb_frag_t
*
frag
=
&
skb_shinfo
(
skb
)
->
frags
[
j
-
1
];
pci_unmap_page
(
np
->
pci_dev
,
np
->
tx_dma
[
entry
],
frag
->
size
,
PCI_DMA_TODEVICE
);
entry
=
(
entry
-
1
)
%
TX_RING
;
}
dprintk
(
KERN_INFO
"%s: nv_release_txskb for skbnr %d
\n
"
,
dev
->
name
,
skbnr
);
if
(
np
->
tx_dma
[
skbnr
])
{
pci_unmap_page
(
np
->
pci_dev
,
np
->
tx_dma
[
skbnr
],
np
->
tx_dma_len
[
skbnr
],
PCI_DMA_TODEVICE
);
np
->
tx_dma
[
skbnr
]
=
0
;
}
if
(
np
->
tx_skbuff
[
skbnr
])
{
dev_kfree_skb_irq
(
np
->
tx_skbuff
[
skbnr
]);
np
->
tx_skbuff
[
skbnr
]
=
NULL
;
return
1
;
}
else
{
return
0
;
}
pci_unmap_single
(
np
->
pci_dev
,
np
->
tx_dma
[
entry
],
skb
->
len
-
skb
->
data_len
,
PCI_DMA_TODEVICE
);
dev_kfree_skb_irq
(
skb
);
np
->
tx_skbuff
[
skbnr
]
=
NULL
;
}
static
void
nv_drain_tx
(
struct
net_device
*
dev
)
...
...
@@ -981,10 +983,8 @@ static void nv_drain_tx(struct net_device *dev)
np
->
tx_ring
.
orig
[
i
].
FlagLen
=
0
;
else
np
->
tx_ring
.
ex
[
i
].
FlagLen
=
0
;
if
(
np
->
tx_skbuff
[
i
])
{
nv_release_txskb
(
dev
,
i
);
if
(
nv_release_txskb
(
dev
,
i
))
np
->
stats
.
tx_dropped
++
;
}
}
}
...
...
@@ -1021,68 +1021,105 @@ static void drain_ring(struct net_device *dev)
static
int
nv_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
fe_priv
*
np
=
netdev_priv
(
dev
);
u32
tx_flags
=
0
;
u32
tx_flags_extra
=
(
np
->
desc_ver
==
DESC_VER_1
?
NV_TX_LASTPACKET
:
NV_TX2_LASTPACKET
);
unsigned
int
fragments
=
skb_shinfo
(
skb
)
->
nr_frags
;
unsigned
int
nr
=
(
np
->
next_tx
+
fragments
)
%
TX_RING
;
unsigned
int
nr
=
(
np
->
next_tx
-
1
)
%
TX_RING
;
unsigned
int
start_nr
=
np
->
next_tx
%
TX_RING
;
unsigned
int
i
;
u32
offset
=
0
;
u32
bcnt
;
u32
size
=
skb
->
len
-
skb
->
data_len
;
u32
entries
=
(
size
>>
NV_TX2_TSO_MAX_SHIFT
)
+
((
size
&
(
NV_TX2_TSO_MAX_SIZE
-
1
))
?
1
:
0
);
/* add fragments to entries count */
for
(
i
=
0
;
i
<
fragments
;
i
++
)
{
entries
+=
(
skb_shinfo
(
skb
)
->
frags
[
i
].
size
>>
NV_TX2_TSO_MAX_SHIFT
)
+
((
skb_shinfo
(
skb
)
->
frags
[
i
].
size
&
(
NV_TX2_TSO_MAX_SIZE
-
1
))
?
1
:
0
);
}
spin_lock_irq
(
&
np
->
lock
);
if
((
np
->
next_tx
-
np
->
nic_tx
+
fragments
)
>
TX_LIMIT_STOP
)
{
if
((
np
->
next_tx
-
np
->
nic_tx
+
entries
-
1
)
>
TX_LIMIT_STOP
)
{
spin_unlock_irq
(
&
np
->
lock
);
netif_stop_queue
(
dev
);
return
NETDEV_TX_BUSY
;
}
np
->
tx_skbuff
[
nr
]
=
skb
;
if
(
fragments
)
{
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit: buffer contains %d fragments
\n
"
,
dev
->
name
,
fragments
);
/* setup descriptors in reverse order */
for
(
i
=
fragments
;
i
>=
1
;
i
--
)
{
skb_frag_t
*
frag
=
&
skb_shinfo
(
skb
)
->
frags
[
i
-
1
];
np
->
tx_dma
[
nr
]
=
pci_map_page
(
np
->
pci_dev
,
frag
->
page
,
frag
->
page_offset
,
frag
->
size
,
PCI_DMA_TODEVICE
);
/* setup the header buffer */
do
{
bcnt
=
(
size
>
NV_TX2_TSO_MAX_SIZE
)
?
NV_TX2_TSO_MAX_SIZE
:
size
;
nr
=
(
nr
+
1
)
%
TX_RING
;
np
->
tx_dma
[
nr
]
=
pci_map_single
(
np
->
pci_dev
,
skb
->
data
+
offset
,
bcnt
,
PCI_DMA_TODEVICE
);
np
->
tx_dma_len
[
nr
]
=
bcnt
;
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
{
np
->
tx_ring
.
orig
[
nr
].
PacketBuffer
=
cpu_to_le32
(
np
->
tx_dma
[
nr
]);
np
->
tx_ring
.
orig
[
nr
].
FlagLen
=
cpu_to_le32
((
bcnt
-
1
)
|
tx_flags
);
}
else
{
np
->
tx_ring
.
ex
[
nr
].
PacketBufferHigh
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
>>
32
;
np
->
tx_ring
.
ex
[
nr
].
PacketBufferLow
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
&
0x0FFFFFFFF
;
np
->
tx_ring
.
ex
[
nr
].
FlagLen
=
cpu_to_le32
((
bcnt
-
1
)
|
tx_flags
);
}
tx_flags
=
np
->
tx_flags
;
offset
+=
bcnt
;
size
-=
bcnt
;
}
while
(
size
);
/* setup the fragments */
for
(
i
=
0
;
i
<
fragments
;
i
++
)
{
skb_frag_t
*
frag
=
&
skb_shinfo
(
skb
)
->
frags
[
i
];
u32
size
=
frag
->
size
;
offset
=
0
;
do
{
bcnt
=
(
size
>
NV_TX2_TSO_MAX_SIZE
)
?
NV_TX2_TSO_MAX_SIZE
:
size
;
nr
=
(
nr
+
1
)
%
TX_RING
;
np
->
tx_dma
[
nr
]
=
pci_map_page
(
np
->
pci_dev
,
frag
->
page
,
frag
->
page_offset
+
offset
,
bcnt
,
PCI_DMA_TODEVICE
);
np
->
tx_dma_len
[
nr
]
=
bcnt
;
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
{
np
->
tx_ring
.
orig
[
nr
].
PacketBuffer
=
cpu_to_le32
(
np
->
tx_dma
[
nr
]);
np
->
tx_ring
.
orig
[
nr
].
FlagLen
=
cpu_to_le32
(
(
frag
->
size
-
1
)
|
np
->
tx_flags
|
tx_flags_extra
);
np
->
tx_ring
.
orig
[
nr
].
FlagLen
=
cpu_to_le32
(
(
bcnt
-
1
)
|
tx_flags
);
}
else
{
np
->
tx_ring
.
ex
[
nr
].
PacketBufferHigh
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
>>
32
;
np
->
tx_ring
.
ex
[
nr
].
PacketBufferLow
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
&
0x0FFFFFFFF
;
np
->
tx_ring
.
ex
[
nr
].
FlagLen
=
cpu_to_le32
(
(
frag
->
size
-
1
)
|
np
->
tx_flags
|
tx_flags_extra
);
np
->
tx_ring
.
ex
[
nr
].
FlagLen
=
cpu_to_le32
(
(
bcnt
-
1
)
|
tx_flags
);
}
nr
=
(
nr
-
1
)
%
TX_RING
;
offset
+=
bcnt
;
size
-=
bcnt
;
}
while
(
size
);
}
if
(
np
->
desc_ver
==
DESC_VER_1
)
tx_flags_extra
&=
~
NV_TX_LASTPACKET
;
else
tx_flags_extra
&=
~
NV_TX2_LASTPACKET
;
}
/* set last fragment flag */
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
{
np
->
tx_ring
.
orig
[
nr
].
FlagLen
|=
cpu_to_le32
(
tx_flags_extra
);
}
else
{
np
->
tx_ring
.
ex
[
nr
].
FlagLen
|=
cpu_to_le32
(
tx_flags_extra
);
}
np
->
tx_skbuff
[
nr
]
=
skb
;
#ifdef NETIF_F_TSO
if
(
skb_shinfo
(
skb
)
->
tso_size
)
tx_flags_extra
|
=
NV_TX2_TSO
|
(
skb_shinfo
(
skb
)
->
tso_size
<<
NV_TX2_TSO_SHIFT
);
tx_flags_extra
=
NV_TX2_TSO
|
(
skb_shinfo
(
skb
)
->
tso_size
<<
NV_TX2_TSO_SHIFT
);
else
#endif
tx_flags_extra
|
=
(
skb
->
ip_summed
==
CHECKSUM_HW
?
(
NV_TX2_CHECKSUM_L3
|
NV_TX2_CHECKSUM_L4
)
:
0
);
tx_flags_extra
=
(
skb
->
ip_summed
==
CHECKSUM_HW
?
(
NV_TX2_CHECKSUM_L3
|
NV_TX2_CHECKSUM_L4
)
:
0
);
np
->
tx_dma
[
nr
]
=
pci_map_single
(
np
->
pci_dev
,
skb
->
data
,
skb
->
len
-
skb
->
data_len
,
PCI_DMA_TODEVICE
);
/* set tx flags */
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
{
np
->
tx_ring
.
orig
[
nr
].
PacketBuffer
=
cpu_to_le32
(
np
->
tx_dma
[
nr
]);
np
->
tx_ring
.
orig
[
nr
].
FlagLen
=
cpu_to_le32
(
(
skb
->
len
-
skb
->
data_len
-
1
)
|
np
->
tx_flags
|
tx_flags_extra
);
np
->
tx_ring
.
orig
[
start_nr
].
FlagLen
|=
cpu_to_le32
(
tx_flags
|
tx_flags_extra
);
}
else
{
np
->
tx_ring
.
ex
[
nr
].
PacketBufferHigh
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
>>
32
;
np
->
tx_ring
.
ex
[
nr
].
PacketBufferLow
=
cpu_to_le64
(
np
->
tx_dma
[
nr
])
&
0x0FFFFFFFF
;
np
->
tx_ring
.
ex
[
nr
].
FlagLen
=
cpu_to_le32
(
(
skb
->
len
-
skb
->
data_len
-
1
)
|
np
->
tx_flags
|
tx_flags_extra
);
np
->
tx_ring
.
ex
[
start_nr
].
FlagLen
|=
cpu_to_le32
(
tx_flags
|
tx_flags_extra
);
}
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit: packet
packet %d
queued for transmission. tx_flags_extra: %x
\n
"
,
dev
->
name
,
np
->
next_tx
,
tx_flags_extra
);
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit: packet
%d (entries %d)
queued for transmission. tx_flags_extra: %x
\n
"
,
dev
->
name
,
np
->
next_tx
,
entries
,
tx_flags_extra
);
{
int
j
;
for
(
j
=
0
;
j
<
64
;
j
++
)
{
...
...
@@ -1093,7 +1130,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
dprintk
(
"
\n
"
);
}
np
->
next_tx
+=
1
+
fragment
s
;
np
->
next_tx
+=
entrie
s
;
dev
->
trans_start
=
jiffies
;
spin_unlock_irq
(
&
np
->
lock
);
...
...
@@ -1140,7 +1177,6 @@ static void nv_tx_done(struct net_device *dev)
np
->
stats
.
tx_packets
++
;
np
->
stats
.
tx_bytes
+=
skb
->
len
;
}
nv_release_txskb
(
dev
,
i
);
}
}
else
{
if
(
Flags
&
NV_TX2_LASTPACKET
)
{
...
...
@@ -1156,9 +1192,9 @@ static void nv_tx_done(struct net_device *dev)
np
->
stats
.
tx_packets
++
;
np
->
stats
.
tx_bytes
+=
skb
->
len
;
}
nv_release_txskb
(
dev
,
i
);
}
}
nv_release_txskb
(
dev
,
i
);
np
->
nic_tx
++
;
}
if
(
np
->
next_tx
-
np
->
nic_tx
<
TX_LIMIT_START
)
...
...
@@ -2456,7 +2492,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
np
->
txrxctl_bits
|=
NVREG_TXRXCTL_RXCHECK
;
dev
->
features
|=
NETIF_F_HW_CSUM
|
NETIF_F_SG
;
#ifdef NETIF_F_TSO
/* disabled dev->features |= NETIF_F_TSO; */
dev
->
features
|=
NETIF_F_TSO
;
#endif
}
...
...
drivers/net/gianfar.h
浏览文件 @
cf10b285
...
...
@@ -718,14 +718,14 @@ struct gfar_private {
uint32_t
msg_enable
;
};
extern
inline
u32
gfar_read
(
volatile
unsigned
*
addr
)
static
inline
u32
gfar_read
(
volatile
unsigned
*
addr
)
{
u32
val
;
val
=
in_be32
(
addr
);
return
val
;
}
extern
inline
void
gfar_write
(
volatile
unsigned
*
addr
,
u32
val
)
static
inline
void
gfar_write
(
volatile
unsigned
*
addr
,
u32
val
)
{
out_be32
(
addr
,
val
);
}
...
...
drivers/net/hp-plus.c
浏览文件 @
cf10b285
...
...
@@ -138,12 +138,6 @@ static int __init do_hpp_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: hpp_close() handles free_irq */
release_region
(
dev
->
base_addr
-
NIC_OFFSET
,
HP_IO_EXTENT
);
}
#ifndef MODULE
struct
net_device
*
__init
hp_plus_probe
(
int
unit
)
{
...
...
@@ -473,6 +467,12 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: hpp_close() handles free_irq */
release_region
(
dev
->
base_addr
-
NIC_OFFSET
,
HP_IO_EXTENT
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/hp.c
浏览文件 @
cf10b285
...
...
@@ -102,12 +102,6 @@ static int __init do_hp_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
-
NIC_OFFSET
,
HP_IO_EXTENT
);
}
#ifndef MODULE
struct
net_device
*
__init
hp_probe
(
int
unit
)
{
...
...
@@ -444,6 +438,12 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
-
NIC_OFFSET
,
HP_IO_EXTENT
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/ibm_emac/ibm_emac.h
浏览文件 @
cf10b285
...
...
@@ -110,6 +110,7 @@ struct emac_regs {
#define EMAC_MR1_TFS_2K 0x00080000
#define EMAC_MR1_TR0_MULT 0x00008000
#define EMAC_MR1_JPSM 0x00000000
#define EMAC_MR1_MWSW_001 0x00000000
#define EMAC_MR1_BASE(opb) (EMAC_MR1_TFS_2K | EMAC_MR1_TR0_MULT)
#else
#define EMAC_MR1_RFS_4K 0x00180000
...
...
@@ -130,7 +131,7 @@ struct emac_regs {
(freq) <= 83 ? EMAC_MR1_OBCI_83 : \
(freq) <= 100 ? EMAC_MR1_OBCI_100 : EMAC_MR1_OBCI_100P)
#define EMAC_MR1_BASE(opb) (EMAC_MR1_TFS_2K | EMAC_MR1_TR | \
EMAC_MR1_
MWSW_001 | EMAC_MR1_
OBCI(opb))
EMAC_MR1_OBCI(opb))
#endif
/* EMACx_TMR0 */
...
...
drivers/net/ibm_emac/ibm_emac_core.c
浏览文件 @
cf10b285
...
...
@@ -408,7 +408,7 @@ static int emac_configure(struct ocp_enet_private *dev)
/* Mode register */
r
=
EMAC_MR1_BASE
(
emac_opb_mhz
())
|
EMAC_MR1_VLE
|
EMAC_MR1_IST
;
if
(
dev
->
phy
.
duplex
==
DUPLEX_FULL
)
r
|=
EMAC_MR1_FDE
;
r
|=
EMAC_MR1_FDE
|
EMAC_MR1_MWSW_001
;
dev
->
stop_timeout
=
STOP_TIMEOUT_10
;
switch
(
dev
->
phy
.
speed
)
{
case
SPEED_1000
:
...
...
drivers/net/lance.c
浏览文件 @
cf10b285
...
...
@@ -309,17 +309,6 @@ static void lance_tx_timeout (struct net_device *dev);
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
struct
lance_private
*
lp
=
dev
->
priv
;
if
(
dev
->
dma
!=
4
)
free_dma
(
dev
->
dma
);
release_region
(
dev
->
base_addr
,
LANCE_TOTAL_SIZE
);
kfree
(
lp
->
tx_bounce_buffs
);
kfree
((
void
*
)
lp
->
rx_buffs
);
kfree
(
lp
);
}
#ifdef MODULE
#define MAX_CARDS 8
/* Max number of interfaces (cards) per module */
...
...
@@ -367,6 +356,17 @@ int init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
struct
lance_private
*
lp
=
dev
->
priv
;
if
(
dev
->
dma
!=
4
)
free_dma
(
dev
->
dma
);
release_region
(
dev
->
base_addr
,
LANCE_TOTAL_SIZE
);
kfree
(
lp
->
tx_bounce_buffs
);
kfree
((
void
*
)
lp
->
rx_buffs
);
kfree
(
lp
);
}
void
cleanup_module
(
void
)
{
int
this_dev
;
...
...
drivers/net/lne390.c
浏览文件 @
cf10b285
...
...
@@ -145,13 +145,6 @@ static int __init do_lne390_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
LNE390_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
lne390_probe
(
int
unit
)
{
...
...
@@ -440,6 +433,13 @@ int init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
LNE390_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
int
this_dev
;
...
...
drivers/net/mv643xx_eth.c
浏览文件 @
cf10b285
...
...
@@ -6,7 +6,7 @@
* Copyright (C) 2002 rabeeh@galileo.co.il
*
* Copyright (C) 2003 PMC-Sierra, Inc.,
* written by Manish Lachwani
(lachwani@pmc-sierra.com)
* written by Manish Lachwani
*
* Copyright (C) 2003 Ralf Baechle <ralf@linux-mips.org>
*
...
...
drivers/net/ne.c
浏览文件 @
cf10b285
...
...
@@ -212,15 +212,6 @@ static int __init do_ne_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
struct
pnp_dev
*
idev
=
(
struct
pnp_dev
*
)
ei_status
.
priv
;
if
(
idev
)
pnp_device_detach
(
idev
);
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
NE_IO_EXTENT
);
}
#ifndef MODULE
struct
net_device
*
__init
ne_probe
(
int
unit
)
{
...
...
@@ -859,6 +850,15 @@ int init_module(void)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
struct
pnp_dev
*
idev
=
(
struct
pnp_dev
*
)
ei_status
.
priv
;
if
(
idev
)
pnp_device_detach
(
idev
);
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
NE_IO_EXTENT
);
}
void
cleanup_module
(
void
)
{
int
this_dev
;
...
...
drivers/net/ne2.c
浏览文件 @
cf10b285
...
...
@@ -278,14 +278,6 @@ static int __init do_ne2_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
mca_mark_as_unused
(
ei_status
.
priv
);
mca_set_adapter_procfn
(
ei_status
.
priv
,
NULL
,
NULL
);
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
NE_IO_EXTENT
);
}
#ifndef MODULE
struct
net_device
*
__init
ne2_probe
(
int
unit
)
{
...
...
@@ -812,6 +804,14 @@ int init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
mca_mark_as_unused
(
ei_status
.
priv
);
mca_set_adapter_procfn
(
ei_status
.
priv
,
NULL
,
NULL
);
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
,
NE_IO_EXTENT
);
}
void
cleanup_module
(
void
)
{
int
this_dev
;
...
...
drivers/net/sk98lin/skge.c
浏览文件 @
cf10b285
...
...
@@ -282,26 +282,22 @@ SK_U32 Val) /* pointer to store the read value */
* Description:
* This function initialize the PCI resources and IO
*
* Returns: N/A
*
* Returns:
* 0 - indicate everything worked ok.
* != 0 - error indication
*/
int
SkGeInitPCI
(
SK_AC
*
pAC
)
static
__devinit
int
SkGeInitPCI
(
SK_AC
*
pAC
)
{
struct
SK_NET_DEVICE
*
dev
=
pAC
->
dev
[
0
];
struct
pci_dev
*
pdev
=
pAC
->
PciDev
;
int
retval
;
if
(
pci_enable_device
(
pdev
)
!=
0
)
{
return
1
;
}
dev
->
mem_start
=
pci_resource_start
(
pdev
,
0
);
pci_set_master
(
pdev
);
if
(
pci_request_regions
(
pdev
,
"sk98lin"
)
!=
0
)
{
retval
=
2
;
goto
out_disable
;
}
retval
=
pci_request_regions
(
pdev
,
"sk98lin"
);
if
(
retval
)
goto
out
;
#ifdef SK_BIG_ENDIAN
/*
...
...
@@ -320,9 +316,8 @@ int SkGeInitPCI(SK_AC *pAC)
* Remap the regs into kernel space.
*/
pAC
->
IoBase
=
ioremap_nocache
(
dev
->
mem_start
,
0x4000
);
if
(
!
pAC
->
IoBase
){
retval
=
3
;
if
(
!
pAC
->
IoBase
)
{
retval
=
-
EIO
;
goto
out_release
;
}
...
...
@@ -330,8 +325,7 @@ int SkGeInitPCI(SK_AC *pAC)
out_release:
pci_release_regions
(
pdev
);
out_disable:
pci_disable_device
(
pdev
);
out:
return
retval
;
}
...
...
@@ -492,7 +486,7 @@ module_param_array(AutoSizing, charp, NULL, 0);
* 0, if everything is ok
* !=0, on error
*/
static
int
__init
SkGeBoardInit
(
struct
SK_NET_DEVICE
*
dev
,
SK_AC
*
pAC
)
static
int
__
dev
init
SkGeBoardInit
(
struct
SK_NET_DEVICE
*
dev
,
SK_AC
*
pAC
)
{
short
i
;
unsigned
long
Flags
;
...
...
@@ -529,7 +523,7 @@ SK_BOOL DualNet;
if
(
SkGeInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_DATA
)
!=
0
)
{
printk
(
"HWInit (0) failed.
\n
"
);
spin_unlock_irqrestore
(
&
pAC
->
SlowPathLock
,
Flags
);
return
(
-
EAGAIN
)
;
return
-
EIO
;
}
SkI2cInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_DATA
);
SkEventInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_DATA
);
...
...
@@ -551,7 +545,7 @@ SK_BOOL DualNet;
if
(
SkGeInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_IO
)
!=
0
)
{
printk
(
"sk98lin: HWInit (1) failed.
\n
"
);
spin_unlock_irqrestore
(
&
pAC
->
SlowPathLock
,
Flags
);
return
(
-
EAGAIN
)
;
return
-
EIO
;
}
SkI2cInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_IO
);
SkEventInit
(
pAC
,
pAC
->
IoBase
,
SK_INIT_IO
);
...
...
@@ -583,20 +577,20 @@ SK_BOOL DualNet;
}
else
{
printk
(
KERN_WARNING
"sk98lin: Illegal number of ports: %d
\n
"
,
pAC
->
GIni
.
GIMacsFound
);
return
-
E
AGAIN
;
return
-
E
IO
;
}
if
(
Ret
)
{
printk
(
KERN_WARNING
"sk98lin: Requested IRQ %d is busy.
\n
"
,
dev
->
irq
);
return
-
EAGAIN
;
return
Ret
;
}
pAC
->
AllocFlag
|=
SK_ALLOC_IRQ
;
/* Alloc memory for this board (Mem for RxD/TxD) : */
if
(
!
BoardAllocMem
(
pAC
))
{
printk
(
"No memory for descriptor rings.
\n
"
);
return
(
-
EAGAIN
)
;
return
-
ENOMEM
;
}
BoardInitMem
(
pAC
);
...
...
@@ -612,7 +606,7 @@ SK_BOOL DualNet;
DualNet
))
{
BoardFreeMem
(
pAC
);
printk
(
"sk98lin: SkGeInitAssignRamToQueues failed.
\n
"
);
return
(
-
EAGAIN
)
;
return
-
EIO
;
}
return
(
0
);
...
...
@@ -633,8 +627,7 @@ SK_BOOL DualNet;
* SK_TRUE, if all memory could be allocated
* SK_FALSE, if not
*/
static
SK_BOOL
BoardAllocMem
(
SK_AC
*
pAC
)
static
__devinit
SK_BOOL
BoardAllocMem
(
SK_AC
*
pAC
)
{
caddr_t
pDescrMem
;
/* pointer to descriptor memory area */
size_t
AllocLength
;
/* length of complete descriptor area */
...
...
@@ -727,8 +720,7 @@ size_t AllocLength; /* length of complete descriptor area */
*
* Returns: N/A
*/
static
void
BoardInitMem
(
SK_AC
*
pAC
)
/* pointer to adapter context */
static
__devinit
void
BoardInitMem
(
SK_AC
*
pAC
)
{
int
i
;
/* loop counter */
int
RxDescrSize
;
/* the size of a rx descriptor rounded up to alignment*/
...
...
@@ -4776,32 +4768,47 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
struct
net_device
*
dev
=
NULL
;
static
int
boards_found
=
0
;
int
error
=
-
ENODEV
;
int
using_dac
=
0
;
char
DeviceStr
[
80
];
if
(
pci_enable_device
(
pdev
))
goto
out
;
/* Configure DMA attributes. */
if
(
pci_set_dma_mask
(
pdev
,
DMA_64BIT_MASK
)
&&
pci_set_dma_mask
(
pdev
,
DMA_32BIT_MASK
))
goto
out_disable_device
;
if
(
sizeof
(
dma_addr_t
)
>
sizeof
(
u32
)
&&
!
(
error
=
pci_set_dma_mask
(
pdev
,
DMA_64BIT_MASK
)))
{
using_dac
=
1
;
error
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_64BIT_MASK
);
if
(
error
<
0
)
{
printk
(
KERN_ERR
"sk98lin %s unable to obtain 64 bit DMA "
"for consistent allocations
\n
"
,
pci_name
(
pdev
));
goto
out_disable_device
;
}
}
else
{
error
=
pci_set_dma_mask
(
pdev
,
DMA_32BIT_MASK
);
if
(
error
)
{
printk
(
KERN_ERR
"sk98lin %s no usable DMA configuration
\n
"
,
pci_name
(
pdev
));
goto
out_disable_device
;
}
}
if
((
dev
=
alloc_etherdev
(
sizeof
(
DEV_NET
)))
==
NULL
)
{
printk
(
KERN_ERR
"Unable to allocate etherdev "
error
=
-
ENOMEM
;
dev
=
alloc_etherdev
(
sizeof
(
DEV_NET
));
if
(
!
dev
)
{
printk
(
KERN_ERR
"sk98lin: unable to allocate etherdev "
"structure!
\n
"
);
goto
out_disable_device
;
}
pNet
=
netdev_priv
(
dev
);
pNet
->
pAC
=
k
m
alloc
(
sizeof
(
SK_AC
),
GFP_KERNEL
);
pNet
->
pAC
=
k
z
alloc
(
sizeof
(
SK_AC
),
GFP_KERNEL
);
if
(
!
pNet
->
pAC
)
{
printk
(
KERN_ERR
"
U
nable to allocate adapter "
printk
(
KERN_ERR
"
sk98lin: u
nable to allocate adapter "
"structure!
\n
"
);
goto
out_free_netdev
;
}
memset
(
pNet
->
pAC
,
0
,
sizeof
(
SK_AC
));
pAC
=
pNet
->
pAC
;
pAC
->
PciDev
=
pdev
;
...
...
@@ -4810,6 +4817,7 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
pAC
->
CheckQueue
=
SK_FALSE
;
dev
->
irq
=
pdev
->
irq
;
error
=
SkGeInitPCI
(
pAC
);
if
(
error
)
{
printk
(
KERN_ERR
"sk98lin: PCI setup failed: %i
\n
"
,
error
);
...
...
@@ -4844,19 +4852,25 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
#endif
}
if
(
using_dac
)
dev
->
features
|=
NETIF_F_HIGHDMA
;
pAC
->
Index
=
boards_found
++
;
if
(
SkGeBoardInit
(
dev
,
pAC
))
error
=
SkGeBoardInit
(
dev
,
pAC
);
if
(
error
)
goto
out_free_netdev
;
/* Read Adapter name from VPD */
if
(
ProductStr
(
pAC
,
DeviceStr
,
sizeof
(
DeviceStr
))
!=
0
)
{
error
=
-
EIO
;
printk
(
KERN_ERR
"sk98lin: Could not read VPD data.
\n
"
);
goto
out_free_resources
;
}
/* Register net device */
if
(
register_netdev
(
dev
))
{
error
=
register_netdev
(
dev
);
if
(
error
)
{
printk
(
KERN_ERR
"sk98lin: Could not register device.
\n
"
);
goto
out_free_resources
;
}
...
...
@@ -4883,15 +4897,17 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
boards_found
++
;
pci_set_drvdata
(
pdev
,
dev
);
/* More then one port found */
if
((
pAC
->
GIni
.
GIMacsFound
==
2
)
&&
(
pAC
->
RlmtNets
==
2
))
{
if
((
dev
=
alloc_etherdev
(
sizeof
(
DEV_NET
)))
==
0
)
{
printk
(
KERN_ERR
"Unable to allocate etherdev "
dev
=
alloc_etherdev
(
sizeof
(
DEV_NET
));
if
(
!
dev
)
{
printk
(
KERN_ERR
"sk98lin: unable to allocate etherdev "
"structure!
\n
"
);
goto
ou
t
;
goto
single_por
t
;
}
pAC
->
dev
[
1
]
=
dev
;
pNet
=
netdev_priv
(
dev
);
pNet
->
PortNr
=
1
;
pNet
->
NetNr
=
1
;
...
...
@@ -4920,20 +4936,28 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
#endif
}
if
(
register_netdev
(
dev
))
{
printk
(
KERN_ERR
"sk98lin: Could not register device for seconf port.
\n
"
);
if
(
using_dac
)
dev
->
features
|=
NETIF_F_HIGHDMA
;
error
=
register_netdev
(
dev
);
if
(
error
)
{
printk
(
KERN_ERR
"sk98lin: Could not register device"
" for second port. (%d)
\n
"
,
error
);
free_netdev
(
dev
);
pAC
->
dev
[
1
]
=
pAC
->
dev
[
0
];
}
else
{
memcpy
(
&
dev
->
dev_addr
,
&
pAC
->
Addr
.
Net
[
1
].
CurrentMacAddress
,
6
);
memcpy
(
dev
->
perm_addr
,
dev
->
dev_addr
,
dev
->
addr_len
);
printk
(
"%s: %s
\n
"
,
dev
->
name
,
DeviceStr
);
printk
(
" PrefPort:B RlmtMode:Dual Check Link State
\n
"
);
goto
single_port
;
}
pAC
->
dev
[
1
]
=
dev
;
memcpy
(
&
dev
->
dev_addr
,
&
pAC
->
Addr
.
Net
[
1
].
CurrentMacAddress
,
6
);
memcpy
(
dev
->
perm_addr
,
dev
->
dev_addr
,
dev
->
addr_len
);
printk
(
"%s: %s
\n
"
,
dev
->
name
,
DeviceStr
);
printk
(
" PrefPort:B RlmtMode:Dual Check Link State
\n
"
);
}
single_port:
/* Save the hardware revision */
pAC
->
HWRevision
=
(((
pAC
->
GIni
.
GIPciHwRev
>>
4
)
&
0x0F
)
*
10
)
+
(
pAC
->
GIni
.
GIPciHwRev
&
0x0F
);
...
...
@@ -4945,7 +4969,6 @@ static int __devinit skge_probe_one(struct pci_dev *pdev,
memset
(
&
pAC
->
PnmiBackup
,
0
,
sizeof
(
SK_PNMI_STRUCT_DATA
));
memcpy
(
&
pAC
->
PnmiBackup
,
&
pAC
->
PnmiStruct
,
sizeof
(
SK_PNMI_STRUCT_DATA
));
pci_set_drvdata
(
pdev
,
dev
);
return
0
;
out_free_resources:
...
...
drivers/net/smc-ultra.c
浏览文件 @
cf10b285
...
...
@@ -168,18 +168,6 @@ static int __init do_ultra_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: ultra_close_card() does free_irq */
#ifdef __ISAPNP__
struct
pnp_dev
*
idev
=
(
struct
pnp_dev
*
)
ei_status
.
priv
;
if
(
idev
)
pnp_device_detach
(
idev
);
#endif
release_region
(
dev
->
base_addr
-
ULTRA_NIC_OFFSET
,
ULTRA_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
ultra_probe
(
int
unit
)
{
...
...
@@ -594,6 +582,18 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
/* NB: ultra_close_card() does free_irq */
#ifdef __ISAPNP__
struct
pnp_dev
*
idev
=
(
struct
pnp_dev
*
)
ei_status
.
priv
;
if
(
idev
)
pnp_device_detach
(
idev
);
#endif
release_region
(
dev
->
base_addr
-
ULTRA_NIC_OFFSET
,
ULTRA_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/tulip/tulip_core.c
浏览文件 @
cf10b285
...
...
@@ -1564,7 +1564,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
dev
->
dev_addr
,
6
);
}
#endif
#if defined(__i386__)
/* Patch up x86 BIOS bug. */
#if defined(__i386__)
|| defined(__x86_64__)
/* Patch up x86 BIOS bug. */
if
(
last_irq
)
irq
=
last_irq
;
#endif
...
...
drivers/net/wd.c
浏览文件 @
cf10b285
...
...
@@ -127,13 +127,6 @@ static int __init do_wd_probe(struct net_device *dev)
return
-
ENODEV
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
-
WD_NIC_OFFSET
,
WD_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
#ifndef MODULE
struct
net_device
*
__init
wd_probe
(
int
unit
)
{
...
...
@@ -538,6 +531,13 @@ init_module(void)
return
-
ENXIO
;
}
static
void
cleanup_card
(
struct
net_device
*
dev
)
{
free_irq
(
dev
->
irq
,
dev
);
release_region
(
dev
->
base_addr
-
WD_NIC_OFFSET
,
WD_IO_EXTENT
);
iounmap
(
ei_status
.
mem
);
}
void
cleanup_module
(
void
)
{
...
...
drivers/net/wireless/ipw2100.c
浏览文件 @
cf10b285
...
...
@@ -7153,7 +7153,7 @@ static int ipw2100_wx_get_range(struct net_device *dev,
/* Set the Wireless Extension versions */
range
->
we_version_compiled
=
WIRELESS_EXT
;
range
->
we_version_source
=
1
6
;
range
->
we_version_source
=
1
8
;
// range->retry_capa; /* What retry options are supported */
// range->retry_flags; /* How to decode max/min retry limit */
...
...
@@ -7184,6 +7184,9 @@ static int ipw2100_wx_get_range(struct net_device *dev,
IW_EVENT_CAPA_MASK
(
SIOCGIWAP
));
range
->
event_capa
[
1
]
=
IW_EVENT_CAPA_K_1
;
range
->
enc_capa
=
IW_ENC_CAPA_WPA
|
IW_ENC_CAPA_WPA2
|
IW_ENC_CAPA_CIPHER_TKIP
|
IW_ENC_CAPA_CIPHER_CCMP
;
IPW_DEBUG_WX
(
"GET Range
\n
"
);
return
0
;
...
...
net/ieee80211/ieee80211_crypt_wep.c
浏览文件 @
cf10b285
...
...
@@ -75,22 +75,14 @@ static void prism2_wep_deinit(void *priv)
kfree
(
priv
);
}
/* Perform WEP encryption on given skb that has at least 4 bytes of headroom
* for IV and 4 bytes of tailroom for ICV. Both IV and ICV will be transmitted,
* so the payload length increases with 8 bytes.
*
* WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data))
*/
static
int
prism2_wep_encrypt
(
struct
sk_buff
*
skb
,
int
hdr_len
,
void
*
priv
)
/* Add WEP IV/key info to a frame that has at least 4 bytes of headroom */
static
int
prism2_wep_build_iv
(
struct
sk_buff
*
skb
,
int
hdr_len
,
void
*
priv
)
{
struct
prism2_wep_data
*
wep
=
priv
;
u32
crc
,
klen
,
len
;
u8
key
[
WEP_KEY_LEN
+
3
];
u8
*
pos
,
*
icv
;
struct
scatterlist
sg
;
if
(
skb_headroom
(
skb
)
<
4
||
skb_tailroom
(
skb
)
<
4
||
skb
->
len
<
hdr_len
)
u32
klen
,
len
;
u8
*
pos
;
if
(
skb_headroom
(
skb
)
<
4
||
skb
->
len
<
hdr_len
)
return
-
1
;
len
=
skb
->
len
-
hdr_len
;
...
...
@@ -112,15 +104,47 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
}
/* Prepend 24-bit IV to RC4 key and TX frame */
*
pos
++
=
key
[
0
]
=
(
wep
->
iv
>>
16
)
&
0xff
;
*
pos
++
=
key
[
1
]
=
(
wep
->
iv
>>
8
)
&
0xff
;
*
pos
++
=
key
[
2
]
=
wep
->
iv
&
0xff
;
*
pos
++
=
(
wep
->
iv
>>
16
)
&
0xff
;
*
pos
++
=
(
wep
->
iv
>>
8
)
&
0xff
;
*
pos
++
=
wep
->
iv
&
0xff
;
*
pos
++
=
wep
->
key_idx
<<
6
;
return
0
;
}
/* Perform WEP encryption on given skb that has at least 4 bytes of headroom
* for IV and 4 bytes of tailroom for ICV. Both IV and ICV will be transmitted,
* so the payload length increases with 8 bytes.
*
* WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data))
*/
static
int
prism2_wep_encrypt
(
struct
sk_buff
*
skb
,
int
hdr_len
,
void
*
priv
)
{
struct
prism2_wep_data
*
wep
=
priv
;
u32
crc
,
klen
,
len
;
u8
*
pos
,
*
icv
;
struct
scatterlist
sg
;
u8
key
[
WEP_KEY_LEN
+
3
];
/* other checks are in prism2_wep_build_iv */
if
(
skb_tailroom
(
skb
)
<
4
)
return
-
1
;
/* add the IV to the frame */
if
(
prism2_wep_build_iv
(
skb
,
hdr_len
,
priv
))
return
-
1
;
/* Copy the IV into the first 3 bytes of the key */
memcpy
(
key
,
skb
->
data
+
hdr_len
,
3
);
/* Copy rest of the WEP key (the secret part) */
memcpy
(
key
+
3
,
wep
->
key
,
wep
->
key_len
);
len
=
skb
->
len
-
hdr_len
-
4
;
pos
=
skb
->
data
+
hdr_len
+
4
;
klen
=
3
+
wep
->
key_len
;
/* Append little-endian CRC32 and encrypt it to produce ICV */
/* Append little-endian CRC32
over only the data
and encrypt it to produce ICV */
crc
=
~
crc32_le
(
~
0
,
pos
,
len
);
icv
=
skb_put
(
skb
,
4
);
icv
[
0
]
=
crc
;
...
...
@@ -231,6 +255,7 @@ static struct ieee80211_crypto_ops ieee80211_crypt_wep = {
.
name
=
"WEP"
,
.
init
=
prism2_wep_init
,
.
deinit
=
prism2_wep_deinit
,
.
build_iv
=
prism2_wep_build_iv
,
.
encrypt_mpdu
=
prism2_wep_encrypt
,
.
decrypt_mpdu
=
prism2_wep_decrypt
,
.
encrypt_msdu
=
NULL
,
...
...
net/ieee80211/ieee80211_tx.c
浏览文件 @
cf10b285
...
...
@@ -288,7 +288,7 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
/* Determine total amount of storage required for TXB packets */
bytes
=
skb
->
len
+
SNAP_SIZE
+
sizeof
(
u16
);
if
(
host_encrypt
)
if
(
host_encrypt
||
host_build_iv
)
fc
=
IEEE80211_FTYPE_DATA
|
IEEE80211_STYPE_DATA
|
IEEE80211_FCTL_PROTECTED
;
else
...
...
net/ieee80211/ieee80211_wx.c
浏览文件 @
cf10b285
...
...
@@ -284,7 +284,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
};
int
i
,
key
,
key_provided
,
len
;
struct
ieee80211_crypt_data
**
crypt
;
int
host_crypto
=
ieee
->
host_encrypt
||
ieee
->
host_decrypt
;
int
host_crypto
=
ieee
->
host_encrypt
||
ieee
->
host_decrypt
||
ieee
->
host_build_iv
;
IEEE80211_DEBUG_WX
(
"SET_ENCODE
\n
"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录