Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
5f76f294
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看板
提交
5f76f294
编写于
4月 08, 2016
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/top: initial implementation
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
eaebfcc3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
176 addition
and
1 deletion
+176
-1
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
+7
-0
drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild
drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild
+1
-1
drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
+148
-0
drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h
+20
-0
未找到文件。
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
浏览文件 @
5f76f294
...
...
@@ -3,6 +3,13 @@
#include <core/subdev.h>
struct
nvkm_top
{
const
struct
nvkm_top_func
*
func
;
struct
nvkm_subdev
subdev
;
struct
list_head
device
;
};
u32
nvkm_top_reset
(
struct
nvkm_top
*
,
enum
nvkm_devidx
);
u32
nvkm_top_intr
(
struct
nvkm_top
*
,
u32
intr
,
u64
*
subdevs
);
enum
nvkm_devidx
nvkm_top_fault
(
struct
nvkm_top
*
,
int
fault
);
enum
nvkm_devidx
nvkm_top_engine
(
struct
nvkm_top
*
,
int
,
int
*
runl
,
int
*
engn
);
#endif
drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild
浏览文件 @
5f76f294
#
nvkm-y += nvkm/subdev/top/base.o
nvkm-y += nvkm/subdev/top/base.o
drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
0 → 100644
浏览文件 @
5f76f294
/*
* Copyright 2016 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Ben Skeggs <bskeggs@redhat.com>
*/
#include "priv.h"
struct
nvkm_top_device
*
nvkm_top_device_new
(
struct
nvkm_top
*
top
)
{
struct
nvkm_top_device
*
info
=
kmalloc
(
sizeof
(
*
info
),
GFP_KERNEL
);
if
(
info
)
{
info
->
index
=
NVKM_SUBDEV_NR
;
info
->
addr
=
0
;
info
->
fault
=
-
1
;
info
->
engine
=
-
1
;
info
->
runlist
=
-
1
;
info
->
reset
=
-
1
;
info
->
intr
=
-
1
;
list_add_tail
(
&
info
->
head
,
&
top
->
device
);
}
return
info
;
}
u32
nvkm_top_reset
(
struct
nvkm_top
*
top
,
enum
nvkm_devidx
index
)
{
struct
nvkm_top_device
*
info
;
if
(
top
)
{
list_for_each_entry
(
info
,
&
top
->
device
,
head
)
{
if
(
info
->
index
==
index
&&
info
->
reset
>=
0
)
return
BIT
(
info
->
reset
);
}
}
return
0
;
}
u32
nvkm_top_intr
(
struct
nvkm_top
*
top
,
u32
intr
,
u64
*
psubdevs
)
{
struct
nvkm_top_device
*
info
;
u64
subdevs
=
0
;
u32
handled
=
0
;
if
(
top
)
{
list_for_each_entry
(
info
,
&
top
->
device
,
head
)
{
if
(
info
->
index
!=
NVKM_SUBDEV_NR
&&
info
->
intr
>=
0
)
{
if
(
intr
&
BIT
(
info
->
intr
))
{
subdevs
|=
BIT_ULL
(
info
->
index
);
handled
|=
BIT
(
info
->
intr
);
}
}
}
}
*
psubdevs
=
subdevs
;
return
intr
&
~
handled
;
}
enum
nvkm_devidx
nvkm_top_fault
(
struct
nvkm_top
*
top
,
int
fault
)
{
struct
nvkm_top_device
*
info
;
list_for_each_entry
(
info
,
&
top
->
device
,
head
)
{
if
(
info
->
fault
==
fault
)
return
info
->
index
;
}
return
NVKM_SUBDEV_NR
;
}
enum
nvkm_devidx
nvkm_top_engine
(
struct
nvkm_top
*
top
,
int
index
,
int
*
runl
,
int
*
engn
)
{
struct
nvkm_top_device
*
info
;
int
n
=
0
;
list_for_each_entry
(
info
,
&
top
->
device
,
head
)
{
if
(
info
->
engine
>=
0
&&
info
->
runlist
>=
0
&&
n
++
==
index
)
{
*
runl
=
info
->
runlist
;
*
engn
=
info
->
engine
;
return
info
->
index
;
}
}
return
-
ENODEV
;
}
static
int
nvkm_top_oneinit
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_top
*
top
=
nvkm_top
(
subdev
);
return
top
->
func
->
oneinit
(
top
);
}
static
void
*
nvkm_top_dtor
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_top
*
top
=
nvkm_top
(
subdev
);
struct
nvkm_top_device
*
info
,
*
temp
;
list_for_each_entry_safe
(
info
,
temp
,
&
top
->
device
,
head
)
{
list_del
(
&
info
->
head
);
kfree
(
info
);
}
return
top
;
}
static
const
struct
nvkm_subdev_func
nvkm_top
=
{
.
dtor
=
nvkm_top_dtor
,
.
oneinit
=
nvkm_top_oneinit
,
};
int
nvkm_top_new_
(
const
struct
nvkm_top_func
*
func
,
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_top
**
ptop
)
{
struct
nvkm_top
*
top
;
if
(
!
(
top
=
*
ptop
=
kzalloc
(
sizeof
(
*
top
),
GFP_KERNEL
)))
return
-
ENOMEM
;
nvkm_subdev_ctor
(
&
nvkm_top
,
device
,
index
,
0
,
&
top
->
subdev
);
top
->
func
=
func
;
INIT_LIST_HEAD
(
&
top
->
device
);
return
0
;
}
drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h
浏览文件 @
5f76f294
...
...
@@ -2,4 +2,24 @@
#define __NVKM_TOP_PRIV_H__
#define nvkm_top(p) container_of((p), struct nvkm_top, subdev)
#include <subdev/top.h>
struct
nvkm_top_func
{
int
(
*
oneinit
)(
struct
nvkm_top
*
);
};
int
nvkm_top_new_
(
const
struct
nvkm_top_func
*
,
struct
nvkm_device
*
,
int
,
struct
nvkm_top
**
);
struct
nvkm_top_device
{
enum
nvkm_devidx
index
;
u32
addr
;
int
fault
;
int
engine
;
int
runlist
;
int
reset
;
int
intr
;
struct
list_head
head
;
};
struct
nvkm_top_device
*
nvkm_top_device_new
(
struct
nvkm_top
*
);
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录