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
d0e1e88d
Commit
d0e1e88d
authored
Nov 08, 2009
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/can/usb/ems_usb.c
parents
9e0d57fd
26062897
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
259 additions
and
145 deletions
+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
No files found.
drivers/isdn/hisax/elsa_ser.c
View file @
d0e1e88d
...
...
@@ -477,62 +477,62 @@ static void
modem_set_init
(
struct
IsdnCardState
*
cs
)
{
int
timeout
;
#define RCV_DELAY 20
000
#define RCV_DELAY 20
modem_write_cmd
(
cs
,
MInit_1
,
strlen
(
MInit_1
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_2
,
strlen
(
MInit_2
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_3
,
strlen
(
MInit_3
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_4
,
strlen
(
MInit_4
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
udelay
(
RCV_DELAY
);
mdelay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_5
,
strlen
(
MInit_5
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_6
,
strlen
(
MInit_6
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
modem_write_cmd
(
cs
,
MInit_7
,
strlen
(
MInit_7
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
}
static
void
modem_set_dial
(
struct
IsdnCardState
*
cs
,
int
outgoing
)
{
int
timeout
;
#define RCV_DELAY 20
000
#define RCV_DELAY 20
modem_write_cmd
(
cs
,
MInit_speed28800
,
strlen
(
MInit_speed28800
));
timeout
=
1000
;
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
if
(
outgoing
)
modem_write_cmd
(
cs
,
MInit_dialout
,
strlen
(
MInit_dialout
));
else
...
...
@@ -541,7 +541,7 @@ modem_set_dial(struct IsdnCardState *cs, int outgoing) {
while
(
timeout
--
&&
cs
->
hw
.
elsa
.
transcnt
)
udelay
(
1000
);
debugl1
(
cs
,
"msi tout=%d"
,
timeout
);
u
delay
(
RCV_DELAY
);
m
delay
(
RCV_DELAY
);
}
static
void
...
...
drivers/net/benet/be.h
View file @
d0e1e88d
...
...
@@ -269,6 +269,8 @@ struct be_adapter {
u32
port_num
;
bool
promiscuous
;
u32
cap
;
u32
rx_fc
;
/* Rx flow control */
u32
tx_fc
;
/* Tx flow control */
};
extern
const
struct
ethtool_ops
be_ethtool_ops
;
...
...
drivers/net/benet/be_ethtool.c
View file @
d0e1e88d
...
...
@@ -362,10 +362,12 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
if
(
ecmd
->
autoneg
!=
0
)
return
-
EINVAL
;
adapter
->
tx_fc
=
ecmd
->
tx_pause
;
adapter
->
rx_fc
=
ecmd
->
rx_pause
;
status
=
be_cmd_set_flow_control
(
adapter
,
ecmd
->
tx_pause
,
ecmd
->
rx_pause
);
if
(
!
status
)
status
=
be_cmd_set_flow_control
(
adapter
,
adapter
->
tx_fc
,
adapter
->
rx_fc
);
if
(
status
)
dev_warn
(
&
adapter
->
pdev
->
dev
,
"Pause param set failed.
\n
"
);
return
status
;
...
...
drivers/net/benet/be_main.c
View file @
d0e1e88d
...
...
@@ -1611,11 +1611,21 @@ static int be_open(struct net_device *netdev)
status
=
be_cmd_link_status_query
(
adapter
,
&
link_up
,
&
mac_speed
,
&
link_speed
);
if
(
status
)
return
statu
s
;
goto
ret_st
s
;
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
));
return
0
;
ret_sts:
return
status
;
}
static
int
be_setup
(
struct
be_adapter
*
adapter
)
...
...
@@ -1649,17 +1659,8 @@ static int be_setup(struct be_adapter *adapter)
if
(
status
!=
0
)
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
;
mccqs_destroy:
be_mcc_queues_destroy
(
adapter
);
rx_qs_destroy:
be_rx_queues_destroy
(
adapter
);
tx_qs_destroy:
...
...
@@ -1910,6 +1911,10 @@ static void be_netdev_init(struct net_device *netdev)
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
);
BE_SET_NETDEV_OPS
(
netdev
,
&
be_netdev_ops
);
...
...
@@ -2172,6 +2177,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
be_close
(
netdev
);
rtnl_unlock
();
}
be_cmd_get_flow_control
(
adapter
,
&
adapter
->
tx_fc
,
&
adapter
->
rx_fc
);
be_clear
(
adapter
);
pci_save_state
(
pdev
);
...
...
drivers/net/can/dev.c
View file @
d0e1e88d
...
...
@@ -637,6 +637,22 @@ static int can_changelink(struct net_device *dev,
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
)
{
struct
can_priv
*
priv
=
netdev_priv
(
dev
);
...
...
@@ -687,6 +703,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
.
setup
=
can_setup
,
.
newlink
=
can_newlink
,
.
changelink
=
can_changelink
,
.
get_size
=
can_get_size
,
.
fill_info
=
can_fill_info
,
.
fill_xstats
=
can_fill_xstats
,
};
...
...
drivers/net/can/usb/ems_usb.c
View file @
d0e1e88d
...
...
@@ -315,7 +315,7 @@ static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
if
(
skb
==
NULL
)
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
);
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
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
++
)
{
if
(
dev
->
tx_contexts
[
i
].
echo_index
==
MAX_TX_URBS
)
{
context
=
&
dev
->
tx_contexts
[
i
];
...
...
drivers/net/cassini.c
View file @
d0e1e88d
...
...
@@ -4342,11 +4342,11 @@ static int cas_open(struct net_device *dev)
cas_unlock_all_restore
(
cp
,
flags
);
}
err
=
-
ENOMEM
;
if
(
cas_tx_tiny_alloc
(
cp
)
<
0
)
return
-
ENOMEM
;
goto
err_unlock
;
/* alloc rx descriptors */
err
=
-
ENOMEM
;
if
(
cas_alloc_rxds
(
cp
)
<
0
)
goto
err_tx_tiny
;
...
...
@@ -4386,6 +4386,7 @@ static int cas_open(struct net_device *dev)
cas_free_rxds
(
cp
);
err_tx_tiny:
cas_tx_tiny_free
(
cp
);
err_unlock:
mutex_unlock
(
&
cp
->
pm_mutex
);
return
err
;
}
...
...
drivers/net/fsl_pq_mdio.c
View file @
d0e1e88d
...
...
@@ -462,3 +462,4 @@ void fsl_pq_mdio_exit(void)
of_unregister_platform_driver
(
&
fsl_pq_mdio_driver
);
}
module_exit
(
fsl_pq_mdio_exit
);
MODULE_LICENSE
(
"GPL"
);
drivers/net/ixgbe/ixgbe_main.c
View file @
d0e1e88d
...
...
@@ -44,6 +44,7 @@
#include "ixgbe.h"
#include "ixgbe_common.h"
#include "ixgbe_dcb_82599.h"
char
ixgbe_driver_name
[]
=
"ixgbe"
;
static
const
char
ixgbe_driver_string
[]
=
...
...
@@ -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 */
}
/**
* 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
,
struct
ixgbe_ring
*
tx_ring
,
unsigned
int
eop
)
...
...
@@ -239,7 +290,7 @@ static inline bool ixgbe_check_tx_hang(struct ixgbe_adapter *adapter,
adapter
->
detect_tx_hung
=
false
;
if
(
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
&&
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 */
union
ixgbe_adv_tx_desc
*
tx_desc
;
tx_desc
=
IXGBE_TX_DESC_ADV
(
*
tx_ring
,
eop
);
...
...
@@ -414,19 +465,23 @@ static void ixgbe_update_tx_dca(struct ixgbe_adapter *adapter,
u32
txctrl
;
int
cpu
=
get_cpu
();
int
q
=
tx_ring
-
adapter
->
tx_ring
;
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
if
(
tx_ring
->
cpu
!=
cpu
)
{
txctrl
=
IXGBE_READ_REG
(
&
adapter
->
hw
,
IXGBE_DCA_TXCTRL
(
q
));
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
txctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_DCA_TXCTRL
(
q
));
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK
;
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
)
{
txctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_DCA_TXCTRL_82599
(
q
));
txctrl
&=
~
IXGBE_DCA_TXCTRL_CPUID_MASK_82599
;
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
;
}
put_cpu
();
...
...
@@ -1908,11 +1963,25 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
break
;
}
}
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 */
if
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_MTQC
,
(
IXGBE_MTQC_RT_ENA
|
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)
ixgbe_restore_vlan
(
adapter
);
#ifdef CONFIG_IXGBE_DCB
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
);
}
else
{
netif_set_gso_max_size
(
netdev
,
65536
);
...
...
drivers/net/macsonic.c
View file @
d0e1e88d
...
...
@@ -223,69 +223,73 @@ static int __devinit macsonic_init(struct net_device *dev)
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
);
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. */
for
(
i
=
0
;
i
<
6
;
i
++
)
dev
->
dev_addr
[
i
]
=
SONIC_READ_PROM
(
i
);
/*
* On NuBus boards we can sometimes look in the ROM resources.
* No such luck for comm-slot/onboard.
* 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
why this is so. */
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
))
/*
* Most of the time, the address is bit-reversed. The NetBSD
* source has a rather long and detailed historical account of
* why this is so.
*/
bit_reverse_addr
(
dev
->
dev_addr
);
else
return
0
;
/* 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
))
{
if
(
!
INVALID_MAC
(
dev
->
dev_addr
))
return
;
/*
* 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
"
);
return
-
EIO
;
}
else
return
0
;
printk
(
KERN_WARNING
"macsonic: MAC address in PROM seems "
"to be invalid, trying CAM
\n
"
);
}
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
)
...
...
@@ -402,8 +406,7 @@ static int __devinit mac_onboard_sonic_probe(struct net_device *dev)
SONIC_WRITE
(
SONIC_ISR
,
0x7fff
);
/* Now look for the MAC address. */
if
(
mac_onboard_sonic_ethernet_addr
(
dev
)
!=
0
)
return
-
ENODEV
;
mac_onboard_sonic_ethernet_addr
(
dev
);
/* Shared init code */
return
macsonic_init
(
dev
);
...
...
drivers/net/qlge/qlge_main.c
View file @
d0e1e88d
...
...
@@ -4145,6 +4145,8 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
goto
err_out
;
}
/* Set PCIe reset type for EEH to fundamental. */
pdev
->
needs_freset
=
1
;
pci_save_state
(
pdev
);
qdev
->
reg_base
=
ioremap_nocache
(
pci_resource_start
(
pdev
,
1
),
...
...
drivers/net/qlge/qlge_mpi.c
View file @
d0e1e88d
...
...
@@ -483,7 +483,7 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp)
/* Wait for the interrupt to come in. */
status
=
ql_wait_mbx_cmd_cmplt
(
qdev
);
if
(
status
)
goto
end
;
continue
;
/* Process the event. If it's an AEN, it
* will be handled in-line or a worker
...
...
drivers/net/wireless/ipw2x00/ipw2100.c
View file @
d0e1e88d
...
...
@@ -6325,10 +6325,8 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
fail:
if
(
dev
)
{
if
(
registered
)
{
unregister_ieee80211
(
priv
->
ieee
);
if
(
registered
)
unregister_netdev
(
dev
);
}
ipw2100_hw_stop_adapter
(
priv
);
...
...
@@ -6385,7 +6383,6 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
/* Unregister the device first - this results in close()
* being called if the device is open. If we free storage
* first, then close() will crash. */
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
dev
);
/* ipw2100_down will ensure that there is no more pending work
...
...
drivers/net/wireless/ipw2x00/ipw2200.c
View file @
d0e1e88d
...
...
@@ -11822,7 +11822,6 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
if
(
err
)
{
IPW_ERROR
(
"Failed to register promiscuous network "
"device (error %d).
\n
"
,
err
);
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
priv
->
net_dev
);
goto
out_remove_sysfs
;
}
...
...
@@ -11873,7 +11872,6 @@ static void __devexit ipw_pci_remove(struct pci_dev *pdev)
mutex_unlock
(
&
priv
->
mutex
);
unregister_ieee80211
(
priv
->
ieee
);
unregister_netdev
(
priv
->
net_dev
);
if
(
priv
->
rxq
)
{
...
...
drivers/net/wireless/ipw2x00/libipw.h
View file @
d0e1e88d
...
...
@@ -1020,7 +1020,6 @@ static inline int libipw_is_cck_rate(u8 rate)
/* ieee80211.c */
extern
void
free_ieee80211
(
struct
net_device
*
dev
,
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
void
libipw_networks_age
(
struct
libipw_device
*
ieee
,
...
...
drivers/net/wireless/ipw2x00/libipw_module.c
View file @
d0e1e88d
...
...
@@ -235,19 +235,16 @@ void free_ieee80211(struct net_device *dev, int monitor)
libipw_networks_free
(
ieee
);
/* 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
);
}
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
static
int
debug
=
0
;
...
...
@@ -333,4 +330,3 @@ module_init(libipw_init);
EXPORT_SYMBOL
(
alloc_ieee80211
);
EXPORT_SYMBOL
(
free_ieee80211
);
EXPORT_SYMBOL
(
unregister_ieee80211
);
drivers/net/wireless/rt2x00/rt2x00dev.c
View file @
d0e1e88d
...
...
@@ -815,6 +815,8 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
mutex_init
(
&
rt2x00dev
->
csr_mutex
);
set_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
/*
* Make room for rt2x00_intf inside the per-interface
* structure ieee80211_vif.
...
...
@@ -871,8 +873,6 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
rt2x00leds_register
(
rt2x00dev
);
rt2x00debug_register
(
rt2x00dev
);
set_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
return
0
;
exit:
...
...
drivers/net/wireless/rt2x00/rt2x00link.c
View file @
d0e1e88d
...
...
@@ -362,8 +362,9 @@ void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev)
rt2x00link_reset_tuner
(
rt2x00dev
,
false
);
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_stop_tuner
(
struct
rt2x00_dev
*
rt2x00dev
)
...
...
@@ -469,8 +470,10 @@ static void rt2x00link_tuner(struct work_struct *work)
* Increase tuner counter, and reschedule the next link tuner run.
*/
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
)
...
...
drivers/net/wireless/rt2x00/rt2x00usb.c
View file @
d0e1e88d
...
...
@@ -47,6 +47,8 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
(
requesttype
==
USB_VENDOR_REQUEST_IN
)
?
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
++
)
{
status
=
usb_control_msg
(
usb_dev
,
pipe
,
request
,
requesttype
,
...
...
@@ -60,8 +62,10 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
* -ENODEV: Device has disappeared, no point continuing.
* All other errors: Try again.
*/
else
if
(
status
==
-
ENODEV
)
else
if
(
status
==
-
ENODEV
)
{
clear_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
);
break
;
}
}
ERROR
(
rt2x00dev
,
...
...
@@ -161,6 +165,9 @@ int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
{
unsigned
int
i
;
if
(
!
test_bit
(
DEVICE_STATE_PRESENT
,
&
rt2x00dev
->
flags
))
return
-
ENODEV
;
for
(
i
=
0
;
i
<
REGISTER_BUSY_COUNT
;
i
++
)
{
rt2x00usb_register_read_lock
(
rt2x00dev
,
offset
,
reg
);
if
(
!
rt2x00_get_field32
(
*
reg
,
field
))
...
...
drivers/net/wireless/rtl818x/rtl8187_leds.c
View file @
d0e1e88d
...
...
@@ -210,10 +210,10 @@ void rtl8187_leds_exit(struct ieee80211_hw *dev)
/* turn the LED off before exiting */
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_tx
);
cancel_delayed_work_sync
(
&
priv
->
led_off
);
cancel_delayed_work_sync
(
&
priv
->
led_on
);
}
#endif
/* def CONFIG_RTL8187_LED */
net/can/bcm.c
View file @
d0e1e88d
...
...
@@ -132,23 +132,27 @@ static inline struct bcm_sock *bcm_sk(const struct sock *sk)
/*
* procfs functions
*/
static
char
*
bcm_proc_getifname
(
int
ifindex
)
static
char
*
bcm_proc_getifname
(
char
*
result
,
int
ifindex
)
{
struct
net_device
*
dev
;
if
(
!
ifindex
)
return
"any"
;
/* no usage counting */
read_lock
(
&
dev_base_lock
);
dev
=
__dev_get_by_index
(
&
init_net
,
ifindex
);
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
)
{
char
ifname
[
IFNAMSIZ
];
struct
sock
*
sk
=
(
struct
sock
*
)
m
->
private
;
struct
bcm_sock
*
bo
=
bcm_sk
(
sk
);
struct
bcm_op
*
op
;
...
...
@@ -157,7 +161,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
seq_printf
(
m
,
" / sk %p"
,
sk
);
seq_printf
(
m
,
" / bo %p"
,
bo
);
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
"
);
list_for_each_entry
(
op
,
&
bo
->
rx_ops
,
list
)
{
...
...
@@ -169,7 +173,7 @@ static int bcm_proc_show(struct seq_file *m, void *v)
continue
;
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
,
(
op
->
flags
&
RX_CHECK_DLC
)
?
'd'
:
' '
);
if
(
op
->
kt_ival1
.
tv64
)
...
...
@@ -194,7 +198,8 @@ static int bcm_proc_show(struct seq_file *m, void *v)
list_for_each_entry
(
op
,
&
bo
->
tx_ops
,
list
)
{
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
);
if
(
op
->
kt_ival1
.
tv64
)
...
...
net/ipv4/ipip.c
View file @
d0e1e88d
...
...
@@ -446,25 +446,27 @@ static netdev_tx_t ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
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
);
else
mtu
=
skb_dst
(
skb
)
?
dst_mtu
(
skb_dst
(
skb
))
:
dev
->
mtu
;
if
(
mtu
<
68
)
{
stats
->
collisions
++
;
ip_rt_put
(
rt
);
goto
tx_error
;
}
if
(
skb_dst
(
skb
))
skb_dst
(
skb
)
->
ops
->
update_pmtu
(
skb_dst
(
skb
),
mtu
);
if
(
mtu
<
68
)
{
stats
->
collisions
++
;
ip_rt_put
(
rt
);
goto
tx_error
;
}
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
))
{
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_FRAG_NEEDED
,
htonl
(
mtu
));
ip_rt_put
(
rt
);
goto
tx_error
;
if
((
old_iph
->
frag_off
&
htons
(
IP_DF
))
&&
mtu
<
ntohs
(
old_iph
->
tot_len
))
{
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_FRAG_NEEDED
,
htonl
(
mtu
));
ip_rt_put
(
rt
);
goto
tx_error
;
}
}
if
(
tunnel
->
err_count
>
0
)
{
...
...
net/netfilter/xt_connlimit.c
View file @
d0e1e88d
...
...
@@ -103,7 +103,7 @@ static int count_them(struct xt_connlimit_data *data,
const
struct
nf_conntrack_tuple
*
tuple
,
const
union
nf_inet_addr
*
addr
,
const
union
nf_inet_addr
*
mask
,
const
struct
xt_match
*
match
)
u_int8_t
family
)
{
const
struct
nf_conntrack_tuple_hash
*
found
;
struct
xt_connlimit_conn
*
conn
;
...
...
@@ -113,8 +113,7 @@ static int count_them(struct xt_connlimit_data *data,
bool
addit
=
true
;
int
matches
=
0
;
if
(
match
->
family
==
NFPROTO_IPV6
)
if
(
family
==
NFPROTO_IPV6
)
hash
=
&
data
->
iphash
[
connlimit_iphash6
(
addr
,
mask
)];
else
hash
=
&
data
->
iphash
[
connlimit_iphash
(
addr
->
ip
&
mask
->
ip
)];
...
...
@@ -157,8 +156,7 @@ static int count_them(struct xt_connlimit_data *data,
continue
;
}
if
(
same_source_net
(
addr
,
mask
,
&
conn
->
tuple
.
src
.
u3
,
match
->
family
))
if
(
same_source_net
(
addr
,
mask
,
&
conn
->
tuple
.
src
.
u3
,
family
))
/* same source network -> be counted! */
++
matches
;
nf_ct_put
(
found_ct
);
...
...
@@ -207,7 +205,7 @@ connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
spin_lock_bh
(
&
info
->
data
->
lock
);
connections
=
count_them
(
info
->
data
,
tuple_ptr
,
&
addr
,
&
info
->
mask
,
par
->
match
);
&
info
->
mask
,
par
->
family
);
spin_unlock_bh
(
&
info
->
data
->
lock
);
if
(
connections
<
0
)
{
...
...
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