Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
eec5ef90
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
eec5ef90
编写于
10月 13, 2005
作者:
S
Stephen Rothwell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ppc64: use powerpc of_device.c
Signed-off-by:
N
Stephen Rothwell
<
sfr@canb.auug.org.au
>
上级
ae275205
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
2 addition
and
276 deletion
+2
-276
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/Makefile
+2
-1
arch/ppc64/kernel/Makefile
arch/ppc64/kernel/Makefile
+0
-1
arch/ppc64/kernel/of_device.c
arch/ppc64/kernel/of_device.c
+0
-274
未找到文件。
arch/powerpc/kernel/Makefile
浏览文件 @
eec5ef90
...
...
@@ -14,6 +14,7 @@ obj-y := semaphore.o cputable.o
obj-$(CONFIG_PPC64)
+=
binfmt_elf32.o
obj-$(CONFIG_ALTIVEC)
+=
vecemu.o vector.o
obj-$(CONFIG_POWER4)
+=
idle_power4.o
obj-$(CONFIG_PPC_OF)
+=
of_device.o
ifeq
($(CONFIG_PPC_MERGE),y)
...
...
@@ -32,7 +33,7 @@ obj-y += process.o init_task.o \
prom.o systbl.o traps.o
obj-$(CONFIG_PPC32)
+=
entry_32.o setup_32.o misc_32.o
obj-$(CONFIG_PPC64)
+=
setup_64.o misc_64.o
obj-$(CONFIG_PPC_OF)
+=
prom_init.o
of_device.o
obj-$(CONFIG_PPC_OF)
+=
prom_init.o
obj-$(CONFIG_MODULES)
+=
ppc_ksyms.o
obj-$(CONFIG_BOOTX_TEXT)
+=
btext.o
...
...
arch/ppc64/kernel/Makefile
浏览文件 @
eec5ef90
...
...
@@ -8,7 +8,6 @@ EXTRA_CFLAGS += -mno-minimal-toc
extra-y
:=
head.o vmlinux.lds
obj-y
:=
setup.o entry.o misc.o prom.o
obj-$(CONFIG_PPC_OF)
+=
of_device.o
endif
...
...
arch/ppc64/kernel/of_device.c
已删除
100644 → 0
浏览文件 @
ae275205
#include <linux/config.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <asm/errno.h>
#include <asm/of_device.h>
/**
* of_match_device - Tell if an of_device structure has a matching
* of_match structure
* @ids: array of of device match structures to search in
* @dev: the of device structure to match against
*
* Used by a driver to check whether an of_device present in the
* system is in its list of supported devices.
*/
const
struct
of_device_id
*
of_match_device
(
const
struct
of_device_id
*
matches
,
const
struct
of_device
*
dev
)
{
if
(
!
dev
->
node
)
return
NULL
;
while
(
matches
->
name
[
0
]
||
matches
->
type
[
0
]
||
matches
->
compatible
[
0
])
{
int
match
=
1
;
if
(
matches
->
name
[
0
])
match
&=
dev
->
node
->
name
&&
!
strcmp
(
matches
->
name
,
dev
->
node
->
name
);
if
(
matches
->
type
[
0
])
match
&=
dev
->
node
->
type
&&
!
strcmp
(
matches
->
type
,
dev
->
node
->
type
);
if
(
matches
->
compatible
[
0
])
match
&=
device_is_compatible
(
dev
->
node
,
matches
->
compatible
);
if
(
match
)
return
matches
;
matches
++
;
}
return
NULL
;
}
static
int
of_platform_bus_match
(
struct
device
*
dev
,
struct
device_driver
*
drv
)
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
of_drv
=
to_of_platform_driver
(
drv
);
const
struct
of_device_id
*
matches
=
of_drv
->
match_table
;
if
(
!
matches
)
return
0
;
return
of_match_device
(
matches
,
of_dev
)
!=
NULL
;
}
struct
of_device
*
of_dev_get
(
struct
of_device
*
dev
)
{
struct
device
*
tmp
;
if
(
!
dev
)
return
NULL
;
tmp
=
get_device
(
&
dev
->
dev
);
if
(
tmp
)
return
to_of_device
(
tmp
);
else
return
NULL
;
}
void
of_dev_put
(
struct
of_device
*
dev
)
{
if
(
dev
)
put_device
(
&
dev
->
dev
);
}
static
int
of_device_probe
(
struct
device
*
dev
)
{
int
error
=
-
ENODEV
;
struct
of_platform_driver
*
drv
;
struct
of_device
*
of_dev
;
const
struct
of_device_id
*
match
;
drv
=
to_of_platform_driver
(
dev
->
driver
);
of_dev
=
to_of_device
(
dev
);
if
(
!
drv
->
probe
)
return
error
;
of_dev_get
(
of_dev
);
match
=
of_match_device
(
drv
->
match_table
,
of_dev
);
if
(
match
)
error
=
drv
->
probe
(
of_dev
,
match
);
if
(
error
)
of_dev_put
(
of_dev
);
return
error
;
}
static
int
of_device_remove
(
struct
device
*
dev
)
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
if
(
dev
->
driver
&&
drv
->
remove
)
drv
->
remove
(
of_dev
);
return
0
;
}
static
int
of_device_suspend
(
struct
device
*
dev
,
pm_message_t
state
)
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
int
error
=
0
;
if
(
dev
->
driver
&&
drv
->
suspend
)
error
=
drv
->
suspend
(
of_dev
,
state
);
return
error
;
}
static
int
of_device_resume
(
struct
device
*
dev
)
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
int
error
=
0
;
if
(
dev
->
driver
&&
drv
->
resume
)
error
=
drv
->
resume
(
of_dev
);
return
error
;
}
struct
bus_type
of_platform_bus_type
=
{
.
name
=
"of_platform"
,
.
match
=
of_platform_bus_match
,
.
suspend
=
of_device_suspend
,
.
resume
=
of_device_resume
,
};
static
int
__init
of_bus_driver_init
(
void
)
{
return
bus_register
(
&
of_platform_bus_type
);
}
postcore_initcall
(
of_bus_driver_init
);
int
of_register_driver
(
struct
of_platform_driver
*
drv
)
{
int
count
=
0
;
/* initialize common driver fields */
drv
->
driver
.
name
=
drv
->
name
;
drv
->
driver
.
bus
=
&
of_platform_bus_type
;
drv
->
driver
.
probe
=
of_device_probe
;
drv
->
driver
.
remove
=
of_device_remove
;
/* register with core */
count
=
driver_register
(
&
drv
->
driver
);
return
count
?
count
:
1
;
}
void
of_unregister_driver
(
struct
of_platform_driver
*
drv
)
{
driver_unregister
(
&
drv
->
driver
);
}
static
ssize_t
dev_show_devspec
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
of_device
*
ofdev
;
ofdev
=
to_of_device
(
dev
);
return
sprintf
(
buf
,
"%s"
,
ofdev
->
node
->
full_name
);
}
static
DEVICE_ATTR
(
devspec
,
S_IRUGO
,
dev_show_devspec
,
NULL
);
/**
* of_release_dev - free an of device structure when all users of it are finished.
* @dev: device that's been disconnected
*
* Will be called only by the device core when all users of this of device are
* done.
*/
void
of_release_dev
(
struct
device
*
dev
)
{
struct
of_device
*
ofdev
;
ofdev
=
to_of_device
(
dev
);
kfree
(
ofdev
);
}
int
of_device_register
(
struct
of_device
*
ofdev
)
{
int
rc
;
struct
of_device
**
odprop
;
BUG_ON
(
ofdev
->
node
==
NULL
);
odprop
=
(
struct
of_device
**
)
get_property
(
ofdev
->
node
,
"linux,device"
,
NULL
);
if
(
!
odprop
)
{
struct
property
*
new_prop
;
new_prop
=
kmalloc
(
sizeof
(
struct
property
)
+
sizeof
(
struct
of_device
*
),
GFP_KERNEL
);
if
(
new_prop
==
NULL
)
return
-
ENOMEM
;
new_prop
->
name
=
"linux,device"
;
new_prop
->
length
=
sizeof
(
sizeof
(
struct
of_device
*
));
new_prop
->
value
=
(
unsigned
char
*
)
&
new_prop
[
1
];
odprop
=
(
struct
of_device
**
)
new_prop
->
value
;
*
odprop
=
NULL
;
prom_add_property
(
ofdev
->
node
,
new_prop
);
}
*
odprop
=
ofdev
;
rc
=
device_register
(
&
ofdev
->
dev
);
if
(
rc
)
return
rc
;
device_create_file
(
&
ofdev
->
dev
,
&
dev_attr_devspec
);
return
0
;
}
void
of_device_unregister
(
struct
of_device
*
ofdev
)
{
struct
of_device
**
odprop
;
device_remove_file
(
&
ofdev
->
dev
,
&
dev_attr_devspec
);
odprop
=
(
struct
of_device
**
)
get_property
(
ofdev
->
node
,
"linux,device"
,
NULL
);
if
(
odprop
)
*
odprop
=
NULL
;
device_unregister
(
&
ofdev
->
dev
);
}
struct
of_device
*
of_platform_device_create
(
struct
device_node
*
np
,
const
char
*
bus_id
,
struct
device
*
parent
)
{
struct
of_device
*
dev
;
dev
=
kmalloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
if
(
!
dev
)
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
*
dev
));
dev
->
node
=
np
;
dev
->
dma_mask
=
0xffffffffUL
;
dev
->
dev
.
dma_mask
=
&
dev
->
dma_mask
;
dev
->
dev
.
parent
=
parent
;
dev
->
dev
.
bus
=
&
of_platform_bus_type
;
dev
->
dev
.
release
=
of_release_dev
;
strlcpy
(
dev
->
dev
.
bus_id
,
bus_id
,
BUS_ID_SIZE
);
if
(
of_device_register
(
dev
)
!=
0
)
{
kfree
(
dev
);
return
NULL
;
}
return
dev
;
}
EXPORT_SYMBOL
(
of_match_device
);
EXPORT_SYMBOL
(
of_platform_bus_type
);
EXPORT_SYMBOL
(
of_register_driver
);
EXPORT_SYMBOL
(
of_unregister_driver
);
EXPORT_SYMBOL
(
of_device_register
);
EXPORT_SYMBOL
(
of_device_unregister
);
EXPORT_SYMBOL
(
of_dev_get
);
EXPORT_SYMBOL
(
of_dev_put
);
EXPORT_SYMBOL
(
of_platform_device_create
);
EXPORT_SYMBOL
(
of_release_dev
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录