Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
cf41f8ac
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,发现更多精彩内容 >>
提交
cf41f8ac
编写于
2月 02, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'drm-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
上级
0271fc2d
30e2fb18
变更
28
隐藏空白更改
内联
并排
Showing
28 changed file
with
248 addition
and
175 deletion
+248
-175
drivers/char/drm/ati_pcigart.c
drivers/char/drm/ati_pcigart.c
+7
-10
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+3
-2
drivers/char/drm/drm_auth.c
drivers/char/drm/drm_auth.c
+10
-10
drivers/char/drm/drm_bufs.c
drivers/char/drm/drm_bufs.c
+40
-40
drivers/char/drm/drm_context.c
drivers/char/drm/drm_context.c
+26
-26
drivers/char/drm/drm_drv.c
drivers/char/drm/drm_drv.c
+2
-2
drivers/char/drm/drm_fops.c
drivers/char/drm/drm_fops.c
+6
-6
drivers/char/drm/drm_ioctl.c
drivers/char/drm/drm_ioctl.c
+9
-9
drivers/char/drm/drm_irq.c
drivers/char/drm/drm_irq.c
+8
-8
drivers/char/drm/drm_pciids.h
drivers/char/drm/drm_pciids.h
+2
-0
drivers/char/drm/drm_proc.c
drivers/char/drm/drm_proc.c
+14
-14
drivers/char/drm/drm_stub.c
drivers/char/drm/drm_stub.c
+2
-2
drivers/char/drm/drm_vm.c
drivers/char/drm/drm_vm.c
+6
-6
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_dma.c
+1
-1
drivers/char/drm/i810_drv.h
drivers/char/drm/i810_drv.h
+0
-2
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_dma.c
+1
-1
drivers/char/drm/i830_drv.h
drivers/char/drm/i830_drv.h
+0
-3
drivers/char/drm/i915_dma.c
drivers/char/drm/i915_dma.c
+30
-12
drivers/char/drm/i915_drm.h
drivers/char/drm/i915_drm.h
+33
-0
drivers/char/drm/i915_drv.h
drivers/char/drm/i915_drv.h
+4
-2
drivers/char/drm/i915_mem.c
drivers/char/drm/i915_mem.c
+31
-0
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+1
-1
drivers/char/drm/savage_bci.c
drivers/char/drm/savage_bci.c
+3
-1
drivers/char/drm/savage_drv.h
drivers/char/drm/savage_drv.h
+0
-1
drivers/char/drm/via_dma.c
drivers/char/drm/via_dma.c
+5
-5
drivers/char/drm/via_dmablit.c
drivers/char/drm/via_dmablit.c
+3
-3
drivers/char/drm/via_drv.h
drivers/char/drm/via_drv.h
+0
-7
drivers/char/drm/via_irq.c
drivers/char/drm/via_irq.c
+1
-1
未找到文件。
drivers/char/drm/ati_pcigart.c
浏览文件 @
cf41f8ac
...
...
@@ -59,17 +59,16 @@ static void *drm_ati_alloc_pcigart_table(void)
int
i
;
DRM_DEBUG
(
"%s
\n
"
,
__FUNCTION__
);
address
=
__get_free_pages
(
GFP_KERNEL
,
ATI_PCIGART_TABLE_ORDER
);
address
=
__get_free_pages
(
GFP_KERNEL
|
__GFP_COMP
,
ATI_PCIGART_TABLE_ORDER
);
if
(
address
==
0UL
)
{
return
0
;
return
NULL
;
}
page
=
virt_to_page
(
address
);
for
(
i
=
0
;
i
<
ATI_PCIGART_TABLE_PAGES
;
i
++
,
page
++
)
{
get_page
(
page
);
for
(
i
=
0
;
i
<
ATI_PCIGART_TABLE_PAGES
;
i
++
,
page
++
)
SetPageReserved
(
page
);
}
DRM_DEBUG
(
"%s: returning 0x%08lx
\n
"
,
__FUNCTION__
,
address
);
return
(
void
*
)
address
;
...
...
@@ -83,10 +82,8 @@ static void drm_ati_free_pcigart_table(void *address)
page
=
virt_to_page
((
unsigned
long
)
address
);
for
(
i
=
0
;
i
<
ATI_PCIGART_TABLE_PAGES
;
i
++
,
page
++
)
{
__put_page
(
page
);
for
(
i
=
0
;
i
<
ATI_PCIGART_TABLE_PAGES
;
i
++
,
page
++
)
ClearPageReserved
(
page
);
}
free_pages
((
unsigned
long
)
address
,
ATI_PCIGART_TABLE_ORDER
);
}
...
...
@@ -127,7 +124,7 @@ int drm_ati_pcigart_cleanup(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
if
(
gart_info
->
gart_table_location
==
DRM_ATI_GART_MAIN
&&
gart_info
->
addr
)
{
drm_ati_free_pcigart_table
(
gart_info
->
addr
);
gart_info
->
addr
=
0
;
gart_info
->
addr
=
NULL
;
}
return
1
;
...
...
@@ -168,7 +165,7 @@ int drm_ati_pcigart_init(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
if
(
bus_address
==
0
)
{
DRM_ERROR
(
"unable to map PCIGART pages!
\n
"
);
drm_ati_free_pcigart_table
(
address
);
address
=
0
;
address
=
NULL
;
goto
done
;
}
}
else
{
...
...
drivers/char/drm/drmP.h
浏览文件 @
cf41f8ac
...
...
@@ -57,6 +57,7 @@
#include <linux/smp_lock.h>
/* For (un)lock_kernel */
#include <linux/mm.h>
#include <linux/cdev.h>
#include <linux/mutex.h>
#if defined(__alpha__) || defined(__powerpc__)
#include <asm/pgtable.h>
/* For pte_wrprotect */
#endif
...
...
@@ -623,7 +624,7 @@ typedef struct drm_device {
/** \name Locks */
/*@{ */
spinlock_t
count_lock
;
/**< For inuse, drm_device::open_count, drm_device::buf_use */
struct
semaphore
struct_sem
;
/**< For others */
struct
mutex
struct_mutex
;
/**< For others */
/*@} */
/** \name Usage Counters */
...
...
@@ -658,7 +659,7 @@ typedef struct drm_device {
/*@{ */
drm_ctx_list_t
*
ctxlist
;
/**< Linked list of context handles */
int
ctx_count
;
/**< Number of context handles */
struct
semaphore
ctxlist_sem
;
/**< For ctxlist */
struct
mutex
ctxlist_mutex
;
/**< For ctxlist */
drm_map_t
**
context_sareas
;
/**< per-context SAREA's */
int
max_context
;
...
...
drivers/char/drm/drm_auth.c
浏览文件 @
cf41f8ac
...
...
@@ -56,7 +56,7 @@ static int drm_hash_magic(drm_magic_t magic)
* \param magic magic number.
*
* Searches in drm_device::magiclist within all files with the same hash key
* the one with matching magic number, while holding the drm_device::struct_
sem
* the one with matching magic number, while holding the drm_device::struct_
mutex
* lock.
*/
static
drm_file_t
*
drm_find_file
(
drm_device_t
*
dev
,
drm_magic_t
magic
)
...
...
@@ -65,14 +65,14 @@ static drm_file_t *drm_find_file(drm_device_t * dev, drm_magic_t magic)
drm_magic_entry_t
*
pt
;
int
hash
=
drm_hash_magic
(
magic
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
pt
=
dev
->
magiclist
[
hash
].
head
;
pt
;
pt
=
pt
->
next
)
{
if
(
pt
->
magic
==
magic
)
{
retval
=
pt
->
priv
;
break
;
}
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
retval
;
}
...
...
@@ -85,7 +85,7 @@ static drm_file_t *drm_find_file(drm_device_t * dev, drm_magic_t magic)
*
* Creates a drm_magic_entry structure and appends to the linked list
* associated the magic number hash key in drm_device::magiclist, while holding
* the drm_device::struct_
sem
lock.
* the drm_device::struct_
mutex
lock.
*/
static
int
drm_add_magic
(
drm_device_t
*
dev
,
drm_file_t
*
priv
,
drm_magic_t
magic
)
...
...
@@ -104,7 +104,7 @@ static int drm_add_magic(drm_device_t * dev, drm_file_t * priv,
entry
->
priv
=
priv
;
entry
->
next
=
NULL
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
dev
->
magiclist
[
hash
].
tail
)
{
dev
->
magiclist
[
hash
].
tail
->
next
=
entry
;
dev
->
magiclist
[
hash
].
tail
=
entry
;
...
...
@@ -112,7 +112,7 @@ static int drm_add_magic(drm_device_t * dev, drm_file_t * priv,
dev
->
magiclist
[
hash
].
head
=
entry
;
dev
->
magiclist
[
hash
].
tail
=
entry
;
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
0
;
}
...
...
@@ -124,7 +124,7 @@ static int drm_add_magic(drm_device_t * dev, drm_file_t * priv,
* \param magic magic number.
*
* Searches and unlinks the entry in drm_device::magiclist with the magic
* number hash key, while holding the drm_device::struct_
sem
lock.
* number hash key, while holding the drm_device::struct_
mutex
lock.
*/
static
int
drm_remove_magic
(
drm_device_t
*
dev
,
drm_magic_t
magic
)
{
...
...
@@ -135,7 +135,7 @@ static int drm_remove_magic(drm_device_t * dev, drm_magic_t magic)
DRM_DEBUG
(
"%d
\n
"
,
magic
);
hash
=
drm_hash_magic
(
magic
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
pt
=
dev
->
magiclist
[
hash
].
head
;
pt
;
prev
=
pt
,
pt
=
pt
->
next
)
{
if
(
pt
->
magic
==
magic
)
{
if
(
dev
->
magiclist
[
hash
].
head
==
pt
)
{
...
...
@@ -147,11 +147,11 @@ static int drm_remove_magic(drm_device_t * dev, drm_magic_t magic)
if
(
prev
)
{
prev
->
next
=
pt
->
next
;
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
0
;
}
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
drm_free
(
pt
,
sizeof
(
*
pt
),
DRM_MEM_MAGIC
);
...
...
drivers/char/drm/drm_bufs.c
浏览文件 @
cf41f8ac
...
...
@@ -255,14 +255,14 @@ static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
memset
(
list
,
0
,
sizeof
(
*
list
));
list
->
map
=
map
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
list_add
(
&
list
->
head
,
&
dev
->
maplist
->
head
);
/* Assign a 32-bit handle */
/* We do it here so that dev->struct_
sem
protects the increment */
/* We do it here so that dev->struct_
mutex
protects the increment */
list
->
user_token
=
HandleID
(
map
->
type
==
_DRM_SHM
?
(
unsigned
long
)
map
->
handle
:
map
->
offset
,
dev
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
*
maplist
=
list
;
return
0
;
...
...
@@ -392,9 +392,9 @@ int drm_rmmap(drm_device_t *dev, drm_local_map_t *map)
{
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm_rmmap_locked
(
dev
,
map
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -423,7 +423,7 @@ int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
return
-
EFAULT
;
}
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
list_for_each
(
list
,
&
dev
->
maplist
->
head
)
{
drm_map_list_t
*
r_list
=
list_entry
(
list
,
drm_map_list_t
,
head
);
...
...
@@ -439,7 +439,7 @@ int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
* find anything.
*/
if
(
list
==
(
&
dev
->
maplist
->
head
))
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
...
...
@@ -448,13 +448,13 @@ int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
/* Register and framebuffer maps are permanent */
if
((
map
->
type
==
_DRM_REGISTERS
)
||
(
map
->
type
==
_DRM_FRAME_BUFFER
))
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
0
;
}
ret
=
drm_rmmap_locked
(
dev
,
map
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -566,16 +566,16 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
atomic_inc
(
&
dev
->
buf_alloc
);
spin_unlock
(
&
dev
->
count_lock
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
entry
=
&
dma
->
bufs
[
order
];
if
(
entry
->
buf_count
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
/* May only call once for each order */
}
if
(
count
<
0
||
count
>
4096
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
EINVAL
;
}
...
...
@@ -583,7 +583,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
entry
->
buflist
=
drm_alloc
(
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
if
(
!
entry
->
buflist
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -616,7 +616,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
/* Set count correctly so we free the proper amount. */
entry
->
buf_count
=
count
;
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -638,7 +638,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
if
(
!
temp_buflist
)
{
/* Free the entry because it isn't valid */
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -656,7 +656,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
DRM_DEBUG
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
buf_count
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
request
->
count
=
entry
->
buf_count
;
request
->
size
=
size
;
...
...
@@ -722,16 +722,16 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
atomic_inc
(
&
dev
->
buf_alloc
);
spin_unlock
(
&
dev
->
count_lock
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
entry
=
&
dma
->
bufs
[
order
];
if
(
entry
->
buf_count
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
/* May only call once for each order */
}
if
(
count
<
0
||
count
>
4096
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
EINVAL
;
}
...
...
@@ -739,7 +739,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
entry
->
buflist
=
drm_alloc
(
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
if
(
!
entry
->
buflist
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -750,7 +750,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
if
(
!
entry
->
seglist
)
{
drm_free
(
entry
->
buflist
,
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -766,7 +766,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
drm_free
(
entry
->
seglist
,
count
*
sizeof
(
*
entry
->
seglist
),
DRM_MEM_SEGS
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -790,7 +790,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
drm_free
(
temp_pagelist
,
(
dma
->
page_count
+
(
count
<<
page_order
))
*
sizeof
(
*
dma
->
pagelist
),
DRM_MEM_PAGES
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -831,7 +831,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
(
count
<<
page_order
))
*
sizeof
(
*
dma
->
pagelist
),
DRM_MEM_PAGES
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -853,7 +853,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
drm_free
(
temp_pagelist
,
(
dma
->
page_count
+
(
count
<<
page_order
))
*
sizeof
(
*
dma
->
pagelist
),
DRM_MEM_PAGES
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -878,7 +878,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
dma
->
page_count
+=
entry
->
seg_count
<<
page_order
;
dma
->
byte_count
+=
PAGE_SIZE
*
(
entry
->
seg_count
<<
page_order
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
request
->
count
=
entry
->
buf_count
;
request
->
size
=
size
;
...
...
@@ -948,16 +948,16 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
atomic_inc
(
&
dev
->
buf_alloc
);
spin_unlock
(
&
dev
->
count_lock
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
entry
=
&
dma
->
bufs
[
order
];
if
(
entry
->
buf_count
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
/* May only call once for each order */
}
if
(
count
<
0
||
count
>
4096
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
EINVAL
;
}
...
...
@@ -965,7 +965,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
entry
->
buflist
=
drm_alloc
(
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
if
(
!
entry
->
buflist
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -999,7 +999,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
/* Set count correctly so we free the proper amount. */
entry
->
buf_count
=
count
;
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -1022,7 +1022,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
if
(
!
temp_buflist
)
{
/* Free the entry because it isn't valid */
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -1040,7 +1040,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
DRM_DEBUG
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
buf_count
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
request
->
count
=
entry
->
buf_count
;
request
->
size
=
size
;
...
...
@@ -1110,16 +1110,16 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
atomic_inc
(
&
dev
->
buf_alloc
);
spin_unlock
(
&
dev
->
count_lock
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
entry
=
&
dma
->
bufs
[
order
];
if
(
entry
->
buf_count
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
/* May only call once for each order */
}
if
(
count
<
0
||
count
>
4096
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
EINVAL
;
}
...
...
@@ -1127,7 +1127,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
entry
->
buflist
=
drm_alloc
(
count
*
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
if
(
!
entry
->
buflist
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -1160,7 +1160,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
/* Set count correctly so we free the proper amount. */
entry
->
buf_count
=
count
;
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -1182,7 +1182,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
if
(
!
temp_buflist
)
{
/* Free the entry because it isn't valid */
drm_cleanup_buf_error
(
dev
,
entry
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
atomic_dec
(
&
dev
->
buf_alloc
);
return
-
ENOMEM
;
}
...
...
@@ -1200,7 +1200,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
DRM_DEBUG
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
buf_count
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
request
->
count
=
entry
->
buf_count
;
request
->
size
=
size
;
...
...
drivers/char/drm/drm_context.c
浏览文件 @
cf41f8ac
...
...
@@ -53,7 +53,7 @@
* \param ctx_handle context handle.
*
* Clears the bit specified by \p ctx_handle in drm_device::ctx_bitmap and the entry
* in drm_device::context_sareas, while holding the drm_device::struct_
sem
* in drm_device::context_sareas, while holding the drm_device::struct_
mutex
* lock.
*/
void
drm_ctxbitmap_free
(
drm_device_t
*
dev
,
int
ctx_handle
)
...
...
@@ -64,10 +64,10 @@ void drm_ctxbitmap_free(drm_device_t * dev, int ctx_handle)
goto
failed
;
if
(
ctx_handle
<
DRM_MAX_CTXBITMAP
)
{
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
clear_bit
(
ctx_handle
,
dev
->
ctx_bitmap
);
dev
->
context_sareas
[
ctx_handle
]
=
NULL
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
;
}
failed:
...
...
@@ -83,7 +83,7 @@ void drm_ctxbitmap_free(drm_device_t * dev, int ctx_handle)
*
* Find the first zero bit in drm_device::ctx_bitmap and (re)allocates
* drm_device::context_sareas to accommodate the new entry while holding the
* drm_device::struct_
sem
lock.
* drm_device::struct_
mutex
lock.
*/
static
int
drm_ctxbitmap_next
(
drm_device_t
*
dev
)
{
...
...
@@ -92,7 +92,7 @@ static int drm_ctxbitmap_next(drm_device_t * dev)
if
(
!
dev
->
ctx_bitmap
)
return
-
1
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
bit
=
find_first_zero_bit
(
dev
->
ctx_bitmap
,
DRM_MAX_CTXBITMAP
);
if
(
bit
<
DRM_MAX_CTXBITMAP
)
{
set_bit
(
bit
,
dev
->
ctx_bitmap
);
...
...
@@ -113,7 +113,7 @@ static int drm_ctxbitmap_next(drm_device_t * dev)
DRM_MEM_MAPS
);
if
(
!
ctx_sareas
)
{
clear_bit
(
bit
,
dev
->
ctx_bitmap
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
1
;
}
dev
->
context_sareas
=
ctx_sareas
;
...
...
@@ -126,16 +126,16 @@ static int drm_ctxbitmap_next(drm_device_t * dev)
DRM_MEM_MAPS
);
if
(
!
dev
->
context_sareas
)
{
clear_bit
(
bit
,
dev
->
ctx_bitmap
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
1
;
}
dev
->
context_sareas
[
bit
]
=
NULL
;
}
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
bit
;
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
1
;
}
...
...
@@ -145,24 +145,24 @@ static int drm_ctxbitmap_next(drm_device_t * dev)
* \param dev DRM device.
*
* Allocates and initialize drm_device::ctx_bitmap and drm_device::context_sareas, while holding
* the drm_device::struct_
sem
lock.
* the drm_device::struct_
mutex
lock.
*/
int
drm_ctxbitmap_init
(
drm_device_t
*
dev
)
{
int
i
;
int
temp
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
dev
->
ctx_bitmap
=
(
unsigned
long
*
)
drm_alloc
(
PAGE_SIZE
,
DRM_MEM_CTXBITMAP
);
if
(
dev
->
ctx_bitmap
==
NULL
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
ENOMEM
;
}
memset
((
void
*
)
dev
->
ctx_bitmap
,
0
,
PAGE_SIZE
);
dev
->
context_sareas
=
NULL
;
dev
->
max_context
=
-
1
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
for
(
i
=
0
;
i
<
DRM_RESERVED_CONTEXTS
;
i
++
)
{
temp
=
drm_ctxbitmap_next
(
dev
);
...
...
@@ -178,17 +178,17 @@ int drm_ctxbitmap_init(drm_device_t * dev)
* \param dev DRM device.
*
* Frees drm_device::ctx_bitmap and drm_device::context_sareas, while holding
* the drm_device::struct_
sem
lock.
* the drm_device::struct_
mutex
lock.
*/
void
drm_ctxbitmap_cleanup
(
drm_device_t
*
dev
)
{
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
dev
->
context_sareas
)
drm_free
(
dev
->
context_sareas
,
sizeof
(
*
dev
->
context_sareas
)
*
dev
->
max_context
,
DRM_MEM_MAPS
);
drm_free
((
void
*
)
dev
->
ctx_bitmap
,
PAGE_SIZE
,
DRM_MEM_CTXBITMAP
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
}
/*@}*/
...
...
@@ -222,15 +222,15 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
if
(
copy_from_user
(
&
request
,
argp
,
sizeof
(
request
)))
return
-
EFAULT
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
dev
->
max_context
<
0
||
request
.
ctx_id
>=
(
unsigned
)
dev
->
max_context
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
map
=
dev
->
context_sareas
[
request
.
ctx_id
];
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
request
.
handle
=
NULL
;
list_for_each_entry
(
_entry
,
&
dev
->
maplist
->
head
,
head
)
{
...
...
@@ -274,7 +274,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
(
drm_ctx_priv_map_t
__user
*
)
arg
,
sizeof
(
request
)))
return
-
EFAULT
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
list_for_each
(
list
,
&
dev
->
maplist
->
head
)
{
r_list
=
list_entry
(
list
,
drm_map_list_t
,
head
);
if
(
r_list
->
map
...
...
@@ -282,7 +282,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
goto
found
;
}
bad:
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
found:
...
...
@@ -294,7 +294,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
if
(
request
.
ctx_id
>=
(
unsigned
)
dev
->
max_context
)
goto
bad
;
dev
->
context_sareas
[
request
.
ctx_id
]
=
map
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
0
;
}
...
...
@@ -448,10 +448,10 @@ int drm_addctx(struct inode *inode, struct file *filp,
ctx_entry
->
handle
=
ctx
.
handle
;
ctx_entry
->
tag
=
priv
;
down
(
&
dev
->
ctxlist_sem
);
mutex_lock
(
&
dev
->
ctxlist_mutex
);
list_add
(
&
ctx_entry
->
head
,
&
dev
->
ctxlist
->
head
);
++
dev
->
ctx_count
;
up
(
&
dev
->
ctxlist_sem
);
mutex_unlock
(
&
dev
->
ctxlist_mutex
);
if
(
copy_to_user
(
argp
,
&
ctx
,
sizeof
(
ctx
)))
return
-
EFAULT
;
...
...
@@ -574,7 +574,7 @@ int drm_rmctx(struct inode *inode, struct file *filp,
drm_ctxbitmap_free
(
dev
,
ctx
.
handle
);
}
down
(
&
dev
->
ctxlist_sem
);
mutex_lock
(
&
dev
->
ctxlist_mutex
);
if
(
!
list_empty
(
&
dev
->
ctxlist
->
head
))
{
drm_ctx_list_t
*
pos
,
*
n
;
...
...
@@ -586,7 +586,7 @@ int drm_rmctx(struct inode *inode, struct file *filp,
}
}
}
up
(
&
dev
->
ctxlist_sem
);
mutex_unlock
(
&
dev
->
ctxlist_mutex
);
return
0
;
}
...
...
drivers/char/drm/drm_drv.c
浏览文件 @
cf41f8ac
...
...
@@ -151,7 +151,7 @@ int drm_lastclose(drm_device_t * dev)
if
(
dev
->
irq_enabled
)
drm_irq_uninstall
(
dev
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
del_timer
(
&
dev
->
timer
);
/* Clear pid list */
...
...
@@ -231,7 +231,7 @@ int drm_lastclose(drm_device_t * dev)
dev
->
lock
.
filp
=
NULL
;
wake_up_interruptible
(
&
dev
->
lock
.
lock_queue
);
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
DRM_DEBUG
(
"lastclose completed
\n
"
);
return
0
;
...
...
drivers/char/drm/drm_fops.c
浏览文件 @
cf41f8ac
...
...
@@ -262,7 +262,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
goto
out_free
;
}
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
!
dev
->
file_last
)
{
priv
->
next
=
NULL
;
priv
->
prev
=
NULL
;
...
...
@@ -276,7 +276,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
dev
->
file_last
->
next
=
priv
;
dev
->
file_last
=
priv
;
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
#ifdef __alpha__
/*
...
...
@@ -413,7 +413,7 @@ int drm_release(struct inode *inode, struct file *filp)
drm_fasync
(
-
1
,
filp
,
0
);
down
(
&
dev
->
ctxlist_sem
);
mutex_lock
(
&
dev
->
ctxlist_mutex
);
if
(
dev
->
ctxlist
&&
(
!
list_empty
(
&
dev
->
ctxlist
->
head
)))
{
drm_ctx_list_t
*
pos
,
*
n
;
...
...
@@ -432,9 +432,9 @@ int drm_release(struct inode *inode, struct file *filp)
}
}
}
up
(
&
dev
->
ctxlist_sem
);
mutex_unlock
(
&
dev
->
ctxlist_mutex
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
priv
->
remove_auth_on_close
==
1
)
{
drm_file_t
*
temp
=
dev
->
file_first
;
while
(
temp
)
{
...
...
@@ -452,7 +452,7 @@ int drm_release(struct inode *inode, struct file *filp)
}
else
{
dev
->
file_last
=
priv
->
prev
;
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
if
(
dev
->
driver
->
postclose
)
dev
->
driver
->
postclose
(
dev
,
priv
);
...
...
drivers/char/drm/drm_ioctl.c
浏览文件 @
cf41f8ac
...
...
@@ -194,9 +194,9 @@ int drm_getmap(struct inode *inode, struct file *filp,
return
-
EFAULT
;
idx
=
map
.
offset
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
idx
<
0
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
...
...
@@ -209,7 +209,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
i
++
;
}
if
(
!
r_list
||
!
r_list
->
map
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
...
...
@@ -219,7 +219,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
map
.
flags
=
r_list
->
map
->
flags
;
map
.
handle
=
(
void
*
)(
unsigned
long
)
r_list
->
user_token
;
map
.
mtrr
=
r_list
->
map
->
mtrr
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
if
(
copy_to_user
(
argp
,
&
map
,
sizeof
(
map
)))
return
-
EFAULT
;
...
...
@@ -253,11 +253,11 @@ int drm_getclient(struct inode *inode, struct file *filp,
if
(
copy_from_user
(
&
client
,
argp
,
sizeof
(
client
)))
return
-
EFAULT
;
idx
=
client
.
idx
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
i
=
0
,
pt
=
dev
->
file_first
;
i
<
idx
&&
pt
;
i
++
,
pt
=
pt
->
next
)
;
if
(
!
pt
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
client
.
auth
=
pt
->
authenticated
;
...
...
@@ -265,7 +265,7 @@ int drm_getclient(struct inode *inode, struct file *filp,
client
.
uid
=
pt
->
uid
;
client
.
magic
=
pt
->
magic
;
client
.
iocs
=
pt
->
ioctl_count
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
if
(
copy_to_user
(
argp
,
&
client
,
sizeof
(
client
)))
return
-
EFAULT
;
...
...
@@ -292,7 +292,7 @@ int drm_getstats(struct inode *inode, struct file *filp,
memset
(
&
stats
,
0
,
sizeof
(
stats
));
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
i
=
0
;
i
<
dev
->
counters
;
i
++
)
{
if
(
dev
->
types
[
i
]
==
_DRM_STAT_LOCK
)
...
...
@@ -305,7 +305,7 @@ int drm_getstats(struct inode *inode, struct file *filp,
stats
.
count
=
dev
->
counters
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
if
(
copy_to_user
((
drm_stats_t
__user
*
)
arg
,
&
stats
,
sizeof
(
stats
)))
return
-
EFAULT
;
...
...
drivers/char/drm/drm_irq.c
浏览文件 @
cf41f8ac
...
...
@@ -98,20 +98,20 @@ static int drm_irq_install(drm_device_t * dev)
if
(
dev
->
irq
==
0
)
return
-
EINVAL
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
/* Driver must have been initialized */
if
(
!
dev
->
dev_private
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EINVAL
;
}
if
(
dev
->
irq_enabled
)
{
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
-
EBUSY
;
}
dev
->
irq_enabled
=
1
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
DRM_DEBUG
(
"%s: irq=%d
\n
"
,
__FUNCTION__
,
dev
->
irq
);
...
...
@@ -135,9 +135,9 @@ static int drm_irq_install(drm_device_t * dev)
ret
=
request_irq
(
dev
->
irq
,
dev
->
driver
->
irq_handler
,
sh_flags
,
dev
->
devname
,
dev
);
if
(
ret
<
0
)
{
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
dev
->
irq_enabled
=
0
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -161,10 +161,10 @@ int drm_irq_uninstall(drm_device_t * dev)
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
-
EINVAL
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
irq_enabled
=
dev
->
irq_enabled
;
dev
->
irq_enabled
=
0
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
if
(
!
irq_enabled
)
return
-
EINVAL
;
...
...
drivers/char/drm/drm_pciids.h
浏览文件 @
cf41f8ac
...
...
@@ -3,6 +3,7 @@
Please contact dri-devel@lists.sf.net to add new cards to this list
*/
#define radeon_PCI_IDS \
{0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV350},\
{0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|CHIP_IS_IGP}, \
{0x1002, 0x4137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS200|CHIP_IS_IGP}, \
{0x1002, 0x4144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
...
...
@@ -242,5 +243,6 @@
{0x8086, 0x2582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
{0x8086, 0x2592, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
{0x8086, 0x2772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
{0x8086, 0x27a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
{0, 0, 0}
drivers/char/drm/drm_proc.c
浏览文件 @
cf41f8ac
...
...
@@ -258,7 +258,7 @@ static int drm__vm_info(char *buf, char **start, off_t offset, int request,
}
/**
* Simply calls _vm_info() while holding the drm_device::struct_
sem
lock.
* Simply calls _vm_info() while holding the drm_device::struct_
mutex
lock.
*/
static
int
drm_vm_info
(
char
*
buf
,
char
**
start
,
off_t
offset
,
int
request
,
int
*
eof
,
void
*
data
)
...
...
@@ -266,9 +266,9 @@ static int drm_vm_info(char *buf, char **start, off_t offset, int request,
drm_device_t
*
dev
=
(
drm_device_t
*
)
data
;
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm__vm_info
(
buf
,
start
,
offset
,
request
,
eof
,
data
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -331,7 +331,7 @@ static int drm__queues_info(char *buf, char **start, off_t offset,
}
/**
* Simply calls _queues_info() while holding the drm_device::struct_
sem
lock.
* Simply calls _queues_info() while holding the drm_device::struct_
mutex
lock.
*/
static
int
drm_queues_info
(
char
*
buf
,
char
**
start
,
off_t
offset
,
int
request
,
int
*
eof
,
void
*
data
)
...
...
@@ -339,9 +339,9 @@ static int drm_queues_info(char *buf, char **start, off_t offset, int request,
drm_device_t
*
dev
=
(
drm_device_t
*
)
data
;
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm__queues_info
(
buf
,
start
,
offset
,
request
,
eof
,
data
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -403,7 +403,7 @@ static int drm__bufs_info(char *buf, char **start, off_t offset, int request,
}
/**
* Simply calls _bufs_info() while holding the drm_device::struct_
sem
lock.
* Simply calls _bufs_info() while holding the drm_device::struct_
mutex
lock.
*/
static
int
drm_bufs_info
(
char
*
buf
,
char
**
start
,
off_t
offset
,
int
request
,
int
*
eof
,
void
*
data
)
...
...
@@ -411,9 +411,9 @@ static int drm_bufs_info(char *buf, char **start, off_t offset, int request,
drm_device_t
*
dev
=
(
drm_device_t
*
)
data
;
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm__bufs_info
(
buf
,
start
,
offset
,
request
,
eof
,
data
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -459,7 +459,7 @@ static int drm__clients_info(char *buf, char **start, off_t offset,
}
/**
* Simply calls _clients_info() while holding the drm_device::struct_
sem
lock.
* Simply calls _clients_info() while holding the drm_device::struct_
mutex
lock.
*/
static
int
drm_clients_info
(
char
*
buf
,
char
**
start
,
off_t
offset
,
int
request
,
int
*
eof
,
void
*
data
)
...
...
@@ -467,9 +467,9 @@ static int drm_clients_info(char *buf, char **start, off_t offset,
drm_device_t
*
dev
=
(
drm_device_t
*
)
data
;
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm__clients_info
(
buf
,
start
,
offset
,
request
,
eof
,
data
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
...
...
@@ -540,9 +540,9 @@ static int drm_vma_info(char *buf, char **start, off_t offset, int request,
drm_device_t
*
dev
=
(
drm_device_t
*
)
data
;
int
ret
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
ret
=
drm__vma_info
(
buf
,
start
,
offset
,
request
,
eof
,
data
);
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
return
ret
;
}
#endif
drivers/char/drm/drm_stub.c
浏览文件 @
cf41f8ac
...
...
@@ -61,8 +61,8 @@ static int drm_fill_in_dev(drm_device_t * dev, struct pci_dev *pdev,
spin_lock_init
(
&
dev
->
count_lock
);
init_timer
(
&
dev
->
timer
);
sema_init
(
&
dev
->
struct_sem
,
1
);
sema_init
(
&
dev
->
ctxlist_sem
,
1
);
mutex_init
(
&
dev
->
struct_mutex
);
mutex_init
(
&
dev
->
ctxlist_mutex
);
dev
->
pdev
=
pdev
;
...
...
drivers/char/drm/drm_vm.c
浏览文件 @
cf41f8ac
...
...
@@ -188,7 +188,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
map
=
vma
->
vm_private_data
;
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
pt
=
dev
->
vmalist
,
prev
=
NULL
;
pt
;
pt
=
next
)
{
next
=
pt
->
next
;
if
(
pt
->
vma
->
vm_private_data
==
map
)
...
...
@@ -248,7 +248,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
drm_free
(
map
,
sizeof
(
*
map
),
DRM_MEM_MAPS
);
}
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
}
/**
...
...
@@ -404,12 +404,12 @@ static void drm_vm_open(struct vm_area_struct *vma)
vma_entry
=
drm_alloc
(
sizeof
(
*
vma_entry
),
DRM_MEM_VMAS
);
if
(
vma_entry
)
{
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
vma_entry
->
vma
=
vma
;
vma_entry
->
next
=
dev
->
vmalist
;
vma_entry
->
pid
=
current
->
pid
;
dev
->
vmalist
=
vma_entry
;
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
}
}
...
...
@@ -431,7 +431,7 @@ static void drm_vm_close(struct vm_area_struct *vma)
vma
->
vm_start
,
vma
->
vm_end
-
vma
->
vm_start
);
atomic_dec
(
&
dev
->
vma_count
);
down
(
&
dev
->
struct_sem
);
mutex_lock
(
&
dev
->
struct_mutex
);
for
(
pt
=
dev
->
vmalist
,
prev
=
NULL
;
pt
;
prev
=
pt
,
pt
=
pt
->
next
)
{
if
(
pt
->
vma
==
vma
)
{
if
(
prev
)
{
...
...
@@ -443,7 +443,7 @@ static void drm_vm_close(struct vm_area_struct *vma)
break
;
}
}
up
(
&
dev
->
struct_sem
);
mutex_unlock
(
&
dev
->
struct_mutex
);
}
/**
...
...
drivers/char/drm/i810_dma.c
浏览文件 @
cf41f8ac
...
...
@@ -958,7 +958,7 @@ static int i810_flush_queue(drm_device_t * dev)
}
/* Must be called with the lock held */
void
i810_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
)
static
void
i810_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
int
i
;
...
...
drivers/char/drm/i810_drv.h
浏览文件 @
cf41f8ac
...
...
@@ -113,8 +113,6 @@ typedef struct drm_i810_private {
}
drm_i810_private_t
;
/* i810_dma.c */
extern
void
i810_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
);
extern
int
i810_driver_dma_quiescent
(
drm_device_t
*
dev
);
extern
void
i810_driver_reclaim_buffers_locked
(
drm_device_t
*
dev
,
struct
file
*
filp
);
...
...
drivers/char/drm/i830_dma.c
浏览文件 @
cf41f8ac
...
...
@@ -1239,7 +1239,7 @@ static int i830_flush_queue(drm_device_t * dev)
}
/* Must be called with the lock held */
void
i830_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
)
static
void
i830_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
int
i
;
...
...
drivers/char/drm/i830_drv.h
浏览文件 @
cf41f8ac
...
...
@@ -123,9 +123,6 @@ typedef struct drm_i830_private {
extern
drm_ioctl_desc_t
i830_ioctls
[];
extern
int
i830_max_ioctl
;
/* i830_dma.c */
extern
void
i830_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
);
/* i830_irq.c */
extern
int
i830_irq_emit
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
...
...
drivers/char/drm/i915_dma.c
浏览文件 @
cf41f8ac
...
...
@@ -344,18 +344,20 @@ static int i915_emit_cmds(drm_device_t * dev, int __user * buffer, int dwords)
int
i
;
RING_LOCALS
;
if
((
dwords
+
1
)
*
sizeof
(
int
)
>=
dev_priv
->
ring
.
Size
-
8
)
return
DRM_ERR
(
EINVAL
);
BEGIN_LP_RING
(((
dwords
+
1
)
&~
1
));
for
(
i
=
0
;
i
<
dwords
;)
{
int
cmd
,
sz
;
if
(
DRM_COPY_FROM_USER_UNCHECKED
(
&
cmd
,
&
buffer
[
i
],
sizeof
(
cmd
)))
return
DRM_ERR
(
EINVAL
);
/* printk("%d/%d ", i, dwords); */
if
((
sz
=
validate_cmd
(
cmd
))
==
0
||
i
+
sz
>
dwords
)
return
DRM_ERR
(
EINVAL
);
BEGIN_LP_RING
(
sz
);
OUT_RING
(
cmd
);
while
(
++
i
,
--
sz
)
{
...
...
@@ -365,9 +367,13 @@ static int i915_emit_cmds(drm_device_t * dev, int __user * buffer, int dwords)
}
OUT_RING
(
cmd
);
}
ADVANCE_LP_RING
();
}
if
(
dwords
&
1
)
OUT_RING
(
0
);
ADVANCE_LP_RING
();
return
0
;
}
...
...
@@ -401,6 +407,21 @@ static int i915_emit_box(drm_device_t * dev,
return
0
;
}
static
void
i915_emit_breadcrumb
(
drm_device_t
*
dev
)
{
drm_i915_private_t
*
dev_priv
=
dev
->
dev_private
;
RING_LOCALS
;
dev_priv
->
sarea_priv
->
last_enqueue
=
dev_priv
->
counter
++
;
BEGIN_LP_RING
(
4
);
OUT_RING
(
CMD_STORE_DWORD_IDX
);
OUT_RING
(
20
);
OUT_RING
(
dev_priv
->
counter
);
OUT_RING
(
0
);
ADVANCE_LP_RING
();
}
static
int
i915_dispatch_cmdbuffer
(
drm_device_t
*
dev
,
drm_i915_cmdbuffer_t
*
cmd
)
{
...
...
@@ -429,6 +450,7 @@ static int i915_dispatch_cmdbuffer(drm_device_t * dev,
return
ret
;
}
i915_emit_breadcrumb
(
dev
);
return
0
;
}
...
...
@@ -475,12 +497,7 @@ static int i915_dispatch_batchbuffer(drm_device_t * dev,
dev_priv
->
sarea_priv
->
last_enqueue
=
dev_priv
->
counter
++
;
BEGIN_LP_RING
(
4
);
OUT_RING
(
CMD_STORE_DWORD_IDX
);
OUT_RING
(
20
);
OUT_RING
(
dev_priv
->
counter
);
OUT_RING
(
0
);
ADVANCE_LP_RING
();
i915_emit_breadcrumb
(
dev
);
return
0
;
}
...
...
@@ -657,7 +674,7 @@ static int i915_getparam(DRM_IOCTL_ARGS)
value
=
READ_BREADCRUMB
(
dev_priv
);
break
;
default:
DRM_ERROR
(
"Unkown parameter %d
\n
"
,
param
.
param
);
DRM_ERROR
(
"Unk
n
own parameter %d
\n
"
,
param
.
param
);
return
DRM_ERR
(
EINVAL
);
}
...
...
@@ -742,7 +759,8 @@ drm_ioctl_desc_t i915_ioctls[] = {
[
DRM_IOCTL_NR
(
DRM_I915_ALLOC
)]
=
{
i915_mem_alloc
,
DRM_AUTH
},
[
DRM_IOCTL_NR
(
DRM_I915_FREE
)]
=
{
i915_mem_free
,
DRM_AUTH
},
[
DRM_IOCTL_NR
(
DRM_I915_INIT_HEAP
)]
=
{
i915_mem_init_heap
,
DRM_AUTH
|
DRM_MASTER
|
DRM_ROOT_ONLY
},
[
DRM_IOCTL_NR
(
DRM_I915_CMDBUFFER
)]
=
{
i915_cmdbuffer
,
DRM_AUTH
}
[
DRM_IOCTL_NR
(
DRM_I915_CMDBUFFER
)]
=
{
i915_cmdbuffer
,
DRM_AUTH
},
[
DRM_IOCTL_NR
(
DRM_I915_DESTROY_HEAP
)]
=
{
i915_mem_destroy_heap
,
DRM_AUTH
|
DRM_MASTER
|
DRM_ROOT_ONLY
}
};
int
i915_max_ioctl
=
DRM_ARRAY_SIZE
(
i915_ioctls
);
...
...
drivers/char/drm/i915_drm.h
浏览文件 @
cf41f8ac
...
...
@@ -74,6 +74,30 @@ typedef struct _drm_i915_sarea {
int
pf_active
;
int
pf_current_page
;
/* which buffer is being displayed? */
int
perf_boxes
;
/* performance boxes to be displayed */
int
width
,
height
;
/* screen size in pixels */
drm_handle_t
front_handle
;
int
front_offset
;
int
front_size
;
drm_handle_t
back_handle
;
int
back_offset
;
int
back_size
;
drm_handle_t
depth_handle
;
int
depth_offset
;
int
depth_size
;
drm_handle_t
tex_handle
;
int
tex_offset
;
int
tex_size
;
int
log_tex_granularity
;
int
pitch
;
int
rotation
;
/* 0, 90, 180 or 270 */
int
rotated_offset
;
int
rotated_size
;
int
rotated_pitch
;
int
virtualX
,
virtualY
;
}
drm_i915_sarea_t
;
/* Flags for perf_boxes
...
...
@@ -99,6 +123,7 @@ typedef struct _drm_i915_sarea {
#define DRM_I915_FREE 0x09
#define DRM_I915_INIT_HEAP 0x0a
#define DRM_I915_CMDBUFFER 0x0b
#define DRM_I915_DESTROY_HEAP 0x0c
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
...
...
@@ -112,6 +137,7 @@ typedef struct _drm_i915_sarea {
#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
/* Allow drivers to submit batchbuffers directly to hardware, relying
* on the security mechanisms provided by hardware.
...
...
@@ -191,4 +217,11 @@ typedef struct drm_i915_mem_init_heap {
int
start
;
}
drm_i915_mem_init_heap_t
;
/* Allow memory manager to be torn down and re-initialized (eg on
* rotate):
*/
typedef
struct
drm_i915_mem_destroy_heap
{
int
region
;
}
drm_i915_mem_destroy_heap_t
;
#endif
/* _I915_DRM_H_ */
drivers/char/drm/i915_drv.h
浏览文件 @
cf41f8ac
...
...
@@ -37,16 +37,17 @@
#define DRIVER_NAME "i915"
#define DRIVER_DESC "Intel Graphics"
#define DRIVER_DATE "200
5120
9"
#define DRIVER_DATE "200
6011
9"
/* Interface history:
*
* 1.1: Original.
* 1.2: Add Power Management
* 1.3: Add vblank support
* 1.4: Fix cmdbuffer path, add heap destroy
*/
#define DRIVER_MAJOR 1
#define DRIVER_MINOR
3
#define DRIVER_MINOR
4
#define DRIVER_PATCHLEVEL 0
typedef
struct
_drm_i915_ring_buffer
{
...
...
@@ -123,6 +124,7 @@ extern void i915_driver_irq_uninstall(drm_device_t * dev);
extern
int
i915_mem_alloc
(
DRM_IOCTL_ARGS
);
extern
int
i915_mem_free
(
DRM_IOCTL_ARGS
);
extern
int
i915_mem_init_heap
(
DRM_IOCTL_ARGS
);
extern
int
i915_mem_destroy_heap
(
DRM_IOCTL_ARGS
);
extern
void
i915_mem_takedown
(
struct
mem_block
**
heap
);
extern
void
i915_mem_release
(
drm_device_t
*
dev
,
DRMFILE
filp
,
struct
mem_block
*
heap
);
...
...
drivers/char/drm/i915_mem.c
浏览文件 @
cf41f8ac
...
...
@@ -365,3 +365,34 @@ int i915_mem_init_heap(DRM_IOCTL_ARGS)
return
init_heap
(
heap
,
initheap
.
start
,
initheap
.
size
);
}
int
i915_mem_destroy_heap
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_i915_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_i915_mem_destroy_heap_t
destroyheap
;
struct
mem_block
**
heap
;
if
(
!
dev_priv
)
{
DRM_ERROR
(
"%s called with no initialization
\n
"
,
__FUNCTION__
);
return
DRM_ERR
(
EINVAL
);
}
DRM_COPY_FROM_USER_IOCTL
(
destroyheap
,
(
drm_i915_mem_destroy_heap_t
*
)
data
,
sizeof
(
destroyheap
)
);
heap
=
get_heap
(
dev_priv
,
destroyheap
.
region
);
if
(
!
heap
)
{
DRM_ERROR
(
"get_heap failed"
);
return
DRM_ERR
(
EFAULT
);
}
if
(
!*
heap
)
{
DRM_ERROR
(
"heap not initialized?"
);
return
DRM_ERR
(
EFAULT
);
}
i915_mem_takedown
(
heap
);
return
0
;
}
drivers/char/drm/radeon_cp.c
浏览文件 @
cf41f8ac
...
...
@@ -1640,7 +1640,7 @@ static int radeon_do_cleanup_cp(drm_device_t * dev)
if
(
dev_priv
->
gart_info
.
gart_table_location
==
DRM_ATI_GART_FB
)
{
drm_core_ioremapfree
(
&
dev_priv
->
gart_info
.
mapping
,
dev
);
dev_priv
->
gart_info
.
addr
=
0
;
dev_priv
->
gart_info
.
addr
=
NULL
;
}
}
/* only clear to the start of flags */
...
...
drivers/char/drm/savage_bci.c
浏览文件 @
cf41f8ac
...
...
@@ -32,6 +32,8 @@
#define SAVAGE_EVENT_USEC_TIMEOUT 5000000
/* 5s */
#define SAVAGE_FREELIST_DEBUG 0
static
int
savage_do_cleanup_bci
(
drm_device_t
*
dev
);
static
int
savage_bci_wait_fifo_shadow
(
drm_savage_private_t
*
dev_priv
,
unsigned
int
n
)
{
...
...
@@ -895,7 +897,7 @@ static int savage_do_init_bci(drm_device_t * dev, drm_savage_init_t * init)
return
0
;
}
int
savage_do_cleanup_bci
(
drm_device_t
*
dev
)
static
int
savage_do_cleanup_bci
(
drm_device_t
*
dev
)
{
drm_savage_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
drivers/char/drm/savage_drv.h
浏览文件 @
cf41f8ac
...
...
@@ -212,7 +212,6 @@ extern int savage_driver_load(drm_device_t *dev, unsigned long chipset);
extern
int
savage_driver_firstopen
(
drm_device_t
*
dev
);
extern
void
savage_driver_lastclose
(
drm_device_t
*
dev
);
extern
int
savage_driver_unload
(
drm_device_t
*
dev
);
extern
int
savage_do_cleanup_bci
(
drm_device_t
*
dev
);
extern
void
savage_reclaim_buffers
(
drm_device_t
*
dev
,
DRMFILE
filp
);
/* state functions */
...
...
drivers/char/drm/via_dma.c
浏览文件 @
cf41f8ac
...
...
@@ -222,7 +222,7 @@ static int via_initialize(drm_device_t * dev,
return
0
;
}
int
via_dma_init
(
DRM_IOCTL_ARGS
)
static
int
via_dma_init
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_via_private_t
*
dev_priv
=
(
drm_via_private_t
*
)
dev
->
dev_private
;
...
...
@@ -321,7 +321,7 @@ int via_driver_dma_quiescent(drm_device_t * dev)
return
0
;
}
int
via_flush_ioctl
(
DRM_IOCTL_ARGS
)
static
int
via_flush_ioctl
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
...
...
@@ -330,7 +330,7 @@ int via_flush_ioctl(DRM_IOCTL_ARGS)
return
via_driver_dma_quiescent
(
dev
);
}
int
via_cmdbuffer
(
DRM_IOCTL_ARGS
)
static
int
via_cmdbuffer
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_via_cmdbuffer_t
cmdbuf
;
...
...
@@ -375,7 +375,7 @@ static int via_dispatch_pci_cmdbuffer(drm_device_t * dev,
return
ret
;
}
int
via_pci_cmdbuffer
(
DRM_IOCTL_ARGS
)
static
int
via_pci_cmdbuffer
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_via_cmdbuffer_t
cmdbuf
;
...
...
@@ -665,7 +665,7 @@ static void via_cmdbuf_reset(drm_via_private_t * dev_priv)
* User interface to the space and lag functions.
*/
int
via_cmdbuf_size
(
DRM_IOCTL_ARGS
)
static
int
via_cmdbuf_size
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_via_cmdbuf_size_t
d_siz
;
...
...
drivers/char/drm/via_dmablit.c
浏览文件 @
cf41f8ac
...
...
@@ -108,7 +108,7 @@ via_map_blit_for_device(struct pci_dev *pdev,
int
num_desc
=
0
;
int
cur_line
;
dma_addr_t
next
=
0
|
VIA_DMA_DPR_EC
;
drm_via_descriptor_t
*
desc_ptr
=
0
;
drm_via_descriptor_t
*
desc_ptr
=
NULL
;
if
(
mode
==
1
)
desc_ptr
=
vsg
->
desc_pages
[
cur_descriptor_page
];
...
...
@@ -167,7 +167,7 @@ via_map_blit_for_device(struct pci_dev *pdev,
*/
void
static
void
via_free_sg_info
(
struct
pci_dev
*
pdev
,
drm_via_sg_info_t
*
vsg
)
{
struct
page
*
page
;
...
...
@@ -581,7 +581,7 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
int
ret
=
0
;
vsg
->
direction
=
(
draw
)
?
DMA_TO_DEVICE
:
DMA_FROM_DEVICE
;
vsg
->
bounce_buffer
=
0
;
vsg
->
bounce_buffer
=
NULL
;
vsg
->
state
=
dr_via_sg_init
;
...
...
drivers/char/drm/via_drv.h
浏览文件 @
cf41f8ac
...
...
@@ -110,11 +110,6 @@ extern int via_mem_free(DRM_IOCTL_ARGS);
extern
int
via_agp_init
(
DRM_IOCTL_ARGS
);
extern
int
via_map_init
(
DRM_IOCTL_ARGS
);
extern
int
via_decoder_futex
(
DRM_IOCTL_ARGS
);
extern
int
via_dma_init
(
DRM_IOCTL_ARGS
);
extern
int
via_cmdbuffer
(
DRM_IOCTL_ARGS
);
extern
int
via_flush_ioctl
(
DRM_IOCTL_ARGS
);
extern
int
via_pci_cmdbuffer
(
DRM_IOCTL_ARGS
);
extern
int
via_cmdbuf_size
(
DRM_IOCTL_ARGS
);
extern
int
via_wait_irq
(
DRM_IOCTL_ARGS
);
extern
int
via_dma_blit_sync
(
DRM_IOCTL_ARGS
);
extern
int
via_dma_blit
(
DRM_IOCTL_ARGS
);
...
...
@@ -139,8 +134,6 @@ extern int via_driver_dma_quiescent(drm_device_t * dev);
extern
void
via_init_futex
(
drm_via_private_t
*
dev_priv
);
extern
void
via_cleanup_futex
(
drm_via_private_t
*
dev_priv
);
extern
void
via_release_futex
(
drm_via_private_t
*
dev_priv
,
int
context
);
extern
int
via_driver_irq_wait
(
drm_device_t
*
dev
,
unsigned
int
irq
,
int
force_sequence
,
unsigned
int
*
sequence
);
extern
void
via_dmablit_handler
(
drm_device_t
*
dev
,
int
engine
,
int
from_irq
);
extern
void
via_init_dmablit
(
drm_device_t
*
dev
);
...
...
drivers/char/drm/via_irq.c
浏览文件 @
cf41f8ac
...
...
@@ -190,7 +190,7 @@ int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
return
ret
;
}
int
static
int
via_driver_irq_wait
(
drm_device_t
*
dev
,
unsigned
int
irq
,
int
force_sequence
,
unsigned
int
*
sequence
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录