Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
2621a416
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
169
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看板
提交
2621a416
编写于
11月 03, 2015
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/abi16: implement limited interoperability with usif/nvif
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
786a57ef
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
53 addition
and
2 deletion
+53
-2
drivers/gpu/drm/nouveau/nouveau_abi16.c
drivers/gpu/drm/nouveau/nouveau_abi16.c
+39
-0
drivers/gpu/drm/nouveau/nouveau_abi16.h
drivers/gpu/drm/nouveau/nouveau_abi16.h
+1
-0
drivers/gpu/drm/nouveau/nouveau_usif.c
drivers/gpu/drm/nouveau/nouveau_usif.c
+13
-2
未找到文件。
drivers/gpu/drm/nouveau/nouveau_abi16.c
浏览文件 @
2621a416
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
#include <nvif/driver.h>
#include <nvif/driver.h>
#include <nvif/ioctl.h>
#include <nvif/ioctl.h>
#include <nvif/class.h>
#include <nvif/class.h>
#include <nvif/unpack.h>
#include "nouveau_drm.h"
#include "nouveau_drm.h"
#include "nouveau_dma.h"
#include "nouveau_dma.h"
...
@@ -346,6 +347,44 @@ nouveau_abi16_chan(struct nouveau_abi16 *abi16, int channel)
...
@@ -346,6 +347,44 @@ nouveau_abi16_chan(struct nouveau_abi16 *abi16, int channel)
return
NULL
;
return
NULL
;
}
}
int
nouveau_abi16_usif
(
struct
drm_file
*
file_priv
,
void
*
data
,
u32
size
)
{
union
{
struct
nvif_ioctl_v0
v0
;
}
*
args
=
data
;
struct
nouveau_abi16_chan
*
chan
;
struct
nouveau_abi16
*
abi16
;
int
ret
;
if
(
nvif_unpack
(
args
->
v0
,
0
,
0
,
true
))
{
switch
(
args
->
v0
.
type
)
{
case
NVIF_IOCTL_V0_NEW
:
case
NVIF_IOCTL_V0_MTHD
:
case
NVIF_IOCTL_V0_SCLASS
:
break
;
default:
return
-
EACCES
;
}
}
else
return
ret
;
if
(
!
(
abi16
=
nouveau_abi16
(
file_priv
)))
return
-
ENOMEM
;
if
(
args
->
v0
.
token
!=
~
0ULL
)
{
if
(
!
(
chan
=
nouveau_abi16_chan
(
abi16
,
args
->
v0
.
token
)))
return
-
EINVAL
;
args
->
v0
.
object
=
nvif_handle
(
&
chan
->
chan
->
user
);
args
->
v0
.
owner
=
NVIF_IOCTL_V0_OWNER_ANY
;
return
0
;
}
args
->
v0
.
object
=
nvif_handle
(
&
abi16
->
device
.
object
);
args
->
v0
.
owner
=
NVIF_IOCTL_V0_OWNER_ANY
;
return
0
;
}
int
int
nouveau_abi16_ioctl_channel_free
(
ABI16_IOCTL_ARGS
)
nouveau_abi16_ioctl_channel_free
(
ABI16_IOCTL_ARGS
)
{
{
...
...
drivers/gpu/drm/nouveau/nouveau_abi16.h
浏览文件 @
2621a416
...
@@ -37,6 +37,7 @@ struct nouveau_abi16 *nouveau_abi16_get(struct drm_file *);
...
@@ -37,6 +37,7 @@ struct nouveau_abi16 *nouveau_abi16_get(struct drm_file *);
int
nouveau_abi16_put
(
struct
nouveau_abi16
*
,
int
);
int
nouveau_abi16_put
(
struct
nouveau_abi16
*
,
int
);
void
nouveau_abi16_fini
(
struct
nouveau_abi16
*
);
void
nouveau_abi16_fini
(
struct
nouveau_abi16
*
);
s32
nouveau_abi16_swclass
(
struct
nouveau_drm
*
);
s32
nouveau_abi16_swclass
(
struct
nouveau_drm
*
);
int
nouveau_abi16_usif
(
struct
drm_file
*
,
void
*
data
,
u32
size
);
#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
#define NOUVEAU_GEM_DOMAIN_GART (1 << 2)
#define NOUVEAU_GEM_DOMAIN_GART (1 << 2)
...
...
drivers/gpu/drm/nouveau/nouveau_usif.c
浏览文件 @
2621a416
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
#include "nouveau_drm.h"
#include "nouveau_drm.h"
#include "nouveau_usif.h"
#include "nouveau_usif.h"
#include "nouveau_abi16.h"
#include <nvif/notify.h>
#include <nvif/notify.h>
#include <nvif/unpack.h>
#include <nvif/unpack.h>
...
@@ -316,11 +317,21 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
...
@@ -316,11 +317,21 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
}
else
}
else
goto
done
;
goto
done
;
/* USIF slightly abuses some return-only ioctl members in order
* to provide interoperability with the older ABI16 objects
*/
mutex_lock
(
&
cli
->
mutex
);
mutex_lock
(
&
cli
->
mutex
);
if
(
argv
->
v0
.
route
)
{
if
(
ret
=
-
EINVAL
,
argv
->
v0
.
route
==
0xff
)
ret
=
nouveau_abi16_usif
(
filp
,
argv
,
argc
);
if
(
ret
)
{
mutex_unlock
(
&
cli
->
mutex
);
goto
done
;
}
}
switch
(
argv
->
v0
.
type
)
{
switch
(
argv
->
v0
.
type
)
{
case
NVIF_IOCTL_V0_NEW
:
case
NVIF_IOCTL_V0_NEW
:
/* ... except if we're creating children */
argv
->
v0
.
owner
=
NVIF_IOCTL_V0_OWNER_ANY
;
ret
=
usif_object_new
(
filp
,
data
,
size
,
argv
,
argc
);
ret
=
usif_object_new
(
filp
,
data
,
size
,
argv
,
argc
);
break
;
break
;
case
NVIF_IOCTL_V0_NTFY_NEW
:
case
NVIF_IOCTL_V0_NTFY_NEW
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录