Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
c2d81e63
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c2d81e63
编写于
6月 23, 2006
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[NET] sunlance: Convert to new SBUS driver framework.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
050bbb19
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
97 addition
and
76 deletion
+97
-76
drivers/net/sunlance.c
drivers/net/sunlance.c
+97
-76
未找到文件。
drivers/net/sunlance.c
浏览文件 @
c2d81e63
...
...
@@ -266,7 +266,6 @@ struct lance_private {
char
*
name
;
dma_addr_t
init_block_dvma
;
struct
net_device
*
dev
;
/* Backpointer */
struct
lance_private
*
next_module
;
struct
sbus_dev
*
sdev
;
struct
timer_list
multicast_timer
;
};
...
...
@@ -298,8 +297,6 @@ int sparc_lance_debug = 2;
#define LANCE_ADDR(x) ((long)(x) & ~0xff000000)
static
struct
lance_private
*
root_lance_dev
;
/* Load the CSR registers */
static
void
load_csrs
(
struct
lance_private
*
lp
)
{
...
...
@@ -1327,9 +1324,9 @@ static struct ethtool_ops sparc_lance_ethtool_ops = {
.
get_link
=
sparc_lance_get_link
,
};
static
int
__init
sparc_lance_
init
(
struct
sbus_dev
*
sdev
,
struct
sbus_dma
*
ledma
,
struct
sbus_dev
*
lebuffer
)
static
int
__init
sparc_lance_
probe_one
(
struct
sbus_dev
*
sdev
,
struct
sbus_dma
*
ledma
,
struct
sbus_dev
*
lebuffer
)
{
static
unsigned
version_printed
;
struct
net_device
*
dev
;
...
...
@@ -1473,6 +1470,7 @@ static int __init sparc_lance_init(struct sbus_dev *sdev,
lp
->
dev
=
dev
;
SET_MODULE_OWNER
(
dev
);
SET_NETDEV_DEV
(
dev
,
&
sdev
->
ofdev
.
dev
);
dev
->
open
=
&
lance_open
;
dev
->
stop
=
&
lance_close
;
dev
->
hard_start_xmit
=
&
lance_start_xmit
;
...
...
@@ -1500,8 +1498,7 @@ static int __init sparc_lance_init(struct sbus_dev *sdev,
goto
fail
;
}
lp
->
next_module
=
root_lance_dev
;
root_lance_dev
=
lp
;
dev_set_drvdata
(
&
sdev
->
ofdev
.
dev
,
lp
);
printk
(
KERN_INFO
"%s: LANCE "
,
dev
->
name
);
...
...
@@ -1536,88 +1533,112 @@ static inline struct sbus_dma *find_ledma(struct sbus_dev *sdev)
#include <asm/machines.h>
/* Find all the lance cards on the system and initialize them */
static
int
__init
sparc_lance_probe
(
void
)
static
struct
sbus_dev
sun4_sdev
;
static
int
__init
sparc_lance_init
(
void
)
{
static
struct
sbus_dev
sdev
;
static
int
called
;
root_lance_dev
=
NULL
;
if
(
called
)
return
-
ENODEV
;
called
++
;
if
((
idprom
->
id_machtype
==
(
SM_SUN4
|
SM_4_330
))
||
(
idprom
->
id_machtype
==
(
SM_SUN4
|
SM_4_470
)))
{
memset
(
&
sdev
,
0
,
sizeof
(
sdev
));
sdev
.
reg_addrs
[
0
].
phys_addr
=
sun4_eth_physaddr
;
sdev
.
irqs
[
0
]
=
6
;
return
sparc_lance_
init
(
&
sdev
,
NULL
,
NULL
);
memset
(
&
s
un4_s
dev
,
0
,
sizeof
(
sdev
));
s
un4_s
dev
.
reg_addrs
[
0
].
phys_addr
=
sun4_eth_physaddr
;
s
un4_s
dev
.
irqs
[
0
]
=
6
;
return
sparc_lance_
probe_one
(
&
sun4_
sdev
,
NULL
,
NULL
);
}
return
-
ENODEV
;
}
#else
/* !CONFIG_SUN4 */
/* Find all the lance cards on the system and initialize them */
static
int
__init
sparc_lance_probe
(
void
)
static
int
__exit
sunlance_sun4_remove
(
void
)
{
struct
sbus_bus
*
bus
;
struct
sbus_dev
*
sdev
=
NULL
;
struct
sbus_dma
*
ledma
=
NULL
;
static
int
called
;
int
cards
=
0
,
v
;
root_lance_dev
=
NULL
;
if
(
called
)
return
-
ENODEV
;
called
++
;
for_each_sbus
(
bus
)
{
for_each_sbusdev
(
sdev
,
bus
)
{
if
(
strcmp
(
sdev
->
prom_name
,
"le"
)
==
0
)
{
cards
++
;
if
((
v
=
sparc_lance_init
(
sdev
,
NULL
,
NULL
)))
return
v
;
continue
;
}
if
(
strcmp
(
sdev
->
prom_name
,
"ledma"
)
==
0
)
{
cards
++
;
ledma
=
find_ledma
(
sdev
);
if
((
v
=
sparc_lance_init
(
sdev
->
child
,
ledma
,
NULL
)))
return
v
;
continue
;
}
if
(
strcmp
(
sdev
->
prom_name
,
"lebuffer"
)
==
0
){
cards
++
;
if
((
v
=
sparc_lance_init
(
sdev
->
child
,
NULL
,
sdev
)))
return
v
;
continue
;
}
}
/* for each sbusdev */
}
/* for each sbus */
if
(
!
cards
)
return
-
ENODEV
;
struct
lance_private
*
lp
=
dev_get_drvdata
(
&
sun4_sdev
->
dev
);
struct
net_device
*
net_dev
=
lp
->
dev
;
unregister_netdevice
(
net_dev
);
lance_free_hwresources
(
root_lance_dev
);
free_netdev
(
net_dev
);
dev_set_drvdata
(
&
sun4_sdev
->
dev
,
NULL
);
return
0
;
}
#endif
/* !CONFIG_SUN4 */
static
void
__exit
sparc_lance_cleanup
(
void
)
#else
/* !CONFIG_SUN4 */
static
int
__devinit
sunlance_sbus_probe
(
struct
of_device
*
dev
,
const
struct
of_device_id
*
match
)
{
struct
lance_private
*
lp
;
struct
sbus_dev
*
sdev
=
to_sbus_device
(
&
dev
->
dev
);
struct
device_node
*
dp
=
dev
->
node
;
int
err
;
if
(
!
strcmp
(
dp
->
name
,
"le"
))
{
err
=
sparc_lance_probe_one
(
sdev
,
NULL
,
NULL
);
}
else
if
(
!
strcmp
(
dp
->
name
,
"ledma"
))
{
struct
sbus_dma
*
ledma
=
find_ledma
(
sdev
);
while
(
root_lance_dev
)
{
lp
=
root_lance_dev
->
next_module
;
err
=
sparc_lance_probe_one
(
sdev
->
child
,
ledma
,
NULL
);
}
else
{
BUG_ON
(
strcmp
(
dp
->
name
,
"lebuffer"
));
unregister_netdev
(
root_lance_dev
->
dev
);
lance_free_hwresources
(
root_lance_dev
);
free_netdev
(
root_lance_dev
->
dev
);
root_lance_dev
=
lp
;
err
=
sparc_lance_probe_one
(
sdev
->
child
,
NULL
,
sdev
);
}
return
err
;
}
static
int
__devexit
sunlance_sbus_remove
(
struct
of_device
*
dev
)
{
struct
lance_private
*
lp
=
dev_get_drvdata
(
&
dev
->
dev
);
struct
net_device
*
net_dev
=
lp
->
dev
;
unregister_netdevice
(
net_dev
);
lance_free_hwresources
(
lp
);
free_netdev
(
net_dev
);
dev_set_drvdata
(
&
dev
->
dev
,
NULL
);
return
0
;
}
static
struct
of_device_id
sunlance_sbus_match
[]
=
{
{
.
name
=
"le"
,
},
{
.
name
=
"ledma"
,
},
{
.
name
=
"lebuffer"
,
},
{},
};
MODULE_DEVICE_TABLE
(
of
,
sunlance_sbus_match
);
static
struct
of_platform_driver
sunlance_sbus_driver
=
{
.
name
=
"sunlance"
,
.
match_table
=
sunlance_sbus_match
,
.
probe
=
sunlance_sbus_probe
,
.
remove
=
__devexit_p
(
sunlance_sbus_remove
),
};
/* Find all the lance cards on the system and initialize them */
static
int
__init
sparc_lance_init
(
void
)
{
return
of_register_driver
(
&
sunlance_sbus_driver
,
&
sbus_bus_type
);
}
#endif
/* !CONFIG_SUN4 */
static
void
__exit
sparc_lance_exit
(
void
)
{
#ifdef CONFIG_SUN4
sunlance_sun4_remove
();
#else
of_unregister_driver
(
&
sunlance_sbus_driver
);
#endif
}
module_init
(
sparc_lance_
probe
);
module_exit
(
sparc_lance_
cleanup
);
module_init
(
sparc_lance_
init
);
module_exit
(
sparc_lance_
exit
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录