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
Kirill Smelkov
linux
Commits
00ab2f3d
Commit
00ab2f3d
authored
Feb 17, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
parents
4cf808eb
f5e2a7b2
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
189 additions
and
151 deletions
+189
-151
drivers/net/Kconfig
drivers/net/Kconfig
+2
-3
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+1
-0
drivers/net/sis190.c
drivers/net/sis190.c
+2
-2
drivers/net/skge.c
drivers/net/skge.c
+9
-1
drivers/net/sky2.c
drivers/net/sky2.c
+30
-1
drivers/net/tokenring/smctr.h
drivers/net/tokenring/smctr.h
+1
-1
drivers/net/wireless/atmel.c
drivers/net/wireless/atmel.c
+59
-39
drivers/net/wireless/wavelan_cs.c
drivers/net/wireless/wavelan_cs.c
+4
-12
drivers/s390/net/lcs.c
drivers/s390/net/lcs.c
+17
-14
drivers/s390/net/lcs.h
drivers/s390/net/lcs.h
+1
-1
drivers/s390/net/qeth.h
drivers/s390/net/qeth.h
+47
-65
drivers/s390/net/qeth_eddp.c
drivers/s390/net/qeth_eddp.c
+9
-2
drivers/s390/net/qeth_main.c
drivers/s390/net/qeth_main.c
+7
-10
No files found.
drivers/net/Kconfig
View file @
00ab2f3d
...
...
@@ -2020,8 +2020,8 @@ config SIS190
will be called sis190. This is recommended.
config SKGE
tristate "New SysKonnect GigaEthernet support
(EXPERIMENTAL)
"
depends on PCI
&& EXPERIMENTAL
tristate "New SysKonnect GigaEthernet support"
depends on PCI
select CRC32
---help---
This driver support the Marvell Yukon or SysKonnect SK-98xx/SK-95xx
...
...
@@ -2082,7 +2082,6 @@ config SK98LIN
- Allied Telesyn AT-2971SX Gigabit Ethernet Adapter
- Allied Telesyn AT-2971T Gigabit Ethernet Adapter
- Belkin Gigabit Desktop Card 10/100/1000Base-T Adapter, Copper RJ-45
- DGE-530T Gigabit Ethernet Adapter
- EG1032 v2 Instant Gigabit Network Adapter
- EG1064 v2 Instant Gigabit Network Adapter
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Abit)
...
...
drivers/net/bonding/bond_main.c
View file @
00ab2f3d
...
...
@@ -1581,6 +1581,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
printk
(
KERN_INFO
DRV_NAME
": %s: %s not enslaved
\n
"
,
bond_dev
->
name
,
slave_dev
->
name
);
write_unlock_bh
(
&
bond
->
lock
);
return
-
EINVAL
;
}
...
...
drivers/net/sis190.c
View file @
00ab2f3d
...
...
@@ -1791,6 +1791,8 @@ static int __devinit sis190_init_one(struct pci_dev *pdev,
goto
out
;
}
pci_set_drvdata
(
pdev
,
dev
);
tp
=
netdev_priv
(
dev
);
ioaddr
=
tp
->
mmio_addr
;
...
...
@@ -1827,8 +1829,6 @@ static int __devinit sis190_init_one(struct pci_dev *pdev,
if
(
rc
<
0
)
goto
err_remove_mii
;
pci_set_drvdata
(
pdev
,
dev
);
net_probe
(
tp
,
KERN_INFO
"%s: %s at %p (IRQ: %d), "
"%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x
\n
"
,
pci_name
(
pdev
),
sis_chip_info
[
ent
->
driver_data
].
name
,
...
...
drivers/net/skge.c
View file @
00ab2f3d
...
...
@@ -1697,6 +1697,7 @@ static void yukon_mac_init(struct skge_hw *hw, int port)
skge_write32
(
hw
,
SK_REG
(
port
,
GPHY_CTRL
),
reg
|
GPC_RST_SET
);
skge_write32
(
hw
,
SK_REG
(
port
,
GPHY_CTRL
),
reg
|
GPC_RST_CLR
);
skge_write32
(
hw
,
SK_REG
(
port
,
GMAC_CTRL
),
GMC_PAUSE_ON
|
GMC_RST_CLR
);
if
(
skge
->
autoneg
==
AUTONEG_DISABLE
)
{
reg
=
GM_GPCR_AU_ALL_DIS
;
gma_write16
(
hw
,
port
,
GM_GP_CTRL
,
...
...
@@ -1704,16 +1705,23 @@ static void yukon_mac_init(struct skge_hw *hw, int port)
switch
(
skge
->
speed
)
{
case
SPEED_1000
:
reg
&=
~
GM_GPCR_SPEED_100
;
reg
|=
GM_GPCR_SPEED_1000
;
/* fallthru */
break
;
case
SPEED_100
:
reg
&=
~
GM_GPCR_SPEED_1000
;
reg
|=
GM_GPCR_SPEED_100
;
break
;
case
SPEED_10
:
reg
&=
~
(
GM_GPCR_SPEED_1000
|
GM_GPCR_SPEED_100
);
break
;
}
if
(
skge
->
duplex
==
DUPLEX_FULL
)
reg
|=
GM_GPCR_DUP_FULL
;
}
else
reg
=
GM_GPCR_SPEED_1000
|
GM_GPCR_SPEED_100
|
GM_GPCR_DUP_FULL
;
switch
(
skge
->
flow_control
)
{
case
FLOW_MODE_NONE
:
skge_write32
(
hw
,
SK_REG
(
port
,
GMAC_CTRL
),
GMC_PAUSE_OFF
);
...
...
drivers/net/sky2.c
View file @
00ab2f3d
...
...
@@ -520,10 +520,16 @@ static void sky2_mac_init(struct sky2_hw *hw, unsigned port)
switch
(
sky2
->
speed
)
{
case
SPEED_1000
:
reg
&=
~
GM_GPCR_SPEED_100
;
reg
|=
GM_GPCR_SPEED_1000
;
/* fallthru */
break
;
case
SPEED_100
:
reg
&=
~
GM_GPCR_SPEED_1000
;
reg
|=
GM_GPCR_SPEED_100
;
break
;
case
SPEED_10
:
reg
&=
~
(
GM_GPCR_SPEED_1000
|
GM_GPCR_SPEED_100
);
break
;
}
if
(
sky2
->
duplex
==
DUPLEX_FULL
)
...
...
@@ -1446,6 +1452,29 @@ static void sky2_link_up(struct sky2_port *sky2)
sky2_write8
(
hw
,
SK_REG
(
port
,
GMAC_IRQ_MSK
),
GMAC_DEF_MSK
);
reg
=
gma_read16
(
hw
,
port
,
GM_GP_CTRL
);
if
(
sky2
->
autoneg
==
AUTONEG_DISABLE
)
{
reg
|=
GM_GPCR_AU_ALL_DIS
;
/* Is write/read necessary? Copied from sky2_mac_init */
gma_write16
(
hw
,
port
,
GM_GP_CTRL
,
reg
);
gma_read16
(
hw
,
port
,
GM_GP_CTRL
);
switch
(
sky2
->
speed
)
{
case
SPEED_1000
:
reg
&=
~
GM_GPCR_SPEED_100
;
reg
|=
GM_GPCR_SPEED_1000
;
break
;
case
SPEED_100
:
reg
&=
~
GM_GPCR_SPEED_1000
;
reg
|=
GM_GPCR_SPEED_100
;
break
;
case
SPEED_10
:
reg
&=
~
(
GM_GPCR_SPEED_1000
|
GM_GPCR_SPEED_100
);
break
;
}
}
else
reg
&=
~
GM_GPCR_AU_ALL_DIS
;
if
(
sky2
->
duplex
==
DUPLEX_FULL
||
sky2
->
autoneg
==
AUTONEG_ENABLE
)
reg
|=
GM_GPCR_DUP_FULL
;
...
...
drivers/net/tokenring/smctr.h
View file @
00ab2f3d
...
...
@@ -1042,7 +1042,7 @@ typedef struct net_local {
__u16
functional_address
[
2
];
__u16
bitwise_group_address
[
2
];
__u8
*
ptr_ucode
;
const
__u8
*
ptr_ucode
;
__u8
cleanup
;
...
...
drivers/net/wireless/atmel.c
View file @
00ab2f3d
...
...
@@ -1872,7 +1872,7 @@ static int atmel_set_encodeext(struct net_device *dev,
struct
atmel_private
*
priv
=
netdev_priv
(
dev
);
struct
iw_point
*
encoding
=
&
wrqu
->
encoding
;
struct
iw_encode_ext
*
ext
=
(
struct
iw_encode_ext
*
)
extra
;
int
idx
,
key_len
;
int
idx
,
key_len
,
alg
=
ext
->
alg
,
set_key
=
1
;
/* Determine and validate the key index */
idx
=
encoding
->
flags
&
IW_ENCODE_INDEX
;
...
...
@@ -1883,19 +1883,21 @@ static int atmel_set_encodeext(struct net_device *dev,
}
else
idx
=
priv
->
default_key
;
if
((
encoding
->
flags
&
IW_ENCODE_DISABLED
)
||
ext
->
alg
==
IW_ENCODE_ALG_NONE
)
{
priv
->
wep_is_on
=
0
;
priv
->
encryption_level
=
0
;
priv
->
pairwise_cipher_suite
=
CIPHER_SUITE_NONE
;
}
if
(
encoding
->
flags
&
IW_ENCODE_DISABLED
)
alg
=
IW_ENCODE_ALG_NONE
;
if
(
ext
->
ext_flags
&
IW_ENCODE_EXT_SET_TX_KEY
)
if
(
ext
->
ext_flags
&
IW_ENCODE_EXT_SET_TX_KEY
)
{
priv
->
default_key
=
idx
;
set_key
=
ext
->
key_len
>
0
?
1
:
0
;
}
/* Set the requested key */
switch
(
ext
->
alg
)
{
if
(
set_key
)
{
/* Set the requested key first */
switch
(
alg
)
{
case
IW_ENCODE_ALG_NONE
:
priv
->
wep_is_on
=
0
;
priv
->
encryption_level
=
0
;
priv
->
pairwise_cipher_suite
=
CIPHER_SUITE_NONE
;
break
;
case
IW_ENCODE_ALG_WEP
:
if
(
ext
->
key_len
>
5
)
{
...
...
@@ -1917,6 +1919,7 @@ static int atmel_set_encodeext(struct net_device *dev,
default:
return
-
EINVAL
;
}
}
return
-
EINPROGRESS
;
}
...
...
@@ -3061,17 +3064,26 @@ static void authenticate(struct atmel_private *priv, u16 frame_len)
}
if
(
status
==
C80211_MGMT_SC_Success
&&
priv
->
wep_is_on
)
{
int
should_associate
=
0
;
/* WEP */
if
(
trans_seq_no
!=
priv
->
ExpectedAuthentTransactionSeqNum
)
return
;
if
(
system
==
C80211_MGMT_AAN_OPENSYSTEM
)
{
if
(
trans_seq_no
==
0x0002
)
{
should_associate
=
1
;
}
}
else
if
(
system
==
C80211_MGMT_AAN_SHAREDKEY
)
{
if
(
trans_seq_no
==
0x0002
&&
auth
->
el_id
==
C80211_MGMT_ElementID_ChallengeText
)
{
send_authentication_request
(
priv
,
system
,
auth
->
chall_text
,
auth
->
chall_text_len
);
return
;
}
else
if
(
trans_seq_no
==
0x0004
)
{
should_associate
=
1
;
}
}
if
(
trans_seq_no
==
0x0004
)
{
if
(
should_associate
)
{
if
(
priv
->
station_was_associated
)
{
atmel_enter_state
(
priv
,
STATION_STATE_REASSOCIATING
);
send_association_request
(
priv
,
1
);
...
...
@@ -3084,11 +3096,13 @@ static void authenticate(struct atmel_private *priv, u16 frame_len)
}
}
if
(
status
==
C80211_MGMT_SC_AuthAlgNotSupported
)
{
if
(
status
==
WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG
)
{
/* Do opensystem first, then try sharedkey */
if
(
system
==
C80211_MGMT_AAN_OPENSYSTEM
)
{
if
(
system
==
WLAN_AUTH_OPEN
)
{
priv
->
CurrentAuthentTransactionSeqNum
=
0x001
;
send_authentication_request
(
priv
,
C80211_MGMT_AAN_SHAREDKEY
,
NULL
,
0
);
priv
->
exclude_unencrypted
=
1
;
send_authentication_request
(
priv
,
WLAN_AUTH_SHARED_KEY
,
NULL
,
0
);
return
;
}
else
if
(
priv
->
connect_to_any_BSS
)
{
int
bss_index
;
...
...
@@ -3439,10 +3453,13 @@ static void atmel_management_timer(u_long a)
priv
->
AuthenticationRequestRetryCnt
=
0
;
restart_search
(
priv
);
}
else
{
int
auth
=
C80211_MGMT_AAN_OPENSYSTEM
;
priv
->
AuthenticationRequestRetryCnt
++
;
priv
->
CurrentAuthentTransactionSeqNum
=
0x0001
;
mod_timer
(
&
priv
->
management_timer
,
jiffies
+
MGMT_JIFFIES
);
send_authentication_request
(
priv
,
C80211_MGMT_AAN_OPENSYSTEM
,
NULL
,
0
);
if
(
priv
->
wep_is_on
&&
priv
->
exclude_unencrypted
)
auth
=
C80211_MGMT_AAN_SHAREDKEY
;
send_authentication_request
(
priv
,
auth
,
NULL
,
0
);
}
break
;
...
...
@@ -3541,12 +3558,15 @@ static void atmel_command_irq(struct atmel_private *priv)
priv
->
station_was_associated
=
priv
->
station_is_associated
;
atmel_enter_state
(
priv
,
STATION_STATE_READY
);
}
else
{
int
auth
=
C80211_MGMT_AAN_OPENSYSTEM
;
priv
->
AuthenticationRequestRetryCnt
=
0
;
atmel_enter_state
(
priv
,
STATION_STATE_AUTHENTICATING
);
mod_timer
(
&
priv
->
management_timer
,
jiffies
+
MGMT_JIFFIES
);
priv
->
CurrentAuthentTransactionSeqNum
=
0x0001
;
send_authentication_request
(
priv
,
C80211_MGMT_AAN_SHAREDKEY
,
NULL
,
0
);
if
(
priv
->
wep_is_on
&&
priv
->
exclude_unencrypted
)
auth
=
C80211_MGMT_AAN_SHAREDKEY
;
send_authentication_request
(
priv
,
auth
,
NULL
,
0
);
}
return
;
}
...
...
drivers/net/wireless/wavelan_cs.c
View file @
00ab2f3d
...
...
@@ -950,16 +950,8 @@ wv_82593_cmd(struct net_device * dev,
static
inline
int
wv_diag
(
struct
net_device
*
dev
)
{
int
ret
=
FALSE
;
if
(
wv_82593_cmd
(
dev
,
"wv_diag(): diagnose"
,
OP0_DIAGNOSE
,
SR0_DIAGNOSE_PASSED
))
ret
=
TRUE
;
#ifdef DEBUG_CONFIG_ERRORS
printk
(
KERN_INFO
"wavelan_cs: i82593 Self Test failed!
\n
"
);
#endif
return
(
ret
);
return
(
wv_82593_cmd
(
dev
,
"wv_diag(): diagnose"
,
OP0_DIAGNOSE
,
SR0_DIAGNOSE_PASSED
));
}
/* wv_diag */
/*------------------------------------------------------------------*/
...
...
@@ -3604,8 +3596,8 @@ wv_82593_config(struct net_device * dev)
cfblk
.
lin_prio
=
0
;
/* conform to 802.3 backoff algoritm */
cfblk
.
exp_prio
=
5
;
/* conform to 802.3 backoff algoritm */
cfblk
.
bof_met
=
1
;
/* conform to 802.3 backoff algoritm */
cfblk
.
ifrm_spc
=
0x20
;
/* 32 bit times interframe spacing */
cfblk
.
slottim_low
=
0x20
;
/* 32 bit times slot time */
cfblk
.
ifrm_spc
=
0x20
>>
4
;
/* 32 bit times interframe spacing */
cfblk
.
slottim_low
=
0x20
>>
5
;
/* 32 bit times slot time */
cfblk
.
slottim_hi
=
0x0
;
cfblk
.
max_retr
=
15
;
cfblk
.
prmisc
=
((
lp
->
promiscuous
)
?
TRUE
:
FALSE
);
/* Promiscuous mode */
...
...
drivers/s390/net/lcs.c
View file @
00ab2f3d
...
...
@@ -98,9 +98,9 @@ lcs_register_debug_facility(void)
return
-
ENOMEM
;
}
debug_register_view
(
lcs_dbf_setup
,
&
debug_hex_ascii_view
);
debug_set_level
(
lcs_dbf_setup
,
4
);
debug_set_level
(
lcs_dbf_setup
,
2
);
debug_register_view
(
lcs_dbf_trace
,
&
debug_hex_ascii_view
);
debug_set_level
(
lcs_dbf_trace
,
4
);
debug_set_level
(
lcs_dbf_trace
,
2
);
return
0
;
}
...
...
@@ -1292,9 +1292,8 @@ lcs_set_multicast_list(struct net_device *dev)
LCS_DBF_TEXT
(
4
,
trace
,
"setmulti"
);
card
=
(
struct
lcs_card
*
)
dev
->
priv
;
if
(
!
lcs_set_thread_start_bit
(
card
,
LCS_SET_MC_THREAD
))
{
if
(
!
lcs_set_thread_start_bit
(
card
,
LCS_SET_MC_THREAD
))
schedule_work
(
&
card
->
kernel_thread_starter
);
}
}
#endif
/* CONFIG_IP_MULTICAST */
...
...
@@ -1459,6 +1458,8 @@ lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
lcs_release_buffer
(
channel
,
buffer
);
card
=
(
struct
lcs_card
*
)
((
char
*
)
channel
-
offsetof
(
struct
lcs_card
,
write
));
if
(
netif_queue_stopped
(
card
->
dev
))
netif_wake_queue
(
card
->
dev
);
spin_lock
(
&
card
->
lock
);
card
->
tx_emitted
--
;
if
(
card
->
tx_emitted
<=
0
&&
card
->
tx_buffer
!=
NULL
)
...
...
@@ -1478,6 +1479,7 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
struct
net_device
*
dev
)
{
struct
lcs_header
*
header
;
int
rc
=
0
;
LCS_DBF_TEXT
(
5
,
trace
,
"hardxmit"
);
if
(
skb
==
NULL
)
{
...
...
@@ -1492,10 +1494,8 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
card
->
stats
.
tx_carrier_errors
++
;
return
0
;
}
if
(
netif_queue_stopped
(
dev
)
)
{
card
->
stats
.
tx_dropped
++
;
return
-
EBUSY
;
}
netif_stop_queue
(
card
->
dev
);
spin_lock
(
&
card
->
lock
);
if
(
card
->
tx_buffer
!=
NULL
&&
card
->
tx_buffer
->
count
+
sizeof
(
struct
lcs_header
)
+
skb
->
len
+
sizeof
(
u16
)
>
LCS_IOBUFFERSIZE
)
...
...
@@ -1506,7 +1506,8 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
card
->
tx_buffer
=
lcs_get_buffer
(
&
card
->
write
);
if
(
card
->
tx_buffer
==
NULL
)
{
card
->
stats
.
tx_dropped
++
;
return
-
EBUSY
;
rc
=
-
EBUSY
;
goto
out
;
}
card
->
tx_buffer
->
callback
=
lcs_txbuffer_cb
;
card
->
tx_buffer
->
count
=
0
;
...
...
@@ -1518,13 +1519,18 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
header
->
type
=
card
->
lan_type
;
header
->
slot
=
card
->
portno
;
memcpy
(
header
+
1
,
skb
->
data
,
skb
->
len
);
spin_unlock
(
&
card
->
lock
);
card
->
stats
.
tx_bytes
+=
skb
->
len
;
card
->
stats
.
tx_packets
++
;
dev_kfree_skb
(
skb
);
if
(
card
->
tx_emitted
<=
0
)
netif_wake_queue
(
card
->
dev
);
spin_lock
(
&
card
->
lock
);
if
(
card
->
tx_emitted
<=
0
&&
card
->
tx_buffer
!=
NULL
)
/* If this is the first tx buffer emit it immediately. */
__lcs_emit_txbuffer
(
card
);
return
0
;
out:
spin_unlock
(
&
card
->
lock
);
return
rc
;
}
static
int
...
...
@@ -1535,9 +1541,7 @@ lcs_start_xmit(struct sk_buff *skb, struct net_device *dev)
LCS_DBF_TEXT
(
5
,
trace
,
"pktxmit"
);
card
=
(
struct
lcs_card
*
)
dev
->
priv
;
spin_lock
(
&
card
->
lock
);
rc
=
__lcs_start_xmit
(
card
,
skb
,
dev
);
spin_unlock
(
&
card
->
lock
);
return
rc
;
}
...
...
@@ -2319,7 +2323,6 @@ __init lcs_init_module(void)
PRINT_ERR
(
"Initialization failed
\n
"
);
return
rc
;
}
return
0
;
}
...
...
drivers/s390/net/lcs.h
View file @
00ab2f3d
...
...
@@ -95,7 +95,7 @@ do { \
*/
#define LCS_ILLEGAL_OFFSET 0xffff
#define LCS_IOBUFFERSIZE 0x5000
#define LCS_NUM_BUFFS
8
/* needs to be power of 2 */
#define LCS_NUM_BUFFS
32
/* needs to be power of 2 */
#define LCS_MAC_LENGTH 6
#define LCS_INVALID_PORT_NO -1
#define LCS_LANCMD_TIMEOUT_DEFAULT 5
...
...
drivers/s390/net/qeth.h
View file @
00ab2f3d
...
...
@@ -1075,16 +1075,6 @@ qeth_get_qdio_q_format(struct qeth_card *card)
}
}
static
inline
int
qeth_isdigit
(
char
*
buf
)
{
while
(
*
buf
)
{
if
(
!
isdigit
(
*
buf
++
))
return
0
;
}
return
1
;
}
static
inline
int
qeth_isxdigit
(
char
*
buf
)
{
...
...
@@ -1104,33 +1094,17 @@ qeth_ipaddr4_to_string(const __u8 *addr, char *buf)
static
inline
int
qeth_string_to_ipaddr4
(
const
char
*
buf
,
__u8
*
addr
)
{
const
char
*
start
,
*
end
;
char
abuf
[
4
];
char
*
tmp
;
int
len
;
int
i
;
start
=
buf
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
i
==
3
)
{
end
=
strchr
(
start
,
0xa
);
if
(
end
)
len
=
end
-
start
;
else
len
=
strlen
(
start
);
}
else
{
end
=
strchr
(
start
,
'.'
);
len
=
end
-
start
;
}
if
((
len
<=
0
)
||
(
len
>
3
))
int
count
=
0
,
rc
=
0
;
int
in
[
4
];
rc
=
sscanf
(
buf
,
"%d.%d.%d.%d%n"
,
&
in
[
0
],
&
in
[
1
],
&
in
[
2
],
&
in
[
3
],
&
count
);
if
(
rc
!=
4
||
count
)
return
-
EINVAL
;
memset
(
abuf
,
0
,
4
);
strncpy
(
abuf
,
start
,
len
);
if
(
!
qeth_isdigit
(
abuf
))
for
(
count
=
0
;
count
<
4
;
count
++
)
{
if
(
in
[
count
]
>
255
)
return
-
EINVAL
;
addr
[
i
]
=
simple_strtoul
(
abuf
,
&
tmp
,
10
);
start
=
end
+
1
;
addr
[
count
]
=
in
[
count
];
}
return
0
;
}
...
...
@@ -1149,36 +1123,44 @@ qeth_ipaddr6_to_string(const __u8 *addr, char *buf)
static
inline
int
qeth_string_to_ipaddr6
(
const
char
*
buf
,
__u8
*
addr
)
{
const
char
*
start
,
*
end
;
u16
*
tmp_addr
;
char
abuf
[
5
];
char
*
tmp
;
int
len
;
int
i
;
tmp_addr
=
(
u16
*
)
addr
;
start
=
buf
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
if
(
i
==
7
)
{
end
=
strchr
(
start
,
0xa
);
if
(
end
)
len
=
end
-
start
;
else
len
=
strlen
(
start
);
}
else
{
end
=
strchr
(
start
,
':'
);
len
=
end
-
start
;
char
*
end
,
*
start
;
__u16
*
in
;
char
num
[
5
];
int
num2
,
cnt
,
out
,
found
,
save_cnt
;
unsigned
short
in_tmp
[
8
]
=
{
0
,
};
cnt
=
out
=
found
=
save_cnt
=
num2
=
0
;
end
=
start
=
(
char
*
)
buf
;
in
=
(
__u16
*
)
addr
;
memset
(
in
,
0
,
16
);
while
(
end
)
{
end
=
strchr
(
end
,
':'
);
if
(
end
==
NULL
)
{
end
=
(
char
*
)
buf
+
(
strlen
(
buf
));
out
=
1
;
}
if
((
len
<=
0
)
||
(
len
>
4
))
if
((
end
-
start
))
{
memset
(
num
,
0
,
5
);
memcpy
(
num
,
start
,
end
-
start
);
if
(
!
qeth_isxdigit
(
num
))
return
-
EINVAL
;
memset
(
abuf
,
0
,
5
);
strncpy
(
abuf
,
start
,
len
);
if
(
!
qeth_isxdigit
(
abuf
))
sscanf
(
start
,
"%x"
,
&
num2
);
if
(
found
)
in_tmp
[
save_cnt
++
]
=
num2
;
else
in
[
cnt
++
]
=
num2
;
if
(
out
)
break
;
}
else
{
if
(
found
)
return
-
EINVAL
;
tmp_addr
[
i
]
=
simple_strtoul
(
abuf
,
&
tmp
,
16
);
start
=
end
+
1
;
found
=
1
;
}
start
=
++
end
;
}
cnt
=
7
;
while
(
save_cnt
)
in
[
cnt
--
]
=
in_tmp
[
--
save_cnt
];
return
0
;
}
...
...
drivers/s390/net/qeth_eddp.c
View file @
00ab2f3d
...
...
@@ -59,7 +59,6 @@ qeth_eddp_free_context(struct qeth_eddp_context *ctx)
for
(
i
=
0
;
i
<
ctx
->
num_pages
;
++
i
)
free_page
((
unsigned
long
)
ctx
->
pages
[
i
]);
kfree
(
ctx
->
pages
);
if
(
ctx
->
elements
!=
NULL
)
kfree
(
ctx
->
elements
);
kfree
(
ctx
);
}
...
...
@@ -413,6 +412,13 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
QETH_DBF_TEXT
(
trace
,
5
,
"eddpftcp"
);
eddp
->
skb_offset
=
sizeof
(
struct
qeth_hdr
)
+
eddp
->
nhl
+
eddp
->
thl
;
if
(
eddp
->
qh
.
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
{
eddp
->
skb_offset
+=
sizeof
(
struct
ethhdr
);
#ifdef CONFIG_QETH_VLAN
if
(
eddp
->
mac
.
h_proto
==
__constant_htons
(
ETH_P_8021Q
))
eddp
->
skb_offset
+=
VLAN_HLEN
;
#endif
/* CONFIG_QETH_VLAN */
}
tcph
=
eddp
->
skb
->
h
.
th
;
while
(
eddp
->
skb_offset
<
eddp
->
skb
->
len
)
{
data_len
=
min
((
int
)
skb_shinfo
(
eddp
->
skb
)
->
tso_size
,
...
...
@@ -483,6 +489,7 @@ qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
return
-
ENOMEM
;
}
if
(
qhdr
->
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
{
skb
->
mac
.
raw
=
(
skb
->
data
)
+
sizeof
(
struct
qeth_hdr
);
memcpy
(
&
eddp
->
mac
,
eth_hdr
(
skb
),
ETH_HLEN
);
#ifdef CONFIG_QETH_VLAN
if
(
eddp
->
mac
.
h_proto
==
__constant_htons
(
ETH_P_8021Q
))
{
...
...
drivers/s390/net/qeth_main.c
View file @
00ab2f3d
...
...
@@ -516,6 +516,7 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode)
QETH_DBF_TEXT
(
setup
,
3
,
"setoffl"
);
QETH_DBF_HEX
(
setup
,
3
,
&
card
,
sizeof
(
void
*
));
if
(
card
->
dev
&&
netif_carrier_ok
(
card
->
dev
))
netif_carrier_off
(
card
->
dev
);
recover_flag
=
card
->
state
;
if
(
qeth_stop_card
(
card
,
recovery_mode
)
==
-
ERESTARTSYS
){
...
...
@@ -1679,6 +1680,7 @@ qeth_cmd_timeout(unsigned long data)
spin_unlock_irqrestore
(
&
reply
->
card
->
lock
,
flags
);
}
static
struct
qeth_ipa_cmd
*
qeth_check_ipa_data
(
struct
qeth_card
*
card
,
struct
qeth_cmd_buffer
*
iob
)
{
...
...
@@ -1699,6 +1701,7 @@ qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
QETH_CARD_IFNAME
(
card
),
card
->
info
.
chpid
);
card
->
lan_online
=
0
;
if
(
card
->
dev
&&
netif_carrier_ok
(
card
->
dev
))
netif_carrier_off
(
card
->
dev
);
return
NULL
;
case
IPA_CMD_STARTLAN
:
...
...
@@ -5562,7 +5565,7 @@ qeth_set_multicast_list(struct net_device *dev)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
return
;
QETH_DBF_TEXT
(
trace
,
3
,
"setmulti"
);
QETH_DBF_TEXT
(
trace
,
3
,
"setmulti"
);
qeth_delete_mc_addresses
(
card
);
if
(
card
->
options
.
layer2
)
{
qeth_layer2_add_multicast
(
card
);
...
...
@@ -5579,7 +5582,6 @@ qeth_set_multicast_list(struct net_device *dev)
return
;
if
(
qeth_set_thread_start_bit
(
card
,
QETH_SET_PROMISC_MODE_THREAD
)
==
0
)
schedule_work
(
&
card
->
kernel_thread_starter
);
}
static
int
...
...
@@ -7452,6 +7454,7 @@ qeth_softsetup_card(struct qeth_card *card)
card
->
lan_online
=
1
;
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
goto
out
;
qeth_set_large_send
(
card
,
card
->
options
.
large_send
);
if
(
card
->
options
.
layer2
)
{
card
->
dev
->
features
|=
NETIF_F_HW_VLAN_FILTER
|
...
...
@@ -7468,12 +7471,6 @@ qeth_softsetup_card(struct qeth_card *card)
#endif
goto
out
;
}
if
((
card
->
options
.
large_send
==
QETH_LARGE_SEND_EDDP
)
||
(
card
->
options
.
large_send
==
QETH_LARGE_SEND_TSO
))
card
->
dev
->
features
|=
NETIF_F_TSO
|
NETIF_F_SG
;
else
card
->
dev
->
features
&=
~
(
NETIF_F_TSO
|
NETIF_F_SG
);
if
((
rc
=
qeth_setadapter_parms
(
card
)))
QETH_DBF_TEXT_
(
setup
,
2
,
"2err%d"
,
rc
);
if
((
rc
=
qeth_start_ipassists
(
card
)))
...
...
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