Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
7eae642f
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
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看板
提交
7eae642f
编写于
2月 09, 2006
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[SPARC64]: Implement SUN4V PCI config space access.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
bade5622
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
93 addition
and
4 deletion
+93
-4
arch/sparc64/kernel/pci_sun4v.c
arch/sparc64/kernel/pci_sun4v.c
+36
-4
arch/sparc64/kernel/pci_sun4v.h
arch/sparc64/kernel/pci_sun4v.h
+9
-0
arch/sparc64/kernel/pci_sun4v_asm.S
arch/sparc64/kernel/pci_sun4v_asm.S
+48
-0
未找到文件。
arch/sparc64/kernel/pci_sun4v.c
浏览文件 @
7eae642f
...
...
@@ -74,15 +74,47 @@ struct pci_iommu_ops pci_sun4v_iommu_ops = {
static
int
pci_sun4v_read_pci_cfg
(
struct
pci_bus
*
bus_dev
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
/* XXX Implement me! XXX */
return
0
;
struct
pci_pbm_info
*
pbm
=
bus_dev
->
sysdata
;
unsigned
long
devhandle
=
pbm
->
devhandle
;
unsigned
int
bus
=
bus_dev
->
number
;
unsigned
int
device
=
PCI_SLOT
(
devfn
);
unsigned
int
func
=
PCI_FUNC
(
devfn
);
unsigned
long
ret
;
ret
=
pci_sun4v_config_get
(
devhandle
,
HV_PCI_DEVICE_BUILD
(
bus
,
device
,
func
),
where
,
size
);
switch
(
size
)
{
case
1
:
*
value
=
ret
&
0xff
;
break
;
case
2
:
*
value
=
ret
&
0xffff
;
break
;
case
4
:
*
value
=
ret
&
0xffffffff
;
break
;
};
return
PCIBIOS_SUCCESSFUL
;
}
static
int
pci_sun4v_write_pci_cfg
(
struct
pci_bus
*
bus_dev
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
/* XXX Implement me! XXX */
return
0
;
struct
pci_pbm_info
*
pbm
=
bus_dev
->
sysdata
;
unsigned
long
devhandle
=
pbm
->
devhandle
;
unsigned
int
bus
=
bus_dev
->
number
;
unsigned
int
device
=
PCI_SLOT
(
devfn
);
unsigned
int
func
=
PCI_FUNC
(
devfn
);
unsigned
long
ret
;
ret
=
pci_sun4v_config_put
(
devhandle
,
HV_PCI_DEVICE_BUILD
(
bus
,
device
,
func
),
where
,
size
,
value
);
return
PCIBIOS_SUCCESSFUL
;
}
static
struct
pci_ops
pci_sun4v_ops
=
{
...
...
arch/sparc64/kernel/pci_sun4v.h
浏览文件 @
7eae642f
...
...
@@ -16,5 +16,14 @@ extern unsigned long pci_sun4v_iommu_map(unsigned long devhandle,
extern
unsigned
long
pci_sun4v_iommu_demap
(
unsigned
long
devhandle
,
unsigned
long
tsbid
,
unsigned
long
num_ttes
);
extern
unsigned
long
pci_sun4v_config_get
(
unsigned
long
devhandle
,
unsigned
long
pci_device
,
unsigned
long
config_offset
,
unsigned
long
size
);
extern
int
pci_sun4v_config_put
(
unsigned
long
devhandle
,
unsigned
long
pci_device
,
unsigned
long
config_offset
,
unsigned
long
size
,
unsigned
long
data
);
#endif
/* !(_PCI_SUN4V_H) */
arch/sparc64/kernel/pci_sun4v_asm.S
浏览文件 @
7eae642f
...
...
@@ -54,3 +54,51 @@ pci_sun4v_iommu_demap:
ta
HV_FAST_TRAP
retl
mov
%
o1
,
%
o0
/
*
%
o0
:
devhandle
*
%
o1
:
pci_device
*
%
o2
:
pci_config_offset
*
%
o3
:
size
*
*
returns
%
o0
:
data
*
*
If
there
is
an
error
,
the
data
will
be
returned
*
as
all
1
's.
*/
.
globl
pci_sun4v_config_get
pci_sun4v_config_get
:
mov
%
o3
,
%
o4
mov
%
o2
,
%
o3
mov
%
o1
,
%
o2
mov
%
o0
,
%
o1
mov
HV_FAST_PCI_CONFIG_GET
,
%
o0
ta
HV_FAST_TRAP
brnz
,
a
,
pn
%
o1
,
1
f
mov
-
1
,
%
o2
1
:
retl
mov
%
o2
,
%
o0
/
*
%
o0
:
devhandle
*
%
o1
:
pci_device
*
%
o2
:
pci_config_offset
*
%
o3
:
size
*
%
o4
:
data
*
*
returns
%
o0
:
status
*
*
status
will
be
zero
if
the
operation
completed
*
successfully
,
else
-
1
if
not
*/
.
globl
pci_sun4v_config_put
pci_sun4v_config_put
:
mov
%
o3
,
%
o4
mov
%
o2
,
%
o3
mov
%
o1
,
%
o2
mov
%
o0
,
%
o1
mov
HV_FAST_PCI_CONFIG_PUT
,
%
o0
ta
HV_FAST_TRAP
brnz
,
a
,
pn
%
o1
,
1
f
mov
-
1
,
%
o1
1
:
retl
mov
%
o1
,
%
o0
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录