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
eaa8fe26
Commit
eaa8fe26
authored
Sep 02, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://drm.bkbits.net/drm-fntbl
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
06a5ce0e
1b9b2569
Changes
39
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
546 additions
and
663 deletions
+546
-663
drivers/char/drm/Kconfig
drivers/char/drm/Kconfig
+1
-1
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+61
-54
drivers/char/drm/drm_bufs.h
drivers/char/drm/drm_bufs.h
+7
-41
drivers/char/drm/drm_context.h
drivers/char/drm/drm_context.h
+8
-6
drivers/char/drm/drm_dma.h
drivers/char/drm/drm_dma.h
+0
-13
drivers/char/drm/drm_drv.h
drivers/char/drm/drm_drv.h
+105
-193
drivers/char/drm/drm_fops.h
drivers/char/drm/drm_fops.h
+2
-5
drivers/char/drm/drm_memory.h
drivers/char/drm/drm_memory.h
+1
-0
drivers/char/drm/ffb.h
drivers/char/drm/ffb.h
+0
-4
drivers/char/drm/ffb_context.c
drivers/char/drm/ffb_context.c
+60
-0
drivers/char/drm/ffb_drv.c
drivers/char/drm/ffb_drv.c
+5
-51
drivers/char/drm/ffb_drv.h
drivers/char/drm/ffb_drv.h
+7
-0
drivers/char/drm/gamma.h
drivers/char/drm/gamma.h
+1
-27
drivers/char/drm/gamma_context.h
drivers/char/drm/gamma_context.h
+2
-2
drivers/char/drm/gamma_dma.c
drivers/char/drm/gamma_dma.c
+51
-12
drivers/char/drm/gamma_drv.h
drivers/char/drm/gamma_drv.h
+4
-1
drivers/char/drm/i810.h
drivers/char/drm/i810.h
+0
-25
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_dma.c
+28
-3
drivers/char/drm/i810_drv.h
drivers/char/drm/i810_drv.h
+0
-1
drivers/char/drm/i830.h
drivers/char/drm/i830.h
+0
-27
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_dma.c
+29
-3
drivers/char/drm/i830_drv.h
drivers/char/drm/i830_drv.h
+0
-1
drivers/char/drm/i915.h
drivers/char/drm/i915.h
+0
-21
drivers/char/drm/i915_dma.c
drivers/char/drm/i915_dma.c
+26
-3
drivers/char/drm/mga.h
drivers/char/drm/mga.h
+0
-19
drivers/char/drm/mga_dma.c
drivers/char/drm/mga_dma.c
+31
-15
drivers/char/drm/r128.h
drivers/char/drm/r128.h
+0
-31
drivers/char/drm/r128_cce.c
drivers/char/drm/r128_cce.c
+15
-16
drivers/char/drm/r128_drv.h
drivers/char/drm/r128_drv.h
+0
-1
drivers/char/drm/r128_state.c
drivers/char/drm/r128_state.c
+26
-4
drivers/char/drm/radeon.h
drivers/char/drm/radeon.h
+0
-45
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+19
-19
drivers/char/drm/radeon_drv.h
drivers/char/drm/radeon_drv.h
+0
-1
drivers/char/drm/radeon_state.c
drivers/char/drm/radeon_state.c
+43
-3
drivers/char/drm/sis.h
drivers/char/drm/sis.h
+0
-11
drivers/char/drm/sis_drv.c
drivers/char/drm/sis_drv.c
+1
-0
drivers/char/drm/sis_drv.h
drivers/char/drm/sis_drv.h
+0
-2
drivers/char/drm/sis_mm.c
drivers/char/drm/sis_mm.c
+8
-2
drivers/char/drm/tdfx_drv.c
drivers/char/drm/tdfx_drv.c
+5
-0
No files found.
drivers/char/drm/Kconfig
View file @
eaa8fe26
...
...
@@ -24,7 +24,7 @@ config DRM_TDFX
config DRM_GAMMA
tristate "3dlabs GMX 2000"
depends on DRM
depends on DRM
&& BROKEN
help
This is the old gamma driver, please tell me if it might actually
work.
...
...
drivers/char/drm/drmP.h
View file @
eaa8fe26
...
...
@@ -95,12 +95,6 @@
#ifndef __HAVE_IRQ
#define __HAVE_IRQ 0
#endif
#ifndef __HAVE_DMA_WAITLIST
#define __HAVE_DMA_WAITLIST 0
#endif
#ifndef __HAVE_DMA_FREELIST
#define __HAVE_DMA_FREELIST 0
#endif
#define __REALLY_HAVE_AGP (__HAVE_AGP && (defined(CONFIG_AGP) || \
defined(CONFIG_AGP_MODULE)))
...
...
@@ -265,54 +259,6 @@ static inline struct page * vmalloc_to_page(void * vmalloc_addr)
/*@}*/
/***********************************************************************/
/** \name Mapping helper macros */
/*@{*/
#define DRM_IOREMAP(map, dev) \
(map)->handle = DRM(ioremap)( (map)->offset, (map)->size, (dev) )
#define DRM_IOREMAP_NOCACHE(map, dev) \
(map)->handle = DRM(ioremap_nocache)((map)->offset, (map)->size, (dev))
#define DRM_IOREMAPFREE(map, dev) \
do { \
if ( (map)->handle && (map)->size ) \
DRM(ioremapfree)( (map)->handle, (map)->size, (dev) ); \
} while (0)
/**
* Find mapping.
*
* \param _map matching mapping if found, untouched otherwise.
* \param _o offset.
*
* Expects the existence of a local variable named \p dev pointing to the
* drm_device structure.
*/
#define DRM_FIND_MAP(_map, _o) \
do { \
struct list_head *_list; \
list_for_each( _list, &dev->maplist->head ) { \
drm_map_list_t *_entry = list_entry( _list, drm_map_list_t, head ); \
if ( _entry->map && \
_entry->map->offset == (_o) ) { \
(_map) = _entry->map; \
break; \
} \
} \
} while(0)
/**
* Drop mapping.
*
* \sa #DRM_FIND_MAP.
*/
#define DRM_DROP_MAP(_map)
/*@}*/
/***********************************************************************/
/** \name Internal types and structures */
/*@{*/
...
...
@@ -610,6 +556,28 @@ typedef struct drm_vbl_sig {
#endif
/**
* DRM device functions structure
*/
struct
drm_device
;
struct
drm_driver_fn
{
int
(
*
preinit
)(
struct
drm_device
*
);
int
(
*
postinit
)(
struct
drm_device
*
);
void
(
*
prerelease
)(
struct
drm_device
*
,
struct
file
*
filp
);
void
(
*
pretakedown
)(
struct
drm_device
*
);
int
(
*
postcleanup
)(
struct
drm_device
*
);
int
(
*
presetup
)(
struct
drm_device
*
);
int
(
*
postsetup
)(
struct
drm_device
*
);
void
(
*
open_helper
)(
struct
drm_device
*
,
drm_file_t
*
);
void
(
*
release
)(
struct
drm_device
*
,
struct
file
*
filp
);
void
(
*
dma_ready
)(
struct
drm_device
*
);
int
(
*
dma_quiescent
)(
struct
drm_device
*
);
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
);
};
/**
* DRM device structure.
*/
...
...
@@ -738,8 +706,13 @@ typedef struct drm_device {
void
*
dev_private
;
/**< device private data */
drm_sigdata_t
sigdata
;
/**< For block_all_signals */
sigset_t
sigmask
;
struct
drm_driver_fn
fn_tbl
;
drm_local_map_t
*
agp_buffer_map
;
int
dev_priv_size
;
}
drm_device_t
;
extern
void
DRM
(
driver_register_fns
)(
struct
drm_device
*
dev
);
/******************************************************************/
/** \name Internal function definitions */
...
...
@@ -986,6 +959,40 @@ extern int DRM(ati_pcigart_cleanup)(drm_device_t *dev,
unsigned
long
addr
,
dma_addr_t
bus_addr
);
/* Inline replacements for DRM_IOREMAP macros */
static
__inline__
void
drm_core_ioremap
(
struct
drm_map
*
map
,
struct
drm_device
*
dev
)
{
map
->
handle
=
DRM
(
ioremap
)(
map
->
offset
,
map
->
size
,
dev
);
}
static
__inline__
void
drm_core_ioremap_nocache
(
struct
drm_map
*
map
,
struct
drm_device
*
dev
)
{
map
->
handle
=
DRM
(
ioremap_nocache
)(
map
->
offset
,
map
->
size
,
dev
);
}
static
__inline__
void
drm_core_ioremapfree
(
struct
drm_map
*
map
,
struct
drm_device
*
dev
)
{
if
(
map
->
handle
&&
map
->
size
)
DRM
(
ioremapfree
)(
map
->
handle
,
map
->
size
,
dev
);
}
static
__inline__
struct
drm_map
*
drm_core_findmap
(
struct
drm_device
*
dev
,
unsigned
long
offset
)
{
struct
list_head
*
_list
;
list_for_each
(
_list
,
&
dev
->
maplist
->
head
)
{
drm_map_list_t
*
_entry
=
list_entry
(
_list
,
drm_map_list_t
,
head
);
if
(
_entry
->
map
&&
_entry
->
map
->
offset
==
offset
)
{
return
_entry
->
map
;
}
}
return
NULL
;
}
static
__inline__
void
drm_core_dropmap
(
struct
drm_map
*
map
)
{
}
/*@}*/
#endif
/* __KERNEL__ */
...
...
drivers/char/drm/drm_bufs.h
View file @
eaa8fe26
...
...
@@ -44,18 +44,6 @@
#define __HAVE_SG 0
#endif
#ifndef DRIVER_BUF_PRIV_T
#define DRIVER_BUF_PRIV_T u32
#endif
#ifndef DRIVER_AGP_BUFFERS_MAP
#if __HAVE_AGP && __HAVE_DMA
#error "You must define DRIVER_AGP_BUFFERS_MAP()"
#else
#define DRIVER_AGP_BUFFERS_MAP( dev ) NULL
#endif
#endif
/**
* Compute size order. Returns the exponent of the smaller power of two which
* is greater or equal to given number.
...
...
@@ -348,10 +336,6 @@ static void DRM(cleanup_buf_error)(drm_buf_entry_t *entry)
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_destroy
)(
&
entry
->
freelist
);
#endif
entry
->
buf_count
=
0
;
}
}
...
...
@@ -473,8 +457,8 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
buf
->
dev_priv_size
,
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
...
...
@@ -520,12 +504,6 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
DRM_DEBUG
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
buf_count
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_create
)(
&
entry
->
freelist
,
entry
->
buf_count
);
for
(
i
=
0
;
i
<
entry
->
buf_count
;
i
++
)
{
DRM
(
freelist_put
)(
dev
,
&
entry
->
freelist
,
&
entry
->
buflist
[
i
]
);
}
#endif
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
...
...
@@ -698,8 +676,8 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
dev
->
dev_priv_size
,
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
...
...
@@ -759,12 +737,6 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
dma
->
page_count
+=
entry
->
seg_count
<<
page_order
;
dma
->
byte_count
+=
PAGE_SIZE
*
(
entry
->
seg_count
<<
page_order
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_create
)(
&
entry
->
freelist
,
entry
->
buf_count
);
for
(
i
=
0
;
i
<
entry
->
buf_count
;
i
++
)
{
DRM
(
freelist_put
)(
dev
,
&
entry
->
freelist
,
&
entry
->
buflist
[
i
]
);
}
#endif
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
...
...
@@ -882,8 +854,8 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
dev
->
dev_priv_size
,
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
...
...
@@ -930,12 +902,6 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
DRM_DEBUG
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
buf_count
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_create
)(
&
entry
->
freelist
,
entry
->
buf_count
);
for
(
i
=
0
;
i
<
entry
->
buf_count
;
i
++
)
{
DRM
(
freelist_put
)(
dev
,
&
entry
->
freelist
,
&
entry
->
buflist
[
i
]
);
}
#endif
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
...
...
@@ -1221,7 +1187,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
if
(
request
.
count
>=
dma
->
buf_count
)
{
if
(
(
__HAVE_AGP
&&
(
dma
->
flags
&
_DRM_DMA_USE_AGP
))
||
(
__HAVE_SG
&&
(
dma
->
flags
&
_DRM_DMA_USE_SG
))
)
{
drm_map_t
*
map
=
DRIVER_AGP_BUFFERS_MAP
(
dev
)
;
drm_map_t
*
map
=
dev
->
agp_buffer_map
;
if
(
!
map
)
{
retcode
=
-
EINVAL
;
...
...
drivers/char/drm/drm_context.h
View file @
eaa8fe26
...
...
@@ -419,10 +419,13 @@ int DRM(addctx)( struct inode *inode, struct file *filp,
/* Should this return -EBUSY instead? */
return
-
ENOMEM
;
}
#ifdef DRIVER_CTX_CTOR
if
(
ctx
.
handle
!=
DRM_KERNEL_CONTEXT
)
DRIVER_CTX_CTOR
(
ctx
.
handle
);
/* XXX: also pass dev ? */
#endif
{
if
(
dev
->
fn_tbl
.
context_ctor
)
dev
->
fn_tbl
.
context_ctor
(
dev
,
ctx
.
handle
);
}
ctx_entry
=
DRM
(
alloc
)(
sizeof
(
*
ctx_entry
),
DRM_MEM_CTXLIST
);
if
(
!
ctx_entry
)
{
DRM_DEBUG
(
"out of memory
\n
"
);
...
...
@@ -554,9 +557,8 @@ int DRM(rmctx)( struct inode *inode, struct file *filp,
priv
->
remove_auth_on_close
=
1
;
}
if
(
ctx
.
handle
!=
DRM_KERNEL_CONTEXT
)
{
#ifdef DRIVER_CTX_DTOR
DRIVER_CTX_DTOR
(
ctx
.
handle
);
/* XXX: also pass dev ? */
#endif
if
(
dev
->
fn_tbl
.
context_dtor
)
dev
->
fn_tbl
.
context_dtor
(
dev
,
ctx
.
handle
);
DRM
(
ctxbitmap_free
)(
dev
,
ctx
.
handle
);
}
...
...
drivers/char/drm/drm_dma.h
View file @
eaa8fe26
...
...
@@ -116,9 +116,6 @@ void DRM(dma_takedown)(drm_device_t *dev)
dma
->
bufs
[
i
].
buf_count
*
sizeof
(
*
dma
->
bufs
[
0
].
buflist
),
DRM_MEM_BUFS
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_destroy
)(
&
dma
->
bufs
[
i
].
freelist
);
#endif
}
}
...
...
@@ -158,16 +155,6 @@ void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf)
if
(
__HAVE_DMA_WAITQUEUE
&&
waitqueue_active
(
&
buf
->
dma_wait
))
{
wake_up_interruptible
(
&
buf
->
dma_wait
);
}
#if __HAVE_DMA_FREELIST
else
{
drm_device_dma_t
*
dma
=
dev
->
dma
;
/* If processes are waiting, the last one
to wake will put the buffer on the free
list. If no processes are waiting, we
put the buffer on the freelist here. */
DRM
(
freelist_put
)(
dev
,
&
dma
->
bufs
[
buf
->
order
].
freelist
,
buf
);
}
#endif
}
#if !__HAVE_DMA_RECLAIM
...
...
drivers/char/drm/drm_drv.h
View file @
eaa8fe26
This diff is collapsed.
Click to expand it.
drivers/char/drm/drm_fops.h
View file @
eaa8fe26
...
...
@@ -72,7 +72,8 @@ int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev)
priv
->
authenticated
=
capable
(
CAP_SYS_ADMIN
);
priv
->
lock_count
=
0
;
DRIVER_OPEN_HELPER
(
priv
,
dev
);
if
(
dev
->
fn_tbl
.
open_helper
)
dev
->
fn_tbl
.
open_helper
(
dev
,
priv
);
down
(
&
dev
->
struct_sem
);
if
(
!
dev
->
file_last
)
{
...
...
@@ -130,19 +131,15 @@ int DRM(fasync)(int fd, struct file *filp, int on)
return
0
;
}
#if !__HAVE_DRIVER_FOPS_POLL
/** No-op. */
unsigned
int
DRM
(
poll
)(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
)
{
return
0
;
}
#endif
#if !__HAVE_DRIVER_FOPS_READ
/** No-op. */
ssize_t
DRM
(
read
)(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
)
{
return
0
;
}
#endif
drivers/char/drm/drm_memory.h
View file @
eaa8fe26
...
...
@@ -187,6 +187,7 @@ static inline void drm_ioremapfree(void *pt, unsigned long size, drm_device_t *d
iounmap
(
pt
);
}
#if DEBUG_MEMORY
#include "drm_memory_debug.h"
#else
...
...
drivers/char/drm/ffb.h
View file @
eaa8fe26
...
...
@@ -8,9 +8,5 @@
*/
#define DRM(x) ffb_##x
/* General customization:
*/
#define __HAVE_KERNEL_CTX_SWITCH 1
#define __HAVE_RELEASE 1
#endif
drivers/char/drm/ffb_context.c
View file @
eaa8fe26
...
...
@@ -537,3 +537,63 @@ int DRM(rmctx)(struct inode *inode, struct file *filp, unsigned int cmd,
}
return
0
;
}
static
void
ffb_driver_release
(
drm_device_t
*
dev
)
{
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
);
}
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 @
eaa8fe26
...
...
@@ -26,53 +26,7 @@
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 1
#define DRIVER_FOPS \
static struct file_operations DRM(fops) = { \
.owner = THIS_MODULE, \
.open = DRM(open), \
.flush = DRM(flush), \
.release = DRM(release), \
.ioctl = DRM(ioctl), \
.mmap = DRM(mmap), \
.read = DRM(read), \
.fasync = DRM(fasync), \
.poll = DRM(poll), \
.get_unmapped_area = ffb_get_unmapped_area, \
}
#define DRIVER_COUNT_CARDS() ffb_count_card_instances()
/* Allocate private structure and fill it */
#define DRIVER_PRESETUP() do { \
int _ret; \
_ret = ffb_presetup(dev); \
if (_ret != 0) return _ret; \
} while(0)
/* Free private structure */
#define DRIVER_PRETAKEDOWN() do { \
if (dev->dev_private) kfree(dev->dev_private); \
} while(0)
#define DRIVER_POSTCLEANUP() do { \
if (ffb_position != NULL) kfree(ffb_position); \
} while(0)
/* We have to free up the rogue hw context state holding error or
* else we will leak it.
*/
#define DRIVER_RELEASE() do { \
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; \
} \
} while(0)
/* For mmap customization */
#define DRIVER_GET_MAP_OFS() (map->offset & 0xffffffff)
...
...
@@ -275,11 +229,11 @@ static drm_map_t *ffb_find_map(struct file *filp, unsigned long off)
return
NULL
;
}
static
unsigned
long
ffb_get_unmapped_area
(
struct
file
*
filp
,
unsigned
long
hint
,
unsigned
long
len
,
unsigned
long
pgoff
,
unsigned
long
flags
)
unsigned
long
ffb_get_unmapped_area
(
struct
file
*
filp
,
unsigned
long
hint
,
unsigned
long
len
,
unsigned
long
pgoff
,
unsigned
long
flags
)
{
drm_map_t
*
map
=
ffb_find_map
(
filp
,
pgoff
<<
PAGE_SHIFT
);
unsigned
long
addr
=
-
ENOMEM
;
...
...
drivers/char/drm/ffb_drv.h
View file @
eaa8fe26
...
...
@@ -274,3 +274,10 @@ typedef struct ffb_dev_priv {
/* Context table. */
struct
ffb_hw_context
*
hw_state
[
FFB_MAX_CTXS
];
}
ffb_dev_priv_t
;
extern
struct
file_operations
DRM
(
fops
);
extern
unsigned
long
ffb_get_unmapped_area
(
struct
file
*
filp
,
unsigned
long
hint
,
unsigned
long
len
,
unsigned
long
pgoff
,
unsigned
long
flags
);
drivers/char/drm/gamma.h
View file @
eaa8fe26
...
...
@@ -77,38 +77,12 @@
#define __HAVE_OLD_DMA 1
#define __HAVE_PCI_DMA 1
#define __HAVE_DRIVER_FOPS_READ 1
#define __HAVE_DRIVER_FOPS_POLL 1
#define __HAVE_MULTIPLE_DMA_QUEUES 1
#define __HAVE_DMA_WAITQUEUE 1
#define __HAVE_DMA_WAITLIST 1
#define __HAVE_DMA_FREELIST 1
#define __HAVE_DMA_FLUSH 1
#define __HAVE_DMA_SCHEDULE 1
#define __HAVE_DMA_READY 1
#define DRIVER_DMA_READY() do { \
gamma_dma_ready(dev); \
} while (0)
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
drm_gamma_private_t *dev_priv = \
(drm_gamma_private_t *)dev->dev_private; \
if (dev_priv->num_rast == 2) \
gamma_dma_quiescent_dual(dev); \
else gamma_dma_quiescent_single(dev); \
return 0; \
} while (0)
/* removed from DRM HAVE_DMA_FREELIST & HAVE_DMA_SCHEDULE */
#define __HAVE_IRQ 1
#define __HAVE_IRQ_BH 1
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_gamma_private_t *)((dev)->dev_private))->buffers
#endif
/* __GAMMA_H__ */
drivers/char/drm/gamma_context.h
View file @
eaa8fe26
...
...
@@ -42,7 +42,7 @@
the circular buffer), is based on Alessandro Rubini's LINUX DEVICE
DRIVERS (Cambridge: O'Reilly, 1998), pages 111-113. */
ssize_t
DRM
(
read
)
(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
)
ssize_t
gamma_fops_read
(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
...
...
@@ -128,7 +128,7 @@ int DRM(write_string)(drm_device_t *dev, const char *s)
return
0
;
}
unsigned
int
DRM
(
poll
)
(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
)
unsigned
int
gamma_fops_poll
(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
)
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
...
...
drivers/char/drm/gamma_dma.c
View file @
eaa8fe26
...
...
@@ -639,12 +639,12 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
break
;
}
}
DRM_FIND_MAP
(
dev_priv
->
mmio0
,
init
->
mmio0
);
DRM_FIND_MAP
(
dev_priv
->
mmio1
,
init
->
mmio1
);
DRM_FIND_MAP
(
dev_priv
->
mmio2
,
init
->
mmio2
);
DRM_FIND_MAP
(
dev_priv
->
mmio3
,
init
->
mmio3
);
dev_priv
->
mmio0
=
drm_core_findmap
(
dev
,
init
->
mmio0
);
dev_priv
->
mmio1
=
drm_core_findmap
(
dev
,
init
->
mmio1
);
dev_priv
->
mmio2
=
drm_core_findmap
(
dev
,
init
->
mmio2
);
dev_priv
->
mmio3
=
drm_core_findmap
(
dev
,
init
->
mmio3
);
dev_priv
->
sarea_priv
=
(
drm_gamma_sarea_t
*
)
((
u8
*
)
dev_priv
->
sarea
->
handle
+
init
->
sarea_priv_offset
);
...
...
@@ -661,9 +661,8 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
buf
=
dma
->
buflist
[
GLINT_DRI_BUF_COUNT
];
}
else
{
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
buf
=
dma
->
buflist
[
GLINT_DRI_BUF_COUNT
];
pgt
=
buf
->
address
;
...
...
@@ -699,10 +698,9 @@ int gamma_do_cleanup_dma( drm_device_t *dev )
#endif
if
(
dev
->
dev_private
)
{
drm_gamma_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev
_priv
->
buffers
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
if
(
dev
->
agp_buffer_map
!=
NULL
)
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
DRM
(
free
)(
dev
->
dev_private
,
sizeof
(
drm_gamma_private_t
),
DRM_MEM_DRIVER
);
...
...
@@ -904,3 +902,44 @@ void DRM(driver_irq_uninstall)( drm_device_t *dev ) {
GAMMA_WRITE
(
GAMMA_COMMANDINTENABLE
,
0x00000000
);
GAMMA_WRITE
(
GAMMA_GINTENABLE
,
0x00000000
);
}
extern
drm_ioctl_desc_t
DRM
(
ioctls
)[];
static
int
gamma_driver_preinit
(
drm_device_t
*
dev
)
{
/* reset the finish ioctl */
DRM
(
ioctls
)[
DRM_IOCTL_NR
(
DRM_IOCTL_FINISH
)].
func
=
DRM
(
finish
);
return
0
;
}
static
void
gamma_driver_pretakedown
(
drm_device_t
*
dev
)
{
gamma_do_cleanup_dma
(
dev
);
}
static
void
gamma_driver_dma_ready
(
drm_device_t
*
dev
)
{
gamma_dma_ready
(
dev
);
}
static
int
gamma_driver_dma_quiescent
(
drm_device_t
*
dev
)
{
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
if
(
dev_priv
->
num_rast
==
2
)
gamma_dma_quiescent_dual
(
dev
);
else
gamma_dma_quiescent_single
(
dev
);
return
0
;
}
void
gamma_driver_register_fns
(
drm_device_t
*
dev
)
{
DRM
(
fops
).
read
=
gamma_fops_read
;
DRM
(
fops
).
poll
=
gamma_fops_poll
;
dev
->
fn_tbl
.
preinit
=
gamma_driver_preinit
;
dev
->
fn_tbl
.
pretakedown
=
gamma_driver_pretakedown
;
dev
->
fn_tbl
.
dma_ready
=
gamma_driver_dma_ready
;
dev
->
fn_tbl
.
dma_quiescent
=
gamma_driver_dma_quiescent
;
dev
->
fn_tbl
.
dma_flush_block_and_flush
=
gamma_flush_block_and_flush
;
dev
->
fn_tbl
.
dma_flush_unblock
=
gamma_flush_unblock
;
}
drivers/char/drm/gamma_drv.h
View file @
eaa8fe26
...
...
@@ -35,7 +35,6 @@
typedef
struct
drm_gamma_private
{
drm_gamma_sarea_t
*
sarea_priv
;
drm_map_t
*
sarea
;
drm_map_t
*
buffers
;
drm_map_t
*
mmio0
;
drm_map_t
*
mmio1
;
drm_map_t
*
mmio2
;
...
...
@@ -91,6 +90,10 @@ extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
drm_buf_t
*
buf
);
extern
drm_buf_t
*
DRM
(
freelist_get
)(
drm_freelist_t
*
bl
,
int
block
);
/* externs for gamma changes to the ops */
extern
struct
file_operations
DRM
(
fops
);
extern
unsigned
int
gamma_fops_poll
(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
);
extern
ssize_t
gamma_fops_read
(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
);
#define GLINT_DRI_BUF_COUNT 256
...
...
drivers/char/drm/i810.h
View file @
eaa8fe26
...
...
@@ -84,41 +84,16 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
/* Driver customization:
*/
#define __HAVE_RELEASE 1
#define DRIVER_RELEASE() do { \
i810_reclaim_buffers( filp ); \
} while (0)
#define DRIVER_PRETAKEDOWN() do { \
i810_dma_cleanup( dev ); \
} while (0)
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_WAITLIST 0
#define __HAVE_DMA_RECLAIM 1
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
i810_dma_quiescent( dev ); \
} while (0)
/* 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
/* Buffer customization:
*/
#define DRIVER_BUF_PRIV_T drm_i810_buf_priv_t
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_i810_private_t *)((dev)->dev_private))->buffer_map
#endif
drivers/char/drm/i810_dma.c
View file @
eaa8fe26
...
...
@@ -364,15 +364,15 @@ static int i810_dma_initialize(drm_device_t *dev,
DRM_ERROR
(
"can not find sarea!
\n
"
);
return
-
EINVAL
;
}
DRM_FIND_MAP
(
dev_priv
->
mmio_map
,
init
->
mmio_offset
);
dev_priv
->
mmio_map
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i810_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
return
-
EINVAL
;
}
DRM_FIND_MAP
(
dev_priv
->
buffer_map
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffer_map
)
{
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
->
agp_
buffer_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i810_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find dma buffer map!
\n
"
);
...
...
@@ -1388,3 +1388,28 @@ int i810_flip_bufs(struct inode *inode, struct file *filp,
i810_dma_dispatch_flip
(
dev
);
return
0
;
}
static
void
i810_driver_pretakedown
(
drm_device_t
*
dev
)
{
i810_dma_cleanup
(
dev
);
}
static
void
i810_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
i810_reclaim_buffers
(
filp
);
}
static
int
i810_driver_dma_quiescent
(
drm_device_t
*
dev
)
{
i810_dma_quiescent
(
dev
);
return
0
;
}
void
i810_driver_register_fns
(
drm_device_t
*
dev
)
{
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
;
}
drivers/char/drm/i810_drv.h
View file @
eaa8fe26
...
...
@@ -53,7 +53,6 @@ typedef struct _drm_i810_ring_buffer{
typedef
struct
drm_i810_private
{
drm_map_t
*
sarea_map
;
drm_map_t
*
buffer_map
;
drm_map_t
*
mmio_map
;
drm_i810_sarea_t
*
sarea_priv
;
...
...
drivers/char/drm/i830.h
View file @
eaa8fe26
...
...
@@ -83,30 +83,12 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
/* Driver customization:
*/
#define __HAVE_RELEASE 1
#define DRIVER_RELEASE() do { \
i830_reclaim_buffers( filp ); \
} while (0)
#define DRIVER_PRETAKEDOWN() do { \
i830_dma_cleanup( dev ); \
} while (0)
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_WAITLIST 0
#define __HAVE_DMA_RECLAIM 1
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
i830_dma_quiescent( dev ); \
} while (0)
/* 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.
...
...
@@ -121,13 +103,4 @@
#define __HAVE_IRQ 0
#endif
/* Buffer customization:
*/
#define DRIVER_BUF_PRIV_T drm_i830_buf_priv_t
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_i830_private_t *)((dev)->dev_private))->buffer_map
#endif
drivers/char/drm/i830_dma.c
View file @
eaa8fe26
...
...
@@ -371,15 +371,15 @@ static int i830_dma_initialize(drm_device_t *dev,
DRM_ERROR
(
"can not find sarea!
\n
"
);
return
-
EINVAL
;
}
DRM_FIND_MAP
(
dev_priv
->
mmio_map
,
init
->
mmio_offset
);
dev_priv
->
mmio_map
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i830_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
return
-
EINVAL
;
}
DRM_FIND_MAP
(
dev_priv
->
buffer_map
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffer_map
)
{
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
->
agp_
buffer_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i830_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find dma buffer map!
\n
"
);
...
...
@@ -1582,3 +1582,29 @@ int i830_setparam( struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
}
static
void
i830_driver_pretakedown
(
drm_device_t
*
dev
)
{
i830_dma_cleanup
(
dev
);
}
static
void
i830_driver_release
(
drm_device_t
*
dev
,
struct
file
*
filp
)
{
i830_reclaim_buffers
(
filp
);
}
static
int
i830_driver_dma_quiescent
(
drm_device_t
*
dev
)
{
i830_dma_quiescent
(
dev
);
return
0
;
}
void
i830_driver_register_fns
(
drm_device_t
*
dev
)
{
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
;
}
drivers/char/drm/i830_drv.h
View file @
eaa8fe26
...
...
@@ -53,7 +53,6 @@ typedef struct _drm_i830_ring_buffer{
typedef
struct
drm_i830_private
{
drm_map_t
*
sarea_map
;
drm_map_t
*
buffer_map
;
drm_map_t
*
mmio_map
;
drm_i830_sarea_t
*
sarea_priv
;
...
...
drivers/char/drm/i915.h
View file @
eaa8fe26
...
...
@@ -55,27 +55,6 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
/* Driver customization:
*/
#define DRIVER_PRETAKEDOWN() do { \
if ( dev->dev_private ) { \
drm_i915_private_t *dev_priv = dev->dev_private; \
i915_mem_takedown( &(dev_priv->agp_heap) ); \
} \
i915_dma_cleanup( dev ); \
} while (0)
/* When a client dies:
* - Free any alloced agp memory.
*/
#define DRIVER_PRERELEASE() \
do { \
if ( dev->dev_private ) { \
drm_i915_private_t *dev_priv = dev->dev_private; \
i915_mem_release( dev, filp, dev_priv->agp_heap ); \
} \
} while (0)
/* We use our own dma mechanisms, not the drm template code. However,
* the shared IRQ code is useful to us:
*/
...
...
drivers/char/drm/i915_dma.c
View file @
eaa8fe26
...
...
@@ -91,7 +91,7 @@ int i915_dma_cleanup(drm_device_t * dev)
(
drm_i915_private_t
*
)
dev
->
dev_private
;
if
(
dev_priv
->
ring
.
virtual_start
)
{
DRM_IOREMAPFREE
(
&
dev_priv
->
ring
.
map
,
dev
);
drm_core_ioremapfree
(
&
dev_priv
->
ring
.
map
,
dev
);
}
if
(
dev_priv
->
hw_status_page
)
{
...
...
@@ -125,7 +125,7 @@ static int i915_initialize(drm_device_t * dev,
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
mmio_map
,
init
->
mmio_offset
);
dev_priv
->
mmio_map
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i915_dma_cleanup
(
dev
);
...
...
@@ -147,7 +147,7 @@ static int i915_initialize(drm_device_t * dev,
dev_priv
->
ring
.
map
.
flags
=
0
;
dev_priv
->
ring
.
map
.
mtrr
=
0
;
DRM_IOREMAP
(
&
dev_priv
->
ring
.
map
,
dev
);
drm_core_ioremap
(
&
dev_priv
->
ring
.
map
,
dev
);
if
(
dev_priv
->
ring
.
map
.
handle
==
NULL
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
...
@@ -712,3 +712,26 @@ int i915_setparam(DRM_IOCTL_ARGS)
return
0
;
}
static
void
i915_driver_pretakedown
(
drm_device_t
*
dev
)
{
if
(
dev
->
dev_private
)
{
drm_i915_private_t
*
dev_priv
=
dev
->
dev_private
;
i915_mem_takedown
(
&
(
dev_priv
->
agp_heap
)
);
}
i915_dma_cleanup
(
dev
);
}
static
void
i915_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
)
{
if
(
dev
->
dev_private
)
{
drm_i915_private_t
*
dev_priv
=
dev
->
dev_private
;
i915_mem_release
(
dev
,
filp
,
dev_priv
->
agp_heap
);
}
}
void
i915_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
fn_tbl
.
pretakedown
=
i915_driver_pretakedown
;
dev
->
fn_tbl
.
prerelease
=
i915_driver_prerelease
;
}
drivers/char/drm/mga.h
View file @
eaa8fe26
...
...
@@ -69,12 +69,6 @@
#define __HAVE_COUNTER7 _DRM_STAT_PRIMARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
/* Driver customization:
*/
#define DRIVER_PRETAKEDOWN() do { \
mga_do_cleanup_dma( dev ); \
} while (0)
/* DMA customization:
*/
#define __HAVE_DMA 1
...
...
@@ -82,17 +76,4 @@
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
drm_mga_private_t *dev_priv = dev->dev_private; \
return mga_do_wait_for_idle( dev_priv ); \
} while (0)
/* Buffer customization:
*/
#define DRIVER_BUF_PRIV_T drm_mga_buf_priv_t
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_mga_private_t *)((dev)->dev_private))->buffers
#endif
drivers/char/drm/mga_dma.c
View file @
eaa8fe26
...
...
@@ -500,7 +500,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
mmio
,
init
->
mmio_offset
);
dev_priv
->
mmio
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"failed to find mmio region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
...
...
@@ -508,7 +508,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
status
,
init
->
status_offset
);
dev_priv
->
status
=
drm_core_findmap
(
dev
,
init
->
status_offset
);
if
(
!
dev_priv
->
status
)
{
DRM_ERROR
(
"failed to find status page!
\n
"
);
/* Assign dev_private so we can do cleanup. */
...
...
@@ -516,8 +516,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
warp
,
init
->
warp_offset
);
dev_priv
->
warp
=
drm_core_findmap
(
dev
,
init
->
warp_offset
);
if
(
!
dev_priv
->
warp
)
{
DRM_ERROR
(
"failed to find warp microcode region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
...
...
@@ -525,7 +524,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
primary
,
init
->
primary_offset
);
dev_priv
->
primary
=
drm_core_findmap
(
dev
,
init
->
primary_offset
);
if
(
!
dev_priv
->
primary
)
{
DRM_ERROR
(
"failed to find primary dma region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
...
...
@@ -533,8 +532,8 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"failed to find dma buffer region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
...
@@ -546,13 +545,13 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
(
drm_mga_sarea_t
*
)((
u8
*
)
dev_priv
->
sarea
->
handle
+
init
->
sarea_priv_offset
);
DRM_IOREMAP
(
dev_priv
->
warp
,
dev
);
DRM_IOREMAP
(
dev_priv
->
primary
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev_priv
->
warp
,
dev
);
drm_core_ioremap
(
dev_priv
->
primary
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
warp
->
handle
||
!
dev_priv
->
primary
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"failed to ioremap agp regions!
\n
"
);
/* Assign dev_private so we can do cleanup. */
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
...
@@ -643,11 +642,11 @@ int mga_do_cleanup_dma( drm_device_t *dev )
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
warp
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
warp
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
warp
,
dev
);
if
(
dev_priv
->
primary
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
primary
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
primary
,
dev
);
if
(
dev
->
agp_buffer_map
!=
NULL
)
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
if
(
dev_priv
->
head
!=
NULL
)
{
mga_freelist_cleanup
(
dev
);
...
...
@@ -800,3 +799,20 @@ int mga_dma_buffers( DRM_IOCTL_ARGS )
return
ret
;
}
static
void
mga_driver_pretakedown
(
drm_device_t
*
dev
)
{
mga_do_cleanup_dma
(
dev
);
}
static
int
mga_driver_dma_quiescent
(
drm_device_t
*
dev
)
{
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
return
mga_do_wait_for_idle
(
dev_priv
);
}
void
mga_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
fn_tbl
.
pretakedown
=
mga_driver_pretakedown
;
dev
->
fn_tbl
.
dma_quiescent
=
mga_driver_dma_quiescent
;
}
drivers/char/drm/r128.h
View file @
eaa8fe26
...
...
@@ -79,21 +79,6 @@
[DRM_IOCTL_NR(DRM_IOCTL_R128_INDIRECT)] = { r128_cce_indirect, 1, 1 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_GETPARAM)] = { r128_getparam, 1, 0 },
/* Driver customization:
*/
#define DRIVER_PRERELEASE() do { \
if ( dev->dev_private ) { \
drm_r128_private_t *dev_priv = dev->dev_private; \
if ( dev_priv->page_flipping ) { \
r128_do_cleanup_pageflip( dev ); \
} \
} \
} while (0)
#define DRIVER_PRETAKEDOWN() do { \
r128_do_cleanup_cce( dev ); \
} while (0)
/* DMA customization:
*/
#define __HAVE_DMA 1
...
...
@@ -101,20 +86,4 @@
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#if 0
/* GH: Remove this for now... */
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
drm_r128_private_t *dev_priv = dev->dev_private; \
return r128_do_cce_idle( dev_priv ); \
} while (0)
#endif
/* Buffer customization:
*/
#define DRIVER_BUF_PRIV_T drm_r128_buf_priv_t
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_r128_private_t *)((dev)->dev_private))->buffers
#endif
drivers/char/drm/r128_cce.c
View file @
eaa8fe26
...
...
@@ -467,29 +467,29 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
mmio
,
init
->
mmio_offset
);
dev_priv
->
mmio
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"could not find mmio region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
cce_ring
,
init
->
ring_offset
);
dev_priv
->
cce_ring
=
drm_core_findmap
(
dev
,
init
->
ring_offset
);
if
(
!
dev_priv
->
cce_ring
)
{
DRM_ERROR
(
"could not find cce ring region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
ring_rptr
,
init
->
ring_rptr_offset
);
dev_priv
->
ring_rptr
=
drm_core_findmap
(
dev
,
init
->
ring_rptr_offset
);
if
(
!
dev_priv
->
ring_rptr
)
{
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
...
...
@@ -497,8 +497,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
}
if
(
!
dev_priv
->
is_pci
)
{
DRM_FIND_MAP
(
dev_priv
->
agp_textures
,
init
->
agp_textures_offset
);
dev_priv
->
agp_textures
=
drm_core_findmap
(
dev
,
init
->
agp_textures_offset
);
if
(
!
dev_priv
->
agp_textures
)
{
DRM_ERROR
(
"could not find agp texture region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
...
@@ -513,12 +512,12 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
DRM_IOREMAP
(
dev_priv
->
cce_ring
,
dev
);
DRM_IOREMAP
(
dev_priv
->
ring_rptr
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev_priv
->
cce_ring
,
dev
);
drm_core_ioremap
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
cce_ring
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"Could not ioremap agp regions!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
...
...
@@ -531,7 +530,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
(
void
*
)
dev_priv
->
cce_ring
->
offset
;
dev_priv
->
ring_rptr
->
handle
=
(
void
*
)
dev_priv
->
ring_rptr
->
offset
;
dev
_priv
->
buffers
->
handle
=
(
void
*
)
dev_priv
->
buffers
->
offset
;
dev
->
agp_buffer_map
->
handle
=
(
void
*
)
dev
->
agp_buffer_map
->
offset
;
}
#if __REALLY_HAVE_AGP
...
...
@@ -601,11 +600,11 @@ int r128_do_cleanup_cce( drm_device_t *dev )
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
dev_priv
->
cce_ring
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
cce_ring
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
cce_ring
,
dev
);
if
(
dev_priv
->
ring_rptr
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
->
agp_buffer_map
!=
NULL
)
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
}
else
#endif
{
...
...
drivers/char/drm/r128_drv.h
View file @
eaa8fe26
...
...
@@ -100,7 +100,6 @@ typedef struct drm_r128_private {
drm_local_map_t
*
mmio
;
drm_local_map_t
*
cce_ring
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
buffers
;
drm_local_map_t
*
agp_textures
;
}
drm_r128_private_t
;
...
...
drivers/char/drm/r128_state.c
View file @
eaa8fe26
...
...
@@ -667,7 +667,7 @@ static void r128_cce_dispatch_indirect( drm_device_t *dev,
*/
if
(
dwords
&
1
)
{
u32
*
data
=
(
u32
*
)
((
char
*
)
dev
_priv
->
buffers
->
handle
((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
data
[
dwords
++
]
=
cpu_to_le32
(
R128_CCE_PACKET2
);
}
...
...
@@ -713,7 +713,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
drm_r128_buf_priv_t
*
buf_priv
=
buf
->
dev_private
;
drm_r128_sarea_t
*
sarea_priv
=
dev_priv
->
sarea_priv
;
int
format
=
sarea_priv
->
vc_format
;
int
offset
=
dev
_priv
->
buffers
->
offset
-
dev_priv
->
cce_buffers_offset
;
int
offset
=
dev
->
agp_buffer_map
->
offset
-
dev_priv
->
cce_buffers_offset
;
int
prim
=
buf_priv
->
prim
;
u32
*
data
;
int
dwords
;
...
...
@@ -733,7 +733,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
dwords
=
(
end
-
start
+
3
)
/
sizeof
(
u32
);
data
=
(
u32
*
)((
char
*
)
dev
_priv
->
buffers
->
handle
data
=
(
u32
*
)((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
data
[
0
]
=
cpu_to_le32
(
CCE_PACKET3
(
R128_3D_RNDR_GEN_INDX_PRIM
,
...
...
@@ -857,7 +857,7 @@ static int r128_cce_dispatch_blit( DRMFILE filp,
dwords
=
(
blit
->
width
*
blit
->
height
)
>>
dword_shift
;
data
=
(
u32
*
)((
char
*
)
dev
_priv
->
buffers
->
handle
+
buf
->
offset
);
data
=
(
u32
*
)((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
);
data
[
0
]
=
cpu_to_le32
(
CCE_PACKET3
(
R128_CNTL_HOSTDATA_BLT
,
dwords
+
6
)
);
data
[
1
]
=
cpu_to_le32
(
(
R128_GMC_DST_PITCH_OFFSET_CNTL
|
...
...
@@ -1694,3 +1694,25 @@ int r128_getparam( DRM_IOCTL_ARGS )
return
0
;
}
static
void
r128_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
)
{
if
(
dev
->
dev_private
)
{
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
page_flipping
)
{
r128_do_cleanup_pageflip
(
dev
);
}
}
}
static
void
r128_driver_pretakedown
(
drm_device_t
*
dev
)
{
r128_do_cleanup_cce
(
dev
);
}
void
r128_driver_register_fns
(
drm_device_t
*
dev
)
{
dev
->
dev_priv_size
=
sizeof
(
drm_r128_buf_priv_t
);
dev
->
fn_tbl
.
prerelease
=
r128_driver_prerelease
;
dev
->
fn_tbl
.
pretakedown
=
r128_driver_pretakedown
;
}
drivers/char/drm/radeon.h
View file @
eaa8fe26
...
...
@@ -118,43 +118,6 @@
#define DRIVER_FILE_FIELDS \
int64_t radeon_fb_delta; \
#define DRIVER_OPEN_HELPER( filp_priv, dev ) \
do { \
drm_radeon_private_t *dev_priv = dev->dev_private; \
if ( dev_priv ) \
filp_priv->radeon_fb_delta = dev_priv->fb_location; \
else \
filp_priv->radeon_fb_delta = 0; \
} while( 0 )
/* When a client dies:
* - Check for and clean up flipped page state
* - Free any alloced GART memory.
*
* DRM infrastructure takes care of reclaiming dma buffers.
*/
#define DRIVER_PRERELEASE() \
do { \
if ( dev->dev_private ) { \
drm_radeon_private_t *dev_priv = dev->dev_private; \
if ( dev_priv->page_flipping ) { \
radeon_do_cleanup_pageflip( dev ); \
} \
radeon_mem_release( filp, dev_priv->gart_heap ); \
radeon_mem_release( filp, dev_priv->fb_heap ); \
} \
} while (0)
/* When the last client dies, shut down the CP and free dev->dev_priv.
*/
/* #define __HAVE_RELEASE 1 */
#define DRIVER_PRETAKEDOWN() \
do { \
radeon_do_release( dev ); \
} while (0)
/* DMA customization:
*/
#define __HAVE_DMA 1
...
...
@@ -162,12 +125,4 @@ do { \
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
/* Buffer customization:
*/
#define DRIVER_BUF_PRIV_T drm_radeon_buf_priv_t
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_radeon_private_t *)((dev)->dev_private))->buffers
#endif
drivers/char/drm/radeon_cp.c
View file @
eaa8fe26
...
...
@@ -1118,29 +1118,29 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
mmio
,
init
->
mmio_offset
);
dev_priv
->
mmio
=
drm_core_findmap
(
dev
,
init
->
mmio_offset
);
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"could not find mmio region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
cp_ring
,
init
->
ring_offset
);
dev_priv
->
cp_ring
=
drm_core_findmap
(
dev
,
init
->
ring_offset
);
if
(
!
dev_priv
->
cp_ring
)
{
DRM_ERROR
(
"could not find cp ring region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
ring_rptr
,
init
->
ring_rptr_offset
);
dev_priv
->
ring_rptr
=
drm_core_findmap
(
dev
,
init
->
ring_rptr_offset
);
if
(
!
dev_priv
->
ring_rptr
)
{
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
...
...
@@ -1148,7 +1148,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
}
if
(
init
->
gart_textures_offset
)
{
DRM_FIND_MAP
(
dev_priv
->
gart_textures
,
init
->
gart_textures_offset
);
dev_priv
->
gart_textures
=
drm_core_findmap
(
dev
,
init
->
gart_textures_offset
);
if
(
!
dev_priv
->
gart_textures
)
{
DRM_ERROR
(
"could not find GART texture region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
...
@@ -1163,12 +1163,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
DRM_IOREMAP
(
dev_priv
->
cp_ring
,
dev
);
DRM_IOREMAP
(
dev_priv
->
ring_rptr
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev_priv
->
cp_ring
,
dev
);
drm_core_ioremap
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
cp_ring
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"could not find ioremap agp regions!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
...
...
@@ -1181,14 +1181,14 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
(
void
*
)
dev_priv
->
cp_ring
->
offset
;
dev_priv
->
ring_rptr
->
handle
=
(
void
*
)
dev_priv
->
ring_rptr
->
offset
;
dev
_priv
->
buffers
->
handle
=
(
void
*
)
dev_priv
->
buffers
->
offset
;
dev
->
agp_buffer_map
->
handle
=
(
void
*
)
dev
->
agp_buffer_map
->
offset
;
DRM_DEBUG
(
"dev_priv->cp_ring->handle %p
\n
"
,
dev_priv
->
cp_ring
->
handle
);
DRM_DEBUG
(
"dev_priv->ring_rptr->handle %p
\n
"
,
dev_priv
->
ring_rptr
->
handle
);
DRM_DEBUG
(
"dev
_priv->buffers
->handle %p
\n
"
,
dev
_priv
->
buffers
->
handle
);
DRM_DEBUG
(
"dev
->agp_buffer_map
->handle %p
\n
"
,
dev
->
agp_buffer_map
->
handle
);
}
dev_priv
->
fb_location
=
(
RADEON_READ
(
RADEON_MC_FB_LOCATION
)
...
...
@@ -1213,12 +1213,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
dev_priv
->
gart_buffers_offset
=
(
dev
_priv
->
buffers
->
offset
dev_priv
->
gart_buffers_offset
=
(
dev
->
agp_buffer_map
->
offset
-
dev
->
agp
->
base
+
dev_priv
->
gart_vm_start
);
else
#endif
dev_priv
->
gart_buffers_offset
=
(
dev
_priv
->
buffers
->
offset
dev_priv
->
gart_buffers_offset
=
(
dev
->
agp_buffer_map
->
offset
-
dev
->
sg
->
handle
+
dev_priv
->
gart_vm_start
);
...
...
@@ -1289,11 +1289,11 @@ int radeon_do_cleanup_cp( drm_device_t *dev )
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
dev_priv
->
cp_ring
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
cp_ring
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
cp_ring
,
dev
);
if
(
dev_priv
->
ring_rptr
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
->
agp_buffer_map
!=
NULL
)
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
}
else
#endif
{
...
...
drivers/char/drm/radeon_drv.h
View file @
eaa8fe26
...
...
@@ -138,7 +138,6 @@ typedef struct drm_radeon_private {
drm_local_map_t
*
mmio
;
drm_local_map_t
*
cp_ring
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
buffers
;
drm_local_map_t
*
gart_textures
;
struct
mem_block
*
gart_heap
;
...
...
drivers/char/drm/radeon_state.c
View file @
eaa8fe26
...
...
@@ -1247,7 +1247,7 @@ static void radeon_cp_dispatch_indirect( drm_device_t *dev,
*/
if
(
dwords
&
1
)
{
u32
*
data
=
(
u32
*
)
((
char
*
)
dev
_priv
->
buffers
->
handle
((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
data
[
dwords
++
]
=
RADEON_CP_PACKET2
;
}
...
...
@@ -1301,7 +1301,7 @@ static void radeon_cp_dispatch_indices( drm_device_t *dev,
dwords
=
(
prim
->
finish
-
prim
->
start
+
3
)
/
sizeof
(
u32
);
data
=
(
u32
*
)((
char
*
)
dev
_priv
->
buffers
->
handle
+
data
=
(
u32
*
)((
char
*
)
dev
->
agp_buffer_map
->
handle
+
elt_buf
->
offset
+
prim
->
start
);
data
[
0
]
=
CP_PACKET3
(
RADEON_3D_RNDR_GEN_INDX_PRIM
,
dwords
-
2
);
...
...
@@ -1445,7 +1445,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
/* Dispatch the indirect buffer.
*/
buffer
=
(
u32
*
)((
char
*
)
dev
_priv
->
buffers
->
handle
+
buf
->
offset
);
buffer
=
(
u32
*
)((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
);
dwords
=
size
/
4
;
buffer
[
0
]
=
CP_PACKET3
(
RADEON_CNTL_HOSTDATA_BLT
,
dwords
+
6
);
buffer
[
1
]
=
(
RADEON_GMC_DST_PITCH_OFFSET_CNTL
|
...
...
@@ -2547,3 +2547,43 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) {
return
0
;
}
/* When a client dies:
* - Check for and clean up flipped page state
* - Free any alloced GART memory.
*
* DRM infrastructure takes care of reclaiming dma buffers.
*/
static
void
radeon_driver_prerelease
(
drm_device_t
*
dev
,
DRMFILE
filp
)
{
if
(
dev
->
dev_private
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
page_flipping
)
{
radeon_do_cleanup_pageflip
(
dev
);
}
radeon_mem_release
(
filp
,
dev_priv
->
gart_heap
);
radeon_mem_release
(
filp
,
dev_priv
->
fb_heap
);
}
}
static
void
radeon_driver_pretakedown
(
drm_device_t
*
dev
)
{
radeon_do_release
(
dev
);
}
static
void
radeon_driver_open_helper
(
drm_device_t
*
dev
,
drm_file_t
*
filp_priv
)
{
drm_radeon_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
)
filp_priv
->
radeon_fb_delta
=
dev_priv
->
fb_location
;
else
filp_priv
->
radeon_fb_delta
=
0
;
}
void
radeon_driver_register_fns
(
struct
drm_device
*
dev
)
{
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
;
}
drivers/char/drm/sis.h
View file @
eaa8fe26
...
...
@@ -64,15 +64,4 @@
#define __HAVE_COUNTERS 5
/* Buffer customization:
*/
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_sis_private_t *)((dev)->dev_private))->buffers
extern
int
sis_init_context
(
int
context
);
extern
int
sis_final_context
(
int
context
);
#define DRIVER_CTX_CTOR sis_init_context
#define DRIVER_CTX_DTOR sis_final_context
#endif
drivers/char/drm/sis_drv.c
View file @
eaa8fe26
...
...
@@ -46,3 +46,4 @@
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_stub.h"
drivers/char/drm/sis_drv.h
View file @
eaa8fe26
...
...
@@ -31,8 +31,6 @@
#include "sis_ds.h"
typedef
struct
drm_sis_private
{
drm_map_t
*
buffers
;
memHeap_t
*
AGPHeap
;
memHeap_t
*
FBHeap
;
}
drm_sis_private_t
;
...
...
drivers/char/drm/sis_mm.c
View file @
eaa8fe26
...
...
@@ -326,7 +326,7 @@ int sis_ioctl_agp_free( DRM_IOCTL_ARGS )
return
0
;
}
int
sis_init_context
(
int
context
)
int
sis_init_context
(
struct
drm_device
*
dev
,
int
context
)
{
int
i
;
...
...
@@ -358,7 +358,7 @@ int sis_init_context(int context)
return
1
;
}
int
sis_final_context
(
int
context
)
int
sis_final_context
(
struct
drm_device
*
dev
,
int
context
)
{
int
i
;
...
...
@@ -404,3 +404,9 @@ int sis_final_context(int context)
return
1
;
}
void
DRM
(
driver_register_fns
)(
drm_device_t
*
dev
)
{
dev
->
fn_tbl
.
context_ctor
=
sis_init_context
;
dev
->
fn_tbl
.
context_dtor
=
sis_final_context
;
}
drivers/char/drm/tdfx_drv.c
View file @
eaa8fe26
...
...
@@ -49,3 +49,8 @@
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_stub.h"
void
DRM
(
driver_register_fns
)(
drm_device_t
*
dev
)
{
}
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