Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
780ce1d2
Commit
780ce1d2
authored
Mar 11, 2005
by
Dave Airlie
Browse files
Options
Browse Files
Download
Plain Diff
Merge starflyer.(none):/foo/airlied/bitkeeper/linux-2.5
into starflyer.(none):/foo/airlied/bitkeeper/drm-linus
parents
1a8fca91
6b930915
Changes
46
Hide whitespace changes
Inline
Side-by-side
Showing
46 changed files
with
649 additions
and
773 deletions
+649
-773
CREDITS
CREDITS
+3
-2
MAINTAINERS
MAINTAINERS
+3
-1
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+24
-18
drivers/char/drm/drm_agpsupport.c
drivers/char/drm/drm_agpsupport.c
+8
-8
drivers/char/drm/drm_auth.c
drivers/char/drm/drm_auth.c
+2
-2
drivers/char/drm/drm_bufs.c
drivers/char/drm/drm_bufs.c
+10
-10
drivers/char/drm/drm_context.c
drivers/char/drm/drm_context.c
+6
-6
drivers/char/drm/drm_drv.c
drivers/char/drm/drm_drv.c
+18
-30
drivers/char/drm/drm_fops.c
drivers/char/drm/drm_fops.c
+11
-9
drivers/char/drm/drm_ioctl.c
drivers/char/drm/drm_ioctl.c
+5
-5
drivers/char/drm/drm_irq.c
drivers/char/drm/drm_irq.c
+3
-3
drivers/char/drm/drm_lock.c
drivers/char/drm/drm_lock.c
+2
-2
drivers/char/drm/drm_os_linux.h
drivers/char/drm/drm_os_linux.h
+1
-1
drivers/char/drm/drm_pciids.h
drivers/char/drm/drm_pciids.h
+1
-1
drivers/char/drm/drm_proc.c
drivers/char/drm/drm_proc.c
+3
-3
drivers/char/drm/drm_scatter.c
drivers/char/drm/drm_scatter.c
+2
-2
drivers/char/drm/drm_stub.c
drivers/char/drm/drm_stub.c
+113
-53
drivers/char/drm/drm_vm.c
drivers/char/drm/drm_vm.c
+8
-8
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_dma.c
+68
-62
drivers/char/drm/i810_drv.c
drivers/char/drm/i810_drv.c
+2
-1
drivers/char/drm/i810_drv.h
drivers/char/drm/i810_drv.h
+1
-45
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_dma.c
+66
-76
drivers/char/drm/i830_drv.c
drivers/char/drm/i830_drv.c
+2
-1
drivers/char/drm/i830_drv.h
drivers/char/drm/i830_drv.h
+3
-37
drivers/char/drm/i830_irq.c
drivers/char/drm/i830_irq.c
+2
-2
drivers/char/drm/i915_drv.c
drivers/char/drm/i915_drv.c
+1
-1
drivers/char/drm/mga_dma.c
drivers/char/drm/mga_dma.c
+3
-58
drivers/char/drm/mga_drv.c
drivers/char/drm/mga_drv.c
+1
-1
drivers/char/drm/mga_drv.h
drivers/char/drm/mga_drv.h
+0
-13
drivers/char/drm/mga_state.c
drivers/char/drm/mga_state.c
+22
-22
drivers/char/drm/r128_cce.c
drivers/char/drm/r128_cce.c
+2
-2
drivers/char/drm/r128_drv.c
drivers/char/drm/r128_drv.c
+1
-1
drivers/char/drm/r128_drv.h
drivers/char/drm/r128_drv.h
+0
-16
drivers/char/drm/r128_state.c
drivers/char/drm/r128_state.c
+31
-31
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+3
-2
drivers/char/drm/radeon_drm.h
drivers/char/drm/radeon_drm.h
+7
-2
drivers/char/drm/radeon_drv.c
drivers/char/drm/radeon_drv.c
+1
-1
drivers/char/drm/radeon_drv.h
drivers/char/drm/radeon_drv.h
+9
-26
drivers/char/drm/radeon_irq.c
drivers/char/drm/radeon_irq.c
+2
-8
drivers/char/drm/radeon_state.c
drivers/char/drm/radeon_state.c
+176
-69
drivers/char/drm/sis_drv.c
drivers/char/drm/sis_drv.c
+1
-1
drivers/char/drm/sis_drv.h
drivers/char/drm/sis_drv.h
+0
-7
drivers/char/drm/sis_ds.c
drivers/char/drm/sis_ds.c
+0
-84
drivers/char/drm/sis_ds.h
drivers/char/drm/sis_ds.h
+0
-19
drivers/char/drm/sis_mm.c
drivers/char/drm/sis_mm.c
+21
-20
drivers/char/drm/tdfx_drv.c
drivers/char/drm/tdfx_drv.c
+1
-1
No files found.
CREDITS
View file @
780ce1d2
...
...
@@ -34,8 +34,9 @@ N: Dave Airlie
E: airlied@linux.ie
W: http://www.csn.ul.ie/~airlied
D: NFS over TCP patches
S: University of Limerick
S: Ireland
D: in-kernel DRM Maintainer
S: Longford, Ireland
S: Sydney, Australia
N: Tigran A. Aivazian
E: tigran@veritas.com
...
...
MAINTAINERS
View file @
780ce1d2
...
...
@@ -758,8 +758,10 @@ L: linux-kernel@vger.kernel.org
S: Supported
DRM DRIVERS
P: David Airlie
M: airlied@linux.ie
L: dri-devel@lists.sourceforge.net
S:
Support
ed
S:
Maintain
ed
DSCC4 DRIVER
P: Franois Romieu
...
...
drivers/char/drm/drmP.h
View file @
780ce1d2
...
...
@@ -422,7 +422,7 @@ typedef struct drm_file {
unsigned
long
ioctl_count
;
struct
drm_file
*
next
;
struct
drm_file
*
prev
;
struct
drm_
device
*
dev
;
struct
drm_
head
*
head
;
int
remove_auth_on_close
;
unsigned
long
lock_count
;
void
*
driver_priv
;
...
...
@@ -593,19 +593,31 @@ struct drm_driver {
struct
file_operations
fops
;
struct
pci_driver
pci_driver
;
};
/**
* DRM device structure.
* DRM head structure. This structure represent a video head on a card
* that may contain multiple heads. Embed one per head of these in the
* private drm_device structure.
*/
typedef
struct
drm_head
{
int
minor
;
/**< Minor device number */
struct
drm_device
*
dev
;
struct
proc_dir_entry
*
dev_root
;
/**< proc directory entry */
dev_t
device
;
/**< Device number for mknod */
struct
class_device
*
dev_class
;
}
drm_head_t
;
/**
* DRM device structure. This structure represent a complete card that
* may contain multiple heads.
*/
typedef
struct
drm_device
{
char
*
unique
;
/**< Unique identifier: e.g., busid */
int
unique_len
;
/**< Length of unique field */
dev_t
device
;
/**< Device number for mknod */
char
*
devname
;
/**< For /proc/interrupts */
int
minor
;
/**< Minor device number */
int
if_version
;
/**< Highest interface version set */
int
blocked
;
/**< Blocked due to VC switch? */
struct
proc_dir_entry
*
root
;
/**< Root for this device's entries */
/** \name Locks */
/*@{*/
...
...
@@ -721,17 +733,9 @@ typedef struct drm_device {
struct
drm_driver
*
driver
;
drm_local_map_t
*
agp_buffer_map
;
drm_head_t
primary
;
/**< primary screen head */
}
drm_device_t
;
typedef
struct
drm_minor
{
enum
{
DRM_MINOR_FREE
=
0
,
DRM_MINOR_PRIMARY
,
}
type
;
drm_device_t
*
dev
;
struct
proc_dir_entry
*
dev_root
;
/**< proc directory entry */
}
drm_minor_t
;
static
__inline__
int
drm_core_check_feature
(
struct
drm_device
*
dev
,
int
feature
)
{
return
((
dev
->
driver
->
driver_features
&
feature
)
?
1
:
0
);
...
...
@@ -955,12 +959,14 @@ extern int drm_agp_bind_memory(DRM_AGP_MEM *handle, off_t start);
extern
int
drm_agp_unbind_memory
(
DRM_AGP_MEM
*
handle
);
/* Stub support (drm_stub.h) */
extern
int
drm_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
,
struct
drm_driver
*
driver
);
extern
int
drm_put_minor
(
drm_device_t
*
dev
);
extern
int
drm_get_dev
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
,
struct
drm_driver
*
driver
);
extern
int
drm_put_dev
(
drm_device_t
*
dev
);
extern
int
drm_get_head
(
drm_device_t
*
dev
,
drm_head_t
*
head
);
extern
int
drm_put_head
(
drm_head_t
*
head
);
extern
unsigned
int
drm_debug
;
extern
unsigned
int
drm_cards_limit
;
extern
drm_
minor_t
*
drm_minor
s
;
extern
drm_
head_t
**
drm_head
s
;
extern
struct
drm_sysfs_class
*
drm_class
;
extern
struct
proc_dir_entry
*
drm_proc_root
;
...
...
drivers/char/drm/drm_agpsupport.c
View file @
780ce1d2
...
...
@@ -52,7 +52,7 @@ int drm_agp_info(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
DRM_AGP_KERN
*
kern
;
drm_agp_info_t
info
;
...
...
@@ -91,7 +91,7 @@ int drm_agp_acquire(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
if
(
!
dev
->
agp
)
return
-
ENODEV
;
...
...
@@ -118,7 +118,7 @@ int drm_agp_release(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
if
(
!
dev
->
agp
||
!
dev
->
agp
->
acquired
)
return
-
EINVAL
;
...
...
@@ -154,7 +154,7 @@ int drm_agp_enable(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_agp_mode_t
mode
;
if
(
!
dev
->
agp
||
!
dev
->
agp
->
acquired
)
...
...
@@ -186,7 +186,7 @@ int drm_agp_alloc(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_agp_buffer_t
request
;
drm_agp_mem_t
*
entry
;
DRM_AGP_MEM
*
memory
;
...
...
@@ -271,7 +271,7 @@ int drm_agp_unbind(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_agp_binding_t
request
;
drm_agp_mem_t
*
entry
;
int
ret
;
...
...
@@ -307,7 +307,7 @@ int drm_agp_bind(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_agp_binding_t
request
;
drm_agp_mem_t
*
entry
;
int
retcode
;
...
...
@@ -348,7 +348,7 @@ int drm_agp_free(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_agp_buffer_t
request
;
drm_agp_mem_t
*
entry
;
...
...
drivers/char/drm/drm_auth.c
View file @
780ce1d2
...
...
@@ -176,7 +176,7 @@ int drm_getmagic(struct inode *inode, struct file *filp,
static
drm_magic_t
sequence
=
0
;
static
DEFINE_SPINLOCK
(
lock
);
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_auth_t
auth
;
/* Find unique magic */
...
...
@@ -214,7 +214,7 @@ int drm_authmagic(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_auth_t
auth
;
drm_file_t
*
file
;
...
...
drivers/char/drm/drm_bufs.c
View file @
780ce1d2
...
...
@@ -77,7 +77,7 @@ int drm_addmap( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_map_t
*
map
;
drm_map_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_map_list_t
*
list
;
...
...
@@ -221,7 +221,7 @@ int drm_rmmap(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
struct
list_head
*
list
;
drm_map_list_t
*
r_list
=
NULL
;
drm_vma_entry_t
*
pt
,
*
prev
;
...
...
@@ -349,7 +349,7 @@ int drm_addbufs_agp( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_desc_t
request
;
drm_buf_entry_t
*
entry
;
...
...
@@ -514,7 +514,7 @@ int drm_addbufs_pci( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_desc_t
request
;
int
count
;
...
...
@@ -744,7 +744,7 @@ int drm_addbufs_sg( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_desc_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_buf_desc_t
request
;
...
...
@@ -925,7 +925,7 @@ int drm_addbufs( struct inode *inode, struct file *filp,
{
drm_buf_desc_t
request
;
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
...
...
@@ -967,7 +967,7 @@ int drm_infobufs( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_info_t
request
;
drm_buf_info_t
__user
*
argp
=
(
void
__user
*
)
arg
;
...
...
@@ -1052,7 +1052,7 @@ int drm_markbufs( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_desc_t
request
;
int
order
;
...
...
@@ -1101,7 +1101,7 @@ int drm_freebufs( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_free_t
request
;
int
i
;
...
...
@@ -1158,7 +1158,7 @@ int drm_mapbufs( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_buf_map_t
__user
*
argp
=
(
void
__user
*
)
arg
;
int
retcode
=
0
;
...
...
drivers/char/drm/drm_context.c
View file @
780ce1d2
...
...
@@ -208,7 +208,7 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_priv_map_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_ctx_priv_map_t
request
;
drm_map_t
*
map
;
...
...
@@ -247,7 +247,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_priv_map_t
request
;
drm_map_t
*
map
=
NULL
;
drm_map_list_t
*
r_list
=
NULL
;
...
...
@@ -395,7 +395,7 @@ int drm_addctx( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_list_t
*
ctx_entry
;
drm_ctx_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_ctx_t
ctx
;
...
...
@@ -489,7 +489,7 @@ int drm_switchctx( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_t
ctx
;
if
(
copy_from_user
(
&
ctx
,
(
drm_ctx_t
__user
*
)
arg
,
sizeof
(
ctx
)
)
)
...
...
@@ -514,7 +514,7 @@ int drm_newctx( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_t
ctx
;
if
(
copy_from_user
(
&
ctx
,
(
drm_ctx_t
__user
*
)
arg
,
sizeof
(
ctx
)
)
)
...
...
@@ -541,7 +541,7 @@ int drm_rmctx( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ctx_t
ctx
;
if
(
copy_from_user
(
&
ctx
,
(
drm_ctx_t
__user
*
)
arg
,
sizeof
(
ctx
)
)
)
...
...
drivers/char/drm/drm_drv.c
View file @
780ce1d2
...
...
@@ -149,18 +149,6 @@ int drm_takedown( drm_device_t *dev )
down
(
&
dev
->
struct_sem
);
del_timer
(
&
dev
->
timer
);
if
(
dev
->
devname
)
{
drm_free
(
dev
->
devname
,
strlen
(
dev
->
devname
)
+
1
,
DRM_MEM_DRIVER
);
dev
->
devname
=
NULL
;
}
if
(
dev
->
unique
)
{
drm_free
(
dev
->
unique
,
strlen
(
dev
->
unique
)
+
1
,
DRM_MEM_DRIVER
);
dev
->
unique
=
NULL
;
dev
->
unique_len
=
0
;
}
/* Clear pid list */
for
(
i
=
0
;
i
<
DRM_HASH_SIZE
;
i
++
)
{
for
(
pt
=
dev
->
magiclist
[
i
].
head
;
pt
;
pt
=
next
)
{
...
...
@@ -307,7 +295,7 @@ int drm_init( struct drm_driver *driver )
while
((
pdev
=
pci_get_subsys
(
pid
->
vendor
,
pid
->
device
,
pid
->
subvendor
,
pid
->
subdevice
,
pdev
))
!=
NULL
)
{
/* stealth mode requires a manual probe */
pci_dev_get
(
pdev
);
drm_
probe
(
pdev
,
pid
,
driver
);
drm_
get_dev
(
pdev
,
pid
,
driver
);
}
}
return
0
;
...
...
@@ -351,7 +339,8 @@ static void drm_cleanup( drm_device_t *dev )
if
(
dev
->
driver
->
postcleanup
)
dev
->
driver
->
postcleanup
(
dev
);
if
(
drm_put_minor
(
dev
)
)
drm_put_head
(
&
dev
->
primary
);
if
(
drm_put_dev
(
dev
)
)
DRM_ERROR
(
"Cannot unload module
\n
"
);
}
...
...
@@ -359,19 +348,19 @@ void drm_exit (struct drm_driver *driver)
{
int
i
;
drm_device_t
*
dev
=
NULL
;
drm_
minor_t
*
minor
;
drm_
head_t
*
head
;
DRM_DEBUG
(
"
\n
"
);
for
(
i
=
0
;
i
<
drm_cards_limit
;
i
++
)
{
minor
=
&
drm_minor
s
[
i
];
if
(
!
minor
->
dev
)
head
=
drm_head
s
[
i
];
if
(
!
head
)
continue
;
if
(
minor
->
dev
->
driver
!=
driver
)
if
(
!
head
->
dev
)
continue
;
dev
=
minor
->
dev
;
if
(
head
->
dev
->
driver
!=
driver
)
continue
;
dev
=
head
->
dev
;
}
if
(
dev
)
{
/* release the pci driver */
...
...
@@ -379,7 +368,6 @@ void drm_exit (struct drm_driver *driver)
pci_dev_put
(
dev
->
pdev
);
drm_cleanup
(
dev
);
}
DRM_INFO
(
"Module unloaded
\n
"
);
}
EXPORT_SYMBOL
(
drm_exit
);
...
...
@@ -395,9 +383,9 @@ static int __init drm_core_init(void)
int
ret
=
-
ENOMEM
;
drm_cards_limit
=
(
drm_cards_limit
<
DRM_MAX_MINOR
+
1
?
drm_cards_limit
:
DRM_MAX_MINOR
+
1
);
drm_
minor
s
=
drm_calloc
(
drm_cards_limit
,
sizeof
(
*
drm_
minor
s
),
DRM_MEM_STUB
);
if
(
!
drm_
minor
s
)
drm_
head
s
=
drm_calloc
(
drm_cards_limit
,
sizeof
(
*
drm_
head
s
),
DRM_MEM_STUB
);
if
(
!
drm_
head
s
)
goto
err_p1
;
if
(
register_chrdev
(
DRM_MAJOR
,
"drm"
,
&
drm_stub_fops
))
...
...
@@ -429,7 +417,7 @@ static int __init drm_core_init(void)
drm_sysfs_destroy
(
drm_class
);
err_p2:
unregister_chrdev
(
DRM_MAJOR
,
"drm"
);
drm_free
(
drm_
minors
,
sizeof
(
*
drm_minor
s
)
*
drm_cards_limit
,
DRM_MEM_STUB
);
drm_free
(
drm_
heads
,
sizeof
(
*
drm_head
s
)
*
drm_cards_limit
,
DRM_MEM_STUB
);
err_p1:
return
ret
;
}
...
...
@@ -441,7 +429,7 @@ static void __exit drm_core_exit (void)
unregister_chrdev
(
DRM_MAJOR
,
"drm"
);
drm_free
(
drm_
minors
,
sizeof
(
*
drm_minor
s
)
*
drm_free
(
drm_
heads
,
sizeof
(
*
drm_head
s
)
*
drm_cards_limit
,
DRM_MEM_STUB
);
}
...
...
@@ -465,7 +453,7 @@ int drm_version( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_version_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_version_t
version
;
int
ret
;
...
...
@@ -500,7 +488,7 @@ int drm_ioctl( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_ioctl_desc_t
*
ioctl
;
drm_ioctl_t
*
func
;
unsigned
int
nr
=
DRM_IOCTL_NR
(
cmd
);
...
...
@@ -511,7 +499,7 @@ int drm_ioctl( struct inode *inode, struct file *filp,
++
priv
->
ioctl_count
;
DRM_DEBUG
(
"pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d
\n
"
,
current
->
pid
,
cmd
,
nr
,
(
long
)
old_encode_dev
(
dev
->
device
),
current
->
pid
,
cmd
,
nr
,
(
long
)
old_encode_dev
(
priv
->
head
->
device
),
priv
->
authenticated
);
if
(
nr
<
DRIVER_IOCTL_COUNT
)
...
...
drivers/char/drm/drm_fops.c
View file @
780ce1d2
...
...
@@ -143,8 +143,10 @@ int drm_open( struct inode *inode, struct file *filp )
if
(
!
((
minor
>=
0
)
&&
(
minor
<
drm_cards_limit
)))
return
-
ENODEV
;
dev
=
drm_minors
[
minor
].
dev
;
if
(
!
dev
)
if
(
!
drm_heads
[
minor
])
return
-
ENODEV
;
if
(
!
(
dev
=
drm_heads
[
minor
]
->
dev
))
return
-
ENODEV
;
retcode
=
drm_open_helper
(
inode
,
filp
,
dev
);
...
...
@@ -181,7 +183,7 @@ int drm_release( struct inode *inode, struct file *filp )
int
retcode
=
0
;
lock_kernel
();
dev
=
priv
->
dev
;
dev
=
priv
->
head
->
dev
;
DRM_DEBUG
(
"open_count = %d
\n
"
,
dev
->
open_count
);
...
...
@@ -193,7 +195,7 @@ int drm_release( struct inode *inode, struct file *filp )
*/
DRM_DEBUG
(
"pid = %d, device = 0x%lx, open_count = %d
\n
"
,
current
->
pid
,
(
long
)
old_encode_dev
(
dev
->
device
),
dev
->
open_count
);
current
->
pid
,
(
long
)
old_encode_dev
(
priv
->
head
->
device
),
dev
->
open_count
);
if
(
priv
->
lock_count
&&
dev
->
lock
.
hw_lock
&&
_DRM_LOCK_IS_HELD
(
dev
->
lock
.
hw_lock
->
lock
)
&&
...
...
@@ -358,7 +360,7 @@ int drm_open_helper(struct inode *inode, struct file *filp, drm_device_t *dev)
priv
->
uid
=
current
->
euid
;
priv
->
pid
=
current
->
pid
;
priv
->
minor
=
minor
;
priv
->
dev
=
dev
;
priv
->
head
=
drm_heads
[
minor
]
;
priv
->
ioctl_count
=
0
;
priv
->
authenticated
=
capable
(
CAP_SYS_ADMIN
);
priv
->
lock_count
=
0
;
...
...
@@ -412,10 +414,10 @@ int drm_open_helper(struct inode *inode, struct file *filp, drm_device_t *dev)
int
drm_flush
(
struct
file
*
filp
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
DRM_DEBUG
(
"pid = %d, device = 0x%lx, open_count = %d
\n
"
,
current
->
pid
,
(
long
)
old_encode_dev
(
dev
->
device
),
dev
->
open_count
);
current
->
pid
,
(
long
)
old_encode_dev
(
priv
->
head
->
device
),
dev
->
open_count
);
return
0
;
}
EXPORT_SYMBOL
(
drm_flush
);
...
...
@@ -424,10 +426,10 @@ EXPORT_SYMBOL(drm_flush);
int
drm_fasync
(
int
fd
,
struct
file
*
filp
,
int
on
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
int
retcode
;
DRM_DEBUG
(
"fd = %d, device = 0x%lx
\n
"
,
fd
,
(
long
)
old_encode_dev
(
dev
->
device
));
DRM_DEBUG
(
"fd = %d, device = 0x%lx
\n
"
,
fd
,
(
long
)
old_encode_dev
(
priv
->
head
->
device
));
retcode
=
fasync_helper
(
fd
,
filp
,
on
,
&
dev
->
buf_async
);
if
(
retcode
<
0
)
return
retcode
;
return
0
;
...
...
drivers/char/drm/drm_ioctl.c
View file @
780ce1d2
...
...
@@ -53,7 +53,7 @@ int drm_getunique(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_unique_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_unique_t
u
;
...
...
@@ -87,7 +87,7 @@ int drm_setunique(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_unique_t
u
;
int
domain
,
bus
,
slot
,
func
,
ret
;
...
...
@@ -173,7 +173,7 @@ int drm_getmap( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_map_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_map_t
map
;
drm_map_list_t
*
r_list
=
NULL
;
...
...
@@ -233,7 +233,7 @@ int drm_getclient( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_client_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_client_t
client
;
drm_file_t
*
pt
;
...
...
@@ -277,7 +277,7 @@ int drm_getstats( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_stats_t
stats
;
int
i
;
...
...
drivers/char/drm/drm_irq.c
View file @
780ce1d2
...
...
@@ -54,7 +54,7 @@ int drm_irq_by_busid(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_irq_busid_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_irq_busid_t
p
;
...
...
@@ -196,7 +196,7 @@ int drm_control( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_control_t
ctl
;
/* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */
...
...
@@ -243,7 +243,7 @@ int drm_control( struct inode *inode, struct file *filp,
int
drm_wait_vblank
(
DRM_IOCTL_ARGS
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_wait_vblank_t
__user
*
argp
=
(
void
__user
*
)
data
;
drm_wait_vblank_t
vblwait
;
struct
timeval
now
;
...
...
drivers/char/drm/drm_lock.c
View file @
780ce1d2
...
...
@@ -50,7 +50,7 @@ int drm_lock( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
DECLARE_WAITQUEUE
(
entry
,
current
);
drm_lock_t
lock
;
int
ret
=
0
;
...
...
@@ -145,7 +145,7 @@ int drm_unlock( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_lock_t
lock
;
if
(
copy_from_user
(
&
lock
,
(
drm_lock_t
__user
*
)
arg
,
sizeof
(
lock
)
)
)
...
...
drivers/char/drm/drm_os_linux.h
View file @
780ce1d2
...
...
@@ -35,7 +35,7 @@
#define DRM_MEMORYBARRIER() mb()
/** DRM device local declaration */
#define DRM_DEVICE drm_file_t *priv = filp->private_data; \
drm_device_t *dev = priv->dev
drm_device_t *dev = priv->
head->
dev
/** IRQ handler arguments and return type and values */
#define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs
...
...
drivers/char/drm/drm_pciids.h
View file @
780ce1d2
...
...
@@ -65,7 +65,7 @@
{0x1002, 0x5963, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
{0x1002, 0x5964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
{0x1002, 0x5968, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
{0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV
28
0}, \
{0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV
10
0}, \
{0x1002, 0x596A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
{0x1002, 0x596B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280}, \
{0x1002, 0x5c61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|CHIP_IS_MOBILITY}, \
...
...
drivers/char/drm/drm_proc.c
View file @
780ce1d2
...
...
@@ -175,10 +175,10 @@ static int drm_name_info(char *buf, char **start, off_t offset, int request,
*
eof
=
0
;
if
(
dev
->
unique
)
{
DRM_PROC_PRINT
(
"%s
0x%lx
%s
\n
"
,
dev
->
driver
->
pci_driver
.
name
,
(
long
)
old_encode_dev
(
dev
->
device
),
dev
->
unique
);
DRM_PROC_PRINT
(
"%s
%s
%s
\n
"
,
dev
->
driver
->
pci_driver
.
name
,
pci_name
(
dev
->
pdev
),
dev
->
unique
);
}
else
{
DRM_PROC_PRINT
(
"%s
0x%lx
\n
"
,
dev
->
driver
->
pci_driver
.
name
,
(
long
)
old_encode_dev
(
dev
->
device
));
DRM_PROC_PRINT
(
"%s
%s
\n
"
,
dev
->
driver
->
pci_driver
.
name
,
pci_name
(
dev
->
pdev
));
}
if
(
len
>
request
+
offset
)
return
request
;
...
...
drivers/char/drm/drm_scatter.c
View file @
780ce1d2
...
...
@@ -65,7 +65,7 @@ int drm_sg_alloc( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_scatter_gather_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_scatter_gather_t
request
;
drm_sg_mem_t
*
entry
;
...
...
@@ -205,7 +205,7 @@ int drm_sg_free( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_scatter_gather_t
request
;
drm_sg_mem_t
*
entry
;
...
...
drivers/char/drm/drm_stub.c
View file @
780ce1d2
...
...
@@ -49,7 +49,7 @@ MODULE_PARM_DESC(drm_debug, "Enable debug output");
module_param_named
(
cards_limit
,
drm_cards_limit
,
int
,
0444
);
module_param_named
(
debug
,
drm_debug
,
int
,
0666
);
drm_
minor_t
*
drm_minor
s
;
drm_
head_t
**
drm_head
s
;
struct
drm_sysfs_class
*
drm_class
;
struct
proc_dir_entry
*
drm_proc_root
;
...
...
@@ -112,12 +112,6 @@ static int drm_fill_in_dev(drm_device_t *dev, struct pci_dev *pdev, const struct
goto
error_out_unreg
;
}
dev
->
device
=
MKDEV
(
DRM_MAJOR
,
dev
->
minor
);
/* postinit is a required function to display the signon banner */
if
((
retcode
=
dev
->
driver
->
postinit
(
dev
,
ent
->
driver_data
)))
goto
error_out_unreg
;
return
0
;
error_out_unreg:
...
...
@@ -146,8 +140,10 @@ int drm_stub_open(struct inode *inode, struct file *filp)
if
(
!
((
minor
>=
0
)
&&
(
minor
<
drm_cards_limit
)))
return
-
ENODEV
;
dev
=
drm_minors
[
minor
].
dev
;
if
(
!
dev
)
if
(
!
drm_heads
[
minor
])
return
-
ENODEV
;
if
(
!
(
dev
=
drm_heads
[
minor
]
->
dev
))
return
-
ENODEV
;
old_fops
=
filp
->
f_op
;
...
...
@@ -161,10 +157,11 @@ int drm_stub_open(struct inode *inode, struct file *filp)
return
err
;
}
/**
*
Get a device minor numb
er.
*
Regist
er.
*
* \param pdev PCI device structure
* \param pdev
-
PCI device structure
* \param ent entry from the PCI ID table with device type flags
* \return zero on success or a negative number on failure.
*
...
...
@@ -172,50 +169,86 @@ int drm_stub_open(struct inode *inode, struct file *filp)
* then register the character device and inter module information.
* Try and register, if we fail to register, backout previous work.
*/
int
drm_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
,
struct
drm_driver
*
driver
)
int
drm_get_dev
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
,
struct
drm_driver
*
driver
)
{
struct
class_device
*
dev_class
;
drm_device_t
*
dev
;
int
ret
;
int
minor
;
drm_minor_t
*
minors
=
&
drm_minors
[
0
];
DRM_DEBUG
(
"
\n
"
);
for
(
minor
=
0
;
minor
<
drm_cards_limit
;
minor
++
,
minors
++
)
{
if
(
minors
->
type
==
DRM_MINOR_FREE
)
{
dev
=
drm_calloc
(
1
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
if
(
!
dev
)
return
-
ENOMEM
;
DRM_DEBUG
(
"assigning minor %d
\n
"
,
minor
);
dev
=
drm_calloc
(
1
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
if
(
!
dev
)
return
-
ENOMEM
;
pci_enable_device
(
pdev
);
*
minors
=
(
drm_minor_t
){.
dev
=
dev
,
.
type
=
DRM_MINOR_PRIMARY
};
dev
->
minor
=
minor
;
if
((
ret
=
drm_fill_in_dev
(
dev
,
pdev
,
ent
,
driver
)))
{
printk
(
KERN_ERR
"DRM: Fill_in_dev failed.
\n
"
);
goto
err_g1
;
}
if
((
ret
=
drm_get_head
(
dev
,
&
dev
->
primary
)))
goto
err_g1
;
pci_enable_device
(
pdev
);
/* postinit is a required function to display the signon banner */
/* drivers add secondary heads here if needed */
if
((
ret
=
dev
->
driver
->
postinit
(
dev
,
ent
->
driver_data
)))
goto
err_g1
;
if
((
ret
=
drm_fill_in_dev
(
dev
,
pdev
,
ent
,
driver
)))
{
printk
(
KERN_ERR
"DRM: Fill_in_dev failed.
\n
"
);
goto
err_g1
;
}
if
((
ret
=
drm_proc_init
(
dev
,
minor
,
drm_proc_root
,
&
minors
->
dev_root
)))
{
return
0
;
err_g1:
drm_free
(
dev
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
return
ret
;
}
EXPORT_SYMBOL
(
drm_get_dev
);
/**
* Get a secondary minor number.
*
* \param dev device data structure
* \param sec-minor structure to hold the assigned minor
* \return negative number on failure.
*
* Search an empty entry and initialize it to the given parameters, and
* create the proc init entry via proc_init(). This routines assigns
* minor numbers to secondary heads of multi-headed cards
*/
int
drm_get_head
(
drm_device_t
*
dev
,
drm_head_t
*
head
)
{
drm_head_t
**
heads
=
drm_heads
;
int
ret
;
int
minor
;
DRM_DEBUG
(
"
\n
"
);
for
(
minor
=
0
;
minor
<
drm_cards_limit
;
minor
++
,
heads
++
)
{
if
(
!*
heads
)
{
*
head
=
(
drm_head_t
)
{
.
dev
=
dev
,
.
device
=
MKDEV
(
DRM_MAJOR
,
minor
),
.
minor
=
minor
,
};
if
((
ret
=
drm_proc_init
(
dev
,
minor
,
drm_proc_root
,
&
head
->
dev_root
)))
{
printk
(
KERN_ERR
"DRM: Failed to initialize /proc/dri.
\n
"
);
goto
err_g1
;
}
dev_class
=
drm_sysfs_device_add
(
drm_class
,
MKDEV
(
DRM_MAJOR
,
minor
),
&
pdev
->
dev
,
"card%d"
,
minor
);
if
(
IS_ERR
(
dev_class
))
{
head
->
dev_class
=
drm_sysfs_device_add
(
drm_class
,
MKDEV
(
DRM_MAJOR
,
minor
),
&
dev
->
pdev
->
dev
,
"card%d"
,
minor
);
if
(
IS_ERR
(
head
->
dev_class
))
{
printk
(
KERN_ERR
"DRM: Error sysfs_device_add.
\n
"
);
ret
=
PTR_ERR
(
dev_class
);
ret
=
PTR_ERR
(
head
->
dev_class
);
goto
err_g2
;
}
*
heads
=
head
;
DRM_DEBUG
(
"new minor assigned %d
\n
"
,
minor
);
return
0
;
}
...
...
@@ -223,36 +256,63 @@ int drm_probe(struct pci_dev *pdev, const struct pci_device_id *ent, struct drm_
DRM_ERROR
(
"out of minors
\n
"
);
return
-
ENOMEM
;
err_g2:
drm_proc_cleanup
(
minor
,
drm_proc_root
,
minors
->
dev_root
);
drm_proc_cleanup
(
minor
,
drm_proc_root
,
head
->
dev_root
);
err_g1:
*
minors
=
(
drm_minor_t
){.
dev
=
NULL
,
.
type
=
DRM_MINOR_FREE
};
drm_free
(
dev
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
*
head
=
(
drm_head_t
)
{.
dev
=
NULL
};
return
ret
;
}
EXPORT_SYMBOL
(
drm_probe
);
/**
* Put a device minor number.
*
* \param
minor minor number.
* \return always zero
.
* \param
dev device data structure
* \return always zero
*
* Cleans up the proc resources. If
a minor is zero
then release the foreign
* "drm" data, otherwise unregisters the "drm" data, frees the
stub
list and
* unregisters the character device.
* Cleans up the proc resources. If
it is the last minor
then release the foreign
* "drm" data, otherwise unregisters the "drm" data, frees the
dev
list and
* unregisters the character device.
*/
int
drm_put_
minor
(
drm_device_t
*
dev
)
int
drm_put_
dev
(
drm_device_t
*
dev
)
{
drm_minor_t
*
minors
=
&
drm_minors
[
dev
->
minor
];
DRM_DEBUG
(
"release primary %s
\n
"
,
dev
->
driver
->
pci_driver
.
name
);
if
(
dev
->
unique
)
{
drm_free
(
dev
->
unique
,
strlen
(
dev
->
unique
)
+
1
,
DRM_MEM_DRIVER
);
dev
->
unique
=
NULL
;
dev
->
unique_len
=
0
;
}
if
(
dev
->
devname
)
{
drm_free
(
dev
->
devname
,
strlen
(
dev
->
devname
)
+
1
,
DRM_MEM_DRIVER
);
dev
->
devname
=
NULL
;
}
drm_free
(
dev
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
return
0
;
}
/**
* Put a secondary minor number.
*
* \param sec_minor - structure to be released
* \return always zero
*
* Cleans up the proc resources. Not legal for this to be the
* last minor released.
*
*/
int
drm_put_head
(
drm_head_t
*
head
)
{
int
minor
=
head
->
minor
;
DRM_DEBUG
(
"release
minor %d
\n
"
,
dev
->
minor
);
DRM_DEBUG
(
"release
secondary minor %d
\n
"
,
minor
);
drm_proc_cleanup
(
dev
->
minor
,
drm_proc_root
,
minors
->
dev_root
);
drm_sysfs_device_remove
(
MKDEV
(
DRM_MAJOR
,
dev
->
minor
));
drm_proc_cleanup
(
minor
,
drm_proc_root
,
head
->
dev_root
);
drm_sysfs_device_remove
(
MKDEV
(
DRM_MAJOR
,
head
->
minor
));
*
minors
=
(
drm_minor_t
){.
dev
=
NULL
,
.
type
=
DRM_MINOR_FREE
};
drm_free
(
dev
,
sizeof
(
*
dev
),
DRM_MEM_STUB
);
*
head
=
(
drm_head_t
){.
dev
=
NULL
};
drm_heads
[
minor
]
=
NULL
;
return
0
;
}
...
...
drivers/char/drm/drm_vm.c
View file @
780ce1d2
...
...
@@ -54,7 +54,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
unsigned
long
address
)
{
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_map_t
*
map
=
NULL
;
drm_map_list_t
*
r_list
;
struct
list_head
*
list
;
...
...
@@ -166,7 +166,7 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
void
drm_vm_shm_close
(
struct
vm_area_struct
*
vma
)
{
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_vma_entry_t
*
pt
,
*
prev
,
*
next
;
drm_map_t
*
map
;
drm_map_list_t
*
r_list
;
...
...
@@ -246,7 +246,7 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
unsigned
long
address
)
{
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
unsigned
long
offset
;
unsigned
long
page_nr
;
...
...
@@ -281,7 +281,7 @@ static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
{
drm_map_t
*
map
=
(
drm_map_t
*
)
vma
->
vm_private_data
;
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_sg_mem_t
*
entry
=
dev
->
sg
;
unsigned
long
offset
;
unsigned
long
map_offset
;
...
...
@@ -402,7 +402,7 @@ static struct vm_operations_struct drm_vm_sg_ops = {
void
drm_vm_open
(
struct
vm_area_struct
*
vma
)
{
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_vma_entry_t
*
vma_entry
;
DRM_DEBUG
(
"0x%08lx,0x%08lx
\n
"
,
...
...
@@ -431,7 +431,7 @@ void drm_vm_open(struct vm_area_struct *vma)
void
drm_vm_close
(
struct
vm_area_struct
*
vma
)
{
drm_file_t
*
priv
=
vma
->
vm_file
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_vma_entry_t
*
pt
,
*
prev
;
DRM_DEBUG
(
"0x%08lx,0x%08lx
\n
"
,
...
...
@@ -471,7 +471,7 @@ int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
unsigned
long
length
=
vma
->
vm_end
-
vma
->
vm_start
;
lock_kernel
();
dev
=
priv
->
dev
;
dev
=
priv
->
head
->
dev
;
dma
=
dev
->
dma
;
DRM_DEBUG
(
"start = 0x%lx, end = 0x%lx, offset = 0x%lx
\n
"
,
vma
->
vm_start
,
vma
->
vm_end
,
VM_OFFSET
(
vma
));
...
...
@@ -528,7 +528,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
int
drm_mmap
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_map_t
*
map
=
NULL
;
drm_map_list_t
*
r_list
;
unsigned
long
offset
=
0
;
...
...
drivers/char/drm/i810_dma.c
View file @
780ce1d2
...
...
@@ -50,26 +50,6 @@
#define up_write up
#endif
drm_ioctl_desc_t
i810_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_I810_INIT
)]
=
{
i810_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I810_VERTEX
)]
=
{
i810_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_CLEAR
)]
=
{
i810_clear_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FLUSH
)]
=
{
i810_flush_ioctl
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_GETAGE
)]
=
{
i810_getage
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_GETBUF
)]
=
{
i810_getbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_SWAP
)]
=
{
i810_swap_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_COPY
)]
=
{
i810_copybuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_DOCOPY
)]
=
{
i810_docopy
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_OV0INFO
)]
=
{
i810_ov0_info
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FSTATUS
)]
=
{
i810_fstatus
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_OV0FLIP
)]
=
{
i810_ov0_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_MC
)]
=
{
i810_dma_mc
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I810_RSTATUS
)]
=
{
i810_rstatus
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FLIP
)]
=
{
i810_flip_bufs
,
1
,
0
}
};
int
i810_max_ioctl
=
DRM_ARRAY_SIZE
(
i810_ioctls
);
static
drm_buf_t
*
i810_freelist_get
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -128,7 +108,7 @@ int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
drm_i810_buf_priv_t
*
buf_priv
;
lock_kernel
();
dev
=
priv
->
dev
;
dev
=
priv
->
head
->
dev
;
dev_priv
=
dev
->
dev_private
;
buf
=
dev_priv
->
mmap_buffer
;
buf_priv
=
buf
->
dev_private
;
...
...
@@ -149,7 +129,7 @@ int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
static
int
i810_map_buffer
(
drm_buf_t
*
buf
,
struct
file
*
filp
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_buf_priv_t
*
buf_priv
=
buf
->
dev_private
;
drm_i810_private_t
*
dev_priv
=
dev
->
dev_private
;
struct
file_operations
*
old_fops
;
...
...
@@ -229,7 +209,7 @@ static int i810_dma_get_buffer(drm_device_t *dev, drm_i810_dma_t *d,
return
retcode
;
}
int
i810_dma_cleanup
(
drm_device_t
*
dev
)
static
int
i810_dma_cleanup
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -455,7 +435,7 @@ static int i810_dma_initialize(drm_device_t *dev,
* If it isn't then we have a v1.1 client. Fix up params.
* If it is, then we have a 1.2 client... get the rest of the data.
*/
int
i810_dma_init_compat
(
drm_i810_init_t
*
init
,
unsigned
long
arg
)
static
int
i810_dma_init_compat
(
drm_i810_init_t
*
init
,
unsigned
long
arg
)
{
/* Get v1.1 init data */
...
...
@@ -487,11 +467,11 @@ int i810_dma_init_compat(drm_i810_init_t *init, unsigned long arg)
return
0
;
}
int
i810_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i810_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
;
drm_i810_init_t
init
;
int
retcode
=
0
;
...
...
@@ -942,7 +922,7 @@ static void i810_dma_dispatch_flip( drm_device_t *dev )
}
void
i810_dma_quiescent
(
drm_device_t
*
dev
)
static
void
i810_dma_quiescent
(
drm_device_t
*
dev
)
{
drm_i810_private_t
*
dev_priv
=
dev
->
dev_private
;
RING_LOCALS
;
...
...
@@ -1027,7 +1007,7 @@ int i810_flush_ioctl(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
LOCK_TEST_WITH_RETURN
(
dev
,
filp
);
...
...
@@ -1036,11 +1016,11 @@ int i810_flush_ioctl(struct inode *inode, struct file *filp,
}
int
i810_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i810_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
u32
*
hw_status
=
dev_priv
->
hw_status_page
;
...
...
@@ -1073,11 +1053,11 @@ int i810_dma_vertex(struct inode *inode, struct file *filp,
int
i810_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i810_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_clear_t
clear
;
if
(
copy_from_user
(
&
clear
,
(
drm_i810_clear_t
__user
*
)
arg
,
sizeof
(
clear
)))
...
...
@@ -1096,11 +1076,11 @@ int i810_clear_bufs(struct inode *inode, struct file *filp,
return
0
;
}
int
i810_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i810_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
DRM_DEBUG
(
"i810_swap_bufs
\n
"
);
...
...
@@ -1110,11 +1090,11 @@ int i810_swap_bufs(struct inode *inode, struct file *filp,
return
0
;
}
int
i810_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
static
int
i810_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
u32
*
hw_status
=
dev_priv
->
hw_status_page
;
drm_i810_sarea_t
*
sarea_priv
=
(
drm_i810_sarea_t
*
)
...
...
@@ -1124,11 +1104,11 @@ int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
i810_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
static
int
i810_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
int
retcode
=
0
;
drm_i810_dma_t
d
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
...
...
@@ -1155,17 +1135,15 @@ int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
return
retcode
;
}
int
i810_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
/* Never copy - 2.4.x doesn't need it */
return
0
;
}
int
i810_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
/* Never copy - 2.4.x doesn't need it */
return
0
;
...
...
@@ -1234,11 +1212,11 @@ static void i810_dma_dispatch_mc(drm_device_t *dev, drm_buf_t *buf, int used,
ADVANCE_LP_RING
();
}
int
i810_dma_mc
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i810_dma_mc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
u32
*
hw_status
=
dev_priv
->
hw_status_page
;
...
...
@@ -1265,21 +1243,21 @@ int i810_dma_mc(struct inode *inode, struct file *filp,
return
0
;
}
int
i810_rstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_rstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
return
(
int
)(((
u32
*
)(
dev_priv
->
hw_status_page
))[
4
]);
}
int
i810_ov0_info
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_ov0_info
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
drm_i810_overlay_t
data
;
...
...
@@ -1290,11 +1268,11 @@ int i810_ov0_info(struct inode *inode, struct file *filp,
return
0
;
}
int
i810_fstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_fstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
LOCK_TEST_WITH_RETURN
(
dev
,
filp
);
...
...
@@ -1302,11 +1280,11 @@ int i810_fstatus(struct inode *inode, struct file *filp,
return
I810_READ
(
0x30008
);
}
int
i810_ov0_flip
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_ov0_flip
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
(
drm_i810_private_t
*
)
dev
->
dev_private
;
LOCK_TEST_WITH_RETURN
(
dev
,
filp
);
...
...
@@ -1330,7 +1308,7 @@ static void i810_do_init_pageflip( drm_device_t *dev )
dev_priv
->
sarea_priv
->
pf_current_page
=
dev_priv
->
current_page
;
}
int
i810_do_cleanup_pageflip
(
drm_device_t
*
dev
)
static
int
i810_do_cleanup_pageflip
(
drm_device_t
*
dev
)
{
drm_i810_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1342,11 +1320,11 @@ int i810_do_cleanup_pageflip( drm_device_t *dev )
return
0
;
}
int
i810_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i810_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i810_private_t
*
dev_priv
=
dev
->
dev_private
;
DRM_DEBUG
(
"%s
\n
"
,
__FUNCTION__
);
...
...
@@ -1365,6 +1343,16 @@ void i810_driver_pretakedown(drm_device_t *dev)
i810_dma_cleanup
(
dev
);
}
void
i810_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
)
{
if
(
dev
->
dev_private
)
{
drm_i810_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
page_flipping
)
{
i810_do_cleanup_pageflip
(
dev
);
}
}
}
void
i810_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
i810_reclaim_buffers
(
dev
,
filp
);
...
...
@@ -1376,4 +1364,22 @@ int i810_driver_dma_quiescent(drm_device_t *dev)
return
0
;
}
drm_ioctl_desc_t
i810_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_I810_INIT
)]
=
{
i810_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I810_VERTEX
)]
=
{
i810_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_CLEAR
)]
=
{
i810_clear_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FLUSH
)]
=
{
i810_flush_ioctl
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_GETAGE
)]
=
{
i810_getage
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_GETBUF
)]
=
{
i810_getbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_SWAP
)]
=
{
i810_swap_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_COPY
)]
=
{
i810_copybuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_DOCOPY
)]
=
{
i810_docopy
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_OV0INFO
)]
=
{
i810_ov0_info
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FSTATUS
)]
=
{
i810_fstatus
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_OV0FLIP
)]
=
{
i810_ov0_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_MC
)]
=
{
i810_dma_mc
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I810_RSTATUS
)]
=
{
i810_rstatus
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I810_FLIP
)]
=
{
i810_flip_bufs
,
1
,
0
}
};
int
i810_max_ioctl
=
DRM_ARRAY_SIZE
(
i810_ioctls
);
drivers/char/drm/i810_drv.c
View file @
780ce1d2
...
...
@@ -53,7 +53,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
@@ -83,6 +83,7 @@ static struct drm_driver driver = {
.
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_HAVE_DMA
|
DRIVER_DMA_QUEUE
,
.
dev_priv_size
=
sizeof
(
drm_i810_buf_priv_t
),
.
pretakedown
=
i810_driver_pretakedown
,
.
prerelease
=
i810_driver_prerelease
,
.
release
=
i810_driver_release
,
.
dma_quiescent
=
i810_driver_dma_quiescent
,
.
reclaim_buffers
=
i810_reclaim_buffers
,
...
...
drivers/char/drm/i810_drv.h
View file @
780ce1d2
...
...
@@ -114,57 +114,13 @@ typedef struct drm_i810_private {
}
drm_i810_private_t
;
/* i810_dma.c */
extern
int
i810_dma_schedule
(
drm_device_t
*
dev
,
int
locked
);
extern
int
i810_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_dma_cleanup
(
drm_device_t
*
dev
);
extern
int
i810_flush_ioctl
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
void
i810_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
);
extern
int
i810_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
);
/* Obsolete:
*/
extern
int
i810_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
/* Obsolete:
*/
extern
int
i810_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_rstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_ov0_info
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_fstatus
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_ov0_flip
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_dma_mc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
void
i810_dma_quiescent
(
drm_device_t
*
dev
);
extern
int
i810_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i810_driver_dma_quiescent
(
drm_device_t
*
dev
);
extern
void
i810_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
);
extern
void
i810_driver_pretakedown
(
drm_device_t
*
dev
);
extern
void
i810_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
);
#define I810_BASE(reg) ((unsigned long) \
dev_priv->mmio_map->handle)
...
...
drivers/char/drm/i830_dma.c
View file @
780ce1d2
...
...
@@ -52,42 +52,6 @@
#define up_write up
#endif
drm_ioctl_desc_t
i830_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_I830_INIT
)]
=
{
i830_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I830_VERTEX
)]
=
{
i830_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_CLEAR
)]
=
{
i830_clear_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_FLUSH
)]
=
{
i830_flush_ioctl
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETAGE
)]
=
{
i830_getage
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETBUF
)]
=
{
i830_getbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_SWAP
)]
=
{
i830_swap_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_COPY
)]
=
{
i830_copybuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_DOCOPY
)]
=
{
i830_docopy
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_FLIP
)]
=
{
i830_flip_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_IRQ_EMIT
)]
=
{
i830_irq_emit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_IRQ_WAIT
)]
=
{
i830_irq_wait
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETPARAM
)]
=
{
i830_getparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_SETPARAM
)]
=
{
i830_setparam
,
1
,
0
}
};
int
i830_max_ioctl
=
DRM_ARRAY_SIZE
(
i830_ioctls
);
static
inline
void
i830_print_status_page
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
u32
*
temp
=
dev_priv
->
hw_status_page
;
int
i
;
DRM_DEBUG
(
"hw_status: Interrupt Status : %x
\n
"
,
temp
[
0
]);
DRM_DEBUG
(
"hw_status: LpRing Head ptr : %x
\n
"
,
temp
[
1
]);
DRM_DEBUG
(
"hw_status: IRing Head ptr : %x
\n
"
,
temp
[
2
]);
DRM_DEBUG
(
"hw_status: Reserved : %x
\n
"
,
temp
[
3
]);
DRM_DEBUG
(
"hw_status: Driver Counter : %d
\n
"
,
temp
[
5
]);
for
(
i
=
9
;
i
<
dma
->
buf_count
+
9
;
i
++
)
{
DRM_DEBUG
(
"buffer status idx : %d used: %d
\n
"
,
i
-
9
,
temp
[
i
]);
}
}
static
drm_buf_t
*
i830_freelist_get
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -146,7 +110,7 @@ int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
drm_i830_buf_priv_t
*
buf_priv
;
lock_kernel
();
dev
=
priv
->
dev
;
dev
=
priv
->
head
->
dev
;
dev_priv
=
dev
->
dev_private
;
buf
=
dev_priv
->
mmap_buffer
;
buf_priv
=
buf
->
dev_private
;
...
...
@@ -167,7 +131,7 @@ int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
static
int
i830_map_buffer
(
drm_buf_t
*
buf
,
struct
file
*
filp
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_buf_priv_t
*
buf_priv
=
buf
->
dev_private
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
struct
file_operations
*
old_fops
;
...
...
@@ -247,7 +211,7 @@ static int i830_dma_get_buffer(drm_device_t *dev, drm_i830_dma_t *d,
return
retcode
;
}
int
i830_dma_cleanup
(
drm_device_t
*
dev
)
static
int
i830_dma_cleanup
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -479,11 +443,11 @@ static int i830_dma_initialize(drm_device_t *dev,
return
0
;
}
int
i830_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
static
int
i830_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
;
drm_i830_init_t
init
;
int
retcode
=
0
;
...
...
@@ -1252,7 +1216,7 @@ static void i830_dma_dispatch_vertex(drm_device_t *dev,
}
void
i830_dma_quiescent
(
drm_device_t
*
dev
)
static
void
i830_dma_quiescent
(
drm_device_t
*
dev
)
{
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
RING_LOCALS
;
...
...
@@ -1329,11 +1293,11 @@ void i830_reclaim_buffers(drm_device_t *dev, struct file *filp)
}
}
int
i830_flush_ioctl
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_flush_ioctl
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
LOCK_TEST_WITH_RETURN
(
dev
,
filp
);
...
...
@@ -1341,11 +1305,11 @@ int i830_flush_ioctl(struct inode *inode, struct file *filp,
return
0
;
}
int
i830_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
u32
*
hw_status
=
dev_priv
->
hw_status_page
;
...
...
@@ -1373,11 +1337,11 @@ int i830_dma_vertex(struct inode *inode, struct file *filp,
return
0
;
}
int
i830_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_clear_t
clear
;
if
(
copy_from_user
(
&
clear
,
(
drm_i830_clear_t
__user
*
)
arg
,
sizeof
(
clear
)))
...
...
@@ -1397,11 +1361,11 @@ int i830_clear_bufs(struct inode *inode, struct file *filp,
return
0
;
}
int
i830_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
DRM_DEBUG
(
"i830_swap_bufs
\n
"
);
...
...
@@ -1425,7 +1389,7 @@ static void i830_do_init_pageflip( drm_device_t *dev )
dev_priv
->
sarea_priv
->
pf_current_page
=
dev_priv
->
current_page
;
}
int
i830_do_cleanup_pageflip
(
drm_device_t
*
dev
)
static
int
i830_do_cleanup_pageflip
(
drm_device_t
*
dev
)
{
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1437,11 +1401,11 @@ int i830_do_cleanup_pageflip( drm_device_t *dev )
return
0
;
}
int
i830_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
DRM_DEBUG
(
"%s
\n
"
,
__FUNCTION__
);
...
...
@@ -1455,11 +1419,11 @@ int i830_flip_bufs(struct inode *inode, struct file *filp,
return
0
;
}
int
i830_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
u32
*
hw_status
=
dev_priv
->
hw_status_page
;
drm_i830_sarea_t
*
sarea_priv
=
(
drm_i830_sarea_t
*
)
...
...
@@ -1469,11 +1433,11 @@ int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
i830_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
int
retcode
=
0
;
drm_i830_dma_t
d
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
...
...
@@ -1501,28 +1465,26 @@ int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
return
retcode
;
}
int
i830_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
/* Never copy - 2.4.x doesn't need it */
return
0
;
}
int
i830_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
return
0
;
}
int
i830_getparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_getparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_i830_getparam_t
param
;
int
value
;
...
...
@@ -1552,11 +1514,11 @@ int i830_getparam( struct inode *inode, struct file *filp, unsigned int cmd,
}
int
i830_setparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
i830_setparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_i830_setparam_t
param
;
...
...
@@ -1585,6 +1547,16 @@ void i830_driver_pretakedown(drm_device_t *dev)
i830_dma_cleanup
(
dev
);
}
void
i830_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
)
{
if
(
dev
->
dev_private
)
{
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
page_flipping
)
{
i830_do_cleanup_pageflip
(
dev
);
}
}
}
void
i830_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
i830_reclaim_buffers
(
dev
,
filp
);
...
...
@@ -1596,3 +1568,21 @@ int i830_driver_dma_quiescent(drm_device_t *dev)
return
0
;
}
drm_ioctl_desc_t
i830_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_I830_INIT
)]
=
{
i830_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_I830_VERTEX
)]
=
{
i830_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_CLEAR
)]
=
{
i830_clear_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_FLUSH
)]
=
{
i830_flush_ioctl
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETAGE
)]
=
{
i830_getage
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETBUF
)]
=
{
i830_getbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_SWAP
)]
=
{
i830_swap_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_COPY
)]
=
{
i830_copybuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_DOCOPY
)]
=
{
i830_docopy
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_FLIP
)]
=
{
i830_flip_bufs
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_IRQ_EMIT
)]
=
{
i830_irq_emit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_IRQ_WAIT
)]
=
{
i830_irq_wait
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_GETPARAM
)]
=
{
i830_getparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_I830_SETPARAM
)]
=
{
i830_setparam
,
1
,
0
}
};
int
i830_max_ioctl
=
DRM_ARRAY_SIZE
(
i830_ioctls
);
drivers/char/drm/i830_drv.c
View file @
780ce1d2
...
...
@@ -54,7 +54,7 @@ int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
@@ -87,6 +87,7 @@ static struct drm_driver driver = {
#endif
.
dev_priv_size
=
sizeof
(
drm_i830_buf_priv_t
),
.
pretakedown
=
i830_driver_pretakedown
,
.
prerelease
=
i830_driver_prerelease
,
.
release
=
i830_driver_release
,
.
dma_quiescent
=
i830_driver_dma_quiescent
,
.
reclaim_buffers
=
i830_reclaim_buffers
,
...
...
drivers/char/drm/i830_drv.h
View file @
780ce1d2
...
...
@@ -120,51 +120,16 @@ typedef struct drm_i830_private {
}
drm_i830_private_t
;
/* i830_dma.c */
extern
int
i830_dma_schedule
(
drm_device_t
*
dev
,
int
locked
);
extern
int
i830_getbuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_dma_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_dma_cleanup
(
drm_device_t
*
dev
);
extern
int
i830_flush_ioctl
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
/* i830_dma.c */
extern
void
i830_reclaim_buffers
(
drm_device_t
*
dev
,
struct
file
*
filp
);
extern
int
i830_getage
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
);
extern
int
i830_copybuf
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_docopy
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
void
i830_dma_quiescent
(
drm_device_t
*
dev
);
extern
int
i830_dma_vertex
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_swap_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_clear_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_flip_bufs
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_getparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_setparam
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
);
/* i830_irq.c */
extern
int
i830_irq_emit
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_irq_wait
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
i830_wait_irq
(
drm_device_t
*
dev
,
int
irq_nr
);
extern
int
i830_emit_irq
(
drm_device_t
*
dev
);
extern
irqreturn_t
i830_driver_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
i830_driver_irq_preinstall
(
drm_device_t
*
dev
);
...
...
@@ -173,6 +138,7 @@ extern void i830_driver_irq_uninstall( drm_device_t *dev );
extern
void
i830_driver_pretakedown
(
drm_device_t
*
dev
);
extern
void
i830_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
);
extern
int
i830_driver_dma_quiescent
(
drm_device_t
*
dev
);
extern
void
i830_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
);
#define I830_BASE(reg) ((unsigned long) \
dev_priv->mmio_map->handle)
...
...
drivers/char/drm/i830_irq.c
View file @
780ce1d2
...
...
@@ -123,7 +123,7 @@ int i830_irq_emit( struct inode *inode, struct file *filp, unsigned int cmd,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_i830_irq_emit_t
emit
;
int
result
;
...
...
@@ -155,7 +155,7 @@ int i830_irq_wait( struct inode *inode, struct file *filp, unsigned int cmd,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
head
->
dev
;
drm_i830_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_i830_irq_wait_t
irqwait
;
...
...
drivers/char/drm/i915_drv.c
View file @
780ce1d2
...
...
@@ -29,7 +29,7 @@ int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
drivers/char/drm/mga_dma.c
View file @
780ce1d2
...
...
@@ -41,6 +41,7 @@
#define MGA_DEFAULT_USEC_TIMEOUT 10000
#define MGA_FREELIST_DEBUG 0
static
int
mga_do_cleanup_dma
(
drm_device_t
*
dev
);
/* ================================================================
* Engine control
...
...
@@ -68,25 +69,7 @@ int mga_do_wait_for_idle( drm_mga_private_t *dev_priv )
return
DRM_ERR
(
EBUSY
);
}
int
mga_do_dma_idle
(
drm_mga_private_t
*
dev_priv
)
{
u32
status
=
0
;
int
i
;
DRM_DEBUG
(
"
\n
"
);
for
(
i
=
0
;
i
<
dev_priv
->
usec_timeout
;
i
++
)
{
status
=
MGA_READ
(
MGA_STATUS
)
&
MGA_DMA_IDLE_MASK
;
if
(
status
==
MGA_ENDPRDMASTS
)
return
0
;
DRM_UDELAY
(
1
);
}
#if MGA_DMA_DEBUG
DRM_ERROR
(
"failed! status=0x%08x
\n
"
,
status
);
#endif
return
DRM_ERR
(
EBUSY
);
}
int
mga_do_dma_reset
(
drm_mga_private_t
*
dev_priv
)
static
int
mga_do_dma_reset
(
drm_mga_private_t
*
dev_priv
)
{
drm_mga_sarea_t
*
sarea_priv
=
dev_priv
->
sarea_priv
;
drm_mga_primary_buffer_t
*
primary
=
&
dev_priv
->
prim
;
...
...
@@ -110,44 +93,6 @@ int mga_do_dma_reset( drm_mga_private_t *dev_priv )
return
0
;
}
int
mga_do_engine_reset
(
drm_mga_private_t
*
dev_priv
)
{
DRM_DEBUG
(
"
\n
"
);
/* Okay, so we've completely screwed up and locked the engine.
* How about we clean up after ourselves?
*/
MGA_WRITE
(
MGA_RST
,
MGA_SOFTRESET
);
DRM_UDELAY
(
15
);
/* Wait at least 10 usecs */
MGA_WRITE
(
MGA_RST
,
0
);
/* Initialize the registers that get clobbered by the soft
* reset. Many of the core register values survive a reset,
* but the drawing registers are basically all gone.
*
* 3D clients should probably die after calling this. The X
* server should reset the engine state to known values.
*/
#if 0
MGA_WRITE( MGA_PRIMPTR,
virt_to_bus((void *)dev_priv->prim.status_page) |
MGA_PRIMPTREN0 |
MGA_PRIMPTREN1 );
#endif
MGA_WRITE
(
MGA_ICLEAR
,
MGA_SOFTRAPICLR
);
MGA_WRITE
(
MGA_IEN
,
MGA_SOFTRAPIEN
);
/* The primary DMA stream should look like new right about now.
*/
mga_do_dma_reset
(
dev_priv
);
/* This bad boy will never fail.
*/
return
0
;
}
/* ================================================================
* Primary DMA stream
*/
...
...
@@ -625,7 +570,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
return
0
;
}
int
mga_do_cleanup_dma
(
drm_device_t
*
dev
)
static
int
mga_do_cleanup_dma
(
drm_device_t
*
dev
)
{
DRM_DEBUG
(
"
\n
"
);
...
...
drivers/char/drm/mga_drv.c
View file @
780ce1d2
...
...
@@ -51,7 +51,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
drivers/char/drm/mga_drv.h
View file @
780ce1d2
...
...
@@ -121,10 +121,6 @@ extern void mga_driver_pretakedown(drm_device_t *dev);
extern
int
mga_driver_dma_quiescent
(
drm_device_t
*
dev
);
extern
int
mga_do_wait_for_idle
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_do_dma_idle
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_do_dma_reset
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_do_engine_reset
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_do_cleanup_dma
(
drm_device_t
*
dev
);
extern
void
mga_do_dma_flush
(
drm_mga_private_t
*
dev_priv
);
extern
void
mga_do_dma_wrap_start
(
drm_mga_private_t
*
dev_priv
);
...
...
@@ -132,15 +128,6 @@ extern void mga_do_dma_wrap_end( drm_mga_private_t *dev_priv );
extern
int
mga_freelist_put
(
drm_device_t
*
dev
,
drm_buf_t
*
buf
);
/* mga_state.c */
extern
int
mga_dma_clear
(
DRM_IOCTL_ARGS
);
extern
int
mga_dma_swap
(
DRM_IOCTL_ARGS
);
extern
int
mga_dma_vertex
(
DRM_IOCTL_ARGS
);
extern
int
mga_dma_indices
(
DRM_IOCTL_ARGS
);
extern
int
mga_dma_iload
(
DRM_IOCTL_ARGS
);
extern
int
mga_dma_blit
(
DRM_IOCTL_ARGS
);
extern
int
mga_getparam
(
DRM_IOCTL_ARGS
);
/* mga_warp.c */
extern
int
mga_warp_install_microcode
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_warp_init
(
drm_mga_private_t
*
dev_priv
);
...
...
drivers/char/drm/mga_state.c
View file @
780ce1d2
...
...
@@ -37,21 +37,6 @@
#include "mga_drm.h"
#include "mga_drv.h"
drm_ioctl_desc_t
mga_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_MGA_INIT
)]
=
{
mga_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_MGA_FLUSH
)]
=
{
mga_dma_flush
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_RESET
)]
=
{
mga_dma_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_SWAP
)]
=
{
mga_dma_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_CLEAR
)]
=
{
mga_dma_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_VERTEX
)]
=
{
mga_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_INDICES
)]
=
{
mga_dma_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_ILOAD
)]
=
{
mga_dma_iload
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_BLIT
)]
=
{
mga_dma_blit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_GETPARAM
)]
=
{
mga_getparam
,
1
,
0
},
};
int
mga_max_ioctl
=
DRM_ARRAY_SIZE
(
mga_ioctls
);
/* ================================================================
* DMA hardware state programming functions
*/
...
...
@@ -893,7 +878,7 @@ static void mga_dma_dispatch_blit( drm_device_t *dev,
*
*/
int
mga_dma_clear
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_clear
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -918,7 +903,7 @@ int mga_dma_clear( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_dma_swap
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_swap
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -940,7 +925,7 @@ int mga_dma_swap( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_dma_vertex
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_vertex
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -979,7 +964,7 @@ int mga_dma_vertex( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_dma_indices
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_indices
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1018,7 +1003,7 @@ int mga_dma_indices( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_dma_iload
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_iload
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -1060,7 +1045,7 @@ int mga_dma_iload( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_dma_blit
(
DRM_IOCTL_ARGS
)
static
int
mga_dma_blit
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1089,7 +1074,7 @@ int mga_dma_blit( DRM_IOCTL_ARGS )
return
0
;
}
int
mga_getparam
(
DRM_IOCTL_ARGS
)
static
int
mga_getparam
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1121,3 +1106,18 @@ int mga_getparam( DRM_IOCTL_ARGS )
return
0
;
}
drm_ioctl_desc_t
mga_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_MGA_INIT
)]
=
{
mga_dma_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_MGA_FLUSH
)]
=
{
mga_dma_flush
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_RESET
)]
=
{
mga_dma_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_SWAP
)]
=
{
mga_dma_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_CLEAR
)]
=
{
mga_dma_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_VERTEX
)]
=
{
mga_dma_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_INDICES
)]
=
{
mga_dma_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_ILOAD
)]
=
{
mga_dma_iload
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_BLIT
)]
=
{
mga_dma_blit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_MGA_GETPARAM
)]
=
{
mga_getparam
,
1
,
0
},
};
int
mga_max_ioctl
=
DRM_ARRAY_SIZE
(
mga_ioctls
);
drivers/char/drm/r128_cce.c
View file @
780ce1d2
...
...
@@ -80,7 +80,7 @@ static u32 r128_cce_microcode[] = {
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
int
R128_READ_PLL
(
drm_device_t
*
dev
,
int
addr
)
static
int
R128_READ_PLL
(
drm_device_t
*
dev
,
int
addr
)
{
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -808,7 +808,7 @@ static int r128_freelist_init( drm_device_t *dev )
}
#endif
drm_buf_t
*
r128_freelist_get
(
drm_device_t
*
dev
)
static
drm_buf_t
*
r128_freelist_get
(
drm_device_t
*
dev
)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
drivers/char/drm/r128_drv.c
View file @
780ce1d2
...
...
@@ -45,7 +45,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
drivers/char/drm/r128_drv.h
View file @
780ce1d2
...
...
@@ -139,27 +139,13 @@ extern int r128_cce_idle( DRM_IOCTL_ARGS );
extern
int
r128_engine_reset
(
DRM_IOCTL_ARGS
);
extern
int
r128_fullscreen
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_buffers
(
DRM_IOCTL_ARGS
);
extern
int
r128_getparam
(
DRM_IOCTL_ARGS
);
extern
void
r128_freelist_reset
(
drm_device_t
*
dev
);
extern
drm_buf_t
*
r128_freelist_get
(
drm_device_t
*
dev
);
extern
int
r128_wait_ring
(
drm_r128_private_t
*
dev_priv
,
int
n
);
extern
int
r128_do_cce_idle
(
drm_r128_private_t
*
dev_priv
);
extern
int
r128_do_cleanup_cce
(
drm_device_t
*
dev
);
extern
int
r128_do_cleanup_pageflip
(
drm_device_t
*
dev
);
/* r128_state.c */
extern
int
r128_cce_clear
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_swap
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_flip
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_vertex
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_indices
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_blit
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_depth
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_stipple
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_indirect
(
DRM_IOCTL_ARGS
);
extern
int
r128_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
);
...
...
@@ -406,8 +392,6 @@ do { \
R128_WRITE(R128_CLOCK_CNTL_DATA, (val)); \
} while (0)
extern
int
R128_READ_PLL
(
drm_device_t
*
dev
,
int
addr
);
#define CCE_PACKET0( reg, n ) (R128_CCE_PACKET0 | \
((n) << 16) | ((reg) >> 2))
...
...
drivers/char/drm/r128_state.c
View file @
780ce1d2
...
...
@@ -32,27 +32,6 @@
#include "r128_drm.h"
#include "r128_drv.h"
drm_ioctl_desc_t
r128_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_R128_INIT
)]
=
{
r128_cce_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_START
)]
=
{
r128_cce_start
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_STOP
)]
=
{
r128_cce_stop
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_RESET
)]
=
{
r128_cce_reset
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_IDLE
)]
=
{
r128_cce_idle
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_RESET
)]
=
{
r128_engine_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_FULLSCREEN
)]
=
{
r128_fullscreen
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_SWAP
)]
=
{
r128_cce_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_FLIP
)]
=
{
r128_cce_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_CLEAR
)]
=
{
r128_cce_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_VERTEX
)]
=
{
r128_cce_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_INDICES
)]
=
{
r128_cce_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_BLIT
)]
=
{
r128_cce_blit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_DEPTH
)]
=
{
r128_cce_depth
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_STIPPLE
)]
=
{
r128_cce_stipple
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_INDIRECT
)]
=
{
r128_cce_indirect
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_GETPARAM
)]
=
{
r128_getparam
,
1
,
0
},
};
int
r128_max_ioctl
=
DRM_ARRAY_SIZE
(
r128_ioctls
);
/* ================================================================
* CCE hardware state programming functions
...
...
@@ -1281,7 +1260,7 @@ static void r128_cce_dispatch_stipple( drm_device_t *dev, u32 *stipple )
* IOCTL functions
*/
int
r128_cce_clear
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_clear
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1349,7 +1328,7 @@ int r128_do_cleanup_pageflip( drm_device_t *dev )
* They can & should be intermixed to support multiple 3d windows.
*/
int
r128_cce_flip
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_flip
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1368,7 +1347,7 @@ int r128_cce_flip( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_cce_swap
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_swap
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1390,7 +1369,7 @@ int r128_cce_swap( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_cce_vertex
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_vertex
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1450,7 +1429,7 @@ int r128_cce_vertex( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_cce_indices
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_indices
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1522,7 +1501,7 @@ int r128_cce_indices( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_cce_blit
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_blit
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -1552,7 +1531,7 @@ int r128_cce_blit( DRM_IOCTL_ARGS )
return
ret
;
}
int
r128_cce_depth
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_depth
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1582,7 +1561,7 @@ int r128_cce_depth( DRM_IOCTL_ARGS )
return
ret
;
}
int
r128_cce_stipple
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_stipple
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1606,7 +1585,7 @@ int r128_cce_stipple( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_cce_indirect
(
DRM_IOCTL_ARGS
)
static
int
r128_cce_indirect
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1682,7 +1661,7 @@ int r128_cce_indirect( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_getparam
(
DRM_IOCTL_ARGS
)
static
int
r128_getparam
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1730,3 +1709,24 @@ void r128_driver_pretakedown(drm_device_t *dev)
r128_do_cleanup_cce
(
dev
);
}
drm_ioctl_desc_t
r128_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_R128_INIT
)]
=
{
r128_cce_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_START
)]
=
{
r128_cce_start
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_STOP
)]
=
{
r128_cce_stop
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_RESET
)]
=
{
r128_cce_reset
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_CCE_IDLE
)]
=
{
r128_cce_idle
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_RESET
)]
=
{
r128_engine_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_FULLSCREEN
)]
=
{
r128_fullscreen
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_SWAP
)]
=
{
r128_cce_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_FLIP
)]
=
{
r128_cce_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_CLEAR
)]
=
{
r128_cce_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_VERTEX
)]
=
{
r128_cce_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_INDICES
)]
=
{
r128_cce_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_BLIT
)]
=
{
r128_cce_blit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_DEPTH
)]
=
{
r128_cce_depth
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_STIPPLE
)]
=
{
r128_cce_stipple
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_R128_INDIRECT
)]
=
{
r128_cce_indirect
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_R128_GETPARAM
)]
=
{
r128_getparam
,
1
,
0
},
};
int
r128_max_ioctl
=
DRM_ARRAY_SIZE
(
r128_ioctls
);
drivers/char/drm/radeon_cp.c
View file @
780ce1d2
...
...
@@ -35,6 +35,7 @@
#define RADEON_FIFO_DEBUG 0
static
int
radeon_do_cleanup_cp
(
drm_device_t
*
dev
);
/* CP microcode (from ATI) */
static
u32
R200_cp_microcode
[][
2
]
=
{
...
...
@@ -815,7 +816,7 @@ static u32 R300_cp_microcode[][2] = {
{
0000000000
,
0000000000
},
};
int
RADEON_READ_PLL
(
drm_device_t
*
dev
,
int
addr
)
static
int
RADEON_READ_PLL
(
drm_device_t
*
dev
,
int
addr
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1538,7 +1539,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
return
0
;
}
int
radeon_do_cleanup_cp
(
drm_device_t
*
dev
)
static
int
radeon_do_cleanup_cp
(
drm_device_t
*
dev
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
DRM_DEBUG
(
"
\n
"
);
...
...
drivers/char/drm/radeon_drm.h
View file @
780ce1d2
...
...
@@ -146,8 +146,13 @@
#define RADEON_EMIT_PP_TEX_SIZE_2 75
#define R200_EMIT_RB3D_BLENDCOLOR 76
#define R200_EMIT_TCL_POINT_SPRITE_CNTL 77
#define RADEON_MAX_STATE_PACKETS 78
#define RADEON_EMIT_PP_CUBIC_FACES_0 78
#define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79
#define RADEON_EMIT_PP_CUBIC_FACES_1 80
#define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81
#define RADEON_EMIT_PP_CUBIC_FACES_2 82
#define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83
#define RADEON_MAX_STATE_PACKETS 84
/* Commands understood by cmd_buffer ioctl. More can be added but
* obviously these can't be removed or changed:
...
...
drivers/char/drm/radeon_drv.c
View file @
780ce1d2
...
...
@@ -46,7 +46,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
drivers/char/drm/radeon_drv.h
View file @
780ce1d2
...
...
@@ -78,9 +78,11 @@
* - Add hyperz support, add hyperz flags to clear ioctl.
* 1.14- Add support for color tiling
* - Add R100/R200 surface allocation/free support
* 1.15- Add support for texture micro tiling
* - Add support for r100 cube maps
*/
#define DRIVER_MAJOR 1
#define DRIVER_MINOR 1
4
#define DRIVER_MINOR 1
5
#define DRIVER_PATCHLEVEL 0
#define GET_RING_HEAD(dev_priv) DRM_READ32( (dev_priv)->ring_rptr, 0 )
...
...
@@ -284,42 +286,20 @@ extern drm_buf_t *radeon_freelist_get( drm_device_t *dev );
extern
int
radeon_wait_ring
(
drm_radeon_private_t
*
dev_priv
,
int
n
);
extern
int
radeon_do_cp_idle
(
drm_radeon_private_t
*
dev_priv
);
extern
int
radeon_do_cleanup_cp
(
drm_device_t
*
dev
);
extern
int
radeon_do_cleanup_pageflip
(
drm_device_t
*
dev
);
extern
int
radeon_driver_preinit
(
struct
drm_device
*
dev
,
unsigned
long
flags
);
extern
int
radeon_driver_postcleanup
(
struct
drm_device
*
dev
);
/* radeon_state.c */
extern
int
radeon_cp_clear
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_swap
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_vertex
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_indices
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_texture
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_stipple
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_indirect
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_vertex2
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_cmdbuf
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_getparam
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_setparam
(
DRM_IOCTL_ARGS
);
extern
int
radeon_cp_flip
(
DRM_IOCTL_ARGS
);
extern
int
radeon_mem_alloc
(
DRM_IOCTL_ARGS
);
extern
int
radeon_mem_free
(
DRM_IOCTL_ARGS
);
extern
int
radeon_mem_init_heap
(
DRM_IOCTL_ARGS
);
extern
void
radeon_mem_takedown
(
struct
mem_block
**
heap
);
extern
void
radeon_mem_release
(
DRMFILE
filp
,
struct
mem_block
*
heap
);
extern
int
radeon_surface_alloc
(
DRM_IOCTL_ARGS
);
extern
int
radeon_surface_free
(
DRM_IOCTL_ARGS
);
/* radeon_irq.c */
extern
int
radeon_irq_emit
(
DRM_IOCTL_ARGS
);
extern
int
radeon_irq_wait
(
DRM_IOCTL_ARGS
);
extern
int
radeon_emit_and_wait_irq
(
drm_device_t
*
dev
);
extern
int
radeon_wait_irq
(
drm_device_t
*
dev
,
int
swi_nr
);
extern
int
radeon_emit_irq
(
drm_device_t
*
dev
);
extern
void
radeon_do_release
(
drm_device_t
*
dev
);
extern
int
radeon_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
);
extern
irqreturn_t
radeon_driver_irq_handler
(
DRM_IRQ_ARGS
);
...
...
@@ -817,6 +797,12 @@ extern int radeon_postcleanup( struct drm_device *dev );
#define RADEON_PP_TEX_SIZE_1 0x1d0c
#define RADEON_PP_TEX_SIZE_2 0x1d14
#define RADEON_PP_CUBIC_FACES_0 0x1d24
#define RADEON_PP_CUBIC_FACES_1 0x1d28
#define RADEON_PP_CUBIC_FACES_2 0x1d2c
#define RADEON_PP_CUBIC_OFFSET_T0_0 0x1dd0
/* bits [31:5] */
#define RADEON_PP_CUBIC_OFFSET_T1_0 0x1e00
#define RADEON_PP_CUBIC_OFFSET_T2_0 0x1e14
#define SE_VAP_CNTL__TCL_ENA_MASK 0x00000001
#define SE_VAP_CNTL__FORCE_W_TO_ONE_MASK 0x00010000
...
...
@@ -860,9 +846,6 @@ do { \
RADEON_WRITE( RADEON_CLOCK_CNTL_DATA, (val) ); \
} while (0)
extern
int
RADEON_READ_PLL
(
drm_device_t
*
dev
,
int
addr
);
#define CP_PACKET0( reg, n ) \
(RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
#define CP_PACKET0_TABLE( reg, n ) \
...
...
drivers/char/drm/radeon_irq.c
View file @
780ce1d2
...
...
@@ -93,7 +93,7 @@ static __inline__ void radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv)
RADEON_WRITE
(
RADEON_GEN_INT_STATUS
,
tmp
);
}
int
radeon_emit_irq
(
drm_device_t
*
dev
)
static
int
radeon_emit_irq
(
drm_device_t
*
dev
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
unsigned
int
ret
;
...
...
@@ -112,7 +112,7 @@ int radeon_emit_irq(drm_device_t *dev)
}
int
radeon_wait_irq
(
drm_device_t
*
dev
,
int
swi_nr
)
static
int
radeon_wait_irq
(
drm_device_t
*
dev
,
int
swi_nr
)
{
drm_radeon_private_t
*
dev_priv
=
(
drm_radeon_private_t
*
)
dev
->
dev_private
;
...
...
@@ -134,12 +134,6 @@ int radeon_wait_irq(drm_device_t *dev, int swi_nr)
return
ret
;
}
int
radeon_emit_and_wait_irq
(
drm_device_t
*
dev
)
{
return
radeon_wait_irq
(
dev
,
radeon_emit_irq
(
dev
)
);
}
int
radeon_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
{
drm_radeon_private_t
*
dev_priv
=
...
...
drivers/char/drm/radeon_state.c
View file @
780ce1d2
...
...
@@ -33,38 +33,6 @@
#include "radeon_drm.h"
#include "radeon_drv.h"
drm_ioctl_desc_t
radeon_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_INIT
)]
=
{
radeon_cp_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_START
)]
=
{
radeon_cp_start
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_STOP
)]
=
{
radeon_cp_stop
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_RESET
)]
=
{
radeon_cp_reset
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_IDLE
)]
=
{
radeon_cp_idle
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_RESUME
)]
=
{
radeon_cp_resume
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_RESET
)]
=
{
radeon_engine_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FULLSCREEN
)]
=
{
radeon_fullscreen
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SWAP
)]
=
{
radeon_cp_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CLEAR
)]
=
{
radeon_cp_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_VERTEX
)]
=
{
radeon_cp_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INDICES
)]
=
{
radeon_cp_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_TEXTURE
)]
=
{
radeon_cp_texture
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_STIPPLE
)]
=
{
radeon_cp_stipple
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INDIRECT
)]
=
{
radeon_cp_indirect
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_VERTEX2
)]
=
{
radeon_cp_vertex2
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CMDBUF
)]
=
{
radeon_cp_cmdbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_GETPARAM
)]
=
{
radeon_cp_getparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FLIP
)]
=
{
radeon_cp_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_ALLOC
)]
=
{
radeon_mem_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FREE
)]
=
{
radeon_mem_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INIT_HEAP
)]
=
{
radeon_mem_init_heap
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_IRQ_EMIT
)]
=
{
radeon_irq_emit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_IRQ_WAIT
)]
=
{
radeon_irq_wait
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SETPARAM
)]
=
{
radeon_cp_setparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SURF_ALLOC
)]
=
{
radeon_surface_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SURF_FREE
)]
=
{
radeon_surface_free
,
1
,
0
}
};
int
radeon_max_ioctl
=
DRM_ARRAY_SIZE
(
radeon_ioctls
);
/* ================================================================
* Helper functions for client state checking and fixup
*/
...
...
@@ -158,6 +126,22 @@ static __inline__ int radeon_check_and_fixup_packets( drm_radeon_private_t *dev_
break
;
}
case
RADEON_EMIT_PP_CUBIC_OFFSETS_T0
:
case
RADEON_EMIT_PP_CUBIC_OFFSETS_T1
:
case
RADEON_EMIT_PP_CUBIC_OFFSETS_T2
:{
int
i
;
for
(
i
=
0
;
i
<
5
;
i
++
)
{
if
(
radeon_check_and_fixup_offset
(
dev_priv
,
filp_priv
,
&
data
[
i
]))
{
DRM_ERROR
(
"Invalid R100 cubic texture offset
\n
"
);
return
DRM_ERR
(
EINVAL
);
}
}
}
break
;
case
RADEON_EMIT_RB3D_COLORPITCH
:
case
RADEON_EMIT_RE_LINE_PATTERN
:
case
RADEON_EMIT_SE_LINE_WIDTH
:
...
...
@@ -1514,6 +1498,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
int
size
,
dwords
,
tex_width
,
blit_width
;
u32
height
;
int
i
;
u32
texpitch
,
microtile
;
RING_LOCALS
;
DRM_GET_PRIV_WITH_RETURN
(
filp_priv
,
filp
);
...
...
@@ -1576,6 +1561,16 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
DRM_ERROR
(
"invalid texture format %d
\n
"
,
tex
->
format
);
return
DRM_ERR
(
EINVAL
);
}
texpitch
=
tex
->
pitch
;
if
((
texpitch
<<
22
)
&
RADEON_DST_TILE_MICRO
)
{
microtile
=
1
;
if
(
tex_width
<
64
)
{
texpitch
&=
~
(
RADEON_DST_TILE_MICRO
>>
22
);
/* we got tiled coordinates, untile them */
image
->
x
*=
2
;
}
}
else
microtile
=
0
;
DRM_DEBUG
(
"tex=%dx%d blit=%d
\n
"
,
tex_width
,
tex
->
height
,
blit_width
);
...
...
@@ -1628,7 +1623,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
RADEON_GMC_CLR_CMP_CNTL_DIS
|
RADEON_GMC_WR_MSK_DIS
);
buffer
[
2
]
=
(
tex
->
pitch
<<
22
)
|
(
tex
->
offset
>>
10
);
buffer
[
2
]
=
(
texpitch
<<
22
)
|
(
tex
->
offset
>>
10
);
buffer
[
3
]
=
0xffffffff
;
buffer
[
4
]
=
0xffffffff
;
buffer
[
5
]
=
(
image
->
y
<<
16
)
|
image
->
x
;
...
...
@@ -1636,30 +1631,110 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
buffer
[
7
]
=
dwords
;
buffer
+=
8
;
if
(
tex_width
>=
32
)
{
/* Texture image width is larger than the minimum, so we
* can upload it directly.
*/
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
dwords
*
sizeof
(
u32
)
)
)
{
DRM_ERROR
(
"EFAULT on data, %d dwords
\n
"
,
dwords
);
return
DRM_ERR
(
EFAULT
);
if
(
microtile
)
{
/* texture micro tiling in use, minimum texture width is thus 16 bytes.
however, we cannot use blitter directly for texture width < 64 bytes,
since minimum tex pitch is 64 bytes and we need this to match
the texture width, otherwise the blitter will tile it wrong.
Thus, tiling manually in this case. Additionally, need to special
case tex height = 1, since our actual image will have height 2
and we need to ensure we don't read beyond the texture size
from user space. */
if
(
tex
->
height
==
1
)
{
if
(
tex_width
>=
64
||
tex_width
<=
16
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
tex_width
*
sizeof
(
u32
)))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
}
else
if
(
tex_width
==
32
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
if
(
DRM_COPY_FROM_USER
(
buffer
+
8
,
data
+
16
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
}
}
else
if
(
tex_width
>=
64
||
tex_width
==
16
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
dwords
*
sizeof
(
u32
)))
{
DRM_ERROR
(
"EFAULT on data, %d dwords
\n
"
,
dwords
);
return
DRM_ERR
(
EFAULT
);
}
}
else
if
(
tex_width
<
16
)
{
for
(
i
=
0
;
i
<
tex
->
height
;
i
++
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
tex_width
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
buffer
+=
4
;
data
+=
tex_width
;
}
}
else
if
(
tex_width
==
32
)
{
/* TODO: make sure this works when not fitting in one buffer
(i.e. 32bytes x 2048...) */
for
(
i
=
0
;
i
<
tex
->
height
;
i
+=
2
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
data
+=
16
;
if
(
DRM_COPY_FROM_USER
(
buffer
+
8
,
data
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
data
+=
16
;
if
(
DRM_COPY_FROM_USER
(
buffer
+
4
,
data
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
data
+=
16
;
if
(
DRM_COPY_FROM_USER
(
buffer
+
12
,
data
,
16
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
data
+=
16
;
buffer
+=
16
;
}
}
}
else
{
/* Texture image width is less than the minimum, so we
* need to pad out each image scanline to the minimum
* width.
*/
for
(
i
=
0
;
i
<
tex
->
height
;
i
++
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
tex_width
)
)
{
DRM_ERROR
(
"EFAULT on pad, %d byte
s
\n
"
,
tex_width
);
}
else
{
if
(
tex_width
>=
32
)
{
/* Texture image width is larger than the minimum, so we
* can upload it directly.
*/
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
dwords
*
sizeof
(
u32
))
)
{
DRM_ERROR
(
"EFAULT on data, %d dword
s
\n
"
,
dwords
);
return
DRM_ERR
(
EFAULT
);
}
buffer
+=
8
;
data
+=
tex_width
;
}
else
{
/* Texture image width is less than the minimum, so we
* need to pad out each image scanline to the minimum
* width.
*/
for
(
i
=
0
;
i
<
tex
->
height
;
i
++
)
{
if
(
DRM_COPY_FROM_USER
(
buffer
,
data
,
tex_width
))
{
DRM_ERROR
(
"EFAULT on pad, %d bytes
\n
"
,
tex_width
);
return
DRM_ERR
(
EFAULT
);
}
buffer
+=
8
;
data
+=
tex_width
;
}
}
}
...
...
@@ -1864,7 +1939,7 @@ static void radeon_surfaces_release(DRMFILE filp, drm_radeon_private_t *dev_priv
/* ================================================================
* IOCTL functions
*/
int
radeon_surface_alloc
(
DRM_IOCTL_ARGS
)
static
int
radeon_surface_alloc
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1884,7 +1959,7 @@ int radeon_surface_alloc(DRM_IOCTL_ARGS)
return
0
;
}
int
radeon_surface_free
(
DRM_IOCTL_ARGS
)
static
int
radeon_surface_free
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1904,7 +1979,7 @@ int radeon_surface_free(DRM_IOCTL_ARGS)
return
0
;
}
int
radeon_cp_clear
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_clear
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1961,7 +2036,7 @@ static int radeon_do_init_pageflip( drm_device_t *dev )
/* Called whenever a client dies, from drm_release.
* NOTE: Lock isn't necessarily held when this is called!
*/
int
radeon_do_cleanup_pageflip
(
drm_device_t
*
dev
)
static
int
radeon_do_cleanup_pageflip
(
drm_device_t
*
dev
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
DRM_DEBUG
(
"
\n
"
);
...
...
@@ -1976,7 +2051,7 @@ int radeon_do_cleanup_pageflip( drm_device_t *dev )
/* Swapping and flipping are different operations, need different ioctls.
* They can & should be intermixed to support multiple 3d windows.
*/
int
radeon_cp_flip
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_flip
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -1995,7 +2070,7 @@ int radeon_cp_flip( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_swap
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_swap
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2016,7 +2091,7 @@ int radeon_cp_swap( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_vertex
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_vertex
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2101,7 +2176,7 @@ int radeon_cp_vertex( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_indices
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_indices
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2203,7 +2278,7 @@ int radeon_cp_indices( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_texture
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_texture
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2234,7 +2309,7 @@ int radeon_cp_texture( DRM_IOCTL_ARGS )
return
ret
;
}
int
radeon_cp_stipple
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_stipple
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2257,7 +2332,7 @@ int radeon_cp_stipple( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_indirect
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_indirect
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2332,7 +2407,7 @@ int radeon_cp_indirect( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_vertex2
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_vertex2
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2661,7 +2736,7 @@ static int radeon_emit_wait( drm_device_t *dev, int flags )
return
0
;
}
int
radeon_cp_cmdbuf
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_cmdbuf
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2813,7 +2888,7 @@ int radeon_cp_cmdbuf( DRM_IOCTL_ARGS )
int
radeon_cp_getparam
(
DRM_IOCTL_ARGS
)
static
int
radeon_cp_getparam
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -2887,7 +2962,7 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS )
return
0
;
}
int
radeon_cp_setparam
(
DRM_IOCTL_ARGS
)
{
static
int
radeon_cp_setparam
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_file_t
*
filp_priv
;
...
...
@@ -2980,3 +3055,35 @@ void radeon_driver_free_filp_priv(drm_device_t *dev, drm_file_t *filp_priv)
drm_free
(
radeon_priv
,
sizeof
(
*
radeon_priv
),
DRM_MEM_FILES
);
}
drm_ioctl_desc_t
radeon_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_INIT
)]
=
{
radeon_cp_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_START
)]
=
{
radeon_cp_start
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_STOP
)]
=
{
radeon_cp_stop
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_RESET
)]
=
{
radeon_cp_reset
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_IDLE
)]
=
{
radeon_cp_idle
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CP_RESUME
)]
=
{
radeon_cp_resume
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_RESET
)]
=
{
radeon_engine_reset
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FULLSCREEN
)]
=
{
radeon_fullscreen
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SWAP
)]
=
{
radeon_cp_swap
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CLEAR
)]
=
{
radeon_cp_clear
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_VERTEX
)]
=
{
radeon_cp_vertex
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INDICES
)]
=
{
radeon_cp_indices
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_TEXTURE
)]
=
{
radeon_cp_texture
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_STIPPLE
)]
=
{
radeon_cp_stipple
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INDIRECT
)]
=
{
radeon_cp_indirect
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_VERTEX2
)]
=
{
radeon_cp_vertex2
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_CMDBUF
)]
=
{
radeon_cp_cmdbuf
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_GETPARAM
)]
=
{
radeon_cp_getparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FLIP
)]
=
{
radeon_cp_flip
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_ALLOC
)]
=
{
radeon_mem_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_FREE
)]
=
{
radeon_mem_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_INIT_HEAP
)]
=
{
radeon_mem_init_heap
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_RADEON_IRQ_EMIT
)]
=
{
radeon_irq_emit
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_IRQ_WAIT
)]
=
{
radeon_irq_wait
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SETPARAM
)]
=
{
radeon_cp_setparam
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SURF_ALLOC
)]
=
{
radeon_surface_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_RADEON_SURF_FREE
)]
=
{
radeon_surface_free
,
1
,
0
}
};
int
radeon_max_ioctl
=
DRM_ARRAY_SIZE
(
radeon_ioctls
);
drivers/char/drm/sis_drv.c
View file @
780ce1d2
...
...
@@ -40,7 +40,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
drivers/char/drm/sis_drv.h
View file @
780ce1d2
...
...
@@ -46,13 +46,6 @@ typedef struct drm_sis_private {
memHeap_t
*
FBHeap
;
}
drm_sis_private_t
;
extern
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
);
extern
int
sis_fb_free
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_init
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_alloc
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_free
(
DRM_IOCTL_ARGS
);
extern
int
sis_fb_init
(
DRM_IOCTL_ARGS
);
extern
int
sis_init_context
(
drm_device_t
*
dev
,
int
context
);
extern
int
sis_final_context
(
drm_device_t
*
dev
,
int
context
);
...
...
drivers/char/drm/sis_ds.c
View file @
780ce1d2
...
...
@@ -194,32 +194,6 @@ int mmBlockInHeap(memHeap_t *heap, PMemBlock b)
return
0
;
}
/* Kludgey workaround for existing i810 server. Remove soon.
*/
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
int
ofs
,
int
size
)
{
PMemBlock
blocks
;
blocks
=
(
TMemBlock
*
)
drm_calloc
(
2
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
if
(
blocks
!=
NULL
)
{
blocks
[
0
].
size
=
size
;
blocks
[
0
].
free
=
1
;
blocks
[
0
].
ofs
=
ofs
;
blocks
[
0
].
next
=
&
blocks
[
1
];
/* Discontinuity - stops JoinBlock from trying to join
* non-adjacent ranges.
*/
blocks
[
1
].
size
=
0
;
blocks
[
1
].
free
=
0
;
blocks
[
1
].
ofs
=
ofs
+
size
;
blocks
[
1
].
next
=
(
PMemBlock
)
heap
;
return
(
memHeap_t
*
)
blocks
;
}
else
return
heap
;
}
static
TMemBlock
*
SliceBlock
(
TMemBlock
*
p
,
int
startofs
,
int
size
,
int
reserved
,
int
alignment
)
...
...
@@ -325,61 +299,3 @@ int mmFreeMem(PMemBlock b)
return
0
;
}
int
mmReserveMem
(
memHeap_t
*
heap
,
int
offset
,
int
size
)
{
int
endofs
;
TMemBlock
*
p
;
if
(
heap
==
NULL
||
size
<=
0
)
return
-
1
;
endofs
=
offset
+
size
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
&&
p
->
ofs
<=
offset
)
{
if
(
ISFREE
(
p
)
&&
endofs
<=
(
p
->
ofs
+
p
->
size
))
{
SliceBlock
(
p
,
offset
,
size
,
1
,
1
);
return
0
;
}
p
=
p
->
next
;
}
return
-
1
;
}
int
mmFreeReserved
(
memHeap_t
*
heap
,
int
offset
)
{
TMemBlock
*
p
,
*
prev
;
if
(
heap
==
NULL
)
return
-
1
;
p
=
(
TMemBlock
*
)
heap
;
prev
=
NULL
;
while
(
p
!=
NULL
&&
p
->
ofs
!=
offset
)
{
prev
=
p
;
p
=
p
->
next
;
}
if
(
p
==
NULL
||
!
p
->
reserved
)
return
-
1
;
p
->
free
=
1
;
p
->
reserved
=
0
;
Join2Blocks
(
p
);
if
(
prev
!=
NULL
)
Join2Blocks
(
prev
);
return
0
;
}
void
mmDestroy
(
memHeap_t
*
heap
)
{
TMemBlock
*
p
,
*
q
;
if
(
heap
==
NULL
)
return
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
!=
NULL
)
{
q
=
p
->
next
;
drm_free
(
p
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
p
=
q
;
}
}
drivers/char/drm/sis_ds.h
View file @
780ce1d2
...
...
@@ -115,10 +115,6 @@ static __inline__ void mmMarkReserved(PMemBlock b)
*/
memHeap_t
*
mmInit
(
int
ofs
,
int
size
);
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
int
ofs
,
int
size
);
/*
* Allocate 'size' bytes with 2^align2 bytes alignment,
* restrict the search to free memory after 'startSearch'
...
...
@@ -143,21 +139,6 @@ int mmBlockInHeap( PMemBlock heap, PMemBlock b );
*/
int
mmFreeMem
(
PMemBlock
b
);
/*
* Reserve 'size' bytes block start at offset
* This is used to prevent allocation of memory already used
* by the X server for the front buffer, pixmaps, and cursor
* input: size, offset
* output: 0 if OK, -1 if error
*/
int
mmReserveMem
(
memHeap_t
*
heap
,
int
offset
,
int
size
);
int
mmFreeReserved
(
memHeap_t
*
heap
,
int
offset
);
/*
* destroy MM
*/
void
mmDestroy
(
memHeap_t
*
mmInit
);
/* For debuging purpose. */
void
mmDumpMemInfo
(
memHeap_t
*
mmInit
);
...
...
drivers/char/drm/sis_mm.c
View file @
780ce1d2
...
...
@@ -36,17 +36,6 @@
#include <video/sisfb.h>
#endif
drm_ioctl_desc_t
sis_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_SIS_FB_ALLOC
)]
=
{
sis_fb_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_FB_FREE
)]
=
{
sis_fb_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_INIT
)]
=
{
sis_ioctl_agp_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_ALLOC
)]
=
{
sis_ioctl_agp_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_FREE
)]
=
{
sis_ioctl_agp_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_FB_INIT
)]
=
{
sis_fb_init
,
1
,
1
}
};
int
sis_max_ioctl
=
DRM_ARRAY_SIZE
(
sis_ioctls
);
#define MAX_CONTEXT 100
#define VIDEO_TYPE 0
#define AGP_TYPE 1
...
...
@@ -91,12 +80,12 @@ static int del_alloc_set(int context, int type, unsigned int val)
/* fb management via fb device */
#if defined(__linux__) && defined(CONFIG_FB_SIS)
int
sis_fb_init
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_init
(
DRM_IOCTL_ARGS
)
{
return
0
;
}
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
)
{
drm_sis_mem_t
fb
;
struct
sis_memreq
req
;
...
...
@@ -129,7 +118,7 @@ int sis_fb_alloc( DRM_IOCTL_ARGS )
return
retval
;
}
int
sis_fb_free
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_free
(
DRM_IOCTL_ARGS
)
{
drm_sis_mem_t
fb
;
int
retval
=
0
;
...
...
@@ -160,7 +149,7 @@ int sis_fb_free( DRM_IOCTL_ARGS )
* X driver/sisfb HW- Command-
* framebuffer memory DRI heap Cursor queue
*/
int
sis_fb_init
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_init
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -186,7 +175,7 @@ int sis_fb_init( DRM_IOCTL_ARGS )
return
0
;
}
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -223,7 +212,7 @@ int sis_fb_alloc( DRM_IOCTL_ARGS )
return
retval
;
}
int
sis_fb_free
(
DRM_IOCTL_ARGS
)
static
int
sis_fb_free
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -250,7 +239,7 @@ int sis_fb_free( DRM_IOCTL_ARGS )
/* agp memory management */
int
sis_ioctl_agp_init
(
DRM_IOCTL_ARGS
)
static
int
sis_ioctl_agp_init
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -276,7 +265,7 @@ int sis_ioctl_agp_init( DRM_IOCTL_ARGS )
return
0
;
}
int
sis_ioctl_agp_alloc
(
DRM_IOCTL_ARGS
)
static
int
sis_ioctl_agp_alloc
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -313,7 +302,7 @@ int sis_ioctl_agp_alloc( DRM_IOCTL_ARGS )
return
retval
;
}
int
sis_ioctl_agp_free
(
DRM_IOCTL_ARGS
)
static
int
sis_ioctl_agp_free
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_sis_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -414,3 +403,15 @@ int sis_final_context(struct drm_device *dev, int context)
return
1
;
}
drm_ioctl_desc_t
sis_ioctls
[]
=
{
[
DRM_IOCTL_NR
(
DRM_SIS_FB_ALLOC
)]
=
{
sis_fb_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_FB_FREE
)]
=
{
sis_fb_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_INIT
)]
=
{
sis_ioctl_agp_init
,
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_ALLOC
)]
=
{
sis_ioctl_agp_alloc
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_AGP_FREE
)]
=
{
sis_ioctl_agp_free
,
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_SIS_FB_INIT
)]
=
{
sis_fb_init
,
1
,
1
}
};
int
sis_max_ioctl
=
DRM_ARRAY_SIZE
(
sis_ioctls
);
drivers/char/drm/tdfx_drv.c
View file @
780ce1d2
...
...
@@ -44,7 +44,7 @@ static int postinit( struct drm_device *dev, unsigned long flags )
DRIVER_MINOR
,
DRIVER_PATCHLEVEL
,
DRIVER_DATE
,
dev
->
minor
,
dev
->
primary
.
minor
,
pci_pretty_name
(
dev
->
pdev
)
);
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment