Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
d0e1e88d
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d0e1e88d
编写于
11月 08, 2009
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/can/usb/ems_usb.c
上级
9e0d57fd
26062897
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
259 addition
and
145 deletion
+259
-145
drivers/isdn/hisax/elsa_ser.c
drivers/isdn/hisax/elsa_ser.c
+11
-11
drivers/net/benet/be.h
drivers/net/benet/be.h
+2
-0
drivers/net/benet/be_ethtool.c
drivers/net/benet/be_ethtool.c
+5
-3
drivers/net/benet/be_main.c
drivers/net/benet/be_main.c
+17
-11
drivers/net/can/dev.c
drivers/net/can/dev.c
+17
-0
drivers/net/can/usb/ems_usb.c
drivers/net/can/usb/ems_usb.c
+4
-1
drivers/net/cassini.c
drivers/net/cassini.c
+3
-2
drivers/net/fsl_pq_mdio.c
drivers/net/fsl_pq_mdio.c
+1
-0
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+78
-6
drivers/net/macsonic.c
drivers/net/macsonic.c
+60
-57
drivers/net/qlge/qlge_main.c
drivers/net/qlge/qlge_main.c
+2
-0
drivers/net/qlge/qlge_mpi.c
drivers/net/qlge/qlge_mpi.c
+1
-1
drivers/net/wireless/ipw2x00/ipw2100.c
drivers/net/wireless/ipw2x00/ipw2100.c
+1
-4
drivers/net/wireless/ipw2x00/ipw2200.c
drivers/net/wireless/ipw2x00/ipw2200.c
+0
-2
drivers/net/wireless/ipw2x00/libipw.h
drivers/net/wireless/ipw2x00/libipw.h
+0
-1
drivers/net/wireless/ipw2x00/libipw_module.c
drivers/net/wireless/ipw2x00/libipw_module.c
+5
-9
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt2x00dev.c
+2
-2
drivers/net/wireless/rt2x00/rt2x00link.c
drivers/net/wireless/rt2x00/rt2x00link.c
+7
-4
drivers/net/wireless/rt2x00/rt2x00usb.c
drivers/net/wireless/rt2x00/rt2x00usb.c
+8
-1
drivers/net/wireless/rtl818x/rtl8187_leds.c
drivers/net/wireless/rtl818x/rtl8187_leds.c
+2
-2
net/can/bcm.c
net/can/bcm.c
+12
-7
net/ipv4/ipip.c
net/ipv4/ipip.c
+17
-15
net/netfilter/xt_connlimit.c
net/netfilter/xt_connlimit.c
+4
-6
未找到文件。
drivers/isdn/hisax/elsa_ser.c
浏览文件 @
d0e1e88d
...
@@ -477,62 +477,62 @@ static void
...
@@ -477,62 +477,62 @@ static void
modem_set_init
(
struct
IsdnCardState
*
cs
)
{
modem_set_init
(
struct
IsdnCardState
*
cs
)
{
int
timeout
;
int
timeout
;
#define RCV_DELAY 20
000
#define RCV_DELAY 20
modem_write_cmd
(
cs
,
MInit_1
,
strlen
(
MInit_1
));
modem_write_cmd
(
cs
,
MInit_1
,
strlen
(
MInit_1
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_2
,
strlen
(
MInit_2
));
modem_write_cmd
(
cs
,
MInit_2
,
strlen
(
MInit_2
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_3
,
strlen
(
MInit_3
));
modem_write_cmd
(
cs
,
MInit_3
,
strlen
(
MInit_3
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_4
,
strlen
(
MInit_4
));
modem_write_cmd
(
cs
,
MInit_4
,
strlen
(
MInit_4
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
udelay
(
RCV_DELAY
);
mdelay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_5
,
strlen
(
MInit_5
));
modem_write_cmd
(
cs
,
MInit_5
,
strlen
(
MInit_5
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_6
,
strlen
(
MInit_6
));
modem_write_cmd
(
cs
,
MInit_6
,
strlen
(
MInit_6
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_7
,
strlen
(
MInit_7
));
modem_write_cmd
(
cs
,
MInit_7
,
strlen
(
MInit_7
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
}
}
static
void
static
void
modem_set_dial
(
struct
IsdnCardState
*
cs
,
int
outgoing
)
{
modem_set_dial
(
struct
IsdnCardState
*
cs
,
int
outgoing
)
{
int
timeout
;
int
timeout
;
#define RCV_DELAY 20
000
#define RCV_DELAY 20
modem_write_cmd
(
cs
,
MInit_speed28800
,
strlen
(
MInit_speed28800
));
modem_write_cmd
(
cs
,
MInit_speed28800
,
strlen
(
MInit_speed28800
));
timeout
=
1000
;
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
if
(
outgoing
)
if
(
outgoing
)
modem_write_cmd
(
cs
,
MInit_dialout
,
strlen
(
MInit_dialout
));
modem_write_cmd
(
cs
,
MInit_dialout
,
strlen
(
MInit_dialout
));
else
else
...
@@ -541,7 +541,7 @@ modem_set_dial(struct IsdnCardState *cs, int outgoing) {
...
@@ -541,7 +541,7 @@ modem_set_dial(struct IsdnCardState *cs, int outgoing) {
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
}
}
static
void
static
void
...
...
drivers/net/benet/be.h
浏览文件 @
d0e1e88d
...
@@ -269,6 +269,8 @@ struct be_adapter {
...
@@ -269,6 +269,8 @@ struct be_adapter {
u32
port_num
;
u32
port_num
;
bool
promiscuous
;
bool
promiscuous
;
u32
cap
;
u32
cap
;
u32
rx_fc
;
/* Rx flow control */
u32
tx_fc
;
/* Tx flow control */
};
};
extern
const
struct
ethtool_ops
be_ethtool_ops
;
extern
const
struct
ethtool_ops
be_ethtool_ops
;
...
...
drivers/net/benet/be_ethtool.c
浏览文件 @
d0e1e88d
...
@@ -362,10 +362,12 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
...
@@ -362,10 +362,12 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
if
(
ecmd
->
autoneg
!=
0
)
if
(
ecmd
->
autoneg
!=
0
)
return
-
EINVAL
;
return
-
EINVAL
;
adapter
->
tx_fc
=
ecmd
->
tx_pause
;
adapter
->
rx_fc
=
ecmd
->
rx_pause
;
status
=
be_cmd_set_flow_control
(
adapter
,
ecmd
->
tx_pause
,
status
=
be_cmd_set_flow_control
(
adapter
,
ecmd
->
rx_pause
);
adapter
->
tx_fc
,
adapter
->
rx_fc
);
if
(
!
status
)
if
(
status
)
dev_warn
(
&
adapter
->
pdev
->
dev
,
"Pause param set failed.
\n
"
);
dev_warn
(
&
adapter
->
pdev
->
dev
,
"Pause param set failed.
\n
"
);
return
status
;
return
status
;
...
...
drivers/net/benet/be_main.c
浏览文件 @
d0e1e88d
...
@@ -1611,11 +1611,21 @@ static int be_open(struct net_device *netdev)
...
@@ -1611,11 +1611,21 @@ static int be_open(struct net_device *netdev)
status
=
be_cmd_link_status_query
(
adapter
,
&
link_up
,
&
mac_speed
,
status
=
be_cmd_link_status_query
(
adapter
,
&
link_up
,
&
mac_speed
,
&
link_speed
);
&
link_speed
);
if
(
status
)
if
(
status
)
return
statu
s
;
goto
ret_st
s
;
be_link_status_update
(
adapter
,
link_up
);
be_link_status_update
(
adapter
,
link_up
);
status
=
be_vid_config
(
adapter
);
if
(
status
)
goto
ret_sts
;
status
=
be_cmd_set_flow_control
(
adapter
,
adapter
->
tx_fc
,
adapter
->
rx_fc
);
if
(
status
)
goto
ret_sts
;
schedule_delayed_work
(
&
adapter
->
work
,
msecs_to_jiffies
(
100
));
schedule_delayed_work
(
&
adapter
->
work
,
msecs_to_jiffies
(
100
));
return
0
;
ret_sts:
return
status
;
}
}
static
int
be_setup
(
struct
be_adapter
*
adapter
)
static
int
be_setup
(
struct
be_adapter
*
adapter
)
...
@@ -1649,17 +1659,8 @@ static int be_setup(struct be_adapter *adapter)
...
@@ -1649,17 +1659,8 @@ static int be_setup(struct be_adapter *adapter)
if
(
status
!=
0
)
if
(
status
!=
0
)
goto
rx_qs_destroy
;
goto
rx_qs_destroy
;
status
=
be_vid_config
(
adapter
);
if
(
status
!=
0
)
goto
mccqs_destroy
;
status
=
be_cmd_set_flow_control
(
adapter
,
true
,
true
);
if
(
status
!=
0
)
goto
mccqs_destroy
;
return
0
;
return
0
;
mccqs_destroy:
be_mcc_queues_destroy
(
adapter
);
rx_qs_destroy:
rx_qs_destroy:
be_rx_queues_destroy
(
adapter
);
be_rx_queues_destroy
(
adapter
);
tx_qs_destroy:
tx_qs_destroy:
...
@@ -1910,6 +1911,10 @@ static void be_netdev_init(struct net_device *netdev)
...
@@ -1910,6 +1911,10 @@ static void be_netdev_init(struct net_device *netdev)
adapter
->
rx_csum
=
true
;
adapter
->
rx_csum
=
true
;
/* Default settings for Rx and Tx flow control */
adapter
->
rx_fc
=
true
;
adapter
->
tx_fc
=
true
;
netif_set_gso_max_size
(
netdev
,
65535
);
netif_set_gso_max_size
(
netdev
,
65535
);
BE_SET_NETDEV_OPS
(
netdev
,
&
be_netdev_ops
);
BE_SET_NETDEV_OPS
(
netdev
,
&
be_netdev_ops
);
...
@@ -2172,6 +2177,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
...
@@ -2172,6 +2177,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
be_close
(
netdev
);
be_close
(
netdev
);
rtnl_unlock
();
rtnl_unlock
();
}
}
be_cmd_get_flow_control
(
adapter
,
&
adapter
->
tx_fc
,
&
adapter
->
rx_fc
);
be_clear
(
adapter
);
be_clear
(
adapter
);
pci_save_state
(
pdev
);
pci_save_state
(
pdev
);
...
...
drivers/net/can/dev.c
浏览文件 @
d0e1e88d
...
@@ -637,6 +637,22 @@ static int can_changelink(struct net_device *dev,
...
@@ -637,6 +637,22 @@ static int can_changelink(struct net_device *dev,
return
0
;
return
0
;
}
}
static
size_t
can_get_size
(
const
struct
net_device
*
dev
)
{
struct
can_priv
*
priv
=
netdev_priv
(
dev
);
size_t
size
;
size
=
nla_total_size
(
sizeof
(
u32
));
/* IFLA_CAN_STATE */
size
+=
sizeof
(
struct
can_ctrlmode
);
/* IFLA_CAN_CTRLMODE */
size
+=
nla_total_size
(
sizeof
(
u32
));
/* IFLA_CAN_RESTART_MS */
size
+=
sizeof
(
struct
can_bittiming
);
/* IFLA_CAN_BITTIMING */
size
+=
sizeof
(
struct
can_clock
);
/* IFLA_CAN_CLOCK */
if
(
priv
->
bittiming_const
)
/* IFLA_CAN_BITTIMING_CONST */
size
+=
sizeof
(
struct
can_bittiming_const
);
return
size
;
}
static
int
can_fill_info
(
struct
sk_buff
*
skb
,
const
struct
net_device
*
dev
)
static
int
can_fill_info
(
struct
sk_buff
*
skb
,
const
struct
net_device
*
dev
)
{
{
struct
can_priv
*
priv
=
netdev_priv
(
dev
);
struct
can_priv
*
priv
=
netdev_priv
(
dev
);
...
@@ -687,6 +703,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
...
@@ -687,6 +703,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
.
setup
=
can_setup
,
.
setup
=
can_setup
,
.
newlink
=
can_newlink
,
.
newlink
=
can_newlink
,
.
changelink
=
can_changelink
,
.
changelink
=
can_changelink
,
.
get_size
=
can_get_size
,
.
fill_info
=
can_fill_info
,
.
fill_info
=
can_fill_info
,
.
fill_xstats
=
can_fill_xstats
,
.
fill_xstats
=
can_fill_xstats
,
};
};
...
...
drivers/net/can/usb/ems_usb.c
浏览文件 @
d0e1e88d
...
@@ -315,7 +315,7 @@ static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
...
@@ -315,7 +315,7 @@ static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
if
(
skb
==
NULL
)
if
(
skb
==
NULL
)
return
;
return
;
cf
->
can_id
=
msg
->
msg
.
can_msg
.
id
;
cf
->
can_id
=
le32_to_cpu
(
msg
->
msg
.
can_msg
.
id
)
;
cf
->
can_dlc
=
min_t
(
u8
,
msg
->
msg
.
can_msg
.
length
,
8
);
cf
->
can_dlc
=
min_t
(
u8
,
msg
->
msg
.
can_msg
.
length
,
8
);
if
(
msg
->
type
==
CPC_MSG_TYPE_EXT_CAN_FRAME
if
(
msg
->
type
==
CPC_MSG_TYPE_EXT_CAN_FRAME
...
@@ -801,6 +801,9 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne
...
@@ -801,6 +801,9 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne
msg
->
length
=
CPC_CAN_MSG_MIN_SIZE
+
cf
->
can_dlc
;
msg
->
length
=
CPC_CAN_MSG_MIN_SIZE
+
cf
->
can_dlc
;
}
}
/* Respect byte order */
msg
->
msg
.
can_msg
.
id
=
cpu_to_le32
(
msg
->
msg
.
can_msg
.
id
);
for
(
i
=
0
;
i
<
MAX_TX_URBS
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_TX_URBS
;
i
++
)
{
if
(
dev
->
tx_contexts
[
i
].
echo_index
==
MAX_TX_URBS
)
{
if
(
dev
->
tx_contexts
[
i
].
echo_index
==
MAX_TX_URBS
)
{
context
=
&
dev
->
tx_contexts
[
i
];
context
=
&
dev
->
tx_contexts
[
i
];
...
...
drivers/net/cassini.c
浏览文件 @
d0e1e88d
...
@@ -4342,11 +4342,11 @@ static int cas_open(struct net_device *dev)
...
@@ -4342,11 +4342,11 @@ static int cas_open(struct net_device *dev)
cas_unlock_all_restore
(
cp
,
flags
);
cas_unlock_all_restore
(
cp
,
flags
);
}
}
err
=
-
ENOMEM
;
if
(
cas_tx_tiny_alloc
(
cp
)
<
0
)
if
(
cas_tx_tiny_alloc
(
cp
)
<
0
)
return
-
ENOMEM
;
goto
err_unlock
;
/* alloc rx descriptors */
/* alloc rx descriptors */
err
=
-
ENOMEM
;
if
(
cas_alloc_rxds
(
cp
)
<
0
)
if
(
cas_alloc_rxds
(
cp
)
<
0
)
goto
err_tx_tiny
;
goto
err_tx_tiny
;
...
@@ -4386,6 +4386,7 @@ static int cas_open(struct net_device *dev)
...
@@ -4386,6 +4386,7 @@ static int cas_open(struct net_device *dev)
cas_free_rxds
(
cp
);
cas_free_rxds
(
cp
);
err_tx_tiny:
err_tx_tiny:
cas_tx_tiny_free
(
cp
);
cas_tx_tiny_free
(
cp
);
err_unlock:
mutex_unlock
(
&
cp
->
pm_mutex
);
mutex_unlock
(
&
cp
->
pm_mutex
);
return
err
;
return
err
;
}
}
...
...
drivers/net/fsl_pq_mdio.c
浏览文件 @
d0e1e88d
...
@@ -462,3 +462,4 @@ void fsl_pq_mdio_exit(void)
...
@@ -462,3 +462,4 @@ void fsl_pq_mdio_exit(void)
of_unregister_platform_driver
(
&
fsl_pq_mdio_driver
);
of_unregister_platform_driver
(
&
fsl_pq_mdio_driver
);
}
}
module_exit
(
fsl_pq_mdio_exit
);
module_exit
(
fsl_pq_mdio_exit
);
MODULE_LICENSE
(
"GPL"
);
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
d0e1e88d
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
#include "ixgbe.h"
#include "ixgbe.h"
#include "ixgbe_common.h"
#include "ixgbe_common.h"
#include "ixgbe_dcb_82599.h"
char
ixgbe_driver_name
[]
=
"ixgbe"
;
char
ixgbe_driver_name
[]
=
"ixgbe"
;
static
const
char
ixgbe_driver_string
[]
=
static
const
char
ixgbe_driver_string
[]
=
...
@@ -228,6 +229,56 @@ static void ixgbe_unmap_and_free_tx_resource(struct ixgbe_adapter *adapter,
...
@@ -228,6 +229,56 @@ static void ixgbe_unmap_and_free_tx_resource(struct ixgbe_adapter *adapter,
/* tx_buffer_info must be completely set up in the transmit path */
/* tx_buffer_info must be completely set up in the transmit path */
}
}
/**
* ixgbe_tx_is_paused - check if the tx ring is paused
* @adapter: the ixgbe adapter
* @tx_ring: the corresponding tx_ring
*
* If not in DCB mode, checks TFCS.TXOFF, otherwise, find out the
* corresponding TC of this tx_ring when checking TFCS.
*
* Returns : true if paused
*/
static
inline
bool
ixgbe_tx_is_paused
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
tx_ring
)
{
int
tc
;
u32
txoff
=
IXGBE_TFCS_TXOFF
;
#ifdef CONFIG_IXGBE_DCB
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
{
int
reg_idx
=
tx_ring
->
reg_idx
;
int
dcb_i
=
adapter
->
ring_feature
[
RING_F_DCB
].
indices
;
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
tc
=
reg_idx
>>
2
;
txoff
=
IXGBE_TFCS_TXOFF0
;
}
else
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
{
tc
=
0
;
txoff
=
IXGBE_TFCS_TXOFF
;
if
(
dcb_i
==
8
)
{
/* TC0, TC1 */
tc
=
reg_idx
>>
5
;
if
(
tc
==
2
)
/* TC2, TC3 */
tc
+=
(
reg_idx
-
64
)
>>
4
;
else
if
(
tc
==
3
)
/* TC4, TC5, TC6, TC7 */
tc
+=
1
+
((
reg_idx
-
96
)
>>
3
);
}
else
if
(
dcb_i
==
4
)
{
/* TC0, TC1 */
tc
=
reg_idx
>>
6
;
if
(
tc
==
1
)
{
tc
+=
(
reg_idx
-
64
)
>>
5
;
if
(
tc
==
2
)
/* TC2, TC3 */
tc
+=
(
reg_idx
-
96
)
>>
4
;
}
}
}
txoff
<<=
tc
;
}
#endif
return
IXGBE_READ_REG
(
&
adapter
->
hw
,
IXGBE_TFCS
)
&
txoff
;
}
static
inline
bool
ixgbe_check_tx_hang
(
struct
ixgbe_adapter
*
adapter
,
static
inline
bool
ixgbe_check_tx_hang
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
tx_ring
,
struct
ixgbe_ring
*
tx_ring
,
unsigned
int
eop
)
unsigned
int
eop
)
...
@@ -239,7 +290,7 @@ static inline bool ixgbe_check_tx_hang(struct ixgbe_adapter *adapter,
...
@@ -239,7 +290,7 @@ static inline bool ixgbe_check_tx_hang(struct ixgbe_adapter *adapter,
adapter
->
detect_tx_hung
=
false
;
adapter
->
detect_tx_hung
=
false
;
if
(
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
&&
if
(
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
&&
time_after
(
jiffies
,
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
+
HZ
)
&&
time_after
(
jiffies
,
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
+
HZ
)
&&
!
(
IXGBE_READ_REG
(
&
adapter
->
hw
,
IXGBE_TFCS
)
&
IXGBE_TFCS_TXOFF
))
{
!
ixgbe_tx_is_paused
(
adapter
,
tx_ring
))
{
/* detected Tx unit hang */
/* detected Tx unit hang */
union
ixgbe_adv_tx_desc
*
tx_desc
;
union
ixgbe_adv_tx_desc
*
tx_desc
;
tx_desc
=
IXGBE_TX_DESC_ADV
(
*
tx_ring
,
eop
);
tx_desc
=
IXGBE_TX_DESC_ADV
(
*
tx_ring
,
eop
);
...
@@ -414,19 +465,23 @@ static void ixgbe_update_tx_dca(struct ixgbe_adapter *adapter,
...
@@ -414,19 +465,23 @@ static void ixgbe_update_tx_dca(struct ixgbe_adapter *adapter,
u32
txctrl
;
u32
txctrl
;
int
cpu
=
get_cpu
();
int
cpu
=
get_cpu
();
int
q
=
tx_ring
-
adapter
->
tx_ring
;
int
q
=
tx_ring
-
adapter
->
tx_ring
;
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
if
(
tx_ring
->
cpu
!=
cpu
)
{
if
(
tx_ring
->
cpu
!=
cpu
)
{
txctrl
=
IXGBE_READ_REG
(
&
adapter
->
hw
,
IXGBE_DCA_TXCTRL
(
q
));
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
txctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_DCA_TXCTRL
(
q
));
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK
;
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK
;
txctrl
|=
dca3_get_tag
(
&
adapter
->
pdev
->
dev
,
cpu
);
txctrl
|=
dca3_get_tag
(
&
adapter
->
pdev
->
dev
,
cpu
);
txctrl
|=
IXGBE_DCA_TXCTRL_DESC_DCA_EN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_DCA_TXCTRL
(
q
),
txctrl
);
}
else
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
{
}
else
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82599EB
)
{
txctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_DCA_TXCTRL_82599
(
q
));
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK_82599
;
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK_82599
;
txctrl
|=
(
dca3_get_tag
(
&
adapter
->
pdev
->
dev
,
cpu
)
<<
txctrl
|=
(
dca3_get_tag
(
&
adapter
->
pdev
->
dev
,
cpu
)
<<
IXGBE_DCA_TXCTRL_CPUID_SHIFT_82599
);
IXGBE_DCA_TXCTRL_CPUID_SHIFT_82599
);
txctrl
|=
IXGBE_DCA_TXCTRL_DESC_DCA_EN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_DCA_TXCTRL_82599
(
q
),
txctrl
);
}
}
txctrl
|=
IXGBE_DCA_TXCTRL_DESC_DCA_EN
;
IXGBE_WRITE_REG
(
&
adapter
->
hw
,
IXGBE_DCA_TXCTRL
(
q
),
txctrl
);
tx_ring
->
cpu
=
cpu
;
tx_ring
->
cpu
=
cpu
;
}
}
put_cpu
();
put_cpu
();
...
@@ -1908,11 +1963,25 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
...
@@ -1908,11 +1963,25 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
break
;
break
;
}
}
}
}
if
(
hw
->
mac
.
type
==
ixgbe_mac_82599EB
)
{
if
(
hw
->
mac
.
type
==
ixgbe_mac_82599EB
)
{
u32
rttdcs
;
/* disable the arbiter while setting MTQC */
rttdcs
=
IXGBE_READ_REG
(
hw
,
IXGBE_RTTDCS
);
rttdcs
|=
IXGBE_RTTDCS_ARBDIS
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTDCS
,
rttdcs
);
/* We enable 8 traffic classes, DCB only */
/* We enable 8 traffic classes, DCB only */
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_MTQC
,
(
IXGBE_MTQC_RT_ENA
|
IXGBE_WRITE_REG
(
hw
,
IXGBE_MTQC
,
(
IXGBE_MTQC_RT_ENA
|
IXGBE_MTQC_8TC_8TQ
));
IXGBE_MTQC_8TC_8TQ
));
else
IXGBE_WRITE_REG
(
hw
,
IXGBE_MTQC
,
IXGBE_MTQC_64Q_1PB
);
/* re-eable the arbiter */
rttdcs
&=
~
IXGBE_RTTDCS_ARBDIS
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RTTDCS
,
rttdcs
);
}
}
}
}
...
@@ -2466,7 +2535,10 @@ static void ixgbe_configure(struct ixgbe_adapter *adapter)
...
@@ -2466,7 +2535,10 @@ static void ixgbe_configure(struct ixgbe_adapter *adapter)
ixgbe_restore_vlan
(
adapter
);
ixgbe_restore_vlan
(
adapter
);
#ifdef CONFIG_IXGBE_DCB
#ifdef CONFIG_IXGBE_DCB
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
{
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
{
netif_set_gso_max_size
(
netdev
,
32768
);
if
(
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
netif_set_gso_max_size
(
netdev
,
32768
);
else
netif_set_gso_max_size
(
netdev
,
65536
);
ixgbe_configure_dcb
(
adapter
);
ixgbe_configure_dcb
(
adapter
);
}
else
{
}
else
{
netif_set_gso_max_size
(
netdev
,
65536
);
netif_set_gso_max_size
(
netdev
,
65536
);
...
...
drivers/net/macsonic.c
浏览文件 @
d0e1e88d
...
@@ -223,69 +223,73 @@ static int __devinit macsonic_init(struct net_device *dev)
...
@@ -223,69 +223,73 @@ static int __devinit macsonic_init(struct net_device *dev)
return
0
;
return
0
;
}
}
static
int
__devinit
mac_onboard_sonic_ethernet_addr
(
struct
net_device
*
dev
)
#define INVALID_MAC(mac) (memcmp(mac, "\x08\x00\x07", 3) && \
memcmp(mac, "\x00\xA0\x40", 3) && \
memcmp(mac, "\x00\x80\x19", 3) && \
memcmp(mac, "\x00\x05\x02", 3))
static
void
__devinit
mac_onboard_sonic_ethernet_addr
(
struct
net_device
*
dev
)
{
{
struct
sonic_local
*
lp
=
netdev_priv
(
dev
);
struct
sonic_local
*
lp
=
netdev_priv
(
dev
);
const
int
prom_addr
=
ONBOARD_SONIC_PROM_BASE
;
const
int
prom_addr
=
ONBOARD_SONIC_PROM_BASE
;
int
i
;
unsigned
short
val
;
/* On NuBus boards we can sometimes look in the ROM resources.
/*
No such luck for comm-slot/onboard. */
* On NuBus boards we can sometimes look in the ROM resources.
for
(
i
=
0
;
i
<
6
;
i
++
)
* No such luck for comm-slot/onboard.
dev
->
dev_addr
[
i
]
=
SONIC_READ_PROM
(
i
);
* On the PowerBook 520, the PROM base address is a mystery.
*/
if
(
hwreg_present
((
void
*
)
prom_addr
))
{
int
i
;
for
(
i
=
0
;
i
<
6
;
i
++
)
dev
->
dev_addr
[
i
]
=
SONIC_READ_PROM
(
i
);
if
(
!
INVALID_MAC
(
dev
->
dev_addr
))
return
;
/* Most of the time, the address is bit-reversed. The NetBSD
/*
source has a rather long and detailed historical account of
* Most of the time, the address is bit-reversed. The NetBSD
why this is so. */
* source has a rather long and detailed historical account of
if
(
memcmp
(
dev
->
dev_addr
,
"
\x08\x00\x07
"
,
3
)
&&
* why this is so.
memcmp
(
dev
->
dev_addr
,
"
\x00\xA0\x40
"
,
3
)
&&
*/
memcmp
(
dev
->
dev_addr
,
"
\x00\x80\x19
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\x05\x02
"
,
3
))
bit_reverse_addr
(
dev
->
dev_addr
);
bit_reverse_addr
(
dev
->
dev_addr
);
else
if
(
!
INVALID_MAC
(
dev
->
dev_addr
))
return
0
;
return
;
/* If we still have what seems to be a bogus address, we'll
look in the CAM. The top entry should be ours. */
/* Danger! This only works if MacOS has already initialized
the card... */
if
(
memcmp
(
dev
->
dev_addr
,
"
\x08\x00\x07
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\xA0\x40
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\x80\x19
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\x05\x02
"
,
3
))
{
unsigned
short
val
;
printk
(
KERN_INFO
"macsonic: PROM seems to be wrong, trying CAM entry 15
\n
"
);
SONIC_WRITE
(
SONIC_CMD
,
SONIC_CR_RST
);
SONIC_WRITE
(
SONIC_CEP
,
15
);
val
=
SONIC_READ
(
SONIC_CAP2
);
dev
->
dev_addr
[
5
]
=
val
>>
8
;
dev
->
dev_addr
[
4
]
=
val
&
0xff
;
val
=
SONIC_READ
(
SONIC_CAP1
);
dev
->
dev_addr
[
3
]
=
val
>>
8
;
dev
->
dev_addr
[
2
]
=
val
&
0xff
;
val
=
SONIC_READ
(
SONIC_CAP0
);
dev
->
dev_addr
[
1
]
=
val
>>
8
;
dev
->
dev_addr
[
0
]
=
val
&
0xff
;
printk
(
KERN_INFO
"HW Address from CAM 15: %pM
\n
"
,
dev
->
dev_addr
);
}
else
return
0
;
if
(
memcmp
(
dev
->
dev_addr
,
"
\x08\x00\x07
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\xA0\x40
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\x80\x19
"
,
3
)
&&
memcmp
(
dev
->
dev_addr
,
"
\x00\x05\x02
"
,
3
))
{
/*
/*
* Still nonsense ... messed up someplace!
* If we still have what seems to be a bogus address, we'll
* look in the CAM. The top entry should be ours.
*/
*/
printk
(
KERN_ERR
"macsonic: ERROR (INVALID MAC)
\n
"
);
printk
(
KERN_WARNING
"macsonic: MAC address in PROM seems "
return
-
EIO
;
"to be invalid, trying CAM
\n
"
);
}
else
return
0
;
}
else
{
printk
(
KERN_WARNING
"macsonic: cannot read MAC address from "
"PROM, trying CAM
\n
"
);
}
/* This only works if MacOS has already initialized the card. */
SONIC_WRITE
(
SONIC_CMD
,
SONIC_CR_RST
);
SONIC_WRITE
(
SONIC_CEP
,
15
);
val
=
SONIC_READ
(
SONIC_CAP2
);
dev
->
dev_addr
[
5
]
=
val
>>
8
;
dev
->
dev_addr
[
4
]
=
val
&
0xff
;
val
=
SONIC_READ
(
SONIC_CAP1
);
dev
->
dev_addr
[
3
]
=
val
>>
8
;
dev
->
dev_addr
[
2
]
=
val
&
0xff
;
val
=
SONIC_READ
(
SONIC_CAP0
);
dev
->
dev_addr
[
1
]
=
val
>>
8
;
dev
->
dev_addr
[
0
]
=
val
&
0xff
;
if
(
!
INVALID_MAC
(
dev
->
dev_addr
))
return
;
/* Still nonsense ... messed up someplace! */
printk
(
KERN_WARNING
"macsonic: MAC address in CAM entry 15 "
"seems invalid, will use a random MAC
\n
"
);
random_ether_addr
(
dev
->
dev_addr
);
}
}
static
int
__devinit
mac_onboard_sonic_probe
(
struct
net_device
*
dev
)
static
int
__devinit
mac_onboard_sonic_probe
(
struct
net_device
*
dev
)
...
@@ -402,8 +406,7 @@ static int __devinit mac_onboard_sonic_probe(struct net_device *dev)
...
@@ -402,8 +406,7 @@ static int __devinit mac_onboard_sonic_probe(struct net_device *dev)
SONIC_WRITE
(
SONIC_ISR
,
0x7fff
);
SONIC_WRITE
(
SONIC_ISR
,
0x7fff
);
/* Now look for the MAC address. */
/* Now look for the MAC address. */
if
(
mac_onboard_sonic_ethernet_addr
(
dev
)
!=
0
)
mac_onboard_sonic_ethernet_addr
(
dev
);
return
-
ENODEV
;
/* Shared init code */
/* Shared init code */
return
macsonic_init
(
dev
);
return
macsonic_init
(
dev
);
...
...
drivers/net/qlge/qlge_main.c
浏览文件 @
d0e1e88d
...
@@ -4145,6 +4145,8 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
...
@@ -4145,6 +4145,8 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
goto
err_out
;
goto
err_out
;
}
}
/* Set PCIe reset type for EEH to fundamental. */
pdev
->
needs_freset
=
1
;
pci_save_state
(
pdev
);
pci_save_state
(
pdev
);
qdev
->
reg_base
=
qdev
->
reg_base
=
ioremap_nocache
(
pci_resource_start
(
pdev
,
1
),
ioremap_nocache
(
pci_resource_start
(
pdev
,
1
),
...
...
drivers/net/qlge/qlge_mpi.c
浏览文件 @
d0e1e88d
...
@@ -483,7 +483,7 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp)
...
@@ -483,7 +483,7 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp)
/* Wait for the interrupt to come in. */
/* Wait for the interrupt to come in. */
status
=
ql_wait_mbx_cmd_cmplt
(
qdev
);
status
=
ql_wait_mbx_cmd_cmplt
(
qdev
);
if
(
status
)
if
(
status
)
goto
end
;
continue
;
/* Process the event. If it's an AEN, it
/* Process the event. If it's an AEN, it
* will be handled in-line or a worker
* will be handled in-line or a worker
...
...
drivers/net/wireless/ipw2x00/ipw2100.c
浏览文件 @
d0e1e88d
...
@@ -6325,10 +6325,8 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
...
@@ -6325,10 +6325,8 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
fail:
fail:
if
(
dev
)
{
if
(
dev
)
{
if
(
registered
)
{
if
(
registered
)
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
dev
);
unregister_netdev
(
dev
);
}
ipw2100_hw_stop_adapter
(
priv
);
ipw2100_hw_stop_adapter
(
priv
);
...
@@ -6385,7 +6383,6 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
...
@@ -6385,7 +6383,6 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
/* Unregister the device first - this results in close()
/* Unregister the device first - this results in close()
* being called if the device is open. If we free storage
* being called if the device is open. If we free storage
* first, then close() will crash. */
* first, then close() will crash. */
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
dev
);
unregister_netdev
(
dev
);
/* ipw2100_down will ensure that there is no more pending work
/* ipw2100_down will ensure that there is no more pending work
...
...
drivers/net/wireless/ipw2x00/ipw2200.c
浏览文件 @
d0e1e88d
...
@@ -11822,7 +11822,6 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
...
@@ -11822,7 +11822,6 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
if
(
err
)
{
if
(
err
)
{
IPW_ERROR
(
"Failed to register promiscuous network "
IPW_ERROR
(
"Failed to register promiscuous network "
"device (error %d).
\n
"
,
err
);
"device (error %d).
\n
"
,
err
);
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
priv
->
net_dev
);
unregister_netdev
(
priv
->
net_dev
);
goto
out_remove_sysfs
;
goto
out_remove_sysfs
;
}
}
...
@@ -11873,7 +11872,6 @@ static void __devexit ipw_pci_remove(struct pci_dev *pdev)
...
@@ -11873,7 +11872,6 @@ static void __devexit ipw_pci_remove(struct pci_dev *pdev)
mutex_unlock
(
&
priv
->
mutex
);
mutex_unlock
(
&
priv
->
mutex
);
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
priv
->
net_dev
);
unregister_netdev
(
priv
->
net_dev
);
if
(
priv
->
rxq
)
{
if
(
priv
->
rxq
)
{
...
...
drivers/net/wireless/ipw2x00/libipw.h
浏览文件 @
d0e1e88d
...
@@ -1020,7 +1020,6 @@ static inline int libipw_is_cck_rate(u8 rate)
...
@@ -1020,7 +1020,6 @@ static inline int libipw_is_cck_rate(u8 rate)
/* ieee80211.c */
/* ieee80211.c */
extern
void
free_ieee80211
(
struct
net_device
*
dev
,
int
monitor
);
extern
void
free_ieee80211
(
struct
net_device
*
dev
,
int
monitor
);
extern
struct
net_device
*
alloc_ieee80211
(
int
sizeof_priv
,
int
monitor
);
extern
struct
net_device
*
alloc_ieee80211
(
int
sizeof_priv
,
int
monitor
);
extern
void
unregister_ieee80211
(
struct
libipw_device
*
ieee
);
extern
int
libipw_change_mtu
(
struct
net_device
*
dev
,
int
new_mtu
);
extern
int
libipw_change_mtu
(
struct
net_device
*
dev
,
int
new_mtu
);
extern
void
libipw_networks_age
(
struct
libipw_device
*
ieee
,
extern
void
libipw_networks_age
(
struct
libipw_device
*
ieee
,
...
...
drivers/net/wireless/ipw2x00/libipw_module.c
浏览文件 @
d0e1e88d
...
@@ -235,19 +235,16 @@ void free_ieee80211(struct net_device *dev, int monitor)
...
@@ -235,19 +235,16 @@ void free_ieee80211(struct net_device *dev, int monitor)
libipw_networks_free
(
ieee
);
libipw_networks_free
(
ieee
);
/* free cfg80211 resources */
/* free cfg80211 resources */
if
(
!
monitor
)
if
(
!
monitor
)
{
wiphy_unregister
(
ieee
->
wdev
.
wiphy
);
kfree
(
ieee
->
a_band
.
channels
);
kfree
(
ieee
->
bg_band
.
channels
);
wiphy_free
(
ieee
->
wdev
.
wiphy
);
wiphy_free
(
ieee
->
wdev
.
wiphy
);
}
free_netdev
(
dev
);
free_netdev
(
dev
);
}
}
void
unregister_ieee80211
(
struct
libipw_device
*
ieee
)
{
wiphy_unregister
(
ieee
->
wdev
.
wiphy
);
kfree
(
ieee
->
a_band
.
channels
);
kfree
(
ieee
->
bg_band
.
channels
);
}
#ifdef CONFIG_LIBIPW_DEBUG
#ifdef CONFIG_LIBIPW_DEBUG
static
int
debug
=
0
;
static
int
debug
=
0
;
...
@@ -333,4 +330,3 @@ module_init(libipw_init);
...
@@ -333,4 +330,3 @@ module_init(libipw_init);
EXPORT_SYMBOL
(
alloc_ieee80211
);
EXPORT_SYMBOL
(
alloc_ieee80211
);
EXPORT_SYMBOL
(
free_ieee80211
);
EXPORT_SYMBOL
(
free_ieee80211
);
EXPORT_SYMBOL
(
unregister_ieee80211
);
drivers/net/wireless/rt2x00/rt2x00dev.c
浏览文件 @
d0e1e88d
...
@@ -815,6 +815,8 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
...
@@ -815,6 +815,8 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
mutex_init
(
&
rt2x00dev
->
csr_mutex
);
mutex_init
(
&
rt2x00dev
->
csr_mutex
);
set_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
/*
/*
* Make room for rt2x00_intf inside the per-interface
* Make room for rt2x00_intf inside the per-interface
* structure ieee80211_vif.
* structure ieee80211_vif.
...
@@ -871,8 +873,6 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
...
@@ -871,8 +873,6 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
rt2x00leds_register
(
rt2x00dev
);
rt2x00leds_register
(
rt2x00dev
);
rt2x00debug_register
(
rt2x00dev
);
rt2x00debug_register
(
rt2x00dev
);
set_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
return
0
;
return
0
;
exit:
exit:
...
...
drivers/net/wireless/rt2x00/rt2x00link.c
浏览文件 @
d0e1e88d
...
@@ -362,8 +362,9 @@ void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev)
...
@@ -362,8 +362,9 @@ void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev)
rt2x00link_reset_tuner
(
rt2x00dev
,
false
);
rt2x00link_reset_tuner
(
rt2x00dev
,
false
);
ieee80211_queue_delayed_work
(
rt2x00dev
->
hw
,
if
(
test_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
))
&
link
->
work
,
LINK_TUNE_INTERVAL
);
ieee80211_queue_delayed_work
(
rt2x00dev
->
hw
,
&
link
->
work
,
LINK_TUNE_INTERVAL
);
}
}
void
rt2x00link_stop_tuner
(
struct
rt2x00_dev
*
rt2x00dev
)
void
rt2x00link_stop_tuner
(
struct
rt2x00_dev
*
rt2x00dev
)
...
@@ -469,8 +470,10 @@ static void rt2x00link_tuner(struct work_struct *work)
...
@@ -469,8 +470,10 @@ static void rt2x00link_tuner(struct work_struct *work)
* Increase tuner counter, and reschedule the next link tuner run.
* Increase tuner counter, and reschedule the next link tuner run.
*/
*/
link
->
count
++
;
link
->
count
++
;
ieee80211_queue_delayed_work
(
rt2x00dev
->
hw
,
&
link
->
work
,
LINK_TUNE_INTERVAL
);
if
(
test_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
))
ieee80211_queue_delayed_work
(
rt2x00dev
->
hw
,
&
link
->
work
,
LINK_TUNE_INTERVAL
);
}
}
void
rt2x00link_register
(
struct
rt2x00_dev
*
rt2x00dev
)
void
rt2x00link_register
(
struct
rt2x00_dev
*
rt2x00dev
)
...
...
drivers/net/wireless/rt2x00/rt2x00usb.c
浏览文件 @
d0e1e88d
...
@@ -47,6 +47,8 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
...
@@ -47,6 +47,8 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
(
requesttype
==
USB_VENDOR_REQUEST_IN
)
?
(
requesttype
==
USB_VENDOR_REQUEST_IN
)
?
usb_rcvctrlpipe
(
usb_dev
,
0
)
:
usb_sndctrlpipe
(
usb_dev
,
0
);
usb_rcvctrlpipe
(
usb_dev
,
0
)
:
usb_sndctrlpipe
(
usb_dev
,
0
);
if
(
!
test_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
))
return
-
ENODEV
;
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
status
=
usb_control_msg
(
usb_dev
,
pipe
,
request
,
requesttype
,
status
=
usb_control_msg
(
usb_dev
,
pipe
,
request
,
requesttype
,
...
@@ -60,8 +62,10 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
...
@@ -60,8 +62,10 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
* -ENODEV: Device has disappeared, no point continuing.
* -ENODEV: Device has disappeared, no point continuing.
* All other errors: Try again.
* All other errors: Try again.
*/
*/
else
if
(
status
==
-
ENODEV
)
else
if
(
status
==
-
ENODEV
)
{
clear_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
break
;
break
;
}
}
}
ERROR
(
rt2x00dev
,
ERROR
(
rt2x00dev
,
...
@@ -161,6 +165,9 @@ int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
...
@@ -161,6 +165,9 @@ int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
{
{
unsigned
int
i
;
unsigned
int
i
;
if
(
!
test_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
))
return
-
ENODEV
;
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00usb_register_read_lock
(
rt2x00dev
,
offset
,
reg
);
rt2x00usb_register_read_lock
(
rt2x00dev
,
offset
,
reg
);
if
(
!
rt2x00_get_field32
(
*
reg
,
field
))
if
(
!
rt2x00_get_field32
(
*
reg
,
field
))
...
...
drivers/net/wireless/rtl818x/rtl8187_leds.c
浏览文件 @
d0e1e88d
...
@@ -210,10 +210,10 @@ void rtl8187_leds_exit(struct ieee80211_hw *dev)
...
@@ -210,10 +210,10 @@ void rtl8187_leds_exit(struct ieee80211_hw *dev)
/* turn the LED off before exiting */
/* turn the LED off before exiting */
ieee80211_queue_delayed_work
(
dev
,
&
priv
->
led_off
,
0
);
ieee80211_queue_delayed_work
(
dev
,
&
priv
->
led_off
,
0
);
cancel_delayed_work_sync
(
&
priv
->
led_off
);
cancel_delayed_work_sync
(
&
priv
->
led_on
);
rtl8187_unregister_led
(
&
priv
->
led_rx
);
rtl8187_unregister_led
(
&
priv
->
led_rx
);
rtl8187_unregister_led
(
&
priv
->
led_tx
);
rtl8187_unregister_led
(
&
priv
->
led_tx
);
cancel_delayed_work_sync
(
&
priv
->
led_off
);
cancel_delayed_work_sync
(
&
priv
->
led_on
);
}
}
#endif
/* def CONFIG_RTL8187_LED */
#endif
/* def CONFIG_RTL8187_LED */
net/can/bcm.c
浏览文件 @
d0e1e88d
...
@@ -132,23 +132,27 @@ static inline struct bcm_sock *bcm_sk(const struct sock *sk)
...
@@ -132,23 +132,27 @@ static inline struct bcm_sock *bcm_sk(const struct sock *sk)
/*
/*
* procfs functions
* procfs functions
*/
*/
static
char
*
bcm_proc_getifname
(
int
ifindex
)
static
char
*
bcm_proc_getifname
(
char
*
result
,
int
ifindex
)
{
{
struct
net_device
*
dev
;
struct
net_device
*
dev
;
if
(
!
ifindex
)
if
(
!
ifindex
)
return
"any"
;
return
"any"
;
/* no usage counting */
read_lock
(
&
dev_base_lock
);
dev
=
__dev_get_by_index
(
&
init_net
,
ifindex
);
dev
=
__dev_get_by_index
(
&
init_net
,
ifindex
);
if
(
dev
)
if
(
dev
)
return
dev
->
name
;
strcpy
(
result
,
dev
->
name
);
else
strcpy
(
result
,
"???"
);
read_unlock
(
&
dev_base_lock
);
return
"???"
;
return
result
;
}
}
static
int
bcm_proc_show
(
struct
seq_file
*
m
,
void
*
v
)
static
int
bcm_proc_show
(
struct
seq_file
*
m
,
void
*
v
)
{
{
char
ifname
[
IFNAMSIZ
];
struct
sock
*
sk
=
(
struct
sock
*
)
m
->
private
;
struct
sock
*
sk
=
(
struct
sock
*
)
m
->
private
;
struct
bcm_sock
*
bo
=
bcm_sk
(
sk
);
struct
bcm_sock
*
bo
=
bcm_sk
(
sk
);
struct
bcm_op
*
op
;
struct
bcm_op
*
op
;
...
@@ -157,7 +161,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
...
@@ -157,7 +161,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
seq_printf
(
m
,
" / sk %p"
,
sk
);
seq_printf
(
m
,
" / sk %p"
,
sk
);
seq_printf
(
m
,
" / bo %p"
,
bo
);
seq_printf
(
m
,
" / bo %p"
,
bo
);
seq_printf
(
m
,
" / dropped %lu"
,
bo
->
dropped_usr_msgs
);
seq_printf
(
m
,
" / dropped %lu"
,
bo
->
dropped_usr_msgs
);
seq_printf
(
m
,
" / bound %s"
,
bcm_proc_getifname
(
bo
->
ifindex
));
seq_printf
(
m
,
" / bound %s"
,
bcm_proc_getifname
(
ifname
,
bo
->
ifindex
));
seq_printf
(
m
,
" <<<
\n
"
);
seq_printf
(
m
,
" <<<
\n
"
);
list_for_each_entry
(
op
,
&
bo
->
rx_ops
,
list
)
{
list_for_each_entry
(
op
,
&
bo
->
rx_ops
,
list
)
{
...
@@ -169,7 +173,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
...
@@ -169,7 +173,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
continue
;
continue
;
seq_printf
(
m
,
"rx_op: %03X %-5s "
,
seq_printf
(
m
,
"rx_op: %03X %-5s "
,
op
->
can_id
,
bcm_proc_getifname
(
op
->
ifindex
));
op
->
can_id
,
bcm_proc_getifname
(
ifname
,
op
->
ifindex
));
seq_printf
(
m
,
"[%d]%c "
,
op
->
nframes
,
seq_printf
(
m
,
"[%d]%c "
,
op
->
nframes
,
(
op
->
flags
&
RX_CHECK_DLC
)
?
'd'
:
' '
);
(
op
->
flags
&
RX_CHECK_DLC
)
?
'd'
:
' '
);
if
(
op
->
kt_ival1
.
tv64
)
if
(
op
->
kt_ival1
.
tv64
)
...
@@ -194,7 +198,8 @@ static int bcm_proc_show(struct seq_file *m, void *v)
...
@@ -194,7 +198,8 @@ static int bcm_proc_show(struct seq_file *m, void *v)
list_for_each_entry
(
op
,
&
bo
->
tx_ops
,
list
)
{
list_for_each_entry
(
op
,
&
bo
->
tx_ops
,
list
)
{
seq_printf
(
m
,
"tx_op: %03X %s [%d] "
,
seq_printf
(
m
,
"tx_op: %03X %s [%d] "
,
op
->
can_id
,
bcm_proc_getifname
(
op
->
ifindex
),
op
->
can_id
,
bcm_proc_getifname
(
ifname
,
op
->
ifindex
),
op
->
nframes
);
op
->
nframes
);
if
(
op
->
kt_ival1
.
tv64
)
if
(
op
->
kt_ival1
.
tv64
)
...
...
net/ipv4/ipip.c
浏览文件 @
d0e1e88d
...
@@ -446,25 +446,27 @@ static netdev_tx_t ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -446,25 +446,27 @@ static netdev_tx_t ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
goto
tx_error
;
goto
tx_error
;
}
}
if
(
tiph
->
frag_off
)
df
|=
old_iph
->
frag_off
&
htons
(
IP_DF
);
if
(
df
)
{
mtu
=
dst_mtu
(
&
rt
->
u
.
dst
)
-
sizeof
(
struct
iphdr
);
mtu
=
dst_mtu
(
&
rt
->
u
.
dst
)
-
sizeof
(
struct
iphdr
);
else
mtu
=
skb_dst
(
skb
)
?
dst_mtu
(
skb_dst
(
skb
))
:
dev
->
mtu
;
if
(
mtu
<
68
)
{
if
(
mtu
<
68
)
{
stats
->
collisions
++
;
stats
->
collisions
++
;
ip_rt_put
(
rt
);
ip_rt_put
(
rt
);
goto
tx_error
;
goto
tx_error
;
}
}
if
(
skb_dst
(
skb
))
skb_dst
(
skb
)
->
ops
->
update_pmtu
(
skb_dst
(
skb
),
mtu
);
df
|=
(
old_iph
->
frag_off
&
htons
(
IP_DF
));
if
(
skb_dst
(
skb
))
skb_dst
(
skb
)
->
ops
->
update_pmtu
(
skb_dst
(
skb
),
mtu
);
if
((
old_iph
->
frag_off
&
htons
(
IP_DF
))
&&
mtu
<
ntohs
(
old_iph
->
tot_len
))
{
if
((
old_iph
->
frag_off
&
htons
(
IP_DF
))
&&
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_FRAG_NEEDED
,
htonl
(
mtu
));
mtu
<
ntohs
(
old_iph
->
tot_len
))
{
ip_rt_put
(
rt
);
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_FRAG_NEEDED
,
goto
tx_error
;
htonl
(
mtu
));
ip_rt_put
(
rt
);
goto
tx_error
;
}
}
}
if
(
tunnel
->
err_count
>
0
)
{
if
(
tunnel
->
err_count
>
0
)
{
...
...
net/netfilter/xt_connlimit.c
浏览文件 @
d0e1e88d
...
@@ -103,7 +103,7 @@ static int count_them(struct xt_connlimit_data *data,
...
@@ -103,7 +103,7 @@ static int count_them(struct xt_connlimit_data *data,
const
struct
nf_conntrack_tuple
*
tuple
,
const
struct
nf_conntrack_tuple
*
tuple
,
const
union
nf_inet_addr
*
addr
,
const
union
nf_inet_addr
*
addr
,
const
union
nf_inet_addr
*
mask
,
const
union
nf_inet_addr
*
mask
,
const
struct
xt_match
*
match
)
u_int8_t
family
)
{
{
const
struct
nf_conntrack_tuple_hash
*
found
;
const
struct
nf_conntrack_tuple_hash
*
found
;
struct
xt_connlimit_conn
*
conn
;
struct
xt_connlimit_conn
*
conn
;
...
@@ -113,8 +113,7 @@ static int count_them(struct xt_connlimit_data *data,
...
@@ -113,8 +113,7 @@ static int count_them(struct xt_connlimit_data *data,
bool
addit
=
true
;
bool
addit
=
true
;
int
matches
=
0
;
int
matches
=
0
;
if
(
family
==
NFPROTO_IPV6
)
if
(
match
->
family
==
NFPROTO_IPV6
)
hash
=
&
data
->
iphash
[
connlimit_iphash6
(
addr
,
mask
)];
hash
=
&
data
->
iphash
[
connlimit_iphash6
(
addr
,
mask
)];
else
else
hash
=
&
data
->
iphash
[
connlimit_iphash
(
addr
->
ip
&
mask
->
ip
)];
hash
=
&
data
->
iphash
[
connlimit_iphash
(
addr
->
ip
&
mask
->
ip
)];
...
@@ -157,8 +156,7 @@ static int count_them(struct xt_connlimit_data *data,
...
@@ -157,8 +156,7 @@ static int count_them(struct xt_connlimit_data *data,
continue
;
continue
;
}
}
if
(
same_source_net
(
addr
,
mask
,
&
conn
->
tuple
.
src
.
u3
,
if
(
same_source_net
(
addr
,
mask
,
&
conn
->
tuple
.
src
.
u3
,
family
))
match
->
family
))
/* same source network -> be counted! */
/* same source network -> be counted! */
++
matches
;
++
matches
;
nf_ct_put
(
found_ct
);
nf_ct_put
(
found_ct
);
...
@@ -207,7 +205,7 @@ connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
...
@@ -207,7 +205,7 @@ connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
spin_lock_bh
(
&
info
->
data
->
lock
);
spin_lock_bh
(
&
info
->
data
->
lock
);
connections
=
count_them
(
info
->
data
,
tuple_ptr
,
&
addr
,
connections
=
count_them
(
info
->
data
,
tuple_ptr
,
&
addr
,
&
info
->
mask
,
par
->
match
);
&
info
->
mask
,
par
->
family
);
spin_unlock_bh
(
&
info
->
data
->
lock
);
spin_unlock_bh
(
&
info
->
data
->
lock
);
if
(
connections
<
0
)
{
if
(
connections
<
0
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录