Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
51fa0253
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
51fa0253
编写于
1月 31, 2013
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/core: basic event interface between core and drm
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
32256c87
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
143 addition
and
0 deletion
+143
-0
drivers/gpu/drm/nouveau/Makefile
drivers/gpu/drm/nouveau/Makefile
+1
-0
drivers/gpu/drm/nouveau/core/core/event.c
drivers/gpu/drm/nouveau/core/core/event.c
+106
-0
drivers/gpu/drm/nouveau/core/include/core/event.h
drivers/gpu/drm/nouveau/core/include/core/event.h
+36
-0
未找到文件。
drivers/gpu/drm/nouveau/Makefile
浏览文件 @
51fa0253
...
...
@@ -11,6 +11,7 @@ nouveau-y := core/core/client.o
nouveau-y
+=
core/core/engctx.o
nouveau-y
+=
core/core/engine.o
nouveau-y
+=
core/core/enum.o
nouveau-y
+=
core/core/event.o
nouveau-y
+=
core/core/falcon.o
nouveau-y
+=
core/core/gpuobj.o
nouveau-y
+=
core/core/handle.o
...
...
drivers/gpu/drm/nouveau/core/core/event.c
0 → 100644
浏览文件 @
51fa0253
/*
* Copyright 2013 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.
*/
#include <core/os.h>
#include <core/event.h>
static
void
nouveau_event_put_locked
(
struct
nouveau_event
*
event
,
int
index
,
struct
nouveau_eventh
*
handler
)
{
if
(
!--
event
->
index
[
index
].
refs
)
event
->
disable
(
event
,
index
);
list_del
(
&
handler
->
head
);
}
void
nouveau_event_put
(
struct
nouveau_event
*
event
,
int
index
,
struct
nouveau_eventh
*
handler
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
event
->
lock
,
flags
);
if
(
index
<
event
->
index_nr
)
nouveau_event_put_locked
(
event
,
index
,
handler
);
spin_unlock_irqrestore
(
&
event
->
lock
,
flags
);
}
void
nouveau_event_get
(
struct
nouveau_event
*
event
,
int
index
,
struct
nouveau_eventh
*
handler
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
event
->
lock
,
flags
);
if
(
index
<
event
->
index_nr
)
{
list_add
(
&
handler
->
head
,
&
event
->
index
[
index
].
list
);
if
(
!
event
->
index
[
index
].
refs
++
)
event
->
enable
(
event
,
index
);
}
spin_unlock_irqrestore
(
&
event
->
lock
,
flags
);
}
void
nouveau_event_trigger
(
struct
nouveau_event
*
event
,
int
index
)
{
struct
nouveau_eventh
*
handler
,
*
temp
;
unsigned
long
flags
;
if
(
index
>=
event
->
index_nr
)
return
;
spin_lock_irqsave
(
&
event
->
lock
,
flags
);
list_for_each_entry_safe
(
handler
,
temp
,
&
event
->
index
[
index
].
list
,
head
)
{
if
(
handler
->
func
(
handler
,
index
)
==
NVKM_EVENT_DROP
)
{
nouveau_event_put_locked
(
event
,
index
,
handler
);
}
}
spin_unlock_irqrestore
(
&
event
->
lock
,
flags
);
}
void
nouveau_event_destroy
(
struct
nouveau_event
**
pevent
)
{
struct
nouveau_event
*
event
=
*
pevent
;
if
(
event
)
{
kfree
(
event
);
*
pevent
=
NULL
;
}
}
int
nouveau_event_create
(
int
index_nr
,
struct
nouveau_event
**
pevent
)
{
struct
nouveau_event
*
event
;
int
i
;
event
=
*
pevent
=
kzalloc
(
sizeof
(
*
event
)
+
index_nr
*
sizeof
(
event
->
index
[
0
]),
GFP_KERNEL
);
if
(
!
event
)
return
-
ENOMEM
;
spin_lock_init
(
&
event
->
lock
);
for
(
i
=
0
;
i
<
index_nr
;
i
++
)
INIT_LIST_HEAD
(
&
event
->
index
[
i
].
list
);
event
->
index_nr
=
index_nr
;
return
0
;
}
drivers/gpu/drm/nouveau/core/include/core/event.h
0 → 100644
浏览文件 @
51fa0253
#ifndef __NVKM_EVENT_H__
#define __NVKM_EVENT_H__
/* return codes from event handlers */
#define NVKM_EVENT_DROP 0
#define NVKM_EVENT_KEEP 1
struct
nouveau_eventh
{
struct
list_head
head
;
int
(
*
func
)(
struct
nouveau_eventh
*
,
int
index
);
};
struct
nouveau_event
{
spinlock_t
lock
;
void
*
priv
;
void
(
*
enable
)(
struct
nouveau_event
*
,
int
index
);
void
(
*
disable
)(
struct
nouveau_event
*
,
int
index
);
int
index_nr
;
struct
{
struct
list_head
list
;
int
refs
;
}
index
[];
};
int
nouveau_event_create
(
int
index_nr
,
struct
nouveau_event
**
);
void
nouveau_event_destroy
(
struct
nouveau_event
**
);
void
nouveau_event_trigger
(
struct
nouveau_event
*
,
int
index
);
void
nouveau_event_get
(
struct
nouveau_event
*
,
int
index
,
struct
nouveau_eventh
*
);
void
nouveau_event_put
(
struct
nouveau_event
*
,
int
index
,
struct
nouveau_eventh
*
);
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录