Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
89f8185e
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 大约 4 年
通知
14
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
89f8185e
编写于
5月 29, 2006
作者:
J
Jeff Garzik
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into upstream
上级
e42d7be2
d9ec5ad2
变更
28
展开全部
隐藏空白更改
内联
并排
Showing
28 changed file
with
720 addition
and
662 deletion
+720
-662
MAINTAINERS
MAINTAINERS
+2
-2
arch/powerpc/kernel/prom_init.c
arch/powerpc/kernel/prom_init.c
+45
-3
arch/ppc/kernel/asm-offsets.c
arch/ppc/kernel/asm-offsets.c
+1
-1
arch/ppc/platforms/mpc8272ads_setup.c
arch/ppc/platforms/mpc8272ads_setup.c
+5
-5
arch/ppc/syslib/pq2_devices.c
arch/ppc/syslib/pq2_devices.c
+8
-8
arch/ppc/syslib/pq2_sys.c
arch/ppc/syslib/pq2_sys.c
+4
-4
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+9
-1
drivers/net/pcnet32.c
drivers/net/pcnet32.c
+0
-2
drivers/net/wireless/arlan-main.c
drivers/net/wireless/arlan-main.c
+2
-2
drivers/net/wireless/wavelan.c
drivers/net/wireless/wavelan.c
+1
-1
drivers/s390/net/ctcmain.c
drivers/s390/net/ctcmain.c
+13
-13
drivers/s390/net/ctctty.c
drivers/s390/net/ctctty.c
+5
-5
drivers/s390/net/cu3088.c
drivers/s390/net/cu3088.c
+5
-5
drivers/s390/net/iucv.c
drivers/s390/net/iucv.c
+18
-18
drivers/s390/net/iucv.h
drivers/s390/net/iucv.h
+311
-311
drivers/s390/net/lcs.c
drivers/s390/net/lcs.c
+173
-172
drivers/s390/net/lcs.h
drivers/s390/net/lcs.h
+9
-5
drivers/s390/net/netiucv.c
drivers/s390/net/netiucv.c
+18
-18
drivers/s390/net/qeth.h
drivers/s390/net/qeth.h
+9
-9
drivers/s390/net/qeth_eddp.c
drivers/s390/net/qeth_eddp.c
+9
-9
drivers/s390/net/qeth_fs.h
drivers/s390/net/qeth_fs.h
+1
-1
drivers/s390/net/qeth_main.c
drivers/s390/net/qeth_main.c
+55
-52
drivers/s390/net/qeth_mpc.h
drivers/s390/net/qeth_mpc.h
+2
-2
drivers/s390/net/qeth_proc.c
drivers/s390/net/qeth_proc.c
+4
-4
drivers/s390/net/qeth_sys.c
drivers/s390/net/qeth_sys.c
+3
-3
drivers/s390/net/qeth_tso.h
drivers/s390/net/qeth_tso.h
+2
-2
drivers/serial/cpm_uart/cpm_uart_core.c
drivers/serial/cpm_uart/cpm_uart_core.c
+5
-3
drivers/serial/cpm_uart/cpm_uart_cpm2.c
drivers/serial/cpm_uart/cpm_uart_cpm2.c
+1
-1
未找到文件。
MAINTAINERS
浏览文件 @
89f8185e
...
@@ -565,7 +565,7 @@ BROADBAND PROCESSOR ARCHITECTURE
...
@@ -565,7 +565,7 @@ BROADBAND PROCESSOR ARCHITECTURE
P: Arnd Bergmann
P: Arnd Bergmann
M: arnd@arndb.de
M: arnd@arndb.de
L: linuxppc-dev@ozlabs.org
L: linuxppc-dev@ozlabs.org
W: http://
linuxppc64.org
W: http://
www.penguinppc.org/ppc64/
S: Supported
S: Supported
BTTV VIDEO4LINUX DRIVER
BTTV VIDEO4LINUX DRIVER
...
@@ -1716,7 +1716,7 @@ M: paulus@au.ibm.com
...
@@ -1716,7 +1716,7 @@ M: paulus@au.ibm.com
P: Anton Blanchard
P: Anton Blanchard
M: anton@samba.org
M: anton@samba.org
M: anton@au.ibm.com
M: anton@au.ibm.com
W: http://
linuxppc64.org
W: http://
www.penguinppc.org/ppc64/
L: linuxppc-dev@ozlabs.org
L: linuxppc-dev@ozlabs.org
S: Supported
S: Supported
...
...
arch/powerpc/kernel/prom_init.c
浏览文件 @
89f8185e
...
@@ -2057,10 +2057,45 @@ static void __init flatten_device_tree(void)
...
@@ -2057,10 +2057,45 @@ static void __init flatten_device_tree(void)
}
}
#ifdef CONFIG_PPC_MAPLE
static
void
__init
fixup_device_tree
(
void
)
/* PIBS Version 1.05.0000 04/26/2005 has an incorrect /ht/isa/ranges property.
* The values are bad, and it doesn't even have the right number of cells. */
static
void
__init
fixup_device_tree_maple
(
void
)
{
{
phandle
isa
;
u32
isa_ranges
[
6
];
isa
=
call_prom
(
"finddevice"
,
1
,
1
,
ADDR
(
"/ht@0/isa@4"
));
if
(
!
PHANDLE_VALID
(
isa
))
return
;
if
(
prom_getprop
(
isa
,
"ranges"
,
isa_ranges
,
sizeof
(
isa_ranges
))
==
PROM_ERROR
)
return
;
if
(
isa_ranges
[
0
]
!=
0x1
||
isa_ranges
[
1
]
!=
0xf4000000
||
isa_ranges
[
2
]
!=
0x00010000
)
return
;
prom_printf
(
"fixing up bogus ISA range on Maple...
\n
"
);
isa_ranges
[
0
]
=
0x1
;
isa_ranges
[
1
]
=
0x0
;
isa_ranges
[
2
]
=
0x01002000
;
/* IO space; PCI device = 4 */
isa_ranges
[
3
]
=
0x0
;
isa_ranges
[
4
]
=
0x0
;
isa_ranges
[
5
]
=
0x00010000
;
prom_setprop
(
isa
,
"/ht@0/isa@4"
,
"ranges"
,
isa_ranges
,
sizeof
(
isa_ranges
));
}
#else
#define fixup_device_tree_maple()
#endif
#if defined(CONFIG_PPC64) && defined(CONFIG_PPC_PMAC)
#if defined(CONFIG_PPC64) && defined(CONFIG_PPC_PMAC)
static
void
__init
fixup_device_tree_pmac
(
void
)
{
phandle
u3
,
i2c
,
mpic
;
phandle
u3
,
i2c
,
mpic
;
u32
u3_rev
;
u32
u3_rev
;
u32
interrupts
[
2
];
u32
interrupts
[
2
];
...
@@ -2097,9 +2132,16 @@ static void __init fixup_device_tree(void)
...
@@ -2097,9 +2132,16 @@ static void __init fixup_device_tree(void)
parent
=
(
u32
)
mpic
;
parent
=
(
u32
)
mpic
;
prom_setprop
(
i2c
,
"/u3@0,f8000000/i2c@f8001000"
,
"interrupt-parent"
,
prom_setprop
(
i2c
,
"/u3@0,f8000000/i2c@f8001000"
,
"interrupt-parent"
,
&
parent
,
sizeof
(
parent
));
&
parent
,
sizeof
(
parent
));
#endif
}
}
#else
#define fixup_device_tree_pmac()
#endif
static
void
__init
fixup_device_tree
(
void
)
{
fixup_device_tree_maple
();
fixup_device_tree_pmac
();
}
static
void
__init
prom_find_boot_cpu
(
void
)
static
void
__init
prom_find_boot_cpu
(
void
)
{
{
...
...
arch/ppc/kernel/asm-offsets.c
浏览文件 @
89f8185e
...
@@ -134,7 +134,7 @@ main(void)
...
@@ -134,7 +134,7 @@ main(void)
DEFINE
(
TI_TASK
,
offsetof
(
struct
thread_info
,
task
));
DEFINE
(
TI_TASK
,
offsetof
(
struct
thread_info
,
task
));
DEFINE
(
TI_EXECDOMAIN
,
offsetof
(
struct
thread_info
,
exec_domain
));
DEFINE
(
TI_EXECDOMAIN
,
offsetof
(
struct
thread_info
,
exec_domain
));
DEFINE
(
TI_FLAGS
,
offsetof
(
struct
thread_info
,
flags
));
DEFINE
(
TI_FLAGS
,
offsetof
(
struct
thread_info
,
flags
));
DEFINE
(
TI_LOCAL_FLAGS
,
offsetof
(
struct
thread_info
,
flags
));
DEFINE
(
TI_LOCAL_FLAGS
,
offsetof
(
struct
thread_info
,
local_
flags
));
DEFINE
(
TI_CPU
,
offsetof
(
struct
thread_info
,
cpu
));
DEFINE
(
TI_CPU
,
offsetof
(
struct
thread_info
,
cpu
));
DEFINE
(
TI_PREEMPT
,
offsetof
(
struct
thread_info
,
preempt_count
));
DEFINE
(
TI_PREEMPT
,
offsetof
(
struct
thread_info
,
preempt_count
));
...
...
arch/ppc/platforms/mpc8272ads_setup.c
浏览文件 @
89f8185e
...
@@ -279,11 +279,11 @@ static int mpc8272ads_platform_notify(struct device *dev)
...
@@ -279,11 +279,11 @@ static int mpc8272ads_platform_notify(struct device *dev)
static
const
struct
platform_notify_dev_map
dev_map
[]
=
{
static
const
struct
platform_notify_dev_map
dev_map
[]
=
{
{
{
.
bus_id
=
"fsl-cpm-fcc"
,
.
bus_id
=
"fsl-cpm-fcc"
,
.
rtn
=
mpc8272ads_fixup_enet_pdata
.
rtn
=
mpc8272ads_fixup_enet_pdata
,
},
},
{
{
.
bus_id
=
"fsl-cpm-scc:uart"
,
.
bus_id
=
"fsl-cpm-scc:uart"
,
.
rtn
=
mpc
.
rtn
=
mpc
8272ads_fixup_uart_pdata
,
},
},
{
{
.
bus_id
=
NULL
.
bus_id
=
NULL
...
@@ -335,15 +335,15 @@ struct platform_device* early_uart_get_pdev(int index)
...
@@ -335,15 +335,15 @@ struct platform_device* early_uart_get_pdev(int index)
struct
platform_device
*
pdev
=
NULL
;
struct
platform_device
*
pdev
=
NULL
;
if
(
index
)
{
/*assume SCC4 here*/
if
(
index
)
{
/*assume SCC4 here*/
pdev
=
&
ppc_sys_platform_devices
[
MPC82xx_CPM_SCC4
];
pdev
=
&
ppc_sys_platform_devices
[
MPC82xx_CPM_SCC4
];
pinfo
=
&
mpc8272
<
F12
>
_uart_pdata
[
1
];
pinfo
=
&
mpc8272
_uart_pdata
[
fsid_scc4_uart
];
}
else
{
/*over SCC1*/
}
else
{
/*over SCC1*/
pdev
=
&
ppc_sys_platform_devices
[
MPC82xx_CPM_SCC1
];
pdev
=
&
ppc_sys_platform_devices
[
MPC82xx_CPM_SCC1
];
pinfo
=
&
mpc8272_uart_pdata
[
0
];
pinfo
=
&
mpc8272_uart_pdata
[
fsid_scc1_uart
];
}
}
pinfo
->
uart_clk
=
bd
->
bi_intfreq
;
pinfo
->
uart_clk
=
bd
->
bi_intfreq
;
pdev
->
dev
.
platform_data
=
pinfo
;
pdev
->
dev
.
platform_data
=
pinfo
;
ppc_sys_fixup_mem_resource
(
pdev
,
I
MAP_ADDR
);
ppc_sys_fixup_mem_resource
(
pdev
,
CPM_
MAP_ADDR
);
return
NULL
;
return
NULL
;
}
}
...
...
arch/ppc/syslib/pq2_devices.c
浏览文件 @
89f8185e
...
@@ -121,13 +121,13 @@ struct platform_device ppc_sys_platform_devices[] = {
...
@@ -121,13 +121,13 @@ struct platform_device ppc_sys_platform_devices[] = {
.
num_resources
=
3
,
.
num_resources
=
3
,
.
resource
=
(
struct
resource
[])
{
.
resource
=
(
struct
resource
[])
{
{
{
.
name
=
"
scc_mem
"
,
.
name
=
"
regs
"
,
.
start
=
0x11A00
,
.
start
=
0x11A00
,
.
end
=
0x11A1F
,
.
end
=
0x11A1F
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
},
{
{
.
name
=
"
scc_
pram"
,
.
name
=
"pram"
,
.
start
=
0x8000
,
.
start
=
0x8000
,
.
end
=
0x80ff
,
.
end
=
0x80ff
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
...
@@ -145,13 +145,13 @@ struct platform_device ppc_sys_platform_devices[] = {
...
@@ -145,13 +145,13 @@ struct platform_device ppc_sys_platform_devices[] = {
.
num_resources
=
3
,
.
num_resources
=
3
,
.
resource
=
(
struct
resource
[])
{
.
resource
=
(
struct
resource
[])
{
{
{
.
name
=
"
scc_mem
"
,
.
name
=
"
regs
"
,
.
start
=
0x11A20
,
.
start
=
0x11A20
,
.
end
=
0x11A3F
,
.
end
=
0x11A3F
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
},
{
{
.
name
=
"
scc_
pram"
,
.
name
=
"pram"
,
.
start
=
0x8100
,
.
start
=
0x8100
,
.
end
=
0x81ff
,
.
end
=
0x81ff
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
...
@@ -169,13 +169,13 @@ struct platform_device ppc_sys_platform_devices[] = {
...
@@ -169,13 +169,13 @@ struct platform_device ppc_sys_platform_devices[] = {
.
num_resources
=
3
,
.
num_resources
=
3
,
.
resource
=
(
struct
resource
[])
{
.
resource
=
(
struct
resource
[])
{
{
{
.
name
=
"
scc_mem
"
,
.
name
=
"
regs
"
,
.
start
=
0x11A40
,
.
start
=
0x11A40
,
.
end
=
0x11A5F
,
.
end
=
0x11A5F
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
},
{
{
.
name
=
"
scc_
pram"
,
.
name
=
"pram"
,
.
start
=
0x8200
,
.
start
=
0x8200
,
.
end
=
0x82ff
,
.
end
=
0x82ff
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
...
@@ -193,13 +193,13 @@ struct platform_device ppc_sys_platform_devices[] = {
...
@@ -193,13 +193,13 @@ struct platform_device ppc_sys_platform_devices[] = {
.
num_resources
=
3
,
.
num_resources
=
3
,
.
resource
=
(
struct
resource
[])
{
.
resource
=
(
struct
resource
[])
{
{
{
.
name
=
"
scc_mem
"
,
.
name
=
"
regs
"
,
.
start
=
0x11A60
,
.
start
=
0x11A60
,
.
end
=
0x11A7F
,
.
end
=
0x11A7F
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
},
{
{
.
name
=
"
scc_
pram"
,
.
name
=
"pram"
,
.
start
=
0x8300
,
.
start
=
0x8300
,
.
end
=
0x83ff
,
.
end
=
0x83ff
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
...
...
arch/ppc/syslib/pq2_sys.c
浏览文件 @
89f8185e
...
@@ -139,13 +139,13 @@ struct ppc_sys_spec ppc_sys_specs[] = {
...
@@ -139,13 +139,13 @@ struct ppc_sys_spec ppc_sys_specs[] = {
.
ppc_sys_name
=
"8272"
,
.
ppc_sys_name
=
"8272"
,
.
mask
=
0x0000ff00
,
.
mask
=
0x0000ff00
,
.
value
=
0x00000c00
,
.
value
=
0x00000c00
,
.
num_devices
=
1
1
,
.
num_devices
=
1
2
,
.
device_list
=
(
enum
ppc_sys_devices
[])
.
device_list
=
(
enum
ppc_sys_devices
[])
{
{
MPC82xx_CPM_FCC1
,
MPC82xx_CPM_FCC2
,
MPC82xx_CPM_SCC1
,
MPC82xx_CPM_FCC1
,
MPC82xx_CPM_FCC2
,
MPC82xx_CPM_SCC1
,
MPC82xx_CPM_SCC2
,
MPC82xx_CPM_SCC3
,
MPC82xx_CPM_S
MC1
,
MPC82xx_CPM_SCC2
,
MPC82xx_CPM_SCC3
,
MPC82xx_CPM_S
CC4
,
MPC82xx_CPM_SMC
2
,
MPC82xx_CPM_SPI
,
MPC82xx_CPM_I2C
,
MPC82xx_CPM_SMC
1
,
MPC82xx_CPM_SMC2
,
MPC82xx_CPM_SPI
,
MPC82xx_CPM_USB
,
MPC82xx_SEC1
,
MPC82xx_CPM_
I2C
,
MPC82xx_CPM_
USB
,
MPC82xx_SEC1
,
},
},
},
},
/* below is a list of the 8280 family of processors */
/* below is a list of the 8280 family of processors */
...
...
drivers/net/e1000/e1000_main.c
浏览文件 @
89f8185e
...
@@ -220,6 +220,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter);
...
@@ -220,6 +220,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter);
static
int
e1000_suspend
(
struct
pci_dev
*
pdev
,
pm_message_t
state
);
static
int
e1000_suspend
(
struct
pci_dev
*
pdev
,
pm_message_t
state
);
static
int
e1000_resume
(
struct
pci_dev
*
pdev
);
static
int
e1000_resume
(
struct
pci_dev
*
pdev
);
#endif
#endif
static
void
e1000_shutdown
(
struct
pci_dev
*
pdev
);
#ifdef CONFIG_NET_POLL_CONTROLLER
#ifdef CONFIG_NET_POLL_CONTROLLER
/* for netdump / net console */
/* for netdump / net console */
...
@@ -235,8 +236,9 @@ static struct pci_driver e1000_driver = {
...
@@ -235,8 +236,9 @@ static struct pci_driver e1000_driver = {
/* Power Managment Hooks */
/* Power Managment Hooks */
#ifdef CONFIG_PM
#ifdef CONFIG_PM
.
suspend
=
e1000_suspend
,
.
suspend
=
e1000_suspend
,
.
resume
=
e1000_resume
.
resume
=
e1000_resume
,
#endif
#endif
.
shutdown
=
e1000_shutdown
};
};
MODULE_AUTHOR
(
"Intel Corporation, <linux.nics@intel.com>"
);
MODULE_AUTHOR
(
"Intel Corporation, <linux.nics@intel.com>"
);
...
@@ -4611,6 +4613,12 @@ e1000_resume(struct pci_dev *pdev)
...
@@ -4611,6 +4613,12 @@ e1000_resume(struct pci_dev *pdev)
return
0
;
return
0
;
}
}
#endif
#endif
static
void
e1000_shutdown
(
struct
pci_dev
*
pdev
)
{
e1000_suspend
(
pdev
,
PMSG_SUSPEND
);
}
#ifdef CONFIG_NET_POLL_CONTROLLER
#ifdef CONFIG_NET_POLL_CONTROLLER
/*
/*
* Polling 'interrupt' - used by things like netconsole to send skbs
* Polling 'interrupt' - used by things like netconsole to send skbs
...
...
drivers/net/pcnet32.c
浏览文件 @
89f8185e
...
@@ -1774,8 +1774,6 @@ static int pcnet32_open(struct net_device *dev)
...
@@ -1774,8 +1774,6 @@ static int pcnet32_open(struct net_device *dev)
lp
->
rx_dma_addr
[
i
]
=
0
;
lp
->
rx_dma_addr
[
i
]
=
0
;
}
}
pcnet32_free_ring
(
dev
);
/*
/*
* Switch back to 16bit mode to avoid problems with dumb
* Switch back to 16bit mode to avoid problems with dumb
* DOS packet driver after a warm reboot
* DOS packet driver after a warm reboot
...
...
drivers/net/wireless/arlan-main.c
浏览文件 @
89f8185e
...
@@ -1838,7 +1838,7 @@ struct net_device * __init arlan_probe(int unit)
...
@@ -1838,7 +1838,7 @@ struct net_device * __init arlan_probe(int unit)
}
}
#ifdef MODULE
#ifdef MODULE
int
init_module
(
void
)
int
__init
init_module
(
void
)
{
{
int
i
=
0
;
int
i
=
0
;
...
@@ -1860,7 +1860,7 @@ int init_module(void)
...
@@ -1860,7 +1860,7 @@ int init_module(void)
}
}
void
cleanup_module
(
void
)
void
__exit
cleanup_module
(
void
)
{
{
int
i
=
0
;
int
i
=
0
;
struct
net_device
*
dev
;
struct
net_device
*
dev
;
...
...
drivers/net/wireless/wavelan.c
浏览文件 @
89f8185e
...
@@ -4306,7 +4306,7 @@ struct net_device * __init wavelan_probe(int unit)
...
@@ -4306,7 +4306,7 @@ struct net_device * __init wavelan_probe(int unit)
* Insertion of the module
* Insertion of the module
* I'm now quite proud of the multi-device support.
* I'm now quite proud of the multi-device support.
*/
*/
int
init_module
(
void
)
int
__init
init_module
(
void
)
{
{
int
ret
=
-
EIO
;
/* Return error if no cards found */
int
ret
=
-
EIO
;
/* Return error if no cards found */
int
i
;
int
i
;
...
...
drivers/s390/net/ctcmain.c
浏览文件 @
89f8185e
...
@@ -1486,13 +1486,13 @@ ch_action_iofatal(fsm_instance * fi, int event, void *arg)
...
@@ -1486,13 +1486,13 @@ ch_action_iofatal(fsm_instance * fi, int event, void *arg)
}
}
}
}
static
void
static
void
ch_action_reinit
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
ch_action_reinit
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
{
{
struct
channel
*
ch
=
(
struct
channel
*
)
arg
;
struct
channel
*
ch
=
(
struct
channel
*
)
arg
;
struct
net_device
*
dev
=
ch
->
netdev
;
struct
net_device
*
dev
=
ch
->
netdev
;
struct
ctc_priv
*
privptr
=
dev
->
priv
;
struct
ctc_priv
*
privptr
=
dev
->
priv
;
DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
ch_action_iofatal
(
fi
,
event
,
arg
);
ch_action_iofatal
(
fi
,
event
,
arg
);
fsm_addtimer
(
&
privptr
->
restart_timer
,
1000
,
DEV_EVENT_RESTART
,
dev
);
fsm_addtimer
(
&
privptr
->
restart_timer
,
1000
,
DEV_EVENT_RESTART
,
dev
);
...
@@ -1624,7 +1624,7 @@ less_than(char *id1, char *id2)
...
@@ -1624,7 +1624,7 @@ less_than(char *id1, char *id2)
}
}
dev1
=
simple_strtoul
(
id1
,
&
id1
,
16
);
dev1
=
simple_strtoul
(
id1
,
&
id1
,
16
);
dev2
=
simple_strtoul
(
id2
,
&
id2
,
16
);
dev2
=
simple_strtoul
(
id2
,
&
id2
,
16
);
return
(
dev1
<
dev2
);
return
(
dev1
<
dev2
);
}
}
...
@@ -1895,7 +1895,7 @@ ctc_irq_handler(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1895,7 +1895,7 @@ ctc_irq_handler(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
irb
->
scsw
.
dstat
);
irb
->
scsw
.
dstat
);
return
;
return
;
}
}
priv
=
((
struct
ccwgroup_device
*
)
cdev
->
dev
.
driver_data
)
priv
=
((
struct
ccwgroup_device
*
)
cdev
->
dev
.
driver_data
)
->
dev
.
driver_data
;
->
dev
.
driver_data
;
...
@@ -1909,7 +1909,7 @@ ctc_irq_handler(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1909,7 +1909,7 @@ ctc_irq_handler(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
"device %s
\n
"
,
cdev
->
dev
.
bus_id
);
"device %s
\n
"
,
cdev
->
dev
.
bus_id
);
return
;
return
;
}
}
dev
=
(
struct
net_device
*
)
(
ch
->
netdev
);
dev
=
(
struct
net_device
*
)
(
ch
->
netdev
);
if
(
dev
==
NULL
)
{
if
(
dev
==
NULL
)
{
ctc_pr_crit
(
"ctc: ctc_irq_handler dev=NULL bus_id=%s, ch=0x%p
\n
"
,
ctc_pr_crit
(
"ctc: ctc_irq_handler dev=NULL bus_id=%s, ch=0x%p
\n
"
,
...
@@ -2008,12 +2008,12 @@ dev_action_stop(fsm_instance * fi, int event, void *arg)
...
@@ -2008,12 +2008,12 @@ dev_action_stop(fsm_instance * fi, int event, void *arg)
fsm_event
(
ch
->
fsm
,
CH_EVENT_STOP
,
ch
);
fsm_event
(
ch
->
fsm
,
CH_EVENT_STOP
,
ch
);
}
}
}
}
static
void
static
void
dev_action_restart
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
dev_action_restart
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
{
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
arg
;
struct
net_device
*
dev
=
(
struct
net_device
*
)
arg
;
struct
ctc_priv
*
privptr
=
dev
->
priv
;
struct
ctc_priv
*
privptr
=
dev
->
priv
;
DBF_TEXT
(
trace
,
3
,
__FUNCTION__
);
DBF_TEXT
(
trace
,
3
,
__FUNCTION__
);
ctc_pr_debug
(
"%s: Restarting
\n
"
,
dev
->
name
);
ctc_pr_debug
(
"%s: Restarting
\n
"
,
dev
->
name
);
dev_action_stop
(
fi
,
event
,
arg
);
dev_action_stop
(
fi
,
event
,
arg
);
...
@@ -2193,7 +2193,7 @@ transmit_skb(struct channel *ch, struct sk_buff *skb)
...
@@ -2193,7 +2193,7 @@ transmit_skb(struct channel *ch, struct sk_buff *skb)
DBF_TEXT
(
trace
,
5
,
__FUNCTION__
);
DBF_TEXT
(
trace
,
5
,
__FUNCTION__
);
/* we need to acquire the lock for testing the state
/* we need to acquire the lock for testing the state
* otherwise we can have an IRQ changing the state to
* otherwise we can have an IRQ changing the state to
* TXIDLE after the test but before acquiring the lock.
* TXIDLE after the test but before acquiring the lock.
*/
*/
spin_lock_irqsave
(
&
ch
->
collect_lock
,
saveflags
);
spin_lock_irqsave
(
&
ch
->
collect_lock
,
saveflags
);
...
@@ -2393,7 +2393,7 @@ ctc_tx(struct sk_buff *skb, struct net_device * dev)
...
@@ -2393,7 +2393,7 @@ ctc_tx(struct sk_buff *skb, struct net_device * dev)
/**
/**
* If channels are not running, try to restart them
* If channels are not running, try to restart them
* and throw away packet.
* and throw away packet.
*/
*/
if
(
fsm_getstate
(
privptr
->
fsm
)
!=
DEV_STATE_RUNNING
)
{
if
(
fsm_getstate
(
privptr
->
fsm
)
!=
DEV_STATE_RUNNING
)
{
fsm_event
(
privptr
->
fsm
,
DEV_EVENT_START
,
dev
);
fsm_event
(
privptr
->
fsm
,
DEV_EVENT_START
,
dev
);
...
@@ -2738,7 +2738,7 @@ ctc_remove_files(struct device *dev)
...
@@ -2738,7 +2738,7 @@ ctc_remove_files(struct device *dev)
/**
/**
* Add ctc specific attributes.
* Add ctc specific attributes.
* Add ctc private data.
* Add ctc private data.
*
*
* @param cgdev pointer to ccwgroup_device just added
* @param cgdev pointer to ccwgroup_device just added
*
*
* @returns 0 on success, !0 on failure.
* @returns 0 on success, !0 on failure.
...
@@ -2869,7 +2869,7 @@ ctc_new_device(struct ccwgroup_device *cgdev)
...
@@ -2869,7 +2869,7 @@ ctc_new_device(struct ccwgroup_device *cgdev)
DBF_TEXT
(
setup
,
3
,
buffer
);
DBF_TEXT
(
setup
,
3
,
buffer
);
type
=
get_channel_type
(
&
cgdev
->
cdev
[
0
]
->
id
);
type
=
get_channel_type
(
&
cgdev
->
cdev
[
0
]
->
id
);
snprintf
(
read_id
,
CTC_ID_SIZE
,
"ch-%s"
,
cgdev
->
cdev
[
0
]
->
dev
.
bus_id
);
snprintf
(
read_id
,
CTC_ID_SIZE
,
"ch-%s"
,
cgdev
->
cdev
[
0
]
->
dev
.
bus_id
);
snprintf
(
write_id
,
CTC_ID_SIZE
,
"ch-%s"
,
cgdev
->
cdev
[
1
]
->
dev
.
bus_id
);
snprintf
(
write_id
,
CTC_ID_SIZE
,
"ch-%s"
,
cgdev
->
cdev
[
1
]
->
dev
.
bus_id
);
...
@@ -2907,7 +2907,7 @@ ctc_new_device(struct ccwgroup_device *cgdev)
...
@@ -2907,7 +2907,7 @@ ctc_new_device(struct ccwgroup_device *cgdev)
channel_get
(
type
,
direction
==
READ
?
read_id
:
write_id
,
channel_get
(
type
,
direction
==
READ
?
read_id
:
write_id
,
direction
);
direction
);
if
(
privptr
->
channel
[
direction
]
==
NULL
)
{
if
(
privptr
->
channel
[
direction
]
==
NULL
)
{
if
(
direction
==
WRITE
)
if
(
direction
==
WRITE
)
channel_free
(
privptr
->
channel
[
READ
]);
channel_free
(
privptr
->
channel
[
READ
]);
ctc_free_netdevice
(
dev
,
1
);
ctc_free_netdevice
(
dev
,
1
);
...
@@ -2955,7 +2955,7 @@ ctc_shutdown_device(struct ccwgroup_device *cgdev)
...
@@ -2955,7 +2955,7 @@ ctc_shutdown_device(struct ccwgroup_device *cgdev)
{
{
struct
ctc_priv
*
priv
;
struct
ctc_priv
*
priv
;
struct
net_device
*
ndev
;
struct
net_device
*
ndev
;
DBF_TEXT
(
setup
,
3
,
__FUNCTION__
);
DBF_TEXT
(
setup
,
3
,
__FUNCTION__
);
pr_debug
(
"%s() called
\n
"
,
__FUNCTION__
);
pr_debug
(
"%s() called
\n
"
,
__FUNCTION__
);
...
...
drivers/s390/net/ctctty.c
浏览文件 @
89f8185e
...
@@ -130,7 +130,7 @@ ctc_tty_readmodem(ctc_tty_info *info)
...
@@ -130,7 +130,7 @@ ctc_tty_readmodem(ctc_tty_info *info)
if
((
tty
=
info
->
tty
))
{
if
((
tty
=
info
->
tty
))
{
if
(
info
->
mcr
&
UART_MCR_RTS
)
{
if
(
info
->
mcr
&
UART_MCR_RTS
)
{
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
if
((
skb
=
skb_dequeue
(
&
info
->
rx_queue
)))
{
if
((
skb
=
skb_dequeue
(
&
info
->
rx_queue
)))
{
int
len
=
skb
->
len
;
int
len
=
skb
->
len
;
tty_insert_flip_string
(
tty
,
skb
->
data
,
len
);
tty_insert_flip_string
(
tty
,
skb
->
data
,
len
);
...
@@ -328,7 +328,7 @@ ctc_tty_inject(ctc_tty_info *info, char c)
...
@@ -328,7 +328,7 @@ ctc_tty_inject(ctc_tty_info *info, char c)
{
{
int
skb_res
;
int
skb_res
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
if
(
ctc_tty_shuttingdown
)
if
(
ctc_tty_shuttingdown
)
return
;
return
;
...
@@ -497,7 +497,7 @@ ctc_tty_write(struct tty_struct *tty, const u_char * buf, int count)
...
@@ -497,7 +497,7 @@ ctc_tty_write(struct tty_struct *tty, const u_char * buf, int count)
c
=
(
count
<
CTC_TTY_XMIT_SIZE
)
?
count
:
CTC_TTY_XMIT_SIZE
;
c
=
(
count
<
CTC_TTY_XMIT_SIZE
)
?
count
:
CTC_TTY_XMIT_SIZE
;
if
(
c
<=
0
)
if
(
c
<=
0
)
break
;
break
;
skb_res
=
info
->
netdev
->
hard_header_len
+
sizeof
(
info
->
mcr
)
+
skb_res
=
info
->
netdev
->
hard_header_len
+
sizeof
(
info
->
mcr
)
+
+
sizeof
(
__u32
);
+
sizeof
(
__u32
);
skb
=
dev_alloc_skb
(
skb_res
+
c
);
skb
=
dev_alloc_skb
(
skb_res
+
c
);
...
@@ -828,7 +828,7 @@ ctc_tty_block_til_ready(struct tty_struct *tty, struct file *filp, ctc_tty_info
...
@@ -828,7 +828,7 @@ ctc_tty_block_til_ready(struct tty_struct *tty, struct file *filp, ctc_tty_info
if
(
tty_hung_up_p
(
filp
)
||
if
(
tty_hung_up_p
(
filp
)
||
(
info
->
flags
&
CTC_ASYNC_CLOSING
))
{
(
info
->
flags
&
CTC_ASYNC_CLOSING
))
{
if
(
info
->
flags
&
CTC_ASYNC_CLOSING
)
if
(
info
->
flags
&
CTC_ASYNC_CLOSING
)
wait_event
(
info
->
close_wait
,
wait_event
(
info
->
close_wait
,
!
(
info
->
flags
&
CTC_ASYNC_CLOSING
));
!
(
info
->
flags
&
CTC_ASYNC_CLOSING
));
#ifdef MODEM_DO_RESTART
#ifdef MODEM_DO_RESTART
if
(
info
->
flags
&
CTC_ASYNC_HUP_NOTIFY
)
if
(
info
->
flags
&
CTC_ASYNC_HUP_NOTIFY
)
...
@@ -1247,7 +1247,7 @@ ctc_tty_unregister_netdev(struct net_device *dev) {
...
@@ -1247,7 +1247,7 @@ ctc_tty_unregister_netdev(struct net_device *dev) {
void
void
ctc_tty_cleanup
(
void
)
{
ctc_tty_cleanup
(
void
)
{
unsigned
long
saveflags
;
unsigned
long
saveflags
;
DBF_TEXT
(
trace
,
2
,
__FUNCTION__
);
DBF_TEXT
(
trace
,
2
,
__FUNCTION__
);
spin_lock_irqsave
(
&
ctc_tty_lock
,
saveflags
);
spin_lock_irqsave
(
&
ctc_tty_lock
,
saveflags
);
ctc_tty_shuttingdown
=
1
;
ctc_tty_shuttingdown
=
1
;
...
...
drivers/s390/net/cu3088.c
浏览文件 @
89f8185e
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*
*/
*/
#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/err.h>
#include <linux/err.h>
...
@@ -77,7 +77,7 @@ group_write(struct device_driver *drv, const char *buf, size_t count)
...
@@ -77,7 +77,7 @@ group_write(struct device_driver *drv, const char *buf, size_t count)
int
len
;
int
len
;
if
(
!
(
end
=
strchr
(
start
,
delim
[
i
])))
if
(
!
(
end
=
strchr
(
start
,
delim
[
i
])))
return
count
;
return
-
EINVAL
;
len
=
min_t
(
ptrdiff_t
,
BUS_ID_SIZE
,
end
-
start
+
1
);
len
=
min_t
(
ptrdiff_t
,
BUS_ID_SIZE
,
end
-
start
+
1
);
strlcpy
(
bus_ids
[
i
],
start
,
len
);
strlcpy
(
bus_ids
[
i
],
start
,
len
);
argv
[
i
]
=
bus_ids
[
i
];
argv
[
i
]
=
bus_ids
[
i
];
...
@@ -94,7 +94,7 @@ static DRIVER_ATTR(group, 0200, NULL, group_write);
...
@@ -94,7 +94,7 @@ static DRIVER_ATTR(group, 0200, NULL, group_write);
/* Register-unregister for ctc&lcs */
/* Register-unregister for ctc&lcs */
int
int
register_cu3088_discipline
(
struct
ccwgroup_driver
*
dcp
)
register_cu3088_discipline
(
struct
ccwgroup_driver
*
dcp
)
{
{
int
rc
;
int
rc
;
...
@@ -109,7 +109,7 @@ register_cu3088_discipline(struct ccwgroup_driver *dcp)
...
@@ -109,7 +109,7 @@ register_cu3088_discipline(struct ccwgroup_driver *dcp)
rc
=
driver_create_file
(
&
dcp
->
driver
,
&
driver_attr_group
);
rc
=
driver_create_file
(
&
dcp
->
driver
,
&
driver_attr_group
);
if
(
rc
)
if
(
rc
)
ccwgroup_driver_unregister
(
dcp
);
ccwgroup_driver_unregister
(
dcp
);
return
rc
;
return
rc
;
}
}
...
@@ -137,7 +137,7 @@ static int __init
...
@@ -137,7 +137,7 @@ static int __init
cu3088_init
(
void
)
cu3088_init
(
void
)
{
{
int
rc
;
int
rc
;
cu3088_root_dev
=
s390_root_dev_register
(
"cu3088"
);
cu3088_root_dev
=
s390_root_dev_register
(
"cu3088"
);
if
(
IS_ERR
(
cu3088_root_dev
))
if
(
IS_ERR
(
cu3088_root_dev
))
return
PTR_ERR
(
cu3088_root_dev
);
return
PTR_ERR
(
cu3088_root_dev
);
...
...
drivers/s390/net/iucv.c
浏览文件 @
89f8185e
/*
/*
* IUCV network driver
* IUCV network driver
*
*
* Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*
*/
*/
/* #define DEBUG */
/* #define DEBUG */
#include <linux/module.h>
#include <linux/module.h>
...
@@ -81,7 +81,7 @@ iucv_bus_match (struct device *dev, struct device_driver *drv)
...
@@ -81,7 +81,7 @@ iucv_bus_match (struct device *dev, struct device_driver *drv)
struct
bus_type
iucv_bus
=
{
struct
bus_type
iucv_bus
=
{
.
name
=
"iucv"
,
.
name
=
"iucv"
,
.
match
=
iucv_bus_match
,
.
match
=
iucv_bus_match
,
};
};
struct
device
*
iucv_root
;
struct
device
*
iucv_root
;
...
@@ -297,7 +297,7 @@ MODULE_LICENSE("GPL");
...
@@ -297,7 +297,7 @@ MODULE_LICENSE("GPL");
/*
/*
* Debugging stuff
* Debugging stuff
*******************************************************************************/
*******************************************************************************/
#ifdef DEBUG
#ifdef DEBUG
static
int
debuglevel
=
0
;
static
int
debuglevel
=
0
;
...
@@ -344,7 +344,7 @@ do { \
...
@@ -344,7 +344,7 @@ do { \
/*
/*
* Internal functions
* Internal functions
*******************************************************************************/
*******************************************************************************/
/**
/**
* print start banner
* print start banner
*/
*/
...
@@ -810,7 +810,7 @@ iucv_register_program (__u8 pgmname[16],
...
@@ -810,7 +810,7 @@ iucv_register_program (__u8 pgmname[16],
sizeof
(
new_handler
->
id
.
userid
));
sizeof
(
new_handler
->
id
.
userid
));
EBC_TOUPPER
(
new_handler
->
id
.
userid
,
EBC_TOUPPER
(
new_handler
->
id
.
userid
,
sizeof
(
new_handler
->
id
.
userid
));
sizeof
(
new_handler
->
id
.
userid
));
if
(
pgmmask
)
{
if
(
pgmmask
)
{
memcpy
(
new_handler
->
id
.
mask
,
pgmmask
,
memcpy
(
new_handler
->
id
.
mask
,
pgmmask
,
sizeof
(
new_handler
->
id
.
mask
));
sizeof
(
new_handler
->
id
.
mask
));
...
@@ -1229,7 +1229,7 @@ iucv_purge (__u16 pathid, __u32 msgid, __u32 srccls, __u32 *audit)
...
@@ -1229,7 +1229,7 @@ iucv_purge (__u16 pathid, __u32 msgid, __u32 srccls, __u32 *audit)
/* parm->ipaudit has only 3 bytes */
/* parm->ipaudit has only 3 bytes */
*
audit
>>=
8
;
*
audit
>>=
8
;
}
}
release_param
(
parm
);
release_param
(
parm
);
iucv_debug
(
1
,
"b2f0_result = %ld"
,
b2f0_result
);
iucv_debug
(
1
,
"b2f0_result = %ld"
,
b2f0_result
);
...
@@ -2330,14 +2330,14 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2330,14 +2330,14 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
temp_buff1
[
j
]
&=
(
h
->
id
.
mask
)[
j
];
temp_buff1
[
j
]
&=
(
h
->
id
.
mask
)[
j
];
temp_buff2
[
j
]
&=
(
h
->
id
.
mask
)[
j
];
temp_buff2
[
j
]
&=
(
h
->
id
.
mask
)[
j
];
}
}
iucv_dumpit
(
"temp_buff1:"
,
iucv_dumpit
(
"temp_buff1:"
,
temp_buff1
,
sizeof
(
temp_buff1
));
temp_buff1
,
sizeof
(
temp_buff1
));
iucv_dumpit
(
"temp_buff2"
,
iucv_dumpit
(
"temp_buff2"
,
temp_buff2
,
sizeof
(
temp_buff2
));
temp_buff2
,
sizeof
(
temp_buff2
));
if
(
!
memcmp
(
temp_buff1
,
temp_buff2
,
24
))
{
if
(
!
memcmp
(
temp_buff1
,
temp_buff2
,
24
))
{
iucv_debug
(
2
,
iucv_debug
(
2
,
"found a matching handler"
);
"found a matching handler"
);
break
;
break
;
...
@@ -2368,7 +2368,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2368,7 +2368,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
}
else
}
else
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
break
;
break
;
case
0x02
:
/*connection complete */
case
0x02
:
/*connection complete */
if
(
messagesDisabled
)
{
if
(
messagesDisabled
)
{
iucv_setmask
(
~
0
);
iucv_setmask
(
~
0
);
...
@@ -2387,7 +2387,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2387,7 +2387,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
}
else
}
else
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
break
;
break
;
case
0x03
:
/* connection severed */
case
0x03
:
/* connection severed */
if
(
messagesDisabled
)
{
if
(
messagesDisabled
)
{
iucv_setmask
(
~
0
);
iucv_setmask
(
~
0
);
...
@@ -2398,13 +2398,13 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2398,13 +2398,13 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
interrupt
->
ConnectionSevered
(
interrupt
->
ConnectionSevered
(
(
iucv_ConnectionSevered
*
)
int_buf
,
(
iucv_ConnectionSevered
*
)
int_buf
,
h
->
pgm_data
);
h
->
pgm_data
);
else
else
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
}
else
}
else
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
iucv_sever
(
int_buf
->
ippathid
,
no_listener
);
break
;
break
;
case
0x04
:
/* connection quiesced */
case
0x04
:
/* connection quiesced */
if
(
messagesDisabled
)
{
if
(
messagesDisabled
)
{
iucv_setmask
(
~
0
);
iucv_setmask
(
~
0
);
...
@@ -2420,7 +2420,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2420,7 +2420,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
"ConnectionQuiesced not called"
);
"ConnectionQuiesced not called"
);
}
}
break
;
break
;
case
0x05
:
/* connection resumed */
case
0x05
:
/* connection resumed */
if
(
messagesDisabled
)
{
if
(
messagesDisabled
)
{
iucv_setmask
(
~
0
);
iucv_setmask
(
~
0
);
...
@@ -2436,7 +2436,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2436,7 +2436,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
"ConnectionResumed not called"
);
"ConnectionResumed not called"
);
}
}
break
;
break
;
case
0x06
:
/* priority message complete */
case
0x06
:
/* priority message complete */
case
0x07
:
/* nonpriority message complete */
case
0x07
:
/* nonpriority message complete */
if
(
h
)
{
if
(
h
)
{
...
@@ -2449,7 +2449,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2449,7 +2449,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
"MessageComplete not called"
);
"MessageComplete not called"
);
}
}
break
;
break
;
case
0x08
:
/* priority message pending */
case
0x08
:
/* priority message pending */
case
0x09
:
/* nonpriority message pending */
case
0x09
:
/* nonpriority message pending */
if
(
h
)
{
if
(
h
)
{
...
@@ -2467,7 +2467,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
...
@@ -2467,7 +2467,7 @@ iucv_do_int(iucv_GeneralInterrupt * int_buf)
__FUNCTION__
);
__FUNCTION__
);
break
;
break
;
}
/* end switch */
}
/* end switch */
iucv_debug
(
2
,
"exiting pathid %d, type %02X"
,
iucv_debug
(
2
,
"exiting pathid %d, type %02X"
,
int_buf
->
ippathid
,
int_buf
->
iptype
);
int_buf
->
ippathid
,
int_buf
->
iptype
);
...
...
drivers/s390/net/iucv.h
浏览文件 @
89f8185e
此差异已折叠。
点击以展开。
drivers/s390/net/lcs.c
浏览文件 @
89f8185e
...
@@ -68,6 +68,7 @@ static void lcs_tasklet(unsigned long);
...
@@ -68,6 +68,7 @@ static void lcs_tasklet(unsigned long);
static
void
lcs_start_kernel_thread
(
struct
lcs_card
*
card
);
static
void
lcs_start_kernel_thread
(
struct
lcs_card
*
card
);
static
void
lcs_get_frames_cb
(
struct
lcs_channel
*
,
struct
lcs_buffer
*
);
static
void
lcs_get_frames_cb
(
struct
lcs_channel
*
,
struct
lcs_buffer
*
);
static
int
lcs_send_delipm
(
struct
lcs_card
*
,
struct
lcs_ipm_list
*
);
static
int
lcs_send_delipm
(
struct
lcs_card
*
,
struct
lcs_ipm_list
*
);
static
int
lcs_recovery
(
void
*
ptr
);
/**
/**
* Debug Facility Stuff
* Debug Facility Stuff
...
@@ -429,12 +430,6 @@ lcs_setup_card(struct lcs_card *card)
...
@@ -429,12 +430,6 @@ lcs_setup_card(struct lcs_card *card)
card
->
tx_buffer
=
NULL
;
card
->
tx_buffer
=
NULL
;
card
->
tx_emitted
=
0
;
card
->
tx_emitted
=
0
;
/* Initialize kernel thread task used for LGW commands. */
INIT_WORK
(
&
card
->
kernel_thread_starter
,
(
void
*
)
lcs_start_kernel_thread
,
card
);
card
->
thread_start_mask
=
0
;
card
->
thread_allowed_mask
=
0
;
card
->
thread_running_mask
=
0
;
init_waitqueue_head
(
&
card
->
wait_q
);
init_waitqueue_head
(
&
card
->
wait_q
);
spin_lock_init
(
&
card
->
lock
);
spin_lock_init
(
&
card
->
lock
);
spin_lock_init
(
&
card
->
ipm_lock
);
spin_lock_init
(
&
card
->
ipm_lock
);
...
@@ -675,8 +670,9 @@ lcs_ready_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
...
@@ -675,8 +670,9 @@ lcs_ready_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
int
index
,
rc
;
int
index
,
rc
;
LCS_DBF_TEXT
(
5
,
trace
,
"rdybuff"
);
LCS_DBF_TEXT
(
5
,
trace
,
"rdybuff"
);
BUG_ON
(
buffer
->
state
!=
BUF_STATE_LOCKED
&&
if
(
buffer
->
state
!=
BUF_STATE_LOCKED
&&
buffer
->
state
!=
BUF_STATE_PROCESSED
);
buffer
->
state
!=
BUF_STATE_PROCESSED
)
BUG
();
spin_lock_irqsave
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
spin_lock_irqsave
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
buffer
->
state
=
BUF_STATE_READY
;
buffer
->
state
=
BUF_STATE_READY
;
index
=
buffer
-
channel
->
iob
;
index
=
buffer
-
channel
->
iob
;
...
@@ -700,7 +696,8 @@ __lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
...
@@ -700,7 +696,8 @@ __lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
int
index
,
prev
,
next
;
int
index
,
prev
,
next
;
LCS_DBF_TEXT
(
5
,
trace
,
"prcsbuff"
);
LCS_DBF_TEXT
(
5
,
trace
,
"prcsbuff"
);
BUG_ON
(
buffer
->
state
!=
BUF_STATE_READY
);
if
(
buffer
->
state
!=
BUF_STATE_READY
)
BUG
();
buffer
->
state
=
BUF_STATE_PROCESSED
;
buffer
->
state
=
BUF_STATE_PROCESSED
;
index
=
buffer
-
channel
->
iob
;
index
=
buffer
-
channel
->
iob
;
prev
=
(
index
-
1
)
&
(
LCS_NUM_BUFFS
-
1
);
prev
=
(
index
-
1
)
&
(
LCS_NUM_BUFFS
-
1
);
...
@@ -732,8 +729,9 @@ lcs_release_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
...
@@ -732,8 +729,9 @@ lcs_release_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
unsigned
long
flags
;
unsigned
long
flags
;
LCS_DBF_TEXT
(
5
,
trace
,
"relbuff"
);
LCS_DBF_TEXT
(
5
,
trace
,
"relbuff"
);
BUG_ON
(
buffer
->
state
!=
BUF_STATE_LOCKED
&&
if
(
buffer
->
state
!=
BUF_STATE_LOCKED
&&
buffer
->
state
!=
BUF_STATE_PROCESSED
);
buffer
->
state
!=
BUF_STATE_PROCESSED
)
BUG
();
spin_lock_irqsave
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
spin_lock_irqsave
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
buffer
->
state
=
BUF_STATE_EMPTY
;
buffer
->
state
=
BUF_STATE_EMPTY
;
spin_unlock_irqrestore
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
spin_unlock_irqrestore
(
get_ccwdev_lock
(
channel
->
ccwdev
),
flags
);
...
@@ -1147,8 +1145,6 @@ lcs_fix_multicast_list(struct lcs_card *card)
...
@@ -1147,8 +1145,6 @@ lcs_fix_multicast_list(struct lcs_card *card)
list_add_tail
(
&
ipm
->
list
,
&
card
->
ipm_list
);
list_add_tail
(
&
ipm
->
list
,
&
card
->
ipm_list
);
}
}
spin_unlock_irqrestore
(
&
card
->
ipm_lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
ipm_lock
,
flags
);
if
(
card
->
state
==
DEV_STATE_UP
)
netif_wake_queue
(
card
->
dev
);
}
}
/**
/**
...
@@ -1231,17 +1227,17 @@ lcs_set_mc_addresses(struct lcs_card *card, struct in_device *in4_dev)
...
@@ -1231,17 +1227,17 @@ lcs_set_mc_addresses(struct lcs_card *card, struct in_device *in4_dev)
if
(
ipm
!=
NULL
)
if
(
ipm
!=
NULL
)
continue
;
/* Address already in list. */
continue
;
/* Address already in list. */
ipm
=
(
struct
lcs_ipm_list
*
)
ipm
=
(
struct
lcs_ipm_list
*
)
k
m
alloc
(
sizeof
(
struct
lcs_ipm_list
),
GFP_ATOMIC
);
k
z
alloc
(
sizeof
(
struct
lcs_ipm_list
),
GFP_ATOMIC
);
if
(
ipm
==
NULL
)
{
if
(
ipm
==
NULL
)
{
PRINT_INFO
(
"Not enough memory to add "
PRINT_INFO
(
"Not enough memory to add "
"new multicast entry!
\n
"
);
"new multicast entry!
\n
"
);
break
;
break
;
}
}
memset
(
ipm
,
0
,
sizeof
(
struct
lcs_ipm_list
));
memcpy
(
&
ipm
->
ipm
.
mac_addr
,
buf
,
LCS_MAC_LENGTH
);
memcpy
(
&
ipm
->
ipm
.
mac_addr
,
buf
,
LCS_MAC_LENGTH
);
ipm
->
ipm
.
ip_addr
=
im4
->
multiaddr
;
ipm
->
ipm
.
ip_addr
=
im4
->
multiaddr
;
ipm
->
ipm_state
=
LCS_IPM_STATE_SET_REQUIRED
;
ipm
->
ipm_state
=
LCS_IPM_STATE_SET_REQUIRED
;
spin_lock_irqsave
(
&
card
->
ipm_lock
,
flags
);
spin_lock_irqsave
(
&
card
->
ipm_lock
,
flags
);
LCS_DBF_HEX
(
2
,
trace
,
&
ipm
->
ipm
.
ip_addr
,
4
);
list_add
(
&
ipm
->
list
,
&
card
->
ipm_list
);
list_add
(
&
ipm
->
list
,
&
card
->
ipm_list
);
spin_unlock_irqrestore
(
&
card
->
ipm_lock
,
flags
);
spin_unlock_irqrestore
(
&
card
->
ipm_lock
,
flags
);
}
}
...
@@ -1269,7 +1265,15 @@ lcs_register_mc_addresses(void *data)
...
@@ -1269,7 +1265,15 @@ lcs_register_mc_addresses(void *data)
read_unlock
(
&
in4_dev
->
mc_list_lock
);
read_unlock
(
&
in4_dev
->
mc_list_lock
);
in_dev_put
(
in4_dev
);
in_dev_put
(
in4_dev
);
netif_carrier_off
(
card
->
dev
);
netif_tx_disable
(
card
->
dev
);
wait_event
(
card
->
write
.
wait_q
,
(
card
->
write
.
state
!=
CH_STATE_RUNNING
));
lcs_fix_multicast_list
(
card
);
lcs_fix_multicast_list
(
card
);
if
(
card
->
state
==
DEV_STATE_UP
)
{
netif_carrier_on
(
card
->
dev
);
netif_wake_queue
(
card
->
dev
);
}
out:
out:
lcs_clear_thread_running_bit
(
card
,
LCS_SET_MC_THREAD
);
lcs_clear_thread_running_bit
(
card
,
LCS_SET_MC_THREAD
);
return
0
;
return
0
;
...
@@ -1286,7 +1290,7 @@ lcs_set_multicast_list(struct net_device *dev)
...
@@ -1286,7 +1290,7 @@ lcs_set_multicast_list(struct net_device *dev)
LCS_DBF_TEXT
(
4
,
trace
,
"setmulti"
);
LCS_DBF_TEXT
(
4
,
trace
,
"setmulti"
);
card
=
(
struct
lcs_card
*
)
dev
->
priv
;
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
);
schedule_work
(
&
card
->
kernel_thread_starter
);
}
}
...
@@ -1318,6 +1322,53 @@ lcs_check_irb_error(struct ccw_device *cdev, struct irb *irb)
...
@@ -1318,6 +1322,53 @@ lcs_check_irb_error(struct ccw_device *cdev, struct irb *irb)
return
PTR_ERR
(
irb
);
return
PTR_ERR
(
irb
);
}
}
static
int
lcs_get_problem
(
struct
ccw_device
*
cdev
,
struct
irb
*
irb
)
{
int
dstat
,
cstat
;
char
*
sense
;
sense
=
(
char
*
)
irb
->
ecw
;
cstat
=
irb
->
scsw
.
cstat
;
dstat
=
irb
->
scsw
.
dstat
;
if
(
cstat
&
(
SCHN_STAT_CHN_CTRL_CHK
|
SCHN_STAT_INTF_CTRL_CHK
|
SCHN_STAT_CHN_DATA_CHK
|
SCHN_STAT_CHAIN_CHECK
|
SCHN_STAT_PROT_CHECK
|
SCHN_STAT_PROG_CHECK
))
{
LCS_DBF_TEXT
(
2
,
trace
,
"CGENCHK"
);
return
1
;
}
if
(
dstat
&
DEV_STAT_UNIT_CHECK
)
{
if
(
sense
[
LCS_SENSE_BYTE_1
]
&
LCS_SENSE_RESETTING_EVENT
)
{
LCS_DBF_TEXT
(
2
,
trace
,
"REVIND"
);
return
1
;
}
if
(
sense
[
LCS_SENSE_BYTE_0
]
&
LCS_SENSE_CMD_REJECT
)
{
LCS_DBF_TEXT
(
2
,
trace
,
"CMDREJ"
);
return
0
;
}
if
((
!
sense
[
LCS_SENSE_BYTE_0
])
&&
(
!
sense
[
LCS_SENSE_BYTE_1
])
&&
(
!
sense
[
LCS_SENSE_BYTE_2
])
&&
(
!
sense
[
LCS_SENSE_BYTE_3
]))
{
LCS_DBF_TEXT
(
2
,
trace
,
"ZEROSEN"
);
return
0
;
}
LCS_DBF_TEXT
(
2
,
trace
,
"DGENCHK"
);
return
1
;
}
return
0
;
}
void
lcs_schedule_recovery
(
struct
lcs_card
*
card
)
{
LCS_DBF_TEXT
(
2
,
trace
,
"startrec"
);
if
(
!
lcs_set_thread_start_bit
(
card
,
LCS_RECOVERY_THREAD
))
schedule_work
(
&
card
->
kernel_thread_starter
);
}
/**
/**
* IRQ Handler for LCS channels
* IRQ Handler for LCS channels
...
@@ -1327,7 +1378,8 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1327,7 +1378,8 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
{
{
struct
lcs_card
*
card
;
struct
lcs_card
*
card
;
struct
lcs_channel
*
channel
;
struct
lcs_channel
*
channel
;
int
index
;
int
rc
,
index
;
int
cstat
,
dstat
;
if
(
lcs_check_irb_error
(
cdev
,
irb
))
if
(
lcs_check_irb_error
(
cdev
,
irb
))
return
;
return
;
...
@@ -1338,14 +1390,27 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1338,14 +1390,27 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
else
else
channel
=
&
card
->
write
;
channel
=
&
card
->
write
;
cstat
=
irb
->
scsw
.
cstat
;
dstat
=
irb
->
scsw
.
dstat
;
LCS_DBF_TEXT_
(
5
,
trace
,
"Rint%s"
,
cdev
->
dev
.
bus_id
);
LCS_DBF_TEXT_
(
5
,
trace
,
"Rint%s"
,
cdev
->
dev
.
bus_id
);
LCS_DBF_TEXT_
(
5
,
trace
,
"%4x%4x"
,
irb
->
scsw
.
cstat
,
irb
->
scsw
.
dstat
);
LCS_DBF_TEXT_
(
5
,
trace
,
"%4x%4x"
,
irb
->
scsw
.
cstat
,
irb
->
scsw
.
dstat
);
LCS_DBF_TEXT_
(
5
,
trace
,
"%4x%4x"
,
irb
->
scsw
.
fctl
,
irb
->
scsw
.
actl
);
LCS_DBF_TEXT_
(
5
,
trace
,
"%4x%4x"
,
irb
->
scsw
.
fctl
,
irb
->
scsw
.
actl
);
/* Check for channel and device errors presented */
rc
=
lcs_get_problem
(
cdev
,
irb
);
if
(
rc
||
(
dstat
&
DEV_STAT_UNIT_EXCEP
))
{
PRINT_WARN
(
"check on device %s, dstat=0x%X, cstat=0x%X
\n
"
,
cdev
->
dev
.
bus_id
,
dstat
,
cstat
);
if
(
rc
)
{
lcs_schedule_recovery
(
card
);
wake_up
(
&
card
->
wait_q
);
return
;
}
}
/* How far in the ccw chain have we processed? */
/* How far in the ccw chain have we processed? */
if
((
channel
->
state
!=
CH_STATE_INIT
)
&&
if
((
channel
->
state
!=
CH_STATE_INIT
)
&&
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_START_FUNC
))
{
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_START_FUNC
))
{
index
=
(
struct
ccw1
*
)
__va
((
addr_t
)
irb
->
scsw
.
cpa
)
index
=
(
struct
ccw1
*
)
__va
((
addr_t
)
irb
->
scsw
.
cpa
)
-
channel
->
ccws
;
-
channel
->
ccws
;
if
((
irb
->
scsw
.
actl
&
SCSW_ACTL_SUSPENDED
)
||
if
((
irb
->
scsw
.
actl
&
SCSW_ACTL_SUSPENDED
)
||
(
irb
->
scsw
.
cstat
&
SCHN_STAT_PCI
))
(
irb
->
scsw
.
cstat
&
SCHN_STAT_PCI
))
...
@@ -1367,7 +1432,6 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1367,7 +1432,6 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
else
if
(
irb
->
scsw
.
actl
&
SCSW_ACTL_SUSPENDED
)
else
if
(
irb
->
scsw
.
actl
&
SCSW_ACTL_SUSPENDED
)
/* CCW execution stopped on a suspend bit. */
/* CCW execution stopped on a suspend bit. */
channel
->
state
=
CH_STATE_SUSPENDED
;
channel
->
state
=
CH_STATE_SUSPENDED
;
if
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_HALT_FUNC
)
{
if
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_HALT_FUNC
)
{
if
(
irb
->
scsw
.
cc
!=
0
)
{
if
(
irb
->
scsw
.
cc
!=
0
)
{
ccw_device_halt
(
channel
->
ccwdev
,
(
addr_t
)
channel
);
ccw_device_halt
(
channel
->
ccwdev
,
(
addr_t
)
channel
);
...
@@ -1376,7 +1440,6 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
...
@@ -1376,7 +1440,6 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
/* The channel has been stopped by halt_IO. */
/* The channel has been stopped by halt_IO. */
channel
->
state
=
CH_STATE_HALTED
;
channel
->
state
=
CH_STATE_HALTED
;
}
}
if
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_CLEAR_FUNC
)
{
if
(
irb
->
scsw
.
fctl
&
SCSW_FCTL_CLEAR_FUNC
)
{
channel
->
state
=
CH_STATE_CLEARED
;
channel
->
state
=
CH_STATE_CLEARED
;
}
}
...
@@ -1452,7 +1515,7 @@ lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
...
@@ -1452,7 +1515,7 @@ lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
lcs_release_buffer
(
channel
,
buffer
);
lcs_release_buffer
(
channel
,
buffer
);
card
=
(
struct
lcs_card
*
)
card
=
(
struct
lcs_card
*
)
((
char
*
)
channel
-
offsetof
(
struct
lcs_card
,
write
));
((
char
*
)
channel
-
offsetof
(
struct
lcs_card
,
write
));
if
(
netif_queue_stopped
(
card
->
dev
))
if
(
netif_queue_stopped
(
card
->
dev
)
&&
netif_carrier_ok
(
card
->
dev
)
)
netif_wake_queue
(
card
->
dev
);
netif_wake_queue
(
card
->
dev
);
spin_lock
(
&
card
->
lock
);
spin_lock
(
&
card
->
lock
);
card
->
tx_emitted
--
;
card
->
tx_emitted
--
;
...
@@ -1488,6 +1551,10 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
...
@@ -1488,6 +1551,10 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
card
->
stats
.
tx_carrier_errors
++
;
card
->
stats
.
tx_carrier_errors
++
;
return
0
;
return
0
;
}
}
if
(
skb
->
protocol
==
htons
(
ETH_P_IPV6
))
{
dev_kfree_skb
(
skb
);
return
0
;
}
netif_stop_queue
(
card
->
dev
);
netif_stop_queue
(
card
->
dev
);
spin_lock
(
&
card
->
lock
);
spin_lock
(
&
card
->
lock
);
if
(
card
->
tx_buffer
!=
NULL
&&
if
(
card
->
tx_buffer
!=
NULL
&&
...
@@ -1632,30 +1699,6 @@ lcs_detect(struct lcs_card *card)
...
@@ -1632,30 +1699,6 @@ lcs_detect(struct lcs_card *card)
return
rc
;
return
rc
;
}
}
/**
* reset card
*/
static
int
lcs_resetcard
(
struct
lcs_card
*
card
)
{
int
retries
;
LCS_DBF_TEXT
(
2
,
trace
,
"rescard"
);
for
(
retries
=
0
;
retries
<
10
;
retries
++
)
{
if
(
lcs_detect
(
card
)
==
0
)
{
netif_wake_queue
(
card
->
dev
);
card
->
state
=
DEV_STATE_UP
;
PRINT_INFO
(
"LCS device %s successfully restarted!
\n
"
,
card
->
dev
->
name
);
return
0
;
}
msleep
(
3000
);
}
PRINT_ERR
(
"Error in Reseting LCS card!
\n
"
);
return
-
EIO
;
}
/**
/**
* LCS Stop card
* LCS Stop card
*/
*/
...
@@ -1679,111 +1722,6 @@ lcs_stopcard(struct lcs_card *card)
...
@@ -1679,111 +1722,6 @@ lcs_stopcard(struct lcs_card *card)
return
rc
;
return
rc
;
}
}
/**
* LGW initiated commands
*/
static
int
lcs_lgw_startlan_thread
(
void
*
data
)
{
struct
lcs_card
*
card
;
card
=
(
struct
lcs_card
*
)
data
;
daemonize
(
"lgwstpln"
);
if
(
!
lcs_do_run_thread
(
card
,
LCS_STARTLAN_THREAD
))
return
0
;
LCS_DBF_TEXT
(
4
,
trace
,
"lgwstpln"
);
if
(
card
->
dev
)
netif_stop_queue
(
card
->
dev
);
if
(
lcs_startlan
(
card
)
==
0
)
{
netif_wake_queue
(
card
->
dev
);
card
->
state
=
DEV_STATE_UP
;
PRINT_INFO
(
"LCS Startlan for device %s succeeded!
\n
"
,
card
->
dev
->
name
);
}
else
PRINT_ERR
(
"LCS Startlan for device %s failed!
\n
"
,
card
->
dev
->
name
);
lcs_clear_thread_running_bit
(
card
,
LCS_STARTLAN_THREAD
);
return
0
;
}
/**
* Send startup command initiated by Lan Gateway
*/
static
int
lcs_lgw_startup_thread
(
void
*
data
)
{
int
rc
;
struct
lcs_card
*
card
;
card
=
(
struct
lcs_card
*
)
data
;
daemonize
(
"lgwstaln"
);
if
(
!
lcs_do_run_thread
(
card
,
LCS_STARTUP_THREAD
))
return
0
;
LCS_DBF_TEXT
(
4
,
trace
,
"lgwstaln"
);
if
(
card
->
dev
)
netif_stop_queue
(
card
->
dev
);
rc
=
lcs_send_startup
(
card
,
LCS_INITIATOR_LGW
);
if
(
rc
!=
0
)
{
PRINT_ERR
(
"Startup for LCS device %s initiated "
\
"by LGW failed!
\n
Reseting card ...
\n
"
,
card
->
dev
->
name
);
/* do a card reset */
rc
=
lcs_resetcard
(
card
);
if
(
rc
==
0
)
goto
Done
;
}
rc
=
lcs_startlan
(
card
);
if
(
rc
==
0
)
{
netif_wake_queue
(
card
->
dev
);
card
->
state
=
DEV_STATE_UP
;
}
Done:
if
(
rc
==
0
)
PRINT_INFO
(
"LCS Startup for device %s succeeded!
\n
"
,
card
->
dev
->
name
);
else
PRINT_ERR
(
"LCS Startup for device %s failed!
\n
"
,
card
->
dev
->
name
);
lcs_clear_thread_running_bit
(
card
,
LCS_STARTUP_THREAD
);
return
0
;
}
/**
* send stoplan command initiated by Lan Gateway
*/
static
int
lcs_lgw_stoplan_thread
(
void
*
data
)
{
struct
lcs_card
*
card
;
int
rc
;
card
=
(
struct
lcs_card
*
)
data
;
daemonize
(
"lgwstop"
);
if
(
!
lcs_do_run_thread
(
card
,
LCS_STOPLAN_THREAD
))
return
0
;
LCS_DBF_TEXT
(
4
,
trace
,
"lgwstop"
);
if
(
card
->
dev
)
netif_stop_queue
(
card
->
dev
);
if
(
lcs_send_stoplan
(
card
,
LCS_INITIATOR_LGW
)
==
0
)
PRINT_INFO
(
"Stoplan for %s initiated by LGW succeeded!
\n
"
,
card
->
dev
->
name
);
else
PRINT_ERR
(
"Stoplan %s initiated by LGW failed!
\n
"
,
card
->
dev
->
name
);
/*Try to reset the card, stop it on failure */
rc
=
lcs_resetcard
(
card
);
if
(
rc
!=
0
)
rc
=
lcs_stopcard
(
card
);
lcs_clear_thread_running_bit
(
card
,
LCS_STOPLAN_THREAD
);
return
rc
;
}
/**
/**
* Kernel Thread helper functions for LGW initiated commands
* Kernel Thread helper functions for LGW initiated commands
*/
*/
...
@@ -1791,15 +1729,12 @@ static void
...
@@ -1791,15 +1729,12 @@ static void
lcs_start_kernel_thread
(
struct
lcs_card
*
card
)
lcs_start_kernel_thread
(
struct
lcs_card
*
card
)
{
{
LCS_DBF_TEXT
(
5
,
trace
,
"krnthrd"
);
LCS_DBF_TEXT
(
5
,
trace
,
"krnthrd"
);
if
(
lcs_do_start_thread
(
card
,
LCS_STARTUP_THREAD
))
if
(
lcs_do_start_thread
(
card
,
LCS_RECOVERY_THREAD
))
kernel_thread
(
lcs_lgw_startup_thread
,
(
void
*
)
card
,
SIGCHLD
);
kernel_thread
(
lcs_recovery
,
(
void
*
)
card
,
SIGCHLD
);
if
(
lcs_do_start_thread
(
card
,
LCS_STARTLAN_THREAD
))
kernel_thread
(
lcs_lgw_startlan_thread
,
(
void
*
)
card
,
SIGCHLD
);
if
(
lcs_do_start_thread
(
card
,
LCS_STOPLAN_THREAD
))
kernel_thread
(
lcs_lgw_stoplan_thread
,
(
void
*
)
card
,
SIGCHLD
);
#ifdef CONFIG_IP_MULTICAST
#ifdef CONFIG_IP_MULTICAST
if
(
lcs_do_start_thread
(
card
,
LCS_SET_MC_THREAD
))
if
(
lcs_do_start_thread
(
card
,
LCS_SET_MC_THREAD
))
kernel_thread
(
lcs_register_mc_addresses
,
(
void
*
)
card
,
SIGCHLD
);
kernel_thread
(
lcs_register_mc_addresses
,
(
void
*
)
card
,
SIGCHLD
);
#endif
#endif
}
}
...
@@ -1813,19 +1748,14 @@ lcs_get_control(struct lcs_card *card, struct lcs_cmd *cmd)
...
@@ -1813,19 +1748,14 @@ lcs_get_control(struct lcs_card *card, struct lcs_cmd *cmd)
if
(
cmd
->
initiator
==
LCS_INITIATOR_LGW
)
{
if
(
cmd
->
initiator
==
LCS_INITIATOR_LGW
)
{
switch
(
cmd
->
cmd_code
)
{
switch
(
cmd
->
cmd_code
)
{
case
LCS_CMD_STARTUP
:
case
LCS_CMD_STARTUP
:
if
(
!
lcs_set_thread_start_bit
(
card
,
LCS_STARTUP_THREAD
))
schedule_work
(
&
card
->
kernel_thread_starter
);
break
;
case
LCS_CMD_STARTLAN
:
case
LCS_CMD_STARTLAN
:
if
(
!
lcs_set_thread_start_bit
(
card
,
lcs_schedule_recovery
(
card
);
LCS_STARTLAN_THREAD
))
schedule_work
(
&
card
->
kernel_thread_starter
);
break
;
break
;
case
LCS_CMD_STOPLAN
:
case
LCS_CMD_STOPLAN
:
if
(
!
lcs_set_thread_start_bit
(
card
,
PRINT_WARN
(
"Stoplan for %s initiated by LGW.
\n
"
,
LCS_STOPLAN_THREAD
))
card
->
dev
->
name
);
schedule_work
(
&
card
->
kernel_thread_starter
);
if
(
card
->
dev
)
netif_carrier_off
(
card
->
dev
);
break
;
break
;
default:
default:
PRINT_INFO
(
"UNRECOGNIZED LGW COMMAND
\n
"
);
PRINT_INFO
(
"UNRECOGNIZED LGW COMMAND
\n
"
);
...
@@ -1941,8 +1871,11 @@ lcs_stop_device(struct net_device *dev)
...
@@ -1941,8 +1871,11 @@ lcs_stop_device(struct net_device *dev)
LCS_DBF_TEXT
(
2
,
trace
,
"stopdev"
);
LCS_DBF_TEXT
(
2
,
trace
,
"stopdev"
);
card
=
(
struct
lcs_card
*
)
dev
->
priv
;
card
=
(
struct
lcs_card
*
)
dev
->
priv
;
netif_stop_queue
(
dev
);
netif_carrier_off
(
dev
);
netif_tx_disable
(
dev
);
dev
->
flags
&=
~
IFF_UP
;
dev
->
flags
&=
~
IFF_UP
;
wait_event
(
card
->
write
.
wait_q
,
(
card
->
write
.
state
!=
CH_STATE_RUNNING
));
rc
=
lcs_stopcard
(
card
);
rc
=
lcs_stopcard
(
card
);
if
(
rc
)
if
(
rc
)
PRINT_ERR
(
"Try it again!
\n
"
);
PRINT_ERR
(
"Try it again!
\n
"
);
...
@@ -1968,6 +1901,7 @@ lcs_open_device(struct net_device *dev)
...
@@ -1968,6 +1901,7 @@ lcs_open_device(struct net_device *dev)
}
else
{
}
else
{
dev
->
flags
|=
IFF_UP
;
dev
->
flags
|=
IFF_UP
;
netif_carrier_on
(
dev
);
netif_wake_queue
(
dev
);
netif_wake_queue
(
dev
);
card
->
state
=
DEV_STATE_UP
;
card
->
state
=
DEV_STATE_UP
;
}
}
...
@@ -2059,10 +1993,31 @@ lcs_timeout_store (struct device *dev, struct device_attribute *attr, const char
...
@@ -2059,10 +1993,31 @@ lcs_timeout_store (struct device *dev, struct device_attribute *attr, const char
DEVICE_ATTR
(
lancmd_timeout
,
0644
,
lcs_timeout_show
,
lcs_timeout_store
);
DEVICE_ATTR
(
lancmd_timeout
,
0644
,
lcs_timeout_show
,
lcs_timeout_store
);
static
ssize_t
lcs_dev_recover_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
struct
lcs_card
*
card
=
dev
->
driver_data
;
char
*
tmp
;
int
i
;
if
(
!
card
)
return
-
EINVAL
;
if
(
card
->
state
!=
DEV_STATE_UP
)
return
-
EPERM
;
i
=
simple_strtoul
(
buf
,
&
tmp
,
16
);
if
(
i
==
1
)
lcs_schedule_recovery
(
card
);
return
count
;
}
static
DEVICE_ATTR
(
recover
,
0200
,
NULL
,
lcs_dev_recover_store
);
static
struct
attribute
*
lcs_attrs
[]
=
{
static
struct
attribute
*
lcs_attrs
[]
=
{
&
dev_attr_portno
.
attr
,
&
dev_attr_portno
.
attr
,
&
dev_attr_type
.
attr
,
&
dev_attr_type
.
attr
,
&
dev_attr_lancmd_timeout
.
attr
,
&
dev_attr_lancmd_timeout
.
attr
,
&
dev_attr_recover
.
attr
,
NULL
,
NULL
,
};
};
...
@@ -2099,6 +2054,12 @@ lcs_probe_device(struct ccwgroup_device *ccwgdev)
...
@@ -2099,6 +2054,12 @@ lcs_probe_device(struct ccwgroup_device *ccwgdev)
ccwgdev
->
dev
.
driver_data
=
card
;
ccwgdev
->
dev
.
driver_data
=
card
;
ccwgdev
->
cdev
[
0
]
->
handler
=
lcs_irq
;
ccwgdev
->
cdev
[
0
]
->
handler
=
lcs_irq
;
ccwgdev
->
cdev
[
1
]
->
handler
=
lcs_irq
;
ccwgdev
->
cdev
[
1
]
->
handler
=
lcs_irq
;
card
->
gdev
=
ccwgdev
;
INIT_WORK
(
&
card
->
kernel_thread_starter
,
(
void
*
)
lcs_start_kernel_thread
,
card
);
card
->
thread_start_mask
=
0
;
card
->
thread_allowed_mask
=
0
;
card
->
thread_running_mask
=
0
;
return
0
;
return
0
;
}
}
...
@@ -2200,6 +2161,7 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
...
@@ -2200,6 +2161,7 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
if
(
recover_state
==
DEV_STATE_RECOVER
)
{
if
(
recover_state
==
DEV_STATE_RECOVER
)
{
lcs_set_multicast_list
(
card
->
dev
);
lcs_set_multicast_list
(
card
->
dev
);
card
->
dev
->
flags
|=
IFF_UP
;
card
->
dev
->
flags
|=
IFF_UP
;
netif_carrier_on
(
card
->
dev
);
netif_wake_queue
(
card
->
dev
);
netif_wake_queue
(
card
->
dev
);
card
->
state
=
DEV_STATE_UP
;
card
->
state
=
DEV_STATE_UP
;
}
else
{
}
else
{
...
@@ -2229,7 +2191,7 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
...
@@ -2229,7 +2191,7 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
* lcs_shutdown_device, called when setting the group device offline.
* lcs_shutdown_device, called when setting the group device offline.
*/
*/
static
int
static
int
lcs_shutdown_device
(
struct
ccwgroup_device
*
ccwgdev
)
__lcs_shutdown_device
(
struct
ccwgroup_device
*
ccwgdev
,
int
recovery_mode
)
{
{
struct
lcs_card
*
card
;
struct
lcs_card
*
card
;
enum
lcs_dev_states
recover_state
;
enum
lcs_dev_states
recover_state
;
...
@@ -2239,9 +2201,11 @@ lcs_shutdown_device(struct ccwgroup_device *ccwgdev)
...
@@ -2239,9 +2201,11 @@ lcs_shutdown_device(struct ccwgroup_device *ccwgdev)
card
=
(
struct
lcs_card
*
)
ccwgdev
->
dev
.
driver_data
;
card
=
(
struct
lcs_card
*
)
ccwgdev
->
dev
.
driver_data
;
if
(
!
card
)
if
(
!
card
)
return
-
ENODEV
;
return
-
ENODEV
;
lcs_set_allowed_threads
(
card
,
0
);
if
(
recovery_mode
==
0
)
{
if
(
lcs_wait_for_threads
(
card
,
LCS_SET_MC_THREAD
))
lcs_set_allowed_threads
(
card
,
0
);
return
-
ERESTARTSYS
;
if
(
lcs_wait_for_threads
(
card
,
LCS_SET_MC_THREAD
))
return
-
ERESTARTSYS
;
}
LCS_DBF_HEX
(
3
,
setup
,
&
card
,
sizeof
(
void
*
));
LCS_DBF_HEX
(
3
,
setup
,
&
card
,
sizeof
(
void
*
));
recover_state
=
card
->
state
;
recover_state
=
card
->
state
;
...
@@ -2256,6 +2220,43 @@ lcs_shutdown_device(struct ccwgroup_device *ccwgdev)
...
@@ -2256,6 +2220,43 @@ lcs_shutdown_device(struct ccwgroup_device *ccwgdev)
return
0
;
return
0
;
}
}
static
int
lcs_shutdown_device
(
struct
ccwgroup_device
*
ccwgdev
)
{
return
__lcs_shutdown_device
(
ccwgdev
,
0
);
}
/**
* drive lcs recovery after startup and startlan initiated by Lan Gateway
*/
static
int
lcs_recovery
(
void
*
ptr
)
{
struct
lcs_card
*
card
;
struct
ccwgroup_device
*
gdev
;
int
rc
;
card
=
(
struct
lcs_card
*
)
ptr
;
daemonize
(
"lcs_recover"
);
LCS_DBF_TEXT
(
4
,
trace
,
"recover1"
);
if
(
!
lcs_do_run_thread
(
card
,
LCS_RECOVERY_THREAD
))
return
0
;
LCS_DBF_TEXT
(
4
,
trace
,
"recover2"
);
gdev
=
card
->
gdev
;
PRINT_WARN
(
"Recovery of device %s started...
\n
"
,
gdev
->
dev
.
bus_id
);
rc
=
__lcs_shutdown_device
(
gdev
,
1
);
rc
=
lcs_new_device
(
gdev
);
if
(
!
rc
)
PRINT_INFO
(
"Device %s successfully recovered!
\n
"
,
card
->
dev
->
name
);
else
PRINT_INFO
(
"Device %s could not be recovered!
\n
"
,
card
->
dev
->
name
);
lcs_clear_thread_running_bit
(
card
,
LCS_RECOVERY_THREAD
);
return
0
;
}
/**
/**
* lcs_remove_device, free buffers and card
* lcs_remove_device, free buffers and card
*/
*/
...
...
drivers/s390/net/lcs.h
浏览文件 @
89f8185e
...
@@ -73,13 +73,17 @@ do { \
...
@@ -73,13 +73,17 @@ do { \
/**
/**
* LCS sense byte definitions
* LCS sense byte definitions
*/
*/
#define LCS_SENSE_BYTE_0 0
#define LCS_SENSE_BYTE_1 1
#define LCS_SENSE_BYTE_2 2
#define LCS_SENSE_BYTE_3 3
#define LCS_SENSE_INTERFACE_DISCONNECT 0x01
#define LCS_SENSE_INTERFACE_DISCONNECT 0x01
#define LCS_SENSE_EQUIPMENT_CHECK 0x10
#define LCS_SENSE_EQUIPMENT_CHECK 0x10
#define LCS_SENSE_BUS_OUT_CHECK 0x20
#define LCS_SENSE_BUS_OUT_CHECK 0x20
#define LCS_SENSE_INTERVENTION_REQUIRED 0x40
#define LCS_SENSE_INTERVENTION_REQUIRED 0x40
#define LCS_SENSE_CMD_REJECT 0x80
#define LCS_SENSE_CMD_REJECT 0x80
#define LCS_SENSE_RESETTING_EVENT 0x
00
80
#define LCS_SENSE_RESETTING_EVENT 0x80
#define LCS_SENSE_DEVICE_ONLINE 0x
00
20
#define LCS_SENSE_DEVICE_ONLINE 0x20
/**
/**
* LCS packet type definitions
* LCS packet type definitions
...
@@ -152,10 +156,9 @@ enum lcs_dev_states {
...
@@ -152,10 +156,9 @@ enum lcs_dev_states {
enum
lcs_threads
{
enum
lcs_threads
{
LCS_SET_MC_THREAD
=
1
,
LCS_SET_MC_THREAD
=
1
,
LCS_STARTLAN_THREAD
=
2
,
LCS_RECOVERY_THREAD
=
2
,
LCS_STOPLAN_THREAD
=
4
,
LCS_STARTUP_THREAD
=
8
,
};
};
/**
/**
* LCS struct declarations
* LCS struct declarations
*/
*/
...
@@ -286,6 +289,7 @@ struct lcs_card {
...
@@ -286,6 +289,7 @@ struct lcs_card {
struct
net_device_stats
stats
;
struct
net_device_stats
stats
;
unsigned
short
(
*
lan_type_trans
)(
struct
sk_buff
*
skb
,
unsigned
short
(
*
lan_type_trans
)(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
);
struct
net_device
*
dev
);
struct
ccwgroup_device
*
gdev
;
struct
lcs_channel
read
;
struct
lcs_channel
read
;
struct
lcs_channel
write
;
struct
lcs_channel
write
;
struct
lcs_buffer
*
tx_buffer
;
struct
lcs_buffer
*
tx_buffer
;
...
...
drivers/s390/net/netiucv.c
浏览文件 @
89f8185e
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*
*/
*/
#undef DEBUG
#undef DEBUG
#include <linux/module.h>
#include <linux/module.h>
...
@@ -65,7 +65,7 @@ MODULE_AUTHOR
...
@@ -65,7 +65,7 @@ MODULE_AUTHOR
(
"(C) 2001 IBM Corporation by Fritz Elfert (felfert@millenux.com)"
);
(
"(C) 2001 IBM Corporation by Fritz Elfert (felfert@millenux.com)"
);
MODULE_DESCRIPTION
(
"Linux for S/390 IUCV network driver"
);
MODULE_DESCRIPTION
(
"Linux for S/390 IUCV network driver"
);
#define PRINTK_HEADER " iucv: "
/* for debugging */
#define PRINTK_HEADER " iucv: "
/* for debugging */
static
struct
device_driver
netiucv_driver
=
{
static
struct
device_driver
netiucv_driver
=
{
...
@@ -202,7 +202,7 @@ netiucv_printname(char *name)
...
@@ -202,7 +202,7 @@ netiucv_printname(char *name)
*
p
=
'\0'
;
*
p
=
'\0'
;
return
tmp
;
return
tmp
;
}
}
/**
/**
* States of the interface statemachine.
* States of the interface statemachine.
*/
*/
...
@@ -244,7 +244,7 @@ static const char *dev_event_names[] = {
...
@@ -244,7 +244,7 @@ static const char *dev_event_names[] = {
"Connection up"
,
"Connection up"
,
"Connection down"
,
"Connection down"
,
};
};
/**
/**
* Events of the connection statemachine
* Events of the connection statemachine
*/
*/
...
@@ -364,7 +364,7 @@ static const char *conn_state_names[] = {
...
@@ -364,7 +364,7 @@ static const char *conn_state_names[] = {
"Connect error"
,
"Connect error"
,
};
};
/**
/**
* Debug Facility Stuff
* Debug Facility Stuff
*/
*/
...
@@ -516,7 +516,7 @@ static void
...
@@ -516,7 +516,7 @@ static void
fsm_action_nop
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
fsm_action_nop
(
fsm_instance
*
fi
,
int
event
,
void
*
arg
)
{
{
}
}
/**
/**
* Actions of the connection statemachine
* Actions of the connection statemachine
*****************************************************************************/
*****************************************************************************/
...
@@ -993,7 +993,7 @@ static const fsm_node conn_fsm[] = {
...
@@ -993,7 +993,7 @@ static const fsm_node conn_fsm[] = {
static
const
int
CONN_FSM_LEN
=
sizeof
(
conn_fsm
)
/
sizeof
(
fsm_node
);
static
const
int
CONN_FSM_LEN
=
sizeof
(
conn_fsm
)
/
sizeof
(
fsm_node
);
/**
/**
* Actions for interface - statemachine.
* Actions for interface - statemachine.
*****************************************************************************/
*****************************************************************************/
...
@@ -1182,7 +1182,7 @@ netiucv_transmit_skb(struct iucv_connection *conn, struct sk_buff *skb) {
...
@@ -1182,7 +1182,7 @@ netiucv_transmit_skb(struct iucv_connection *conn, struct sk_buff *skb) {
fsm_newstate
(
conn
->
fsm
,
CONN_STATE_TX
);
fsm_newstate
(
conn
->
fsm
,
CONN_STATE_TX
);
conn
->
prof
.
send_stamp
=
xtime
;
conn
->
prof
.
send_stamp
=
xtime
;
rc
=
iucv_send
(
conn
->
pathid
,
NULL
,
0
,
0
,
1
/* single_flag */
,
rc
=
iucv_send
(
conn
->
pathid
,
NULL
,
0
,
0
,
1
/* single_flag */
,
0
,
nskb
->
data
,
nskb
->
len
);
0
,
nskb
->
data
,
nskb
->
len
);
/* Shut up, gcc! nskb is always below 2G. */
/* Shut up, gcc! nskb is always below 2G. */
...
@@ -1220,7 +1220,7 @@ netiucv_transmit_skb(struct iucv_connection *conn, struct sk_buff *skb) {
...
@@ -1220,7 +1220,7 @@ netiucv_transmit_skb(struct iucv_connection *conn, struct sk_buff *skb) {
return
rc
;
return
rc
;
}
}
/**
/**
* Interface API for upper network layers
* Interface API for upper network layers
*****************************************************************************/
*****************************************************************************/
...
@@ -1291,7 +1291,7 @@ static int netiucv_tx(struct sk_buff *skb, struct net_device *dev)
...
@@ -1291,7 +1291,7 @@ static int netiucv_tx(struct sk_buff *skb, struct net_device *dev)
/**
/**
* If connection is not running, try to restart it
* If connection is not running, try to restart it
* and throw away packet.
* and throw away packet.
*/
*/
if
(
fsm_getstate
(
privptr
->
fsm
)
!=
DEV_STATE_RUNNING
)
{
if
(
fsm_getstate
(
privptr
->
fsm
)
!=
DEV_STATE_RUNNING
)
{
fsm_event
(
privptr
->
fsm
,
DEV_EVENT_START
,
dev
);
fsm_event
(
privptr
->
fsm
,
DEV_EVENT_START
,
dev
);
...
@@ -1538,7 +1538,7 @@ static ssize_t
...
@@ -1538,7 +1538,7 @@ static ssize_t
maxcq_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
maxcq_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
priv
->
conn
->
prof
.
maxcqueue
=
0
;
priv
->
conn
->
prof
.
maxcqueue
=
0
;
return
count
;
return
count
;
...
@@ -1559,7 +1559,7 @@ static ssize_t
...
@@ -1559,7 +1559,7 @@ static ssize_t
sdoio_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
sdoio_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
priv
->
conn
->
prof
.
doios_single
=
0
;
priv
->
conn
->
prof
.
doios_single
=
0
;
return
count
;
return
count
;
...
@@ -1580,7 +1580,7 @@ static ssize_t
...
@@ -1580,7 +1580,7 @@ static ssize_t
mdoio_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
mdoio_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
IUCV_DBF_TEXT
(
trace
,
5
,
__FUNCTION__
);
IUCV_DBF_TEXT
(
trace
,
5
,
__FUNCTION__
);
priv
->
conn
->
prof
.
doios_multi
=
0
;
priv
->
conn
->
prof
.
doios_multi
=
0
;
return
count
;
return
count
;
...
@@ -1601,7 +1601,7 @@ static ssize_t
...
@@ -1601,7 +1601,7 @@ static ssize_t
txlen_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
txlen_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
priv
->
conn
->
prof
.
txlen
=
0
;
priv
->
conn
->
prof
.
txlen
=
0
;
return
count
;
return
count
;
...
@@ -1622,7 +1622,7 @@ static ssize_t
...
@@ -1622,7 +1622,7 @@ static ssize_t
txtime_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
txtime_write
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
struct
netiucv_priv
*
priv
=
dev
->
driver_data
;
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
IUCV_DBF_TEXT
(
trace
,
4
,
__FUNCTION__
);
priv
->
conn
->
prof
.
tx_time
=
0
;
priv
->
conn
->
prof
.
tx_time
=
0
;
return
count
;
return
count
;
...
@@ -2000,7 +2000,7 @@ conn_write(struct device_driver *drv, const char *buf, size_t count)
...
@@ -2000,7 +2000,7 @@ conn_write(struct device_driver *drv, const char *buf, size_t count)
}
}
PRINT_INFO
(
"%s: '%s'
\n
"
,
dev
->
name
,
netiucv_printname
(
username
));
PRINT_INFO
(
"%s: '%s'
\n
"
,
dev
->
name
,
netiucv_printname
(
username
));
return
count
;
return
count
;
out_free_ndev:
out_free_ndev:
...
@@ -2099,7 +2099,7 @@ static int __init
...
@@ -2099,7 +2099,7 @@ static int __init
netiucv_init
(
void
)
netiucv_init
(
void
)
{
{
int
ret
;
int
ret
;
ret
=
iucv_register_dbf_views
();
ret
=
iucv_register_dbf_views
();
if
(
ret
)
{
if
(
ret
)
{
PRINT_WARN
(
"netiucv_init failed, "
PRINT_WARN
(
"netiucv_init failed, "
...
@@ -2128,7 +2128,7 @@ netiucv_init(void)
...
@@ -2128,7 +2128,7 @@ netiucv_init(void)
}
}
return
ret
;
return
ret
;
}
}
module_init
(
netiucv_init
);
module_init
(
netiucv_init
);
module_exit
(
netiucv_exit
);
module_exit
(
netiucv_exit
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
drivers/s390/net/qeth.h
浏览文件 @
89f8185e
...
@@ -376,7 +376,7 @@ struct qeth_hdr_osn {
...
@@ -376,7 +376,7 @@ struct qeth_hdr_osn {
__u8
reserved3
[
18
];
__u8
reserved3
[
18
];
__u32
ccid
;
__u32
ccid
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
qeth_hdr
{
struct
qeth_hdr
{
union
{
union
{
struct
qeth_hdr_layer2
l2
;
struct
qeth_hdr_layer2
l2
;
...
@@ -825,7 +825,7 @@ struct qeth_card {
...
@@ -825,7 +825,7 @@ struct qeth_card {
int
use_hard_stop
;
int
use_hard_stop
;
int
(
*
orig_hard_header
)(
struct
sk_buff
*
,
struct
net_device
*
,
int
(
*
orig_hard_header
)(
struct
sk_buff
*
,
struct
net_device
*
,
unsigned
short
,
void
*
,
void
*
,
unsigned
);
unsigned
short
,
void
*
,
void
*
,
unsigned
);
struct
qeth_osn_info
osn_info
;
struct
qeth_osn_info
osn_info
;
};
};
struct
qeth_card_list_struct
{
struct
qeth_card_list_struct
{
...
@@ -944,7 +944,7 @@ qeth_get_netdev_flags(struct qeth_card *card)
...
@@ -944,7 +944,7 @@ qeth_get_netdev_flags(struct qeth_card *card)
return
0
;
return
0
;
switch
(
card
->
info
.
type
)
{
switch
(
card
->
info
.
type
)
{
case
QETH_CARD_TYPE_IQD
:
case
QETH_CARD_TYPE_IQD
:
case
QETH_CARD_TYPE_OSN
:
case
QETH_CARD_TYPE_OSN
:
return
IFF_NOARP
;
return
IFF_NOARP
;
#ifdef CONFIG_QETH_IPV6
#ifdef CONFIG_QETH_IPV6
default:
default:
...
@@ -981,7 +981,7 @@ static inline int
...
@@ -981,7 +981,7 @@ static inline int
qeth_get_max_mtu_for_card
(
int
cardtype
)
qeth_get_max_mtu_for_card
(
int
cardtype
)
{
{
switch
(
cardtype
)
{
switch
(
cardtype
)
{
case
QETH_CARD_TYPE_UNKNOWN
:
case
QETH_CARD_TYPE_UNKNOWN
:
case
QETH_CARD_TYPE_OSAE
:
case
QETH_CARD_TYPE_OSAE
:
case
QETH_CARD_TYPE_OSN
:
case
QETH_CARD_TYPE_OSN
:
...
@@ -1097,9 +1097,9 @@ qeth_string_to_ipaddr4(const char *buf, __u8 *addr)
...
@@ -1097,9 +1097,9 @@ qeth_string_to_ipaddr4(const char *buf, __u8 *addr)
int
count
=
0
,
rc
=
0
;
int
count
=
0
,
rc
=
0
;
int
in
[
4
];
int
in
[
4
];
rc
=
sscanf
(
buf
,
"%d.%d.%d.%d%n"
,
rc
=
sscanf
(
buf
,
"%d.%d.%d.%d%n"
,
&
in
[
0
],
&
in
[
1
],
&
in
[
2
],
&
in
[
3
],
&
count
);
&
in
[
0
],
&
in
[
1
],
&
in
[
2
],
&
in
[
3
],
&
count
);
if
(
rc
!=
4
||
count
)
if
(
rc
!=
4
||
count
<=
0
)
return
-
EINVAL
;
return
-
EINVAL
;
for
(
count
=
0
;
count
<
4
;
count
++
)
{
for
(
count
=
0
;
count
<
4
;
count
++
)
{
if
(
in
[
count
]
>
255
)
if
(
in
[
count
]
>
255
)
...
@@ -1131,7 +1131,7 @@ qeth_string_to_ipaddr6(const char *buf, __u8 *addr)
...
@@ -1131,7 +1131,7 @@ qeth_string_to_ipaddr6(const char *buf, __u8 *addr)
cnt
=
out
=
found
=
save_cnt
=
num2
=
0
;
cnt
=
out
=
found
=
save_cnt
=
num2
=
0
;
end
=
start
=
(
char
*
)
buf
;
end
=
start
=
(
char
*
)
buf
;
in
=
(
__u16
*
)
addr
;
in
=
(
__u16
*
)
addr
;
memset
(
in
,
0
,
16
);
memset
(
in
,
0
,
16
);
while
(
end
)
{
while
(
end
)
{
end
=
strchr
(
end
,
':'
);
end
=
strchr
(
end
,
':'
);
...
@@ -1139,7 +1139,7 @@ qeth_string_to_ipaddr6(const char *buf, __u8 *addr)
...
@@ -1139,7 +1139,7 @@ qeth_string_to_ipaddr6(const char *buf, __u8 *addr)
end
=
(
char
*
)
buf
+
(
strlen
(
buf
));
end
=
(
char
*
)
buf
+
(
strlen
(
buf
));
out
=
1
;
out
=
1
;
}
}
if
((
end
-
start
))
{
if
((
end
-
start
))
{
memset
(
num
,
0
,
5
);
memset
(
num
,
0
,
5
);
memcpy
(
num
,
start
,
end
-
start
);
memcpy
(
num
,
start
,
end
-
start
);
if
(
!
qeth_isxdigit
(
num
))
if
(
!
qeth_isxdigit
(
num
))
...
@@ -1241,5 +1241,5 @@ qeth_osn_register(unsigned char *read_dev_no,
...
@@ -1241,5 +1241,5 @@ qeth_osn_register(unsigned char *read_dev_no,
extern
void
extern
void
qeth_osn_deregister
(
struct
net_device
*
);
qeth_osn_deregister
(
struct
net_device
*
);
#endif
/* __QETH_H__ */
#endif
/* __QETH_H__ */
drivers/s390/net/qeth_eddp.c
浏览文件 @
89f8185e
...
@@ -81,7 +81,7 @@ void
...
@@ -81,7 +81,7 @@ void
qeth_eddp_buf_release_contexts
(
struct
qeth_qdio_out_buffer
*
buf
)
qeth_eddp_buf_release_contexts
(
struct
qeth_qdio_out_buffer
*
buf
)
{
{
struct
qeth_eddp_context_reference
*
ref
;
struct
qeth_eddp_context_reference
*
ref
;
QETH_DBF_TEXT
(
trace
,
6
,
"eddprctx"
);
QETH_DBF_TEXT
(
trace
,
6
,
"eddprctx"
);
while
(
!
list_empty
(
&
buf
->
ctx_list
)){
while
(
!
list_empty
(
&
buf
->
ctx_list
)){
ref
=
list_entry
(
buf
->
ctx_list
.
next
,
ref
=
list_entry
(
buf
->
ctx_list
.
next
,
...
@@ -135,7 +135,7 @@ qeth_eddp_fill_buffer(struct qeth_qdio_out_q *queue,
...
@@ -135,7 +135,7 @@ qeth_eddp_fill_buffer(struct qeth_qdio_out_q *queue,
"buffer!
\n
"
);
"buffer!
\n
"
);
goto
out
;
goto
out
;
}
}
}
}
/* check if the whole next skb fits into current buffer */
/* check if the whole next skb fits into current buffer */
if
((
QETH_MAX_BUFFER_ELEMENTS
(
queue
->
card
)
-
if
((
QETH_MAX_BUFFER_ELEMENTS
(
queue
->
card
)
-
buf
->
next_element_to_fill
)
buf
->
next_element_to_fill
)
...
@@ -148,7 +148,7 @@ qeth_eddp_fill_buffer(struct qeth_qdio_out_q *queue,
...
@@ -148,7 +148,7 @@ qeth_eddp_fill_buffer(struct qeth_qdio_out_q *queue,
* and increment ctx's refcnt */
* and increment ctx's refcnt */
must_refcnt
=
1
;
must_refcnt
=
1
;
continue
;
continue
;
}
}
if
(
must_refcnt
){
if
(
must_refcnt
){
must_refcnt
=
0
;
must_refcnt
=
0
;
if
(
qeth_eddp_buf_ref_context
(
buf
,
ctx
)){
if
(
qeth_eddp_buf_ref_context
(
buf
,
ctx
)){
...
@@ -266,7 +266,7 @@ qeth_eddp_copy_data_tcp(char *dst, struct qeth_eddp_data *eddp, int len,
...
@@ -266,7 +266,7 @@ qeth_eddp_copy_data_tcp(char *dst, struct qeth_eddp_data *eddp, int len,
int
left_in_frag
;
int
left_in_frag
;
int
copy_len
;
int
copy_len
;
u8
*
src
;
u8
*
src
;
QETH_DBF_TEXT
(
trace
,
5
,
"eddpcdtc"
);
QETH_DBF_TEXT
(
trace
,
5
,
"eddpcdtc"
);
if
(
skb_shinfo
(
eddp
->
skb
)
->
nr_frags
==
0
)
{
if
(
skb_shinfo
(
eddp
->
skb
)
->
nr_frags
==
0
)
{
memcpy
(
dst
,
eddp
->
skb
->
data
+
eddp
->
skb_offset
,
len
);
memcpy
(
dst
,
eddp
->
skb
->
data
+
eddp
->
skb_offset
,
len
);
...
@@ -408,7 +408,7 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
...
@@ -408,7 +408,7 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
struct
tcphdr
*
tcph
;
struct
tcphdr
*
tcph
;
int
data_len
;
int
data_len
;
u32
hcsum
;
u32
hcsum
;
QETH_DBF_TEXT
(
trace
,
5
,
"eddpftcp"
);
QETH_DBF_TEXT
(
trace
,
5
,
"eddpftcp"
);
eddp
->
skb_offset
=
sizeof
(
struct
qeth_hdr
)
+
eddp
->
nhl
+
eddp
->
thl
;
eddp
->
skb_offset
=
sizeof
(
struct
qeth_hdr
)
+
eddp
->
nhl
+
eddp
->
thl
;
if
(
eddp
->
qh
.
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
{
if
(
eddp
->
qh
.
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
{
...
@@ -465,13 +465,13 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
...
@@ -465,13 +465,13 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
eddp
->
th
.
tcp
.
h
.
seq
+=
data_len
;
eddp
->
th
.
tcp
.
h
.
seq
+=
data_len
;
}
}
}
}
static
inline
int
static
inline
int
qeth_eddp_fill_context_tcp
(
struct
qeth_eddp_context
*
ctx
,
qeth_eddp_fill_context_tcp
(
struct
qeth_eddp_context
*
ctx
,
struct
sk_buff
*
skb
,
struct
qeth_hdr
*
qhdr
)
struct
sk_buff
*
skb
,
struct
qeth_hdr
*
qhdr
)
{
{
struct
qeth_eddp_data
*
eddp
=
NULL
;
struct
qeth_eddp_data
*
eddp
=
NULL
;
QETH_DBF_TEXT
(
trace
,
5
,
"eddpficx"
);
QETH_DBF_TEXT
(
trace
,
5
,
"eddpficx"
);
/* create our segmentation headers and copy original headers */
/* create our segmentation headers and copy original headers */
if
(
skb
->
protocol
==
ETH_P_IP
)
if
(
skb
->
protocol
==
ETH_P_IP
)
...
@@ -512,7 +512,7 @@ qeth_eddp_calc_num_pages(struct qeth_eddp_context *ctx, struct sk_buff *skb,
...
@@ -512,7 +512,7 @@ qeth_eddp_calc_num_pages(struct qeth_eddp_context *ctx, struct sk_buff *skb,
int
hdr_len
)
int
hdr_len
)
{
{
int
skbs_per_page
;
int
skbs_per_page
;
QETH_DBF_TEXT
(
trace
,
5
,
"eddpcanp"
);
QETH_DBF_TEXT
(
trace
,
5
,
"eddpcanp"
);
/* can we put multiple skbs in one page? */
/* can we put multiple skbs in one page? */
skbs_per_page
=
PAGE_SIZE
/
(
skb_shinfo
(
skb
)
->
tso_size
+
hdr_len
);
skbs_per_page
=
PAGE_SIZE
/
(
skb_shinfo
(
skb
)
->
tso_size
+
hdr_len
);
...
@@ -588,7 +588,7 @@ qeth_eddp_create_context_tcp(struct qeth_card *card, struct sk_buff *skb,
...
@@ -588,7 +588,7 @@ qeth_eddp_create_context_tcp(struct qeth_card *card, struct sk_buff *skb,
struct
qeth_hdr
*
qhdr
)
struct
qeth_hdr
*
qhdr
)
{
{
struct
qeth_eddp_context
*
ctx
=
NULL
;
struct
qeth_eddp_context
*
ctx
=
NULL
;
QETH_DBF_TEXT
(
trace
,
5
,
"creddpct"
);
QETH_DBF_TEXT
(
trace
,
5
,
"creddpct"
);
if
(
skb
->
protocol
==
ETH_P_IP
)
if
(
skb
->
protocol
==
ETH_P_IP
)
ctx
=
qeth_eddp_create_context_generic
(
card
,
skb
,
ctx
=
qeth_eddp_create_context_generic
(
card
,
skb
,
...
...
drivers/s390/net/qeth_fs.h
浏览文件 @
89f8185e
...
@@ -42,7 +42,7 @@ qeth_create_device_attributes_osn(struct device *dev);
...
@@ -42,7 +42,7 @@ qeth_create_device_attributes_osn(struct device *dev);
extern
void
extern
void
qeth_remove_device_attributes_osn
(
struct
device
*
dev
);
qeth_remove_device_attributes_osn
(
struct
device
*
dev
);
extern
int
extern
int
qeth_create_driver_attributes
(
void
);
qeth_create_driver_attributes
(
void
);
...
...
drivers/s390/net/qeth_main.c
浏览文件 @
89f8185e
...
@@ -513,7 +513,7 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode)
...
@@ -513,7 +513,7 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode)
QETH_DBF_TEXT
(
setup
,
3
,
"setoffl"
);
QETH_DBF_TEXT
(
setup
,
3
,
"setoffl"
);
QETH_DBF_HEX
(
setup
,
3
,
&
card
,
sizeof
(
void
*
));
QETH_DBF_HEX
(
setup
,
3
,
&
card
,
sizeof
(
void
*
));
if
(
card
->
dev
&&
netif_carrier_ok
(
card
->
dev
))
if
(
card
->
dev
&&
netif_carrier_ok
(
card
->
dev
))
netif_carrier_off
(
card
->
dev
);
netif_carrier_off
(
card
->
dev
);
recover_flag
=
card
->
state
;
recover_flag
=
card
->
state
;
...
@@ -604,13 +604,13 @@ __qeth_ref_ip_on_card(struct qeth_card *card, struct qeth_ipaddr *todo,
...
@@ -604,13 +604,13 @@ __qeth_ref_ip_on_card(struct qeth_card *card, struct qeth_ipaddr *todo,
list_for_each_entry
(
addr
,
&
card
->
ip_list
,
entry
)
{
list_for_each_entry
(
addr
,
&
card
->
ip_list
,
entry
)
{
if
(
card
->
options
.
layer2
)
{
if
(
card
->
options
.
layer2
)
{
if
((
addr
->
type
==
todo
->
type
)
&&
if
((
addr
->
type
==
todo
->
type
)
&&
(
memcmp
(
&
addr
->
mac
,
&
todo
->
mac
,
(
memcmp
(
&
addr
->
mac
,
&
todo
->
mac
,
OSA_ADDR_LEN
)
==
0
))
{
OSA_ADDR_LEN
)
==
0
))
{
found
=
1
;
found
=
1
;
break
;
break
;
}
}
continue
;
continue
;
}
}
if
((
addr
->
proto
==
QETH_PROT_IPV4
)
&&
if
((
addr
->
proto
==
QETH_PROT_IPV4
)
&&
(
todo
->
proto
==
QETH_PROT_IPV4
)
&&
(
todo
->
proto
==
QETH_PROT_IPV4
)
&&
(
addr
->
type
==
todo
->
type
)
&&
(
addr
->
type
==
todo
->
type
)
&&
...
@@ -694,13 +694,13 @@ __qeth_insert_ip_todo(struct qeth_card *card, struct qeth_ipaddr *addr, int add)
...
@@ -694,13 +694,13 @@ __qeth_insert_ip_todo(struct qeth_card *card, struct qeth_ipaddr *addr, int add)
if
(
card
->
options
.
layer2
)
{
if
(
card
->
options
.
layer2
)
{
if
((
tmp
->
type
==
addr
->
type
)
&&
if
((
tmp
->
type
==
addr
->
type
)
&&
(
tmp
->
is_multicast
==
addr
->
is_multicast
)
&&
(
tmp
->
is_multicast
==
addr
->
is_multicast
)
&&
(
memcmp
(
&
tmp
->
mac
,
&
addr
->
mac
,
(
memcmp
(
&
tmp
->
mac
,
&
addr
->
mac
,
OSA_ADDR_LEN
)
==
0
))
{
OSA_ADDR_LEN
)
==
0
))
{
found
=
1
;
found
=
1
;
break
;
break
;
}
}
continue
;
continue
;
}
}
if
((
tmp
->
proto
==
QETH_PROT_IPV4
)
&&
if
((
tmp
->
proto
==
QETH_PROT_IPV4
)
&&
(
addr
->
proto
==
QETH_PROT_IPV4
)
&&
(
addr
->
proto
==
QETH_PROT_IPV4
)
&&
(
tmp
->
type
==
addr
->
type
)
&&
(
tmp
->
type
==
addr
->
type
)
&&
...
@@ -1173,7 +1173,7 @@ qeth_determine_card_type(struct qeth_card *card)
...
@@ -1173,7 +1173,7 @@ qeth_determine_card_type(struct qeth_card *card)
"due to hardware limitations!
\n
"
);
"due to hardware limitations!
\n
"
);
card
->
qdio
.
no_out_queues
=
1
;
card
->
qdio
.
no_out_queues
=
1
;
card
->
qdio
.
default_out_queue
=
0
;
card
->
qdio
.
default_out_queue
=
0
;
}
}
return
0
;
return
0
;
}
}
i
++
;
i
++
;
...
@@ -1198,7 +1198,7 @@ qeth_probe_device(struct ccwgroup_device *gdev)
...
@@ -1198,7 +1198,7 @@ qeth_probe_device(struct ccwgroup_device *gdev)
return
-
ENODEV
;
return
-
ENODEV
;
QETH_DBF_TEXT_
(
setup
,
2
,
"%s"
,
gdev
->
dev
.
bus_id
);
QETH_DBF_TEXT_
(
setup
,
2
,
"%s"
,
gdev
->
dev
.
bus_id
);
card
=
qeth_alloc_card
();
card
=
qeth_alloc_card
();
if
(
!
card
)
{
if
(
!
card
)
{
put_device
(
dev
);
put_device
(
dev
);
...
@@ -1220,7 +1220,7 @@ qeth_probe_device(struct ccwgroup_device *gdev)
...
@@ -1220,7 +1220,7 @@ qeth_probe_device(struct ccwgroup_device *gdev)
put_device
(
dev
);
put_device
(
dev
);
qeth_free_card
(
card
);
qeth_free_card
(
card
);
return
rc
;
return
rc
;
}
}
if
((
rc
=
qeth_setup_card
(
card
))){
if
((
rc
=
qeth_setup_card
(
card
))){
QETH_DBF_TEXT_
(
setup
,
2
,
"2err%d"
,
rc
);
QETH_DBF_TEXT_
(
setup
,
2
,
"2err%d"
,
rc
);
put_device
(
dev
);
put_device
(
dev
);
...
@@ -1843,7 +1843,7 @@ struct qeth_cmd_buffer *iob)
...
@@ -1843,7 +1843,7 @@ struct qeth_cmd_buffer *iob)
&
card
->
seqno
.
pdu_hdr_ack
,
QETH_SEQ_NO_LENGTH
);
&
card
->
seqno
.
pdu_hdr_ack
,
QETH_SEQ_NO_LENGTH
);
QETH_DBF_HEX
(
control
,
2
,
iob
->
data
,
QETH_DBF_CONTROL_LEN
);
QETH_DBF_HEX
(
control
,
2
,
iob
->
data
,
QETH_DBF_CONTROL_LEN
);
}
}
static
int
static
int
qeth_send_control_data
(
struct
qeth_card
*
card
,
int
len
,
qeth_send_control_data
(
struct
qeth_card
*
card
,
int
len
,
struct
qeth_cmd_buffer
*
iob
,
struct
qeth_cmd_buffer
*
iob
,
...
@@ -1937,7 +1937,7 @@ qeth_osn_send_control_data(struct qeth_card *card, int len,
...
@@ -1937,7 +1937,7 @@ qeth_osn_send_control_data(struct qeth_card *card, int len,
wake_up
(
&
card
->
wait_q
);
wake_up
(
&
card
->
wait_q
);
}
}
return
rc
;
return
rc
;
}
}
static
inline
void
static
inline
void
qeth_prepare_ipa_cmd
(
struct
qeth_card
*
card
,
struct
qeth_cmd_buffer
*
iob
,
qeth_prepare_ipa_cmd
(
struct
qeth_card
*
card
,
struct
qeth_cmd_buffer
*
iob
,
...
@@ -1966,7 +1966,7 @@ qeth_osn_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
...
@@ -1966,7 +1966,7 @@ qeth_osn_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
memcpy
(
QETH_IPA_PDU_LEN_PDU3
(
iob
->
data
),
&
s2
,
2
);
memcpy
(
QETH_IPA_PDU_LEN_PDU3
(
iob
->
data
),
&
s2
,
2
);
return
qeth_osn_send_control_data
(
card
,
s1
,
iob
);
return
qeth_osn_send_control_data
(
card
,
s1
,
iob
);
}
}
static
int
static
int
qeth_send_ipa_cmd
(
struct
qeth_card
*
card
,
struct
qeth_cmd_buffer
*
iob
,
qeth_send_ipa_cmd
(
struct
qeth_card
*
card
,
struct
qeth_cmd_buffer
*
iob
,
int
(
*
reply_cb
)
int
(
*
reply_cb
)
...
@@ -2579,7 +2579,7 @@ qeth_process_inbound_buffer(struct qeth_card *card,
...
@@ -2579,7 +2579,7 @@ qeth_process_inbound_buffer(struct qeth_card *card,
skb
->
dev
=
card
->
dev
;
skb
->
dev
=
card
->
dev
;
if
(
hdr
->
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
if
(
hdr
->
hdr
.
l2
.
id
==
QETH_HEADER_TYPE_LAYER2
)
vlan_tag
=
qeth_layer2_rebuild_skb
(
card
,
skb
,
hdr
);
vlan_tag
=
qeth_layer2_rebuild_skb
(
card
,
skb
,
hdr
);
else
if
(
hdr
->
hdr
.
l3
.
id
==
QETH_HEADER_TYPE_LAYER3
)
else
if
(
hdr
->
hdr
.
l3
.
id
==
QETH_HEADER_TYPE_LAYER3
)
qeth_rebuild_skb
(
card
,
skb
,
hdr
);
qeth_rebuild_skb
(
card
,
skb
,
hdr
);
else
{
/*in case of OSN*/
else
{
/*in case of OSN*/
skb_push
(
skb
,
sizeof
(
struct
qeth_hdr
));
skb_push
(
skb
,
sizeof
(
struct
qeth_hdr
));
...
@@ -2763,7 +2763,7 @@ qeth_qdio_input_handler(struct ccw_device * ccwdev, unsigned int status,
...
@@ -2763,7 +2763,7 @@ qeth_qdio_input_handler(struct ccw_device * ccwdev, unsigned int status,
index
=
i
%
QDIO_MAX_BUFFERS_PER_Q
;
index
=
i
%
QDIO_MAX_BUFFERS_PER_Q
;
buffer
=
&
card
->
qdio
.
in_q
->
bufs
[
index
];
buffer
=
&
card
->
qdio
.
in_q
->
bufs
[
index
];
if
(
!
((
status
&
QDIO_STATUS_LOOK_FOR_ERROR
)
&&
if
(
!
((
status
&
QDIO_STATUS_LOOK_FOR_ERROR
)
&&
qeth_check_qdio_errors
(
buffer
->
buffer
,
qeth_check_qdio_errors
(
buffer
->
buffer
,
qdio_err
,
siga_err
,
"qinerr"
)))
qdio_err
,
siga_err
,
"qinerr"
)))
qeth_process_inbound_buffer
(
card
,
buffer
,
index
);
qeth_process_inbound_buffer
(
card
,
buffer
,
index
);
/* clear buffer and give back to hardware */
/* clear buffer and give back to hardware */
...
@@ -3187,7 +3187,7 @@ qeth_alloc_qdio_buffers(struct qeth_card *card)
...
@@ -3187,7 +3187,7 @@ qeth_alloc_qdio_buffers(struct qeth_card *card)
if
(
card
->
qdio
.
state
==
QETH_QDIO_ALLOCATED
)
if
(
card
->
qdio
.
state
==
QETH_QDIO_ALLOCATED
)
return
0
;
return
0
;
card
->
qdio
.
in_q
=
kmalloc
(
sizeof
(
struct
qeth_qdio_q
),
card
->
qdio
.
in_q
=
kmalloc
(
sizeof
(
struct
qeth_qdio_q
),
GFP_KERNEL
|
GFP_DMA
);
GFP_KERNEL
|
GFP_DMA
);
if
(
!
card
->
qdio
.
in_q
)
if
(
!
card
->
qdio
.
in_q
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -3476,7 +3476,7 @@ qeth_halt_channels(struct qeth_card *card)
...
@@ -3476,7 +3476,7 @@ qeth_halt_channels(struct qeth_card *card)
rc3
=
qeth_halt_channel
(
&
card
->
data
);
rc3
=
qeth_halt_channel
(
&
card
->
data
);
if
(
rc1
)
if
(
rc1
)
return
rc1
;
return
rc1
;
if
(
rc2
)
if
(
rc2
)
return
rc2
;
return
rc2
;
return
rc3
;
return
rc3
;
}
}
...
@@ -3491,7 +3491,7 @@ qeth_clear_channels(struct qeth_card *card)
...
@@ -3491,7 +3491,7 @@ qeth_clear_channels(struct qeth_card *card)
rc3
=
qeth_clear_channel
(
&
card
->
data
);
rc3
=
qeth_clear_channel
(
&
card
->
data
);
if
(
rc1
)
if
(
rc1
)
return
rc1
;
return
rc1
;
if
(
rc2
)
if
(
rc2
)
return
rc2
;
return
rc2
;
return
rc3
;
return
rc3
;
}
}
...
@@ -3798,10 +3798,10 @@ qeth_open(struct net_device *dev)
...
@@ -3798,10 +3798,10 @@ qeth_open(struct net_device *dev)
QETH_DBF_TEXT
(
trace
,
4
,
"nomacadr"
);
QETH_DBF_TEXT
(
trace
,
4
,
"nomacadr"
);
return
-
EPERM
;
return
-
EPERM
;
}
}
card
->
dev
->
flags
|=
IFF_UP
;
netif_start_queue
(
dev
);
card
->
data
.
state
=
CH_STATE_UP
;
card
->
data
.
state
=
CH_STATE_UP
;
card
->
state
=
CARD_STATE_UP
;
card
->
state
=
CARD_STATE_UP
;
card
->
dev
->
flags
|=
IFF_UP
;
netif_start_queue
(
dev
);
if
(
!
card
->
lan_online
&&
netif_carrier_ok
(
dev
))
if
(
!
card
->
lan_online
&&
netif_carrier_ok
(
dev
))
netif_carrier_off
(
dev
);
netif_carrier_off
(
dev
);
...
@@ -3817,7 +3817,7 @@ qeth_stop(struct net_device *dev)
...
@@ -3817,7 +3817,7 @@ qeth_stop(struct net_device *dev)
card
=
(
struct
qeth_card
*
)
dev
->
priv
;
card
=
(
struct
qeth_card
*
)
dev
->
priv
;
netif_
stop_queu
e
(
dev
);
netif_
tx_disabl
e
(
dev
);
card
->
dev
->
flags
&=
~
IFF_UP
;
card
->
dev
->
flags
&=
~
IFF_UP
;
if
(
card
->
state
==
CARD_STATE_UP
)
if
(
card
->
state
==
CARD_STATE_UP
)
card
->
state
=
CARD_STATE_SOFTSETUP
;
card
->
state
=
CARD_STATE_SOFTSETUP
;
...
@@ -3958,7 +3958,7 @@ qeth_prepare_skb(struct qeth_card *card, struct sk_buff **skb,
...
@@ -3958,7 +3958,7 @@ qeth_prepare_skb(struct qeth_card *card, struct sk_buff **skb,
#endif
#endif
*
hdr
=
(
struct
qeth_hdr
*
)
*
hdr
=
(
struct
qeth_hdr
*
)
qeth_push_skb
(
card
,
skb
,
sizeof
(
struct
qeth_hdr
));
qeth_push_skb
(
card
,
skb
,
sizeof
(
struct
qeth_hdr
));
if
(
hdr
==
NULL
)
if
(
*
hdr
==
NULL
)
return
-
EINVAL
;
return
-
EINVAL
;
return
0
;
return
0
;
}
}
...
@@ -4098,7 +4098,7 @@ qeth_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
...
@@ -4098,7 +4098,7 @@ qeth_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
}
}
}
else
{
/* passthrough */
}
else
{
/* passthrough */
if
((
skb
->
dev
->
type
==
ARPHRD_IEEE802_TR
)
&&
if
((
skb
->
dev
->
type
==
ARPHRD_IEEE802_TR
)
&&
!
memcmp
(
skb
->
data
+
sizeof
(
struct
qeth_hdr
)
+
!
memcmp
(
skb
->
data
+
sizeof
(
struct
qeth_hdr
)
+
sizeof
(
__u16
),
skb
->
dev
->
broadcast
,
6
))
{
sizeof
(
__u16
),
skb
->
dev
->
broadcast
,
6
))
{
hdr
->
hdr
.
l3
.
flags
=
QETH_CAST_BROADCAST
|
hdr
->
hdr
.
l3
.
flags
=
QETH_CAST_BROADCAST
|
QETH_HDR_PASSTHRU
;
QETH_HDR_PASSTHRU
;
...
@@ -4385,7 +4385,7 @@ qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
...
@@ -4385,7 +4385,7 @@ qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
}
}
static
inline
int
static
inline
int
qeth_get_elements_no
(
struct
qeth_card
*
card
,
void
*
hdr
,
qeth_get_elements_no
(
struct
qeth_card
*
card
,
void
*
hdr
,
struct
sk_buff
*
skb
,
int
elems
)
struct
sk_buff
*
skb
,
int
elems
)
{
{
int
elements_needed
=
0
;
int
elements_needed
=
0
;
...
@@ -4416,6 +4416,8 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
...
@@ -4416,6 +4416,8 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
enum
qeth_large_send_types
large_send
=
QETH_LARGE_SEND_NO
;
enum
qeth_large_send_types
large_send
=
QETH_LARGE_SEND_NO
;
struct
qeth_eddp_context
*
ctx
=
NULL
;
struct
qeth_eddp_context
*
ctx
=
NULL
;
int
tx_bytes
=
skb
->
len
;
int
tx_bytes
=
skb
->
len
;
unsigned
short
nr_frags
=
skb_shinfo
(
skb
)
->
nr_frags
;
unsigned
short
tso_size
=
skb_shinfo
(
skb
)
->
tso_size
;
int
rc
;
int
rc
;
QETH_DBF_TEXT
(
trace
,
6
,
"sendpkt"
);
QETH_DBF_TEXT
(
trace
,
6
,
"sendpkt"
);
...
@@ -4441,7 +4443,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
...
@@ -4441,7 +4443,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
return
0
;
return
0
;
}
}
cast_type
=
qeth_get_cast_type
(
card
,
skb
);
cast_type
=
qeth_get_cast_type
(
card
,
skb
);
if
((
cast_type
==
RTN_BROADCAST
)
&&
if
((
cast_type
==
RTN_BROADCAST
)
&&
(
card
->
info
.
broadcast_capable
==
0
)){
(
card
->
info
.
broadcast_capable
==
0
)){
card
->
stats
.
tx_dropped
++
;
card
->
stats
.
tx_dropped
++
;
card
->
stats
.
tx_errors
++
;
card
->
stats
.
tx_errors
++
;
...
@@ -4463,7 +4465,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
...
@@ -4463,7 +4465,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
card
->
stats
.
tx_errors
++
;
card
->
stats
.
tx_errors
++
;
dev_kfree_skb_any
(
skb
);
dev_kfree_skb_any
(
skb
);
return
NETDEV_TX_OK
;
return
NETDEV_TX_OK
;
}
}
elements_needed
++
;
elements_needed
++
;
}
else
{
}
else
{
if
((
rc
=
qeth_prepare_skb
(
card
,
&
skb
,
&
hdr
,
ipv
)))
{
if
((
rc
=
qeth_prepare_skb
(
card
,
&
skb
,
&
hdr
,
ipv
)))
{
...
@@ -4498,16 +4500,16 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
...
@@ -4498,16 +4500,16 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
card
->
stats
.
tx_packets
++
;
card
->
stats
.
tx_packets
++
;
card
->
stats
.
tx_bytes
+=
tx_bytes
;
card
->
stats
.
tx_bytes
+=
tx_bytes
;
#ifdef CONFIG_QETH_PERF_STATS
#ifdef CONFIG_QETH_PERF_STATS
if
(
skb_shinfo
(
skb
)
->
tso_size
&&
if
(
tso_size
&&
!
(
large_send
==
QETH_LARGE_SEND_NO
))
{
!
(
large_send
==
QETH_LARGE_SEND_NO
))
{
card
->
perf_stats
.
large_send_bytes
+=
skb
->
len
;
card
->
perf_stats
.
large_send_bytes
+=
tx_bytes
;
card
->
perf_stats
.
large_send_cnt
++
;
card
->
perf_stats
.
large_send_cnt
++
;
}
}
if
(
skb_shinfo
(
skb
)
->
nr_frags
>
0
){
if
(
nr_frags
>
0
){
card
->
perf_stats
.
sg_skbs_sent
++
;
card
->
perf_stats
.
sg_skbs_sent
++
;
/* nr_frags + skb->data */
/* nr_frags + skb->data */
card
->
perf_stats
.
sg_frags_sent
+=
card
->
perf_stats
.
sg_frags_sent
+=
skb_shinfo
(
skb
)
->
nr_frags
+
1
;
nr_frags
+
1
;
}
}
#endif
/* CONFIG_QETH_PERF_STATS */
#endif
/* CONFIG_QETH_PERF_STATS */
}
}
...
@@ -5373,7 +5375,7 @@ qeth_layer2_send_setdelvlan_cb(struct qeth_card *card,
...
@@ -5373,7 +5375,7 @@ qeth_layer2_send_setdelvlan_cb(struct qeth_card *card,
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
if
(
cmd
->
hdr
.
return_code
)
{
if
(
cmd
->
hdr
.
return_code
)
{
PRINT_ERR
(
"Error in processing VLAN %i on %s: 0x%x. "
PRINT_ERR
(
"Error in processing VLAN %i on %s: 0x%x. "
"Continuing
\n
"
,
cmd
->
data
.
setdelvlan
.
vlan_id
,
"Continuing
\n
"
,
cmd
->
data
.
setdelvlan
.
vlan_id
,
QETH_CARD_IFNAME
(
card
),
cmd
->
hdr
.
return_code
);
QETH_CARD_IFNAME
(
card
),
cmd
->
hdr
.
return_code
);
QETH_DBF_TEXT_
(
trace
,
2
,
"L2VL%4x"
,
cmd
->
hdr
.
command
);
QETH_DBF_TEXT_
(
trace
,
2
,
"L2VL%4x"
,
cmd
->
hdr
.
command
);
QETH_DBF_TEXT_
(
trace
,
2
,
"L2%s"
,
CARD_BUS_ID
(
card
));
QETH_DBF_TEXT_
(
trace
,
2
,
"L2%s"
,
CARD_BUS_ID
(
card
));
...
@@ -5393,7 +5395,7 @@ qeth_layer2_send_setdelvlan(struct qeth_card *card, __u16 i,
...
@@ -5393,7 +5395,7 @@ qeth_layer2_send_setdelvlan(struct qeth_card *card, __u16 i,
iob
=
qeth_get_ipacmd_buffer
(
card
,
ipacmd
,
QETH_PROT_IPV4
);
iob
=
qeth_get_ipacmd_buffer
(
card
,
ipacmd
,
QETH_PROT_IPV4
);
cmd
=
(
struct
qeth_ipa_cmd
*
)(
iob
->
data
+
IPA_PDU_HEADER_SIZE
);
cmd
=
(
struct
qeth_ipa_cmd
*
)(
iob
->
data
+
IPA_PDU_HEADER_SIZE
);
cmd
->
data
.
setdelvlan
.
vlan_id
=
i
;
cmd
->
data
.
setdelvlan
.
vlan_id
=
i
;
return
qeth_send_ipa_cmd
(
card
,
iob
,
return
qeth_send_ipa_cmd
(
card
,
iob
,
qeth_layer2_send_setdelvlan_cb
,
NULL
);
qeth_layer2_send_setdelvlan_cb
,
NULL
);
}
}
...
@@ -5457,7 +5459,7 @@ qeth_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
...
@@ -5457,7 +5459,7 @@ qeth_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
* Examine hardware response to SET_PROMISC_MODE
* Examine hardware response to SET_PROMISC_MODE
*/
*/
static
int
static
int
qeth_setadp_promisc_mode_cb
(
struct
qeth_card
*
card
,
qeth_setadp_promisc_mode_cb
(
struct
qeth_card
*
card
,
struct
qeth_reply
*
reply
,
struct
qeth_reply
*
reply
,
unsigned
long
data
)
unsigned
long
data
)
{
{
...
@@ -5468,10 +5470,10 @@ qeth_setadp_promisc_mode_cb(struct qeth_card *card,
...
@@ -5468,10 +5470,10 @@ qeth_setadp_promisc_mode_cb(struct qeth_card *card,
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
setparms
=
&
(
cmd
->
data
.
setadapterparms
);
setparms
=
&
(
cmd
->
data
.
setadapterparms
);
qeth_default_setadapterparms_cb
(
card
,
reply
,
(
unsigned
long
)
cmd
);
qeth_default_setadapterparms_cb
(
card
,
reply
,
(
unsigned
long
)
cmd
);
if
(
cmd
->
hdr
.
return_code
)
{
if
(
cmd
->
hdr
.
return_code
)
{
QETH_DBF_TEXT_
(
trace
,
4
,
"prmrc%2.2x"
,
cmd
->
hdr
.
return_code
);
QETH_DBF_TEXT_
(
trace
,
4
,
"prmrc%2.2x"
,
cmd
->
hdr
.
return_code
);
setparms
->
data
.
mode
=
SET_PROMISC_MODE_OFF
;
setparms
->
data
.
mode
=
SET_PROMISC_MODE_OFF
;
}
}
card
->
info
.
promisc_mode
=
setparms
->
data
.
mode
;
card
->
info
.
promisc_mode
=
setparms
->
data
.
mode
;
...
@@ -5517,7 +5519,7 @@ qeth_set_multicast_list(struct net_device *dev)
...
@@ -5517,7 +5519,7 @@ qeth_set_multicast_list(struct net_device *dev)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
return
;
return
;
QETH_DBF_TEXT
(
trace
,
3
,
"setmulti"
);
QETH_DBF_TEXT
(
trace
,
3
,
"setmulti"
);
qeth_delete_mc_addresses
(
card
);
qeth_delete_mc_addresses
(
card
);
if
(
card
->
options
.
layer2
)
{
if
(
card
->
options
.
layer2
)
{
...
@@ -5575,7 +5577,7 @@ qeth_osn_assist(struct net_device *dev,
...
@@ -5575,7 +5577,7 @@ qeth_osn_assist(struct net_device *dev,
struct
qeth_cmd_buffer
*
iob
;
struct
qeth_cmd_buffer
*
iob
;
struct
qeth_card
*
card
;
struct
qeth_card
*
card
;
int
rc
;
int
rc
;
QETH_DBF_TEXT
(
trace
,
2
,
"osnsdmc"
);
QETH_DBF_TEXT
(
trace
,
2
,
"osnsdmc"
);
if
(
!
dev
)
if
(
!
dev
)
return
-
ENODEV
;
return
-
ENODEV
;
...
@@ -5654,7 +5656,7 @@ qeth_osn_deregister(struct net_device * dev)
...
@@ -5654,7 +5656,7 @@ qeth_osn_deregister(struct net_device * dev)
card
->
osn_info
.
data_cb
=
NULL
;
card
->
osn_info
.
data_cb
=
NULL
;
return
;
return
;
}
}
static
void
static
void
qeth_delete_mc_addresses
(
struct
qeth_card
*
card
)
qeth_delete_mc_addresses
(
struct
qeth_card
*
card
)
{
{
...
@@ -5818,7 +5820,7 @@ qeth_add_multicast_ipv6(struct qeth_card *card)
...
@@ -5818,7 +5820,7 @@ qeth_add_multicast_ipv6(struct qeth_card *card)
struct
inet6_dev
*
in6_dev
;
struct
inet6_dev
*
in6_dev
;
QETH_DBF_TEXT
(
trace
,
4
,
"chkmcv6"
);
QETH_DBF_TEXT
(
trace
,
4
,
"chkmcv6"
);
if
(
!
qeth_is_supported
(
card
,
IPA_IPV6
))
if
(
!
qeth_is_supported
(
card
,
IPA_IPV6
))
return
;
return
;
in6_dev
=
in6_dev_get
(
card
->
dev
);
in6_dev
=
in6_dev_get
(
card
->
dev
);
if
(
in6_dev
==
NULL
)
if
(
in6_dev
==
NULL
)
...
@@ -6359,12 +6361,9 @@ qeth_netdev_init(struct net_device *dev)
...
@@ -6359,12 +6361,9 @@ qeth_netdev_init(struct net_device *dev)
dev
->
vlan_rx_kill_vid
=
qeth_vlan_rx_kill_vid
;
dev
->
vlan_rx_kill_vid
=
qeth_vlan_rx_kill_vid
;
dev
->
vlan_rx_add_vid
=
qeth_vlan_rx_add_vid
;
dev
->
vlan_rx_add_vid
=
qeth_vlan_rx_add_vid
;
#endif
#endif
dev
->
hard_header
=
card
->
orig_hard_header
;
if
(
qeth_get_netdev_flags
(
card
)
&
IFF_NOARP
)
{
if
(
qeth_get_netdev_flags
(
card
)
&
IFF_NOARP
)
{
dev
->
rebuild_header
=
NULL
;
dev
->
rebuild_header
=
NULL
;
dev
->
hard_header
=
NULL
;
dev
->
hard_header
=
NULL
;
if
(
card
->
options
.
fake_ll
)
dev
->
hard_header
=
qeth_fake_header
;
dev
->
header_cache_update
=
NULL
;
dev
->
header_cache_update
=
NULL
;
dev
->
hard_header_cache
=
NULL
;
dev
->
hard_header_cache
=
NULL
;
}
}
...
@@ -6373,6 +6372,9 @@ qeth_netdev_init(struct net_device *dev)
...
@@ -6373,6 +6372,9 @@ qeth_netdev_init(struct net_device *dev)
if
(
!
(
card
->
info
.
unique_id
&
UNIQUE_ID_NOT_BY_CARD
))
if
(
!
(
card
->
info
.
unique_id
&
UNIQUE_ID_NOT_BY_CARD
))
card
->
dev
->
dev_id
=
card
->
info
.
unique_id
&
0xffff
;
card
->
dev
->
dev_id
=
card
->
info
.
unique_id
&
0xffff
;
#endif
#endif
if
(
card
->
options
.
fake_ll
&&
(
qeth_get_netdev_flags
(
card
)
&
IFF_NOARP
))
dev
->
hard_header
=
qeth_fake_header
;
dev
->
hard_header_parse
=
NULL
;
dev
->
hard_header_parse
=
NULL
;
dev
->
set_mac_address
=
qeth_layer2_set_mac_address
;
dev
->
set_mac_address
=
qeth_layer2_set_mac_address
;
dev
->
flags
|=
qeth_get_netdev_flags
(
card
);
dev
->
flags
|=
qeth_get_netdev_flags
(
card
);
...
@@ -6477,6 +6479,9 @@ qeth_hardsetup_card(struct qeth_card *card)
...
@@ -6477,6 +6479,9 @@ qeth_hardsetup_card(struct qeth_card *card)
/*network device will be recovered*/
/*network device will be recovered*/
if
(
card
->
dev
)
{
if
(
card
->
dev
)
{
card
->
dev
->
hard_header
=
card
->
orig_hard_header
;
card
->
dev
->
hard_header
=
card
->
orig_hard_header
;
if
(
card
->
options
.
fake_ll
&&
(
qeth_get_netdev_flags
(
card
)
&
IFF_NOARP
))
card
->
dev
->
hard_header
=
qeth_fake_header
;
return
0
;
return
0
;
}
}
/* at first set_online allocate netdev */
/* at first set_online allocate netdev */
...
@@ -6584,7 +6589,7 @@ qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
...
@@ -6584,7 +6589,7 @@ qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
cmd
=
(
struct
qeth_ipa_cmd
*
)
data
;
if
(
!
card
->
options
.
layer2
||
card
->
info
.
guestlan
||
if
(
!
card
->
options
.
layer2
||
card
->
info
.
guestlan
||
!
(
card
->
info
.
mac_bits
&
QETH_LAYER2_MAC_READ
))
{
!
(
card
->
info
.
mac_bits
&
QETH_LAYER2_MAC_READ
))
{
memcpy
(
card
->
dev
->
dev_addr
,
memcpy
(
card
->
dev
->
dev_addr
,
&
cmd
->
data
.
setadapterparms
.
data
.
change_addr
.
addr
,
&
cmd
->
data
.
setadapterparms
.
data
.
change_addr
.
addr
,
OSA_ADDR_LEN
);
OSA_ADDR_LEN
);
...
@@ -7031,14 +7036,12 @@ qeth_softsetup_ipv6(struct qeth_card *card)
...
@@ -7031,14 +7036,12 @@ qeth_softsetup_ipv6(struct qeth_card *card)
QETH_DBF_TEXT
(
trace
,
3
,
"softipv6"
);
QETH_DBF_TEXT
(
trace
,
3
,
"softipv6"
);
netif_stop_queue
(
card
->
dev
);
rc
=
qeth_send_startlan
(
card
,
QETH_PROT_IPV6
);
rc
=
qeth_send_startlan
(
card
,
QETH_PROT_IPV6
);
if
(
rc
)
{
if
(
rc
)
{
PRINT_ERR
(
"IPv6 startlan failed on %s
\n
"
,
PRINT_ERR
(
"IPv6 startlan failed on %s
\n
"
,
QETH_CARD_IFNAME
(
card
));
QETH_CARD_IFNAME
(
card
));
return
rc
;
return
rc
;
}
}
netif_wake_queue
(
card
->
dev
);
rc
=
qeth_query_ipassists
(
card
,
QETH_PROT_IPV6
);
rc
=
qeth_query_ipassists
(
card
,
QETH_PROT_IPV6
);
if
(
rc
)
{
if
(
rc
)
{
PRINT_ERR
(
"IPv6 query ipassist failed on %s
\n
"
,
PRINT_ERR
(
"IPv6 query ipassist failed on %s
\n
"
,
...
@@ -7352,7 +7355,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type)
...
@@ -7352,7 +7355,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type)
card
->
options
.
large_send
=
type
;
card
->
options
.
large_send
=
type
;
return
0
;
return
0
;
}
}
netif_stop_queue
(
card
->
dev
);
if
(
card
->
state
==
CARD_STATE_UP
)
netif_tx_disable
(
card
->
dev
);
card
->
options
.
large_send
=
type
;
card
->
options
.
large_send
=
type
;
switch
(
card
->
options
.
large_send
)
{
switch
(
card
->
options
.
large_send
)
{
case
QETH_LARGE_SEND_EDDP
:
case
QETH_LARGE_SEND_EDDP
:
...
@@ -7374,7 +7378,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type)
...
@@ -7374,7 +7378,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type)
card
->
dev
->
features
&=
~
(
NETIF_F_TSO
|
NETIF_F_SG
);
card
->
dev
->
features
&=
~
(
NETIF_F_TSO
|
NETIF_F_SG
);
break
;
break
;
}
}
netif_wake_queue
(
card
->
dev
);
if
(
card
->
state
==
CARD_STATE_UP
)
netif_wake_queue
(
card
->
dev
);
return
rc
;
return
rc
;
}
}
...
@@ -7427,7 +7432,7 @@ qeth_softsetup_card(struct qeth_card *card)
...
@@ -7427,7 +7432,7 @@ qeth_softsetup_card(struct qeth_card *card)
if
((
rc
=
qeth_setrouting_v6
(
card
)))
if
((
rc
=
qeth_setrouting_v6
(
card
)))
QETH_DBF_TEXT_
(
setup
,
2
,
"5err%d"
,
rc
);
QETH_DBF_TEXT_
(
setup
,
2
,
"5err%d"
,
rc
);
out:
out:
netif_
stop_queu
e
(
card
->
dev
);
netif_
tx_disabl
e
(
card
->
dev
);
return
0
;
return
0
;
}
}
...
@@ -7567,7 +7572,7 @@ qeth_stop_card(struct qeth_card *card, int recovery_mode)
...
@@ -7567,7 +7572,7 @@ qeth_stop_card(struct qeth_card *card, int recovery_mode)
if
(
card
->
read
.
state
==
CH_STATE_UP
&&
if
(
card
->
read
.
state
==
CH_STATE_UP
&&
card
->
write
.
state
==
CH_STATE_UP
&&
card
->
write
.
state
==
CH_STATE_UP
&&
(
card
->
state
==
CARD_STATE_UP
))
{
(
card
->
state
==
CARD_STATE_UP
))
{
if
(
recovery_mode
&&
if
(
recovery_mode
&&
card
->
info
.
type
!=
QETH_CARD_TYPE_OSN
)
{
card
->
info
.
type
!=
QETH_CARD_TYPE_OSN
)
{
qeth_stop
(
card
->
dev
);
qeth_stop
(
card
->
dev
);
}
else
{
}
else
{
...
@@ -7736,10 +7741,8 @@ static int
...
@@ -7736,10 +7741,8 @@ static int
qeth_register_netdev
(
struct
qeth_card
*
card
)
qeth_register_netdev
(
struct
qeth_card
*
card
)
{
{
QETH_DBF_TEXT
(
setup
,
3
,
"regnetd"
);
QETH_DBF_TEXT
(
setup
,
3
,
"regnetd"
);
if
(
card
->
dev
->
reg_state
!=
NETREG_UNINITIALIZED
)
{
if
(
card
->
dev
->
reg_state
!=
NETREG_UNINITIALIZED
)
qeth_netdev_init
(
card
->
dev
);
return
0
;
return
0
;
}
/* sysfs magic */
/* sysfs magic */
SET_NETDEV_DEV
(
card
->
dev
,
&
card
->
gdev
->
dev
);
SET_NETDEV_DEV
(
card
->
dev
,
&
card
->
gdev
->
dev
);
return
register_netdev
(
card
->
dev
);
return
register_netdev
(
card
->
dev
);
...
@@ -7750,7 +7753,7 @@ qeth_start_again(struct qeth_card *card, int recovery_mode)
...
@@ -7750,7 +7753,7 @@ qeth_start_again(struct qeth_card *card, int recovery_mode)
{
{
QETH_DBF_TEXT
(
setup
,
2
,
"startag"
);
QETH_DBF_TEXT
(
setup
,
2
,
"startag"
);
if
(
recovery_mode
&&
if
(
recovery_mode
&&
card
->
info
.
type
!=
QETH_CARD_TYPE_OSN
)
{
card
->
info
.
type
!=
QETH_CARD_TYPE_OSN
)
{
qeth_open
(
card
->
dev
);
qeth_open
(
card
->
dev
);
}
else
{
}
else
{
...
...
drivers/s390/net/qeth_mpc.h
浏览文件 @
89f8185e
...
@@ -445,7 +445,7 @@ enum qeth_ipa_arp_return_codes {
...
@@ -445,7 +445,7 @@ enum qeth_ipa_arp_return_codes {
/* Helper functions */
/* Helper functions */
#define IS_IPA_REPLY(cmd) ((cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST) || \
#define IS_IPA_REPLY(cmd) ((cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST) || \
(cmd->hdr.initiator == IPA_CMD_INITIATOR_OSA_REPLY))
(cmd->hdr.initiator == IPA_CMD_INITIATOR_OSA_REPLY))
/*****************************************************************************/
/*****************************************************************************/
/* END OF IP Assist related definitions */
/* END OF IP Assist related definitions */
/*****************************************************************************/
/*****************************************************************************/
...
@@ -490,7 +490,7 @@ extern unsigned char ULP_ENABLE[];
...
@@ -490,7 +490,7 @@ extern unsigned char ULP_ENABLE[];
/* Layer 2 defintions */
/* Layer 2 defintions */
#define QETH_PROT_LAYER2 0x08
#define QETH_PROT_LAYER2 0x08
#define QETH_PROT_TCPIP 0x03
#define QETH_PROT_TCPIP 0x03
#define QETH_PROT_OSN2 0x0a
#define QETH_PROT_OSN2 0x0a
#define QETH_ULP_ENABLE_PROT_TYPE(buffer) (buffer+0x50)
#define QETH_ULP_ENABLE_PROT_TYPE(buffer) (buffer+0x50)
#define QETH_IPA_CMD_PROT_TYPE(buffer) (buffer+0x19)
#define QETH_IPA_CMD_PROT_TYPE(buffer) (buffer+0x19)
...
...
drivers/s390/net/qeth_proc.c
浏览文件 @
89f8185e
...
@@ -36,7 +36,7 @@ qeth_procfile_seq_start(struct seq_file *s, loff_t *offset)
...
@@ -36,7 +36,7 @@ qeth_procfile_seq_start(struct seq_file *s, loff_t *offset)
{
{
struct
device
*
dev
=
NULL
;
struct
device
*
dev
=
NULL
;
loff_t
nr
=
0
;
loff_t
nr
=
0
;
down_read
(
&
qeth_ccwgroup_driver
.
driver
.
bus
->
subsys
.
rwsem
);
down_read
(
&
qeth_ccwgroup_driver
.
driver
.
bus
->
subsys
.
rwsem
);
if
(
*
offset
==
0
)
if
(
*
offset
==
0
)
return
SEQ_START_TOKEN
;
return
SEQ_START_TOKEN
;
...
@@ -60,8 +60,8 @@ static void *
...
@@ -60,8 +60,8 @@ static void *
qeth_procfile_seq_next
(
struct
seq_file
*
s
,
void
*
it
,
loff_t
*
offset
)
qeth_procfile_seq_next
(
struct
seq_file
*
s
,
void
*
it
,
loff_t
*
offset
)
{
{
struct
device
*
prev
,
*
next
;
struct
device
*
prev
,
*
next
;
if
(
it
==
SEQ_START_TOKEN
)
if
(
it
==
SEQ_START_TOKEN
)
prev
=
NULL
;
prev
=
NULL
;
else
else
prev
=
(
struct
device
*
)
it
;
prev
=
(
struct
device
*
)
it
;
...
@@ -180,7 +180,7 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it)
...
@@ -180,7 +180,7 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it)
struct
device
*
device
;
struct
device
*
device
;
struct
qeth_card
*
card
;
struct
qeth_card
*
card
;
if
(
it
==
SEQ_START_TOKEN
)
if
(
it
==
SEQ_START_TOKEN
)
return
0
;
return
0
;
...
...
drivers/s390/net/qeth_sys.c
浏览文件 @
89f8185e
...
@@ -785,7 +785,7 @@ qeth_dev_large_send_store(struct device *dev, struct device_attribute *attr, con
...
@@ -785,7 +785,7 @@ qeth_dev_large_send_store(struct device *dev, struct device_attribute *attr, con
}
}
if
(
card
->
options
.
large_send
==
type
)
if
(
card
->
options
.
large_send
==
type
)
return
count
;
return
count
;
if
((
rc
=
qeth_set_large_send
(
card
,
type
)))
if
((
rc
=
qeth_set_large_send
(
card
,
type
)))
return
rc
;
return
rc
;
return
count
;
return
count
;
}
}
...
@@ -1682,7 +1682,7 @@ qeth_create_device_attributes(struct device *dev)
...
@@ -1682,7 +1682,7 @@ qeth_create_device_attributes(struct device *dev)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
return
sysfs_create_group
(
&
dev
->
kobj
,
return
sysfs_create_group
(
&
dev
->
kobj
,
&
qeth_osn_device_attr_group
);
&
qeth_osn_device_attr_group
);
if
((
ret
=
sysfs_create_group
(
&
dev
->
kobj
,
&
qeth_device_attr_group
)))
if
((
ret
=
sysfs_create_group
(
&
dev
->
kobj
,
&
qeth_device_attr_group
)))
return
ret
;
return
ret
;
if
((
ret
=
sysfs_create_group
(
&
dev
->
kobj
,
&
qeth_device_ipato_group
))){
if
((
ret
=
sysfs_create_group
(
&
dev
->
kobj
,
&
qeth_device_ipato_group
))){
...
@@ -1713,7 +1713,7 @@ qeth_remove_device_attributes(struct device *dev)
...
@@ -1713,7 +1713,7 @@ qeth_remove_device_attributes(struct device *dev)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
if
(
card
->
info
.
type
==
QETH_CARD_TYPE_OSN
)
return
sysfs_remove_group
(
&
dev
->
kobj
,
return
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_osn_device_attr_group
);
&
qeth_osn_device_attr_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_attr_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_attr_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_ipato_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_ipato_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_vipa_group
);
sysfs_remove_group
(
&
dev
->
kobj
,
&
qeth_device_vipa_group
);
...
...
drivers/s390/net/qeth_tso.h
浏览文件 @
89f8185e
...
@@ -117,11 +117,11 @@ __qeth_fill_buffer_frag(struct sk_buff *skb, struct qdio_buffer *buffer,
...
@@ -117,11 +117,11 @@ __qeth_fill_buffer_frag(struct sk_buff *skb, struct qdio_buffer *buffer,
int
fragno
;
int
fragno
;
unsigned
long
addr
;
unsigned
long
addr
;
int
element
,
cnt
,
dlen
;
int
element
,
cnt
,
dlen
;
fragno
=
skb_shinfo
(
skb
)
->
nr_frags
;
fragno
=
skb_shinfo
(
skb
)
->
nr_frags
;
element
=
*
next_element_to_fill
;
element
=
*
next_element_to_fill
;
dlen
=
0
;
dlen
=
0
;
if
(
is_tso
)
if
(
is_tso
)
buffer
->
element
[
element
].
flags
=
buffer
->
element
[
element
].
flags
=
SBAL_FLAGS_MIDDLE_FRAG
;
SBAL_FLAGS_MIDDLE_FRAG
;
...
...
drivers/serial/cpm_uart/cpm_uart_core.c
浏览文件 @
89f8185e
...
@@ -1164,14 +1164,16 @@ static int __init cpm_uart_console_setup(struct console *co, char *options)
...
@@ -1164,14 +1164,16 @@ static int __init cpm_uart_console_setup(struct console *co, char *options)
struct
fs_uart_platform_info
*
pdata
;
struct
fs_uart_platform_info
*
pdata
;
struct
platform_device
*
pdev
=
early_uart_get_pdev
(
co
->
index
);
struct
platform_device
*
pdev
=
early_uart_get_pdev
(
co
->
index
);
port
=
(
struct
uart_port
*
)
&
cpm_uart_ports
[
cpm_uart_port_map
[
co
->
index
]];
pinfo
=
(
struct
uart_cpm_port
*
)
port
;
if
(
!
pdev
)
{
if
(
!
pdev
)
{
pr_info
(
"cpm_uart: console: compat mode
\n
"
);
pr_info
(
"cpm_uart: console: compat mode
\n
"
);
/* compatibility - will be cleaned up */
/* compatibility - will be cleaned up */
cpm_uart_init_portdesc
();
cpm_uart_init_portdesc
();
}
port
=
(
struct
uart_port
*
)
&
cpm_uart_ports
[
cpm_uart_port_map
[
co
->
index
]];
pinfo
=
(
struct
uart_cpm_port
*
)
port
;
if
(
!
pdev
)
{
if
(
pinfo
->
set_lineif
)
if
(
pinfo
->
set_lineif
)
pinfo
->
set_lineif
(
pinfo
);
pinfo
->
set_lineif
(
pinfo
);
}
else
{
}
else
{
...
...
drivers/serial/cpm_uart/cpm_uart_cpm2.c
浏览文件 @
89f8185e
...
@@ -213,7 +213,7 @@ int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con)
...
@@ -213,7 +213,7 @@ int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con)
L1_CACHE_ALIGN
(
pinfo
->
tx_nrfifos
*
pinfo
->
tx_fifosize
);
L1_CACHE_ALIGN
(
pinfo
->
tx_nrfifos
*
pinfo
->
tx_fifosize
);
if
(
is_con
)
{
if
(
is_con
)
{
mem_addr
=
alloc_bootmem
(
memsz
);
mem_addr
=
alloc_bootmem
(
memsz
);
dma_addr
=
mem_addr
;
dma_addr
=
virt_to_bus
(
mem_addr
)
;
}
}
else
else
mem_addr
=
dma_alloc_coherent
(
NULL
,
memsz
,
&
dma_addr
,
mem_addr
=
dma_alloc_coherent
(
NULL
,
memsz
,
&
dma_addr
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录