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
07b03017
Commit
07b03017
authored
Sep 07, 2004
by
Dave Airlie
Browse files
Options
Browse Files
Download
Plain Diff
Merge starflyer.(none):/home/airlied/bitkeeper/linux-2.5
into starflyer.(none):/home/airlied/bitkeeper/drm-fntbl
parents
69148aae
8b00ce36
Changes
41
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
324 additions
and
399 deletions
+324
-399
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+22
-24
drivers/char/drm/drm_bufs.h
drivers/char/drm/drm_bufs.h
+19
-3
drivers/char/drm/drm_dma.h
drivers/char/drm/drm_dma.h
+2
-38
drivers/char/drm/drm_drv.h
drivers/char/drm/drm_drv.h
+36
-48
drivers/char/drm/drm_ioctl.h
drivers/char/drm/drm_ioctl.h
+3
-3
drivers/char/drm/drm_irq.h
drivers/char/drm/drm_irq.h
+39
-38
drivers/char/drm/drm_os_linux.h
drivers/char/drm/drm_os_linux.h
+2
-2
drivers/char/drm/drm_vm.h
drivers/char/drm/drm_vm.h
+11
-10
drivers/char/drm/ffb_context.c
drivers/char/drm/ffb_context.c
+17
-65
drivers/char/drm/ffb_drv.c
drivers/char/drm/ffb_drv.c
+76
-73
drivers/char/drm/ffb_drv.h
drivers/char/drm/ffb_drv.h
+3
-0
drivers/char/drm/gamma.h
drivers/char/drm/gamma.h
+0
-6
drivers/char/drm/gamma_dma.c
drivers/char/drm/gamma_dma.c
+8
-8
drivers/char/drm/i810.h
drivers/char/drm/i810.h
+0
-12
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_dma.c
+4
-4
drivers/char/drm/i810_drv.c
drivers/char/drm/i810_drv.c
+1
-0
drivers/char/drm/i830.h
drivers/char/drm/i830.h
+0
-13
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_dma.c
+11
-3
drivers/char/drm/i830_drv.h
drivers/char/drm/i830_drv.h
+4
-0
drivers/char/drm/i830_irq.c
drivers/char/drm/i830_irq.c
+4
-4
drivers/char/drm/i915.h
drivers/char/drm/i915.h
+0
-4
drivers/char/drm/i915_dma.c
drivers/char/drm/i915_dma.c
+5
-1
drivers/char/drm/i915_drv.c
drivers/char/drm/i915_drv.c
+1
-0
drivers/char/drm/i915_drv.h
drivers/char/drm/i915_drv.h
+5
-0
drivers/char/drm/i915_irq.c
drivers/char/drm/i915_irq.c
+8
-4
drivers/char/drm/mga.h
drivers/char/drm/mga.h
+0
-7
drivers/char/drm/mga_dma.c
drivers/char/drm/mga_dma.c
+6
-3
drivers/char/drm/mga_drv.h
drivers/char/drm/mga_drv.h
+6
-0
drivers/char/drm/mga_irq.c
drivers/char/drm/mga_irq.c
+2
-2
drivers/char/drm/r128.h
drivers/char/drm/r128.h
+0
-7
drivers/char/drm/r128_cce.c
drivers/char/drm/r128_cce.c
+0
-2
drivers/char/drm/r128_drv.h
drivers/char/drm/r128_drv.h
+6
-0
drivers/char/drm/r128_irq.c
drivers/char/drm/r128_irq.c
+2
-2
drivers/char/drm/r128_state.c
drivers/char/drm/r128_state.c
+6
-1
drivers/char/drm/radeon.h
drivers/char/drm/radeon.h
+0
-7
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+0
-2
drivers/char/drm/radeon_drv.h
drivers/char/drm/radeon_drv.h
+5
-0
drivers/char/drm/radeon_irq.c
drivers/char/drm/radeon_irq.c
+2
-2
drivers/char/drm/radeon_state.c
drivers/char/drm/radeon_state.c
+6
-1
drivers/char/drm/sis_drv.c
drivers/char/drm/sis_drv.c
+1
-0
drivers/char/drm/tdfx_drv.c
drivers/char/drm/tdfx_drv.c
+1
-0
No files found.
drivers/char/drm/drmP.h
View file @
07b03017
...
...
@@ -88,13 +88,11 @@
#define DRIVER_USE_MTRR 0x4
#define DRIVER_PCI_DMA 0x8
#define DRIVER_SG 0x10
#ifndef __HAVE_DMA
#define __HAVE_DMA 0
#endif
#ifndef __HAVE_IRQ
#define __HAVE_IRQ 0
#endif
#define DRIVER_HAVE_DMA 0x20
#define DRIVER_HAVE_IRQ 0x40
#define DRIVER_IRQ_SHARED 0x80
#define DRIVER_IRQ_VBL 0x100
#define DRIVER_DMA_QUEUE 0x200
/***********************************************************************/
/** \name Begin the DRM... */
...
...
@@ -533,7 +531,6 @@ typedef struct drm_ctx_list {
drm_file_t
*
tag
;
/**< associated fd private data */
}
drm_ctx_list_t
;
#ifdef __HAVE_VBL_IRQ
typedef
struct
drm_vbl_sig
{
struct
list_head
head
;
...
...
@@ -542,7 +539,6 @@ typedef struct drm_vbl_sig {
struct
task_struct
*
task
;
}
drm_vbl_sig_t
;
#endif
/**
* DRM device functions structure
...
...
@@ -565,7 +561,17 @@ struct drm_driver_fn {
int
(
*
context_ctor
)(
struct
drm_device
*
dev
,
int
context
);
int
(
*
context_dtor
)(
struct
drm_device
*
dev
,
int
context
);
int
(
*
kernel_context_switch
)(
struct
drm_device
*
dev
,
int
old
,
int
new
);
int
(
*
kernel_context_switch_unlock
)(
struct
drm_device
*
dev
);
void
(
*
kernel_context_switch_unlock
)(
struct
drm_device
*
dev
,
drm_lock_t
*
lock
);
int
(
*
vblank_wait
)(
struct
drm_device
*
dev
,
unsigned
int
*
sequence
);
/* these have to be filled in */
irqreturn_t
(
*
irq_handler
)(
DRM_IRQ_ARGS
);
void
(
*
irq_preinstall
)(
struct
drm_device
*
dev
);
void
(
*
irq_postinstall
)(
struct
drm_device
*
dev
);
void
(
*
irq_uninstall
)(
struct
drm_device
*
dev
);
void
(
*
reclaim_buffers
)(
struct
file
*
filp
);
unsigned
long
(
*
get_map_ofs
)(
drm_map_t
*
map
);
unsigned
long
(
*
get_reg_ofs
)(
struct
drm_device
*
dev
);
void
(
*
set_version
)(
struct
drm_device
*
dev
,
drm_set_version_t
*
sv
);
};
/**
* DRM device structure.
...
...
@@ -655,13 +661,13 @@ typedef struct drm_device {
struct
work_struct
work
;
/** \name VBLANK IRQ support */
/*@{*/
#ifdef __HAVE_VBL_IRQ
wait_queue_head_t
vbl_queue
;
/**< VBLANK wait queue */
atomic_t
vbl_received
;
spinlock_t
vbl_lock
;
drm_vbl_sig_t
vbl_sigs
;
/**< signal list to send on VBLANK */
unsigned
int
vbl_pending
;
#endif
/*@}*/
cycles_t
ctx_start
;
cycles_t
lck_start
;
...
...
@@ -864,7 +870,6 @@ extern int DRM(addmap)( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
rmmap
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
#if __HAVE_DMA
extern
int
DRM
(
addbufs
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
infobufs
)(
struct
inode
*
inode
,
struct
file
*
filp
,
...
...
@@ -881,31 +886,21 @@ extern int DRM(dma_setup)(drm_device_t *dev);
extern
void
DRM
(
dma_takedown
)(
drm_device_t
*
dev
);
extern
void
DRM
(
free_buffer
)(
drm_device_t
*
dev
,
drm_buf_t
*
buf
);
extern
void
DRM
(
reclaim_buffers
)(
struct
file
*
filp
);
#endif
/* __HAVE_DMA */
/* IRQ support (drm_irq.h) */
#if __HAVE_IRQ || __HAVE_DMA
extern
int
DRM
(
control
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
#endif
#if __HAVE_IRQ
extern
int
DRM
(
irq_install
)(
drm_device_t
*
dev
);
extern
int
DRM
(
irq_uninstall
)(
drm_device_t
*
dev
);
extern
irqreturn_t
DRM
(
irq_handler
)(
DRM_IRQ_ARGS
);
extern
void
DRM
(
driver_irq_preinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_postinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_uninstall
)(
drm_device_t
*
dev
);
#ifdef __HAVE_VBL_IRQ
extern
int
DRM
(
wait_vblank
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
vblank_wait
)(
drm_device_t
*
dev
,
unsigned
int
*
vbl_seq
);
extern
void
DRM
(
vbl_send_signals
)(
drm_device_t
*
dev
);
#endif
#ifdef __HAVE_IRQ_BH
extern
void
DRM
(
irq_immediate_bh
)(
void
*
dev
);
#endif
#endif
/* AGP/GART support (drm_agpsupport.h) */
extern
drm_agp_head_t
*
DRM
(
agp_init
)(
void
);
...
...
@@ -998,5 +993,8 @@ static __inline__ void drm_core_dropmap(struct drm_map *map)
}
/*@}*/
extern
unsigned
long
DRM
(
core_get_map_ofs
)(
drm_map_t
*
map
);
extern
unsigned
long
DRM
(
core_get_reg_ofs
)(
struct
drm_device
*
dev
);
#endif
/* __KERNEL__ */
#endif
drivers/char/drm/drm_bufs.h
View file @
07b03017
...
...
@@ -286,8 +286,6 @@ int DRM(rmmap)(struct inode *inode, struct file *filp,
return
0
;
}
#if __HAVE_DMA
/**
* Cleanup after an error on one of the addbufs() functions.
*
...
...
@@ -661,7 +659,9 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
buf
->
used
=
0
;
buf
->
offset
=
(
dma
->
byte_count
+
byte_count
+
offset
);
buf
->
address
=
(
void
*
)(
page
+
offset
);
#ifndef __sparc__
buf
->
bus_address
=
virt_to_bus
(
buf
->
address
);
#endif
buf
->
next
=
NULL
;
buf
->
waiting
=
0
;
buf
->
pending
=
0
;
...
...
@@ -926,6 +926,11 @@ int DRM(addbufs)( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_buf_desc_t
request
;
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
if
(
copy_from_user
(
&
request
,
(
drm_buf_desc_t
__user
*
)
arg
,
sizeof
(
request
)
)
)
...
...
@@ -971,6 +976,9 @@ int DRM(infobufs)( struct inode *inode, struct file *filp,
int
i
;
int
count
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
if
(
!
dma
)
return
-
EINVAL
;
spin_lock
(
&
dev
->
count_lock
);
...
...
@@ -1052,6 +1060,9 @@ int DRM(markbufs)( struct inode *inode, struct file *filp,
int
order
;
drm_buf_entry_t
*
entry
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
if
(
!
dma
)
return
-
EINVAL
;
if
(
copy_from_user
(
&
request
,
...
...
@@ -1099,6 +1110,9 @@ int DRM(freebufs)( struct inode *inode, struct file *filp,
int
idx
;
drm_buf_t
*
buf
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
if
(
!
dma
)
return
-
EINVAL
;
if
(
copy_from_user
(
&
request
,
...
...
@@ -1156,6 +1170,9 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
drm_buf_map_t
request
;
int
i
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
return
-
EINVAL
;
if
(
!
dma
)
return
-
EINVAL
;
spin_lock
(
&
dev
->
count_lock
);
...
...
@@ -1253,4 +1270,3 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
return
retcode
;
}
#endif
/* __HAVE_DMA */
drivers/char/drm/drm_dma.h
View file @
07b03017
...
...
@@ -35,16 +35,6 @@
#include "drmP.h"
#ifndef __HAVE_DMA_WAITQUEUE
#define __HAVE_DMA_WAITQUEUE 0
#endif
#ifndef __HAVE_DMA_RECLAIM
#define __HAVE_DMA_RECLAIM 0
#endif
#if __HAVE_DMA
/**
* Initialize the DMA data.
*
...
...
@@ -152,12 +142,11 @@ void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf)
buf
->
filp
=
NULL
;
buf
->
used
=
0
;
if
(
__HAVE_DMA_WAITQUEUE
&&
waitqueue_active
(
&
buf
->
dma_wait
))
{
if
(
drm_core_check_feature
(
dev
,
DRIVER_DMA_QUEUE
)
&&
waitqueue_active
(
&
buf
->
dma_wait
))
{
wake_up_interruptible
(
&
buf
->
dma_wait
);
}
}
#if !__HAVE_DMA_RECLAIM
/**
* Reclaim the buffers.
*
...
...
@@ -165,7 +154,7 @@ void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf)
*
* Frees each buffer associated with \p filp not already on the hardware.
*/
void
DRM
(
reclaim_buffers
)(
struct
file
*
filp
)
void
DRM
(
core_
reclaim_buffers
)(
struct
file
*
filp
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
...
...
@@ -189,29 +178,4 @@ void DRM(reclaim_buffers)( struct file *filp )
}
}
}
#endif
#if !__HAVE_IRQ
/* This stub DRM_IOCTL_CONTROL handler is for the drivers that used to require
* IRQs for DMA but no longer do. It maintains compatibility with the X Servers
* that try to use the control ioctl by simply returning success.
*/
int
DRM
(
control
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_control_t
ctl
;
if
(
copy_from_user
(
&
ctl
,
(
drm_control_t
__user
*
)
arg
,
sizeof
(
ctl
)
)
)
return
-
EFAULT
;
switch
(
ctl
.
func
)
{
case
DRM_INST_HANDLER
:
case
DRM_UNINST_HANDLER
:
return
0
;
default:
return
-
EINVAL
;
}
}
#endif
#endif
/* __HAVE_DMA */
drivers/char/drm/drm_drv.h
View file @
07b03017
...
...
@@ -52,16 +52,6 @@
* OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __HAVE_IRQ
#define __HAVE_IRQ 0
#endif
#ifndef __HAVE_DMA_QUEUE
#define __HAVE_DMA_QUEUE 0
#endif
#ifndef __HAVE_MULTIPLE_DMA_QUEUES
#define __HAVE_MULTIPLE_DMA_QUEUES 0
#endif
#ifndef __HAVE_COUNTERS
#define __HAVE_COUNTERS 0
#endif
...
...
@@ -109,9 +99,7 @@ drm_ioctl_desc_t DRM(ioctls)[] = {
[
DRM_IOCTL_NR
(
DRM_IOCTL_VERSION
)]
=
{
DRM
(
version
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_UNIQUE
)]
=
{
DRM
(
getunique
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_MAGIC
)]
=
{
DRM
(
getmagic
),
0
,
0
},
#if __HAVE_IRQ
[
DRM_IOCTL_NR
(
DRM_IOCTL_IRQ_BUSID
)]
=
{
DRM
(
irq_by_busid
),
0
,
1
},
#endif
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_MAP
)]
=
{
DRM
(
getmap
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_CLIENT
)]
=
{
DRM
(
getclient
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_STATS
)]
=
{
DRM
(
getstats
),
0
,
0
},
...
...
@@ -144,17 +132,14 @@ drm_ioctl_desc_t DRM(ioctls)[] = {
[
DRM_IOCTL_NR
(
DRM_IOCTL_FINISH
)]
=
{
DRM
(
noop
),
1
,
0
},
#if __HAVE_DMA
[
DRM_IOCTL_NR
(
DRM_IOCTL_ADD_BUFS
)]
=
{
DRM
(
addbufs
),
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_MARK_BUFS
)]
=
{
DRM
(
markbufs
),
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_INFO_BUFS
)]
=
{
DRM
(
infobufs
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_MAP_BUFS
)]
=
{
DRM
(
mapbufs
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_FREE_BUFS
)]
=
{
DRM
(
freebufs
),
1
,
0
},
/* The DRM_IOCTL_DMA ioctl should be defined by the driver. */
#endif
#if __HAVE_IRQ || __HAVE_DMA
[
DRM_IOCTL_NR
(
DRM_IOCTL_CONTROL
)]
=
{
DRM
(
control
),
1
,
1
},
#endif
#if __OS_HAS_AGP
[
DRM_IOCTL_NR
(
DRM_IOCTL_AGP_ACQUIRE
)]
=
{
DRM
(
agp_acquire
),
1
,
1
},
...
...
@@ -170,9 +155,7 @@ drm_ioctl_desc_t DRM(ioctls)[] = {
[
DRM_IOCTL_NR
(
DRM_IOCTL_SG_ALLOC
)]
=
{
DRM
(
sg_alloc
),
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_SG_FREE
)]
=
{
DRM
(
sg_free
),
1
,
1
},
#ifdef __HAVE_VBL_IRQ
[
DRM_IOCTL_NR
(
DRM_IOCTL_WAIT_VBLANK
)]
=
{
DRM
(
wait_vblank
),
0
,
0
},
#endif
DRIVER_IOCTLS
};
...
...
@@ -191,20 +174,26 @@ MODULE_LICENSE("GPL and additional rights");
static
int
DRM
(
setup
)(
drm_device_t
*
dev
)
{
int
i
;
int
ret
;
if
(
dev
->
fn_tbl
.
presetup
)
dev
->
fn_tbl
.
presetup
(
dev
);
{
ret
=
dev
->
fn_tbl
.
presetup
(
dev
);
if
(
ret
!=
0
)
return
ret
;
}
atomic_set
(
&
dev
->
ioctl_count
,
0
);
atomic_set
(
&
dev
->
vma_count
,
0
);
dev
->
buf_use
=
0
;
atomic_set
(
&
dev
->
buf_alloc
,
0
);
#if __HAVE_DMA
i
=
DRM
(
dma_setup
)(
dev
);
if
(
i
<
0
)
return
i
;
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
{
i
=
DRM
(
dma_setup
)(
dev
);
if
(
i
<
0
)
return
i
;
}
dev
->
counters
=
6
+
__HAVE_COUNTERS
;
dev
->
types
[
0
]
=
_DRM_STAT_LOCK
;
...
...
@@ -327,9 +316,7 @@ static int DRM(takedown)( drm_device_t *dev )
if
(
dev
->
fn_tbl
.
pretakedown
)
dev
->
fn_tbl
.
pretakedown
(
dev
);
#if __HAVE_IRQ
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
down
(
&
dev
->
struct_sem
);
del_timer
(
&
dev
->
timer
);
...
...
@@ -430,8 +417,7 @@ static int DRM(takedown)( drm_device_t *dev )
dev
->
maplist
=
NULL
;
}
#if __HAVE_DMA_QUEUE || __HAVE_MULTIPLE_DMA_QUEUES
if
(
dev
->
queuelist
)
{
if
(
drm_core_check_feature
(
dev
,
DRIVER_DMA_QUEUE
)
&&
dev
->
queuelist
)
{
for
(
i
=
0
;
i
<
dev
->
queue_count
;
i
++
)
{
if
(
dev
->
queuelist
[
i
]
)
{
DRM
(
free
)(
dev
->
queuelist
[
i
],
...
...
@@ -446,11 +432,10 @@ static int DRM(takedown)( drm_device_t *dev )
dev
->
queuelist
=
NULL
;
}
dev
->
queue_count
=
0
;
#endif
#if __HAVE_DMA
DRM
(
dma_takedown
)(
dev
);
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
DRM
(
dma_takedown
)(
dev
);
if
(
dev
->
lock
.
hw_lock
)
{
dev
->
sigdata
.
lock
=
dev
->
lock
.
hw_lock
=
NULL
;
/* SHM removed */
dev
->
lock
.
filp
=
NULL
;
...
...
@@ -461,6 +446,13 @@ static int DRM(takedown)( drm_device_t *dev )
return
0
;
}
static
void
DRM
(
init_fn_table
)(
struct
drm_device
*
dev
)
{
dev
->
fn_tbl
.
reclaim_buffers
=
DRM
(
core_reclaim_buffers
);
dev
->
fn_tbl
.
get_map_ofs
=
DRM
(
core_get_map_ofs
);
dev
->
fn_tbl
.
get_reg_ofs
=
DRM
(
core_get_reg_ofs
);
}
#include "drm_pciids.h"
static
struct
pci_device_id
DRM
(
pciidlist
)[]
=
{
...
...
@@ -514,7 +506,10 @@ static int DRM(probe)(struct pci_dev *pdev)
dev
->
irq
=
pdev
->
irq
;
/* dev_priv_size can be changed by a driver in driver_register_fns */
dev
->
dev_priv_size
=
sizeof
(
u32
);
dev
->
dev_priv_size
=
sizeof
(
u32
);
DRM
(
init_fn_table
)(
dev
);
DRM
(
driver_register_fns
)(
dev
);
if
(
dev
->
fn_tbl
.
preinit
)
...
...
@@ -820,9 +815,10 @@ int DRM(release)( struct inode *inode, struct file *filp )
}
}
#if __HAVE_DMA
DRM
(
reclaim_buffers
)(
filp
);
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_HAVE_DMA
))
{
dev
->
fn_tbl
.
reclaim_buffers
(
filp
);
}
DRM
(
fasync
)(
-
1
,
filp
,
0
);
...
...
@@ -966,9 +962,6 @@ int DRM(lock)( struct inode *inode, struct file *filp,
DECLARE_WAITQUEUE
(
entry
,
current
);
drm_lock_t
lock
;
int
ret
=
0
;
#if __HAVE_MULTIPLE_DMA_QUEUES
drm_queue_t
*
q
;
#endif
++
priv
->
lock_count
;
...
...
@@ -985,14 +978,9 @@ int DRM(lock)( struct inode *inode, struct file *filp,
lock
.
context
,
current
->
pid
,
dev
->
lock
.
hw_lock
->
lock
,
lock
.
flags
);
#if __HAVE_DMA_QUEUE
if
(
lock
.
context
<
0
)
return
-
EINVAL
;
#elif __HAVE_MULTIPLE_DMA_QUEUES
if
(
lock
.
context
<
0
||
lock
.
context
>=
dev
->
queue_count
)
return
-
EINVAL
;
q
=
dev
->
queuelist
[
lock
.
context
];
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_DMA_QUEUE
))
if
(
lock
.
context
<
0
)
return
-
EINVAL
;
add_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
for
(;;)
{
...
...
@@ -1083,7 +1071,7 @@ int DRM(unlock)( struct inode *inode, struct file *filp,
* modules but is required by the Sparc driver.
*/
if
(
dev
->
fn_tbl
.
kernel_context_switch_unlock
)
dev
->
fn_tbl
.
kernel_context_switch_unlock
(
dev
);
dev
->
fn_tbl
.
kernel_context_switch_unlock
(
dev
,
&
lock
);
else
{
DRM
(
lock_transfer
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM_KERNEL_CONTEXT
);
...
...
drivers/char/drm/drm_ioctl.h
View file @
07b03017
...
...
@@ -341,9 +341,9 @@ int DRM(setversion)(DRM_IOCTL_ARGS)
if
(
sv
.
drm_dd_major
!=
DRIVER_MAJOR
||
sv
.
drm_dd_minor
<
0
||
sv
.
drm_dd_minor
>
DRIVER_MINOR
)
return
EINVAL
;
#ifdef DRIVER_SETVERSION
DRIVER_SETVERSION
(
dev
,
&
sv
);
#endif
if
(
dev
->
fn_tbl
.
set_version
)
dev
->
fn_tbl
.
set_version
(
dev
,
&
sv
);
}
return
0
;
}
drivers/char/drm/drm_irq.h
View file @
07b03017
...
...
@@ -37,16 +37,6 @@
#include <linux/interrupt.h>
/* For task queue support */
#ifndef __HAVE_SHARED_IRQ
#define __HAVE_SHARED_IRQ 0
#endif
#if __HAVE_SHARED_IRQ
#define DRM_IRQ_TYPE SA_SHIRQ
#else
#define DRM_IRQ_TYPE 0
#endif
/**
* Get interrupt from bus id.
*
...
...
@@ -68,6 +58,9 @@ int DRM(irq_by_busid)(struct inode *inode, struct file *filp,
drm_irq_busid_t
__user
*
argp
=
(
void
__user
*
)
arg
;
drm_irq_busid_t
p
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
-
EINVAL
;
if
(
copy_from_user
(
&
p
,
argp
,
sizeof
(
p
)))
return
-
EFAULT
;
...
...
@@ -86,8 +79,6 @@ int DRM(irq_by_busid)(struct inode *inode, struct file *filp,
return
0
;
}
#if __HAVE_IRQ
/**
* Install IRQ handler.
*
...
...
@@ -101,7 +92,11 @@ int DRM(irq_by_busid)(struct inode *inode, struct file *filp,
int
DRM
(
irq_install
)(
drm_device_t
*
dev
)
{
int
ret
;
unsigned
long
sh_flags
=
0
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
-
EINVAL
;
if
(
dev
->
irq
==
0
)
return
-
EINVAL
;
...
...
@@ -122,32 +117,29 @@ int DRM(irq_install)( drm_device_t *dev )
DRM_DEBUG
(
"%s: irq=%d
\n
"
,
__FUNCTION__
,
dev
->
irq
);
#if __HAVE_DMA
dev
->
dma
->
next_buffer
=
NULL
;
dev
->
dma
->
next_queue
=
NULL
;
dev
->
dma
->
this_buffer
=
NULL
;
#endif
#ifdef __HAVE_IRQ_BH
INIT_WORK
(
&
dev
->
work
,
DRM
(
irq_immediate_bh
),
dev
);
#endif
#ifdef __HAVE_VBL_IRQ
init_waitqueue_head
(
&
dev
->
vbl_queue
);
spin_lock_init
(
&
dev
->
vbl_lock
);
INIT_LIST_HEAD
(
&
dev
->
vbl_sigs
.
head
);
dev
->
vbl_pending
=
0
;
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_IRQ_VBL
))
{
init_waitqueue_head
(
&
dev
->
vbl_queue
);
spin_lock_init
(
&
dev
->
vbl_lock
);
INIT_LIST_HEAD
(
&
dev
->
vbl_sigs
.
head
);
dev
->
vbl_pending
=
0
;
}
/* Before installing handler */
DRM
(
driver_irq_preinstall
)
(
dev
);
dev
->
fn_tbl
.
irq_preinstall
(
dev
);
/* Install handler */
ret
=
request_irq
(
dev
->
irq
,
DRM
(
irq_handler
),
DRM_IRQ_TYPE
,
dev
->
devname
,
dev
);
if
(
drm_core_check_feature
(
dev
,
DRIVER_IRQ_SHARED
))
sh_flags
=
SA_SHIRQ
;
ret
=
request_irq
(
dev
->
irq
,
dev
->
fn_tbl
.
irq_handler
,
sh_flags
,
dev
->
devname
,
dev
);
if
(
ret
<
0
)
{
down
(
&
dev
->
struct_sem
);
dev
->
irq_enabled
=
0
;
...
...
@@ -156,7 +148,7 @@ int DRM(irq_install)( drm_device_t *dev )
}
/* After installing handler */
DRM
(
driver_irq_postinstall
)
(
dev
);
dev
->
fn_tbl
.
irq_postinstall
(
dev
);
return
0
;
}
...
...
@@ -172,6 +164,9 @@ int DRM(irq_uninstall)( drm_device_t *dev )
{
int
irq_enabled
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
-
EINVAL
;
down
(
&
dev
->
struct_sem
);
irq_enabled
=
dev
->
irq_enabled
;
dev
->
irq_enabled
=
0
;
...
...
@@ -182,7 +177,7 @@ int DRM(irq_uninstall)( drm_device_t *dev )
DRM_DEBUG
(
"%s: irq=%d
\n
"
,
__FUNCTION__
,
dev
->
irq
);
DRM
(
driver_irq_uninstall
)(
dev
);
dev
->
fn_tbl
.
irq_uninstall
(
dev
);
free_irq
(
dev
->
irq
,
dev
);
...
...
@@ -206,25 +201,29 @@ int DRM(control)( struct inode *inode, struct file *filp,
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
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 */
if
(
copy_from_user
(
&
ctl
,
(
drm_control_t
__user
*
)
arg
,
sizeof
(
ctl
)
)
)
return
-
EFAULT
;
switch
(
ctl
.
func
)
{
case
DRM_INST_HANDLER
:
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
0
;
if
(
dev
->
if_version
<
DRM_IF_VERSION
(
1
,
2
)
&&
ctl
.
irq
!=
dev
->
irq
)
return
-
EINVAL
;
return
DRM
(
irq_install
)(
dev
);
case
DRM_UNINST_HANDLER
:
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
return
0
;
return
DRM
(
irq_uninstall
)(
dev
);
default:
return
-
EINVAL
;
}
}
#ifdef __HAVE_VBL_IRQ
/**
* Wait for VBLANK.
*
...
...
@@ -254,6 +253,9 @@ int DRM(wait_vblank)( DRM_IOCTL_ARGS )
int
ret
=
0
;
unsigned
int
flags
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_IRQ_VBL
))
return
-
EINVAL
;
if
(
!
dev
->
irq
)
return
-
EINVAL
;
...
...
@@ -318,7 +320,8 @@ int DRM(wait_vblank)( DRM_IOCTL_ARGS )
spin_unlock_irqrestore
(
&
dev
->
vbl_lock
,
irqflags
);
}
else
{
ret
=
DRM
(
vblank_wait
)(
dev
,
&
vblwait
.
request
.
sequence
);
if
(
dev
->
fn_tbl
.
vblank_wait
)
ret
=
dev
->
fn_tbl
.
vblank_wait
(
dev
,
&
vblwait
.
request
.
sequence
);
do_gettimeofday
(
&
now
);
vblwait
.
reply
.
tval_sec
=
now
.
tv_sec
;
...
...
@@ -366,6 +369,4 @@ void DRM(vbl_send_signals)( drm_device_t *dev )
spin_unlock_irqrestore
(
&
dev
->
vbl_lock
,
flags
);
}
#endif
/* __HAVE_VBL_IRQ */
#endif
/* __HAVE_IRQ */
drivers/char/drm/drm_os_linux.h
View file @
07b03017
...
...
@@ -58,13 +58,13 @@ struct no_agp_kern {
static
__inline__
int
mtrr_add
(
unsigned
long
base
,
unsigned
long
size
,
unsigned
int
type
,
char
increment
)
{
return
-
ENODEV
;
return
-
ENODEV
;
}
static
__inline__
int
mtrr_del
(
int
reg
,
unsigned
long
base
,
unsigned
long
size
)
{
return
-
ENODEV
;
return
-
ENODEV
;
}
#define MTRR_TYPE_WRCOMB 1
...
...
drivers/char/drm/drm_vm.h
View file @
07b03017
...
...
@@ -493,18 +493,19 @@ int DRM(mmap_dma)(struct file *filp, struct vm_area_struct *vma)
return
0
;
}
#ifndef DRIVER_GET_MAP_OFS
#define DRIVER_GET_MAP_OFS() (map->offset)
#endif
unsigned
long
DRM
(
core_get_map_ofs
)(
drm_map_t
*
map
)
{
return
map
->
offset
;
}
#ifndef DRIVER_GET_REG_OFS
unsigned
long
DRM
(
core_get_reg_ofs
)(
struct
drm_device
*
dev
)
{
#ifdef __alpha__
#define DRIVER_GET_REG_OFS() (dev->hose->dense_mem_base - \
dev->hose->mem_space->start)
return
dev
->
hose
->
dense_mem_base
-
dev
->
hose
->
mem_space
->
start
;
#else
#define DRIVER_GET_REG_OFS() 0
#endif
return
0
;
#endif
}
/**
* mmap DMA memory.
...
...
@@ -557,7 +558,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
r_list
=
list_entry
(
list
,
drm_map_list_t
,
head
);
map
=
r_list
->
map
;
if
(
!
map
)
continue
;
off
=
DRIVER_GET_MAP_OFS
(
);
off
=
dev
->
fn_tbl
.
get_map_ofs
(
map
);
if
(
off
==
VM_OFFSET
(
vma
))
break
;
}
...
...
@@ -612,7 +613,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
if
(
map
->
type
!=
_DRM_AGP
)
vma
->
vm_page_prot
=
pgprot_writecombine
(
vma
->
vm_page_prot
);
#endif
offset
=
DRIVER_GET_REG_OFS
(
);
offset
=
dev
->
fn_tbl
.
get_reg_ofs
(
dev
);
#ifdef __sparc__
if
(
io_remap_page_range
(
DRM_RPR_ARG
(
vma
)
vma
->
vm_start
,
VM_OFFSET
(
vma
)
+
offset
,
...
...
drivers/char/drm/ffb_context.c
View file @
07b03017
...
...
@@ -354,7 +354,7 @@ static void FFBWait(ffb_fbcPtr ffb)
}
while
(
--
limit
);
}
int
DRM
(
context_switch
)
(
drm_device_t
*
dev
,
int
old
,
int
new
)
int
ffb_driver_context_switch
(
drm_device_t
*
dev
,
int
old
,
int
new
)
{
ffb_dev_priv_t
*
fpriv
=
(
ffb_dev_priv_t
*
)
dev
->
dev_private
;
...
...
@@ -380,7 +380,7 @@ int DRM(context_switch)(drm_device_t *dev, int old, int new)
return
0
;
}
int
DRM
(
resctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_resctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_ctx_res_t
res
;
...
...
@@ -407,7 +407,7 @@ int DRM(resctx)(struct inode *inode, struct file *filp, unsigned int cmd,
}
int
DRM
(
addctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_addctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
...
...
@@ -428,7 +428,7 @@ int DRM(addctx)(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
DRM
(
modctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_modctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
...
...
@@ -457,7 +457,7 @@ int DRM(modctx)(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
DRM
(
getctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_getctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
...
...
@@ -489,7 +489,7 @@ int DRM(getctx)(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
DRM
(
switchctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_switchctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
...
...
@@ -499,10 +499,10 @@ int DRM(switchctx)(struct inode *inode, struct file *filp, unsigned int cmd,
if
(
copy_from_user
(
&
ctx
,
(
drm_ctx_t
__user
*
)
arg
,
sizeof
(
ctx
)))
return
-
EFAULT
;
DRM_DEBUG
(
"%d
\n
"
,
ctx
.
handle
);
return
DRM
(
context_switch
)
(
dev
,
dev
->
last_context
,
ctx
.
handle
);
return
ffb_driver_context_switch
(
dev
,
dev
->
last_context
,
ctx
.
handle
);
}
int
DRM
(
newctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_newctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_ctx_t
ctx
;
...
...
@@ -514,7 +514,7 @@ int DRM(newctx)(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
int
DRM
(
rmctx
)
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
int
ffb_driver_rmctx
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
drm_ctx_t
ctx
;
...
...
@@ -538,62 +538,14 @@ int DRM(rmctx)(struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
static
void
ffb_driver_release
(
drm_device_t
*
dev
)
void
ffb_set_context_ioctls
(
void
)
{
ffb_dev_priv_t
*
fpriv
=
(
ffb_dev_priv_t
*
)
dev
->
dev_private
;
int
context
=
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
);
int
idx
;
idx
=
context
-
1
;
if
(
fpriv
&&
context
!=
DRM_KERNEL_CONTEXT
&&
fpriv
->
hw_state
[
idx
]
!=
NULL
)
{
kfree
(
fpriv
->
hw_state
[
idx
]);
fpriv
->
hw_state
[
idx
]
=
NULL
;
}
}
static
int
ffb_driver_presetup
(
drm_device_t
*
dev
)
{
int
ret
;
ret
=
ffb_presetup
(
dev
);
if
(
_ret
!=
0
)
return
ret
;
}
static
void
ffb_driver_pretakedown
(
drm_device_t
*
dev
)
{
if
(
dev
->
dev_private
)
kfree
(
dev
->
dev_private
);
}
static
void
ffb_driver_postcleanup
(
drm_device_t
*
dev
)
{
if
(
ffb_position
!=
NULL
)
kfree
(
ffb_position
);
}
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_ADD_CTX
)].
func
=
ffb_driver_addctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_RM_CTX
)].
func
=
ffb_driver_rmctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_MOD_CTX
)].
func
=
ffb_driver_modctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_CTX
)].
func
=
ffb_driver_getctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_SWITCH_CTX
)].
func
=
ffb_driver_switchctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_NEW_CTX
)].
func
=
ffb_driver_newctx
;
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_RES_CTX
)].
func
=
ffb_driver_resctx
;
static
int
ffb_driver_kernel_context_switch_unlock
(
struct
drm_device
*
dev
)
{
dev
->
lock
.
filp
=
0
;
{
__volatile__
unsigned
int
*
plock
=
&
dev
->
lock
.
hw_lock
->
lock
;
unsigned
int
old
,
new
,
prev
,
ctx
;
ctx
=
lock
.
context
;
do
{
old
=
*
plock
;
new
=
ctx
;
prev
=
cmpxchg
(
plock
,
old
,
new
);
}
while
(
prev
!=
old
);
}
wake_up_interruptible
(
&
dev
->
lock
.
lock_queue
);
}
static
void
ffb_driver_register_fns
(
drm_device_t
*
dev
)
{
DRM
(
fops
).
get_unmapped_area
=
ffb_get_unmapped_area
;
dev
->
fn_tbl
.
release
=
ffb_driver_release
;
dev
->
fn_tbl
.
presetup
=
ffb_driver_presetup
;
dev
->
fn_tbl
.
pretakedown
=
ffb_driver_pretakedown
;
dev
->
fn_tbl
.
postcleanup
=
ffb_driver_postcleanup
;
dev
->
fn_tbl
.
kernel_context_switch
=
ffb_context_switch
;
dev
->
fn_tbl
.
kernel_context_switch_unlock
=
ffb_driver_kernel_context_switch_unlock
;
}
drivers/char/drm/ffb_drv.c
View file @
07b03017
...
...
@@ -26,12 +26,6 @@
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 1
#define DRIVER_COUNT_CARDS() ffb_count_card_instances()
/* For mmap customization */
#define DRIVER_GET_MAP_OFS() (map->offset & 0xffffffff)
#define DRIVER_GET_REG_OFS() ffb_get_reg_offset(dev)
typedef
struct
_ffb_position_t
{
int
node
;
int
root
;
...
...
@@ -146,63 +140,6 @@ static int ffb_init_one(drm_device_t *dev, int prom_node, int parent_node,
return
0
;
}
static
int
__init
ffb_count_siblings
(
int
root
)
{
int
node
,
child
,
count
=
0
;
child
=
prom_getchild
(
root
);
for
(
node
=
prom_searchsiblings
(
child
,
"SUNW,ffb"
);
node
;
node
=
prom_searchsiblings
(
prom_getsibling
(
node
),
"SUNW,ffb"
))
count
++
;
return
count
;
}
static
int
__init
ffb_scan_siblings
(
int
root
,
int
instance
)
{
int
node
,
child
;
child
=
prom_getchild
(
root
);
for
(
node
=
prom_searchsiblings
(
child
,
"SUNW,ffb"
);
node
;
node
=
prom_searchsiblings
(
prom_getsibling
(
node
),
"SUNW,ffb"
))
{
ffb_position
[
instance
].
node
=
node
;
ffb_position
[
instance
].
root
=
root
;
instance
++
;
}
return
instance
;
}
static
int
ffb_presetup
(
drm_device_t
*
);
static
int
__init
ffb_count_card_instances
(
void
)
{
int
root
,
total
,
instance
;
total
=
ffb_count_siblings
(
prom_root_node
);
root
=
prom_getchild
(
prom_root_node
);
for
(
root
=
prom_searchsiblings
(
root
,
"upa"
);
root
;
root
=
prom_searchsiblings
(
prom_getsibling
(
root
),
"upa"
))
total
+=
ffb_count_siblings
(
root
);
ffb_position
=
kmalloc
(
sizeof
(
ffb_position_t
)
*
total
,
GFP_KERNEL
);
/* Actual failure will be caught during ffb_presetup b/c we can't catch
* it easily here.
*/
if
(
!
ffb_position
)
return
-
ENOMEM
;
instance
=
ffb_scan_siblings
(
prom_root_node
,
0
);
root
=
prom_getchild
(
prom_root_node
);
for
(
root
=
prom_searchsiblings
(
root
,
"upa"
);
root
;
root
=
prom_searchsiblings
(
prom_getsibling
(
root
),
"upa"
))
instance
=
ffb_scan_siblings
(
root
,
instance
);
return
total
;
}
static
drm_map_t
*
ffb_find_map
(
struct
file
*
filp
,
unsigned
long
off
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
...
...
@@ -273,18 +210,9 @@ unsigned long ffb_get_unmapped_area(struct file *filp,
return
addr
;
}
static
unsigned
long
ffb_get_reg_offset
(
drm_device_t
*
dev
)
{
ffb_dev_priv_t
*
ffb_priv
=
(
ffb_dev_priv_t
*
)
dev
->
dev_private
;
if
(
ffb_priv
)
return
ffb_priv
->
card_phys_base
;
return
0
;
}
#include "drm_auth.h"
#include "drm_bufs.h"
#include "drm_context.h"
#include "drm_dma.h"
#include "drm_drawable.h"
#include "drm_drv.h"
...
...
@@ -329,8 +257,83 @@ static int ffb_presetup(drm_device_t *dev)
#include "drm_fops.h"
#include "drm_init.h"
#include "drm_ioctl.h"
#include "drm_irq.h"
#include "drm_lock.h"
#include "drm_memory.h"
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_stub.h"
#include "drm_scatter.h"
static
void
ffb_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
ffb_dev_priv_t
*
fpriv
=
(
ffb_dev_priv_t
*
)
dev
->
dev_private
;
int
context
=
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
);
int
idx
;
idx
=
context
-
1
;
if
(
fpriv
&&
context
!=
DRM_KERNEL_CONTEXT
&&
fpriv
->
hw_state
[
idx
]
!=
NULL
)
{
kfree
(
fpriv
->
hw_state
[
idx
]);
fpriv
->
hw_state
[
idx
]
=
NULL
;
}
}
static
void
ffb_driver_pretakedown
(
drm_device_t
*
dev
)
{
if
(
dev
->
dev_private
)
kfree
(
dev
->
dev_private
);
}
static
int
ffb_driver_postcleanup
(
drm_device_t
*
dev
)
{
if
(
ffb_position
!=
NULL
)
kfree
(
ffb_position
);
return
0
;
}
static
void
ffb_driver_kernel_context_switch_unlock
(
struct
drm_device
*
dev
,
drm_lock_t
*
lock
)
{
dev
->
lock
.
filp
=
0
;
{
__volatile__
unsigned
int
*
plock
=
&
dev
->
lock
.
hw_lock
->
lock
;
unsigned
int
old
,
new
,
prev
,
ctx
;
ctx
=
lock
->
context
;
do
{
old
=
*
plock
;
new
=
ctx
;
prev
=
cmpxchg
(
plock
,
old
,
new
);
}
while
(
prev
!=
old
);
}
wake_up_interruptible
(
&
dev
->
lock
.
lock_queue
);
}
static
unsigned
long
ffb_driver_get_map_ofs
(
drm_map_t
*
map
)
{
return
(
map
->
offset
&
0xffffffff
);
}
static
unsigned
long
ffb_driver_get_reg_ofs
(
drm_device_t
*
dev
)
{
ffb_dev_priv_t
*
ffb_priv
=
(
ffb_dev_priv_t
*
)
dev
->
dev_private
;
if
(
ffb_priv
)
return
ffb_priv
->
card_phys_base
;
return
0
;
}
void
ffb_driver_register_fns
(
drm_device_t
*
dev
)
{
ffb_set_context_ioctls
();
DRM
(
fops
).
get_unmapped_area
=
ffb_get_unmapped_area
;
dev
->
fn_tbl
.
release
=
ffb_driver_release
;
dev
->
fn_tbl
.
presetup
=
ffb_presetup
;
dev
->
fn_tbl
.
pretakedown
=
ffb_driver_pretakedown
;
dev
->
fn_tbl
.
postcleanup
=
ffb_driver_postcleanup
;
dev
->
fn_tbl
.
kernel_context_switch
=
ffb_context_switch
;
dev
->
fn_tbl
.
kernel_context_switch_unlock
=
ffb_driver_kernel_context_switch_unlock
;
dev
->
fn_tbl
.
get_map_ofs
=
ffb_driver_get_map_ofs
;
dev
->
fn_tbl
.
get_reg_ofs
=
ffb_driver_get_reg_ofs
;
}
drivers/char/drm/ffb_drv.h
View file @
07b03017
...
...
@@ -281,3 +281,6 @@ extern unsigned long ffb_get_unmapped_area(struct file *filp,
unsigned
long
len
,
unsigned
long
pgoff
,
unsigned
long
flags
);
extern
void
ffb_set_context_ioctls
(
void
);
extern
drm_ioctl_desc_t
DRM
(
ioctls
)[];
drivers/char/drm/gamma.h
View file @
07b03017
...
...
@@ -69,15 +69,9 @@
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_OLD_DMA 1
#define __HAVE_MULTIPLE_DMA_QUEUES 1
#define __HAVE_DMA_WAITQUEUE 1
/* removed from DRM HAVE_DMA_FREELIST & HAVE_DMA_SCHEDULE */
#define __HAVE_IRQ 1
#define __HAVE_IRQ_BH 1
#endif
/* __GAMMA_H__ */
drivers/char/drm/gamma_dma.c
View file @
07b03017
...
...
@@ -116,7 +116,7 @@ static inline int gamma_dma_is_ready(drm_device_t *dev)
return
(
!
GAMMA_READ
(
GAMMA_DMACOUNT
));
}
irqreturn_t
gamma_irq_handler
(
DRM_IRQ_ARGS
)
irqreturn_t
gamma_
driver_
irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
...
...
@@ -689,13 +689,13 @@ int gamma_do_cleanup_dma( drm_device_t *dev )
{
DRM_DEBUG
(
"%s
\n
"
,
__FUNCTION__
);
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
))
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
if
(
dev
->
dev_private
)
{
...
...
@@ -866,7 +866,7 @@ int gamma_setsareactx(struct inode *inode, struct file *filp,
return
0
;
}
void
DRM
(
driver_irq_preinstall
)
(
drm_device_t
*
dev
)
{
void
gamma_driver_irq_preinstall
(
drm_device_t
*
dev
)
{
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
...
...
@@ -877,7 +877,7 @@ void DRM(driver_irq_preinstall)( drm_device_t *dev ) {
GAMMA_WRITE
(
GAMMA_GDMACONTROL
,
0x00000000
);
}
void
DRM
(
driver_irq_postinstall
)
(
drm_device_t
*
dev
)
{
void
gamma_driver_irq_postinstall
(
drm_device_t
*
dev
)
{
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
...
...
@@ -889,7 +889,7 @@ void DRM(driver_irq_postinstall)( drm_device_t *dev ) {
GAMMA_WRITE
(
GAMMA_GDELAYTIMER
,
0x00039090
);
}
void
DRM
(
driver_irq_uninstall
)
(
drm_device_t
*
dev
)
{
void
gamma_driver_irq_uninstall
(
drm_device_t
*
dev
)
{
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
if
(
!
dev_priv
)
...
...
@@ -934,7 +934,7 @@ static int gamma_driver_dma_quiescent(drm_device_t *dev)
void
gamma_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
|
DRIVER_HAVE_DMA
|
DRIVER_HAVE_IRQ
;
DRM
(
fops
).
read
=
gamma_fops_read
;
DRM
(
fops
).
poll
=
gamma_fops_poll
;
dev
->
fn_tbl
.
preinit
=
gamma_driver_preinit
;
...
...
drivers/char/drm/i810.h
View file @
07b03017
...
...
@@ -80,16 +80,4 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_RECLAIM 1
/* Don't need an irq any more. The template code will make sure that
* a noop stub is generated for compatibility.
*/
/* XXX: Add vblank support? */
#define __HAVE_IRQ 0
#endif
drivers/char/drm/i810_dma.c
View file @
07b03017
...
...
@@ -232,13 +232,12 @@ int i810_dma_cleanup(drm_device_t *dev)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
drm_core_check_feature
(
dev
,
DRIVER_HAVE_IRQ
)
&&
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
if
(
dev
->
dev_private
)
{
int
i
;
...
...
@@ -1407,10 +1406,11 @@ static int i810_driver_dma_quiescent(drm_device_t *dev)
void
i810_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_HAVE_DMA
|
DRIVER_DMA_QUEUE
;
dev
->
dev_priv_size
=
sizeof
(
drm_i810_buf_priv_t
);
dev
->
fn_tbl
.
pretakedown
=
i810_driver_pretakedown
;
dev
->
fn_tbl
.
release
=
i810_driver_release
;
dev
->
fn_tbl
.
dma_quiescent
=
i810_driver_dma_quiescent
;
dev
->
fn_tbl
.
reclaim_buffers
=
i810_reclaim_buffers
;
}
drivers/char/drm/i810_drv.c
View file @
07b03017
...
...
@@ -48,6 +48,7 @@
#include "drm_fops.h"
#include "drm_init.h"
#include "drm_ioctl.h"
#include "drm_irq.h"
#include "drm_lock.h"
#include "drm_memory.h"
#include "drm_proc.h"
...
...
drivers/char/drm/i830.h
View file @
07b03017
...
...
@@ -79,12 +79,6 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_RECLAIM 1
/* Driver will work either way: IRQ's save cpu time when waiting for
* the card, but are subject to subtle interactions between bios,
* hardware and the driver.
...
...
@@ -92,11 +86,4 @@
/* XXX: Add vblank support? */
#define USE_IRQS 0
#if USE_IRQS
#define __HAVE_IRQ 1
#define __HAVE_SHARED_IRQ 1
#else
#define __HAVE_IRQ 0
#endif
#endif
drivers/char/drm/i830_dma.c
View file @
07b03017
...
...
@@ -233,13 +233,11 @@ int i830_dma_cleanup(drm_device_t *dev)
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
dev
->
dev_private
)
{
int
i
;
...
...
@@ -1602,10 +1600,20 @@ static int i830_driver_dma_quiescent(drm_device_t *dev)
void
i830_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_HAVE_DMA
|
DRIVER_DMA_QUEUE
;
#if USE_IRQS
dev
->
driver_features
|=
DRIVER_HAVE_IRQ
|
DRIVER_SHARED_IRQ
;
#endif
dev
->
dev_priv_size
=
sizeof
(
drm_i830_buf_priv_t
);
dev
->
fn_tbl
.
pretakedown
=
i830_driver_pretakedown
;
dev
->
fn_tbl
.
release
=
i830_driver_release
;
dev
->
fn_tbl
.
dma_quiescent
=
i830_driver_dma_quiescent
;
dev
->
fn_tbl
.
reclaim_buffers
=
i830_reclaim_buffers
;
#if USE_IRQS
dev
->
fn_tbl
.
irq_preinstall
=
i830_driver_irq_preinstall
;
dev
->
fn_tbl
.
irq_postinstall
=
i830_driver_irq_postinstall
;
dev
->
fn_tbl
.
irq_uninstall
=
i830_driver_irq_uninstall
;
dev
->
fn_tbl
.
irq_handler
=
i830_driver_irq_handler
;
#endif
}
drivers/char/drm/i830_drv.h
View file @
07b03017
...
...
@@ -136,6 +136,10 @@ extern int i830_irq_wait( struct inode *inode, struct file *filp,
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
);
extern
void
i830_driver_irq_postinstall
(
drm_device_t
*
dev
);
extern
void
i830_driver_irq_uninstall
(
drm_device_t
*
dev
);
#define I830_BASE(reg) ((unsigned long) \
dev_priv->mmio_map->handle)
...
...
drivers/char/drm/i830_irq.c
View file @
07b03017
...
...
@@ -35,7 +35,7 @@
#include <linux/delay.h>
irqreturn_t
DRM
(
irq_handler
)
(
DRM_IRQ_ARGS
)
irqreturn_t
i830_driver_irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
...
...
@@ -178,7 +178,7 @@ int i830_irq_wait( struct inode *inode, struct file *filp, unsigned int cmd,
/* drm_dma.h hooks
*/
void
DRM
(
driver_irq_preinstall
)
(
drm_device_t
*
dev
)
{
void
i830_driver_irq_preinstall
(
drm_device_t
*
dev
)
{
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
...
...
@@ -190,14 +190,14 @@ void DRM(driver_irq_preinstall)( drm_device_t *dev ) {
init_waitqueue_head
(
&
dev_priv
->
irq_queue
);
}
void
DRM
(
driver_irq_postinstall
)
(
drm_device_t
*
dev
)
{
void
i830_driver_irq_postinstall
(
drm_device_t
*
dev
)
{
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
I830_WRITE16
(
I830REG_INT_ENABLE_R
,
0x2
);
}
void
DRM
(
driver_irq_uninstall
)
(
drm_device_t
*
dev
)
{
void
i830_driver_irq_uninstall
(
drm_device_t
*
dev
)
{
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
if
(
!
dev_priv
)
...
...
drivers/char/drm/i915.h
View file @
07b03017
...
...
@@ -54,10 +54,6 @@
/* We use our own dma mechanisms, not the drm template code. However,
* the shared IRQ code is useful to us:
*/
#define __HAVE_DMA 0
#define __HAVE_IRQ 1
#define __HAVE_SHARED_IRQ 1
#define __HAVE_PM 1
#endif
drivers/char/drm/i915_dma.c
View file @
07b03017
...
...
@@ -732,7 +732,11 @@ static void i915_driver_prerelease(drm_device_t *dev, DRMFILE filp)
void
i915_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_HAVE_IRQ
|
DRIVER_IRQ_SHARED
;
dev
->
fn_tbl
.
pretakedown
=
i915_driver_pretakedown
;
dev
->
fn_tbl
.
prerelease
=
i915_driver_prerelease
;
dev
->
fn_tbl
.
irq_preinstall
=
i915_driver_irq_preinstall
;
dev
->
fn_tbl
.
irq_postinstall
=
i915_driver_irq_postinstall
;
dev
->
fn_tbl
.
irq_uninstall
=
i915_driver_irq_uninstall
;
dev
->
fn_tbl
.
irq_handler
=
i915_driver_irq_handler
;
}
drivers/char/drm/i915_drv.c
View file @
07b03017
...
...
@@ -19,6 +19,7 @@
#include "drm_bufs.h"
#include "drm_context.h"
/* is this needed? */
#include "drm_drawable.h"
/* is this needed? */
#include "drm_dma.h"
#include "drm_drv.h"
#include "drm_fops.h"
#include "drm_init.h"
...
...
drivers/char/drm/i915_drv.h
View file @
07b03017
...
...
@@ -73,6 +73,11 @@ extern int i915_irq_wait(DRM_IOCTL_ARGS);
extern
int
i915_wait_irq
(
drm_device_t
*
dev
,
int
irq_nr
);
extern
int
i915_emit_irq
(
drm_device_t
*
dev
);
extern
irqreturn_t
i915_driver_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
i915_driver_irq_preinstall
(
drm_device_t
*
dev
);
extern
void
i915_driver_irq_postinstall
(
drm_device_t
*
dev
);
extern
void
i915_driver_irq_uninstall
(
drm_device_t
*
dev
);
/* i915_mem.c */
extern
int
i915_mem_alloc
(
DRM_IOCTL_ARGS
);
extern
int
i915_mem_free
(
DRM_IOCTL_ARGS
);
...
...
drivers/char/drm/i915_irq.c
View file @
07b03017
...
...
@@ -17,7 +17,8 @@
#define MAX_NOPID ((u32)~0)
#define READ_BREADCRUMB(dev_priv) (((u32*)(dev_priv->hw_status_page))[5])
irqreturn_t
DRM
(
irq_handler
)
(
DRM_IRQ_ARGS
)
{
irqreturn_t
i915_driver_irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
u16
temp
;
...
...
@@ -135,7 +136,8 @@ int i915_irq_wait(DRM_IOCTL_ARGS)
/* drm_dma.h hooks
*/
void
DRM
(
driver_irq_preinstall
)
(
drm_device_t
*
dev
)
{
void
i915_driver_irq_preinstall
(
drm_device_t
*
dev
)
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
I915_WRITE16
(
I915REG_HWSTAM
,
0xfffe
);
...
...
@@ -143,14 +145,16 @@ void DRM(driver_irq_preinstall) (drm_device_t * dev) {
I915_WRITE16
(
I915REG_INT_ENABLE_R
,
0x0
);
}
void
DRM
(
driver_irq_postinstall
)
(
drm_device_t
*
dev
)
{
void
i915_driver_irq_postinstall
(
drm_device_t
*
dev
)
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
I915_WRITE16
(
I915REG_INT_ENABLE_R
,
USER_INT_FLAG
);
DRM_INIT_WAITQUEUE
(
&
dev_priv
->
irq_queue
);
}
void
DRM
(
driver_irq_uninstall
)
(
drm_device_t
*
dev
)
{
void
i915_driver_irq_uninstall
(
drm_device_t
*
dev
)
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
if
(
!
dev_priv
)
return
;
...
...
drivers/char/drm/mga.h
View file @
07b03017
...
...
@@ -65,11 +65,4 @@
#define __HAVE_COUNTER7 _DRM_STAT_PRIMARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#endif
drivers/char/drm/mga_dma.c
View file @
07b03017
...
...
@@ -630,13 +630,11 @@ int mga_do_cleanup_dma( drm_device_t *dev )
{
DRM_DEBUG
(
"
\n
"
);
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
dev
->
dev_private
)
{
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
@@ -813,7 +811,12 @@ static int mga_driver_dma_quiescent(drm_device_t *dev)
void
mga_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_REQUIRE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_HAVE_DMA
|
DRIVER_HAVE_IRQ
|
DRIVER_IRQ_SHARED
|
DRIVER_IRQ_VBL
;
dev
->
fn_tbl
.
pretakedown
=
mga_driver_pretakedown
;
dev
->
fn_tbl
.
dma_quiescent
=
mga_driver_dma_quiescent
;
dev
->
fn_tbl
.
vblank_wait
=
mga_driver_vblank_wait
;
dev
->
fn_tbl
.
irq_preinstall
=
mga_driver_irq_preinstall
;
dev
->
fn_tbl
.
irq_postinstall
=
mga_driver_irq_postinstall
;
dev
->
fn_tbl
.
irq_uninstall
=
mga_driver_irq_uninstall
;
dev
->
fn_tbl
.
irq_handler
=
mga_driver_irq_handler
;
}
drivers/char/drm/mga_drv.h
View file @
07b03017
...
...
@@ -130,6 +130,12 @@ extern int mga_getparam( DRM_IOCTL_ARGS );
extern
int
mga_warp_install_microcode
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_warp_init
(
drm_mga_private_t
*
dev_priv
);
extern
int
mga_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
);
extern
irqreturn_t
mga_driver_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
mga_driver_irq_preinstall
(
drm_device_t
*
dev
);
extern
void
mga_driver_irq_postinstall
(
drm_device_t
*
dev
);
extern
void
mga_driver_irq_uninstall
(
drm_device_t
*
dev
);
#define mga_flush_write_combine() DRM_WRITEMEMORYBARRIER()
#if defined(__linux__) && defined(__alpha__)
...
...
drivers/char/drm/mga_irq.c
View file @
07b03017
...
...
@@ -36,7 +36,7 @@
#include "mga_drm.h"
#include "mga_drv.h"
irqreturn_t
mga_irq_handler
(
DRM_IRQ_ARGS
)
irqreturn_t
mga_
driver_
irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_mga_private_t
*
dev_priv
=
...
...
@@ -56,7 +56,7 @@ irqreturn_t mga_irq_handler( DRM_IRQ_ARGS )
return
IRQ_NONE
;
}
int
mga_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
int
mga_
driver_
vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
{
unsigned
int
cur_vblank
;
int
ret
=
0
;
...
...
drivers/char/drm/r128.h
View file @
07b03017
...
...
@@ -72,11 +72,4 @@
[DRM_IOCTL_NR(DRM_IOCTL_R128_INDIRECT)] = { r128_cce_indirect, 1, 1 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_GETPARAM)] = { r128_getparam, 1, 0 },
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#endif
drivers/char/drm/r128_cce.c
View file @
07b03017
...
...
@@ -586,13 +586,11 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
int
r128_do_cleanup_cce
(
drm_device_t
*
dev
)
{
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
dev
->
dev_private
)
{
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
drivers/char/drm/r128_drv.h
View file @
07b03017
...
...
@@ -142,6 +142,12 @@ 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
);
extern
irqreturn_t
r128_driver_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
r128_driver_irq_preinstall
(
drm_device_t
*
dev
);
extern
void
r128_driver_irq_postinstall
(
drm_device_t
*
dev
);
extern
void
r128_driver_irq_uninstall
(
drm_device_t
*
dev
);
/* Register definitions, register access macros and drmAddMap constants
* for Rage 128 kernel driver.
...
...
drivers/char/drm/r128_irq.c
View file @
07b03017
...
...
@@ -36,7 +36,7 @@
#include "r128_drm.h"
#include "r128_drv.h"
irqreturn_t
r128_irq_handler
(
DRM_IRQ_ARGS
)
irqreturn_t
r128_
driver_
irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_r128_private_t
*
dev_priv
=
...
...
@@ -56,7 +56,7 @@ irqreturn_t r128_irq_handler( DRM_IRQ_ARGS )
return
IRQ_NONE
;
}
int
DRM
(
vblank_wait
)
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
int
r128_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
{
unsigned
int
cur_vblank
;
int
ret
=
0
;
...
...
drivers/char/drm/r128_state.c
View file @
07b03017
...
...
@@ -1712,8 +1712,13 @@ static void r128_driver_pretakedown(drm_device_t *dev)
void
r128_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
|
DRIVER_SG
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
|
DRIVER_SG
|
DRIVER_HAVE_DMA
|
DRIVER_HAVE_IRQ
|
DRIVER_IRQ_SHARED
|
DRIVER_IRQ_VBL
;
dev
->
dev_priv_size
=
sizeof
(
drm_r128_buf_priv_t
);
dev
->
fn_tbl
.
prerelease
=
r128_driver_prerelease
;
dev
->
fn_tbl
.
pretakedown
=
r128_driver_pretakedown
;
dev
->
fn_tbl
.
vblank_wait
=
r128_driver_vblank_wait
;
dev
->
fn_tbl
.
irq_preinstall
=
r128_driver_irq_preinstall
;
dev
->
fn_tbl
.
irq_postinstall
=
r128_driver_irq_postinstall
;
dev
->
fn_tbl
.
irq_uninstall
=
r128_driver_irq_uninstall
;
dev
->
fn_tbl
.
irq_handler
=
r128_driver_irq_handler
;
}
drivers/char/drm/radeon.h
View file @
07b03017
...
...
@@ -109,11 +109,4 @@
[DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_WAIT)] = { radeon_irq_wait, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_RADEON_SETPARAM)] = { radeon_cp_setparam, 1, 0 }, \
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#endif
drivers/char/drm/radeon_cp.c
View file @
07b03017
...
...
@@ -1275,13 +1275,11 @@ int radeon_do_cleanup_cp( drm_device_t *dev )
{
DRM_DEBUG
(
"
\n
"
);
#if __HAVE_IRQ
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
if
(
dev
->
dev_private
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
...
...
drivers/char/drm/radeon_drv.h
View file @
07b03017
...
...
@@ -205,6 +205,11 @@ 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
);
extern
void
radeon_driver_irq_preinstall
(
drm_device_t
*
dev
);
extern
void
radeon_driver_irq_postinstall
(
drm_device_t
*
dev
);
extern
void
radeon_driver_irq_uninstall
(
drm_device_t
*
dev
);
/* Flags for stats.boxes
*/
...
...
drivers/char/drm/radeon_irq.c
View file @
07b03017
...
...
@@ -54,7 +54,7 @@
* tied to dma at all, this is just a hangover from dri prehistory.
*/
irqreturn_t
DRM
(
irq_handler
)
(
DRM_IRQ_ARGS
)
irqreturn_t
radeon_driver_irq_handler
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_radeon_private_t
*
dev_priv
=
...
...
@@ -141,7 +141,7 @@ int radeon_emit_and_wait_irq(drm_device_t *dev)
}
int
DRM
(
vblank_wait
)
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
int
radeon_driver_vblank_wait
(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
{
drm_radeon_private_t
*
dev_priv
=
(
drm_radeon_private_t
*
)
dev
->
dev_private
;
...
...
drivers/char/drm/radeon_state.c
View file @
07b03017
...
...
@@ -2603,10 +2603,15 @@ static void radeon_driver_free_filp_priv(drm_device_t *dev, drm_file_t *filp_pri
void
radeon_driver_register_fns
(
struct
drm_device
*
dev
)
{
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
|
DRIVER_SG
;
dev
->
driver_features
=
DRIVER_USE_AGP
|
DRIVER_USE_MTRR
|
DRIVER_PCI_DMA
|
DRIVER_SG
|
DRIVER_HAVE_IRQ
|
DRIVER_HAVE_DMA
|
DRIVER_IRQ_SHARED
|
DRIVER_IRQ_VBL
;
dev
->
dev_priv_size
=
sizeof
(
drm_radeon_buf_priv_t
);
dev
->
fn_tbl
.
prerelease
=
radeon_driver_prerelease
;
dev
->
fn_tbl
.
pretakedown
=
radeon_driver_pretakedown
;
dev
->
fn_tbl
.
open_helper
=
radeon_driver_open_helper
;
dev
->
fn_tbl
.
free_filp_priv
=
radeon_driver_free_filp_priv
;
dev
->
fn_tbl
.
vblank_wait
=
radeon_driver_vblank_wait
;
dev
->
fn_tbl
.
irq_preinstall
=
radeon_driver_irq_preinstall
;
dev
->
fn_tbl
.
irq_postinstall
=
radeon_driver_irq_postinstall
;
dev
->
fn_tbl
.
irq_uninstall
=
radeon_driver_irq_uninstall
;
dev
->
fn_tbl
.
irq_handler
=
radeon_driver_irq_handler
;
}
drivers/char/drm/sis_drv.c
View file @
07b03017
...
...
@@ -40,6 +40,7 @@
#include "drm_drv.h"
#include "drm_fops.h"
#include "drm_init.h"
#include "drm_irq.h"
#include "drm_ioctl.h"
#include "drm_lock.h"
#include "drm_memory.h"
...
...
drivers/char/drm/tdfx_drv.c
View file @
07b03017
...
...
@@ -45,6 +45,7 @@
#include "drm_fops.h"
#include "drm_init.h"
#include "drm_ioctl.h"
#include "drm_irq.h"
#include "drm_lock.h"
#include "drm_memory.h"
#include "drm_proc.h"
...
...
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