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
Show 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
...
@@ -24,7 +24,7 @@ config DRM_TDFX
config DRM_GAMMA
config DRM_GAMMA
tristate "3dlabs GMX 2000"
tristate "3dlabs GMX 2000"
depends on DRM
depends on DRM
&& BROKEN
help
help
This is the old gamma driver, please tell me if it might actually
This is the old gamma driver, please tell me if it might actually
work.
work.
...
...
drivers/char/drm/drmP.h
View file @
eaa8fe26
...
@@ -95,12 +95,6 @@
...
@@ -95,12 +95,6 @@
#ifndef __HAVE_IRQ
#ifndef __HAVE_IRQ
#define __HAVE_IRQ 0
#define __HAVE_IRQ 0
#endif
#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) || \
#define __REALLY_HAVE_AGP (__HAVE_AGP && (defined(CONFIG_AGP) || \
defined(CONFIG_AGP_MODULE)))
defined(CONFIG_AGP_MODULE)))
...
@@ -265,54 +259,6 @@ static inline struct page * vmalloc_to_page(void * vmalloc_addr)
...
@@ -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 */
/** \name Internal types and structures */
/*@{*/
/*@{*/
...
@@ -610,6 +556,28 @@ typedef struct drm_vbl_sig {
...
@@ -610,6 +556,28 @@ typedef struct drm_vbl_sig {
#endif
#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.
* DRM device structure.
*/
*/
...
@@ -738,8 +706,13 @@ typedef struct drm_device {
...
@@ -738,8 +706,13 @@ typedef struct drm_device {
void
*
dev_private
;
/**< device private data */
void
*
dev_private
;
/**< device private data */
drm_sigdata_t
sigdata
;
/**< For block_all_signals */
drm_sigdata_t
sigdata
;
/**< For block_all_signals */
sigset_t
sigmask
;
sigset_t
sigmask
;
struct
drm_driver_fn
fn_tbl
;
drm_local_map_t
*
agp_buffer_map
;
int
dev_priv_size
;
}
drm_device_t
;
}
drm_device_t
;
extern
void
DRM
(
driver_register_fns
)(
struct
drm_device
*
dev
);
/******************************************************************/
/******************************************************************/
/** \name Internal function definitions */
/** \name Internal function definitions */
...
@@ -986,6 +959,40 @@ extern int DRM(ati_pcigart_cleanup)(drm_device_t *dev,
...
@@ -986,6 +959,40 @@ extern int DRM(ati_pcigart_cleanup)(drm_device_t *dev,
unsigned
long
addr
,
unsigned
long
addr
,
dma_addr_t
bus_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__ */
#endif
/* __KERNEL__ */
...
...
drivers/char/drm/drm_bufs.h
View file @
eaa8fe26
...
@@ -44,18 +44,6 @@
...
@@ -44,18 +44,6 @@
#define __HAVE_SG 0
#define __HAVE_SG 0
#endif
#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
* Compute size order. Returns the exponent of the smaller power of two which
* is greater or equal to given number.
* is greater or equal to given number.
...
@@ -348,10 +336,6 @@ static void DRM(cleanup_buf_error)(drm_buf_entry_t *entry)
...
@@ -348,10 +336,6 @@ static void DRM(cleanup_buf_error)(drm_buf_entry_t *entry)
sizeof
(
*
entry
->
buflist
),
sizeof
(
*
entry
->
buflist
),
DRM_MEM_BUFS
);
DRM_MEM_BUFS
);
#if __HAVE_DMA_FREELIST
DRM
(
freelist_destroy
)(
&
entry
->
freelist
);
#endif
entry
->
buf_count
=
0
;
entry
->
buf_count
=
0
;
}
}
}
}
...
@@ -473,8 +457,8 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
...
@@ -473,8 +457,8 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_private
=
DRM
(
alloc
)(
buf
->
dev_priv_size
,
DRM_MEM_BUFS
);
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
/* Set count correctly so we free the proper amount. */
...
@@ -520,12 +504,6 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
...
@@ -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
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
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
);
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
request
.
count
=
entry
->
buf_count
;
...
@@ -698,8 +676,8 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
...
@@ -698,8 +676,8 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_private
=
DRM
(
alloc
)(
dev
->
dev_priv_size
,
DRM_MEM_BUFS
);
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
/* Set count correctly so we free the proper amount. */
...
@@ -759,12 +737,6 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
...
@@ -759,12 +737,6 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
dma
->
page_count
+=
entry
->
seg_count
<<
page_order
;
dma
->
page_count
+=
entry
->
seg_count
<<
page_order
;
dma
->
byte_count
+=
PAGE_SIZE
*
(
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
);
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
request
.
count
=
entry
->
buf_count
;
...
@@ -882,8 +854,8 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
...
@@ -882,8 +854,8 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
init_waitqueue_head
(
&
buf
->
dma_wait
);
init_waitqueue_head
(
&
buf
->
dma_wait
);
buf
->
filp
=
NULL
;
buf
->
filp
=
NULL
;
buf
->
dev_priv_size
=
sizeof
(
DRIVER_BUF_PRIV_T
)
;
buf
->
dev_priv_size
=
dev
->
dev_priv_size
;
buf
->
dev_private
=
DRM
(
alloc
)(
sizeof
(
DRIVER_BUF_PRIV_T
)
,
buf
->
dev_private
=
DRM
(
alloc
)(
dev
->
dev_priv_size
,
DRM_MEM_BUFS
);
DRM_MEM_BUFS
);
if
(
!
buf
->
dev_private
)
{
if
(
!
buf
->
dev_private
)
{
/* Set count correctly so we free the proper amount. */
/* Set count correctly so we free the proper amount. */
...
@@ -930,12 +902,6 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
...
@@ -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
(
"dma->buf_count : %d
\n
"
,
dma
->
buf_count
);
DRM_DEBUG
(
"entry->buf_count : %d
\n
"
,
entry
->
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
);
up
(
&
dev
->
struct_sem
);
request
.
count
=
entry
->
buf_count
;
request
.
count
=
entry
->
buf_count
;
...
@@ -1221,7 +1187,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
...
@@ -1221,7 +1187,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
if
(
request
.
count
>=
dma
->
buf_count
)
{
if
(
request
.
count
>=
dma
->
buf_count
)
{
if
(
(
__HAVE_AGP
&&
(
dma
->
flags
&
_DRM_DMA_USE_AGP
))
||
if
(
(
__HAVE_AGP
&&
(
dma
->
flags
&
_DRM_DMA_USE_AGP
))
||
(
__HAVE_SG
&&
(
dma
->
flags
&
_DRM_DMA_USE_SG
))
)
{
(
__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
)
{
if
(
!
map
)
{
retcode
=
-
EINVAL
;
retcode
=
-
EINVAL
;
...
...
drivers/char/drm/drm_context.h
View file @
eaa8fe26
...
@@ -419,10 +419,13 @@ int DRM(addctx)( struct inode *inode, struct file *filp,
...
@@ -419,10 +419,13 @@ int DRM(addctx)( struct inode *inode, struct file *filp,
/* Should this return -EBUSY instead? */
/* Should this return -EBUSY instead? */
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
#ifdef DRIVER_CTX_CTOR
if
(
ctx
.
handle
!=
DRM_KERNEL_CONTEXT
)
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
);
ctx_entry
=
DRM
(
alloc
)(
sizeof
(
*
ctx_entry
),
DRM_MEM_CTXLIST
);
if
(
!
ctx_entry
)
{
if
(
!
ctx_entry
)
{
DRM_DEBUG
(
"out of memory
\n
"
);
DRM_DEBUG
(
"out of memory
\n
"
);
...
@@ -554,9 +557,8 @@ int DRM(rmctx)( struct inode *inode, struct file *filp,
...
@@ -554,9 +557,8 @@ int DRM(rmctx)( struct inode *inode, struct file *filp,
priv
->
remove_auth_on_close
=
1
;
priv
->
remove_auth_on_close
=
1
;
}
}
if
(
ctx
.
handle
!=
DRM_KERNEL_CONTEXT
)
{
if
(
ctx
.
handle
!=
DRM_KERNEL_CONTEXT
)
{
#ifdef DRIVER_CTX_DTOR
if
(
dev
->
fn_tbl
.
context_dtor
)
DRIVER_CTX_DTOR
(
ctx
.
handle
);
/* XXX: also pass dev ? */
dev
->
fn_tbl
.
context_dtor
(
dev
,
ctx
.
handle
);
#endif
DRM
(
ctxbitmap_free
)(
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)
...
@@ -116,9 +116,6 @@ void DRM(dma_takedown)(drm_device_t *dev)
dma
->
bufs
[
i
].
buf_count
*
dma
->
bufs
[
i
].
buf_count
*
sizeof
(
*
dma
->
bufs
[
0
].
buflist
),
sizeof
(
*
dma
->
bufs
[
0
].
buflist
),
DRM_MEM_BUFS
);
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)
...
@@ -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
))
{
if
(
__HAVE_DMA_WAITQUEUE
&&
waitqueue_active
(
&
buf
->
dma_wait
))
{
wake_up_interruptible
(
&
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
#if !__HAVE_DMA_RECLAIM
...
...
drivers/char/drm/drm_drv.h
View file @
eaa8fe26
...
@@ -67,82 +67,16 @@
...
@@ -67,82 +67,16 @@
#ifndef __HAVE_MULTIPLE_DMA_QUEUES
#ifndef __HAVE_MULTIPLE_DMA_QUEUES
#define __HAVE_MULTIPLE_DMA_QUEUES 0
#define __HAVE_MULTIPLE_DMA_QUEUES 0
#endif
#endif
#ifndef __HAVE_DMA_SCHEDULE
#define __HAVE_DMA_SCHEDULE 0
#endif
#ifndef __HAVE_DMA_FLUSH
#define __HAVE_DMA_FLUSH 0
#endif
#ifndef __HAVE_DMA_READY
#define __HAVE_DMA_READY 0
#endif
#ifndef __HAVE_DMA_QUIESCENT
#define __HAVE_DMA_QUIESCENT 0
#endif
#ifndef __HAVE_RELEASE
#define __HAVE_RELEASE 0
#endif
#ifndef __HAVE_COUNTERS
#ifndef __HAVE_COUNTERS
#define __HAVE_COUNTERS 0
#define __HAVE_COUNTERS 0
#endif
#endif
#ifndef __HAVE_SG
#ifndef __HAVE_SG
#define __HAVE_SG 0
#define __HAVE_SG 0
#endif
#endif
/* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the drm modules in
* the DRI cvs tree, but it is required by the kernel tree's sparc
* driver.
*/
#ifndef __HAVE_KERNEL_CTX_SWITCH
#define __HAVE_KERNEL_CTX_SWITCH 0
#endif
#ifndef __HAVE_DRIVER_FOPS_READ
#define __HAVE_DRIVER_FOPS_READ 0
#endif
#ifndef __HAVE_DRIVER_FOPS_POLL
#define __HAVE_DRIVER_FOPS_POLL 0
#endif
#ifndef DRIVER_PREINIT
#define DRIVER_PREINIT()
#endif
#ifndef DRIVER_POSTINIT
#define DRIVER_POSTINIT()
#endif
#ifndef DRIVER_PRERELEASE
#define DRIVER_PRERELEASE()
#endif
#ifndef DRIVER_PRETAKEDOWN
#define DRIVER_PRETAKEDOWN()
#endif
#ifndef DRIVER_POSTCLEANUP
#define DRIVER_POSTCLEANUP()
#endif
#ifndef DRIVER_PRESETUP
#define DRIVER_PRESETUP()
#endif
#ifndef DRIVER_POSTSETUP
#define DRIVER_POSTSETUP()
#endif
#ifndef DRIVER_IOCTLS
#ifndef DRIVER_IOCTLS
#define DRIVER_IOCTLS
#define DRIVER_IOCTLS
#endif
#endif
#ifndef DRIVER_OPEN_HELPER
#define DRIVER_OPEN_HELPER( priv, dev )
#endif
#ifndef DRIVER_FOPS
#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), \
.fasync = DRM(fasync), \
.poll = DRM(poll), \
.read = DRM(read), \
}
#endif
#ifndef MODULE
#ifndef MODULE
/** Use an additional macro to avoid preprocessor troubles */
/** Use an additional macro to avoid preprocessor troubles */
...
@@ -166,10 +100,20 @@ __setup( DRIVER_NAME "=", DRM_OPTIONS_FUNC );
...
@@ -166,10 +100,20 @@ __setup( DRIVER_NAME "=", DRM_OPTIONS_FUNC );
static
drm_device_t
DRM
(
device
)[
MAX_DEVICES
];
static
drm_device_t
DRM
(
device
)[
MAX_DEVICES
];
static
int
DRM
(
numdevs
)
=
0
;
static
int
DRM
(
numdevs
)
=
0
;
DRIVER_FOPS
;
struct
file_operations
DRM
(
fops
)
=
{
.
owner
=
THIS_MODULE
,
.
open
=
DRM
(
open
),
.
flush
=
DRM
(
flush
),
.
release
=
DRM
(
release
),
.
ioctl
=
DRM
(
ioctl
),
.
mmap
=
DRM
(
mmap
),
.
fasync
=
DRM
(
fasync
),
.
poll
=
DRM
(
poll
),
.
read
=
DRM
(
read
),
};
/** Ioctl table */
/** Ioctl table */
static
drm_ioctl_desc_t
DRM
(
ioctls
)[]
=
{
drm_ioctl_desc_t
DRM
(
ioctls
)[]
=
{
[
DRM_IOCTL_NR
(
DRM_IOCTL_VERSION
)]
=
{
DRM
(
version
),
0
,
0
},
[
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_UNIQUE
)]
=
{
DRM
(
getunique
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_MAGIC
)]
=
{
DRM
(
getmagic
),
0
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_GET_MAGIC
)]
=
{
DRM
(
getmagic
),
0
,
0
},
...
@@ -208,12 +152,7 @@ static drm_ioctl_desc_t DRM(ioctls)[] = {
...
@@ -208,12 +152,7 @@ static drm_ioctl_desc_t DRM(ioctls)[] = {
[
DRM_IOCTL_NR
(
DRM_IOCTL_LOCK
)]
=
{
DRM
(
lock
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_LOCK
)]
=
{
DRM
(
lock
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_UNLOCK
)]
=
{
DRM
(
unlock
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_UNLOCK
)]
=
{
DRM
(
unlock
),
1
,
0
},
#if __HAVE_DMA_FLUSH
/* Gamma only, really */
[
DRM_IOCTL_NR
(
DRM_IOCTL_FINISH
)]
=
{
DRM
(
finish
),
1
,
0
},
#else
[
DRM_IOCTL_NR
(
DRM_IOCTL_FINISH
)]
=
{
DRM
(
noop
),
1
,
0
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_FINISH
)]
=
{
DRM
(
noop
),
1
,
0
},
#endif
#if __HAVE_DMA
#if __HAVE_DMA
[
DRM_IOCTL_NR
(
DRM_IOCTL_ADD_BUFS
)]
=
{
DRM
(
addbufs
),
1
,
1
},
[
DRM_IOCTL_NR
(
DRM_IOCTL_ADD_BUFS
)]
=
{
DRM
(
addbufs
),
1
,
1
},
...
@@ -265,7 +204,9 @@ static int DRM(setup)( drm_device_t *dev )
...
@@ -265,7 +204,9 @@ static int DRM(setup)( drm_device_t *dev )
{
{
int
i
;
int
i
;
DRIVER_PRESETUP
();
if
(
dev
->
fn_tbl
.
presetup
)
dev
->
fn_tbl
.
presetup
(
dev
);
atomic_set
(
&
dev
->
ioctl_count
,
0
);
atomic_set
(
&
dev
->
ioctl_count
,
0
);
atomic_set
(
&
dev
->
vma_count
,
0
);
atomic_set
(
&
dev
->
vma_count
,
0
);
dev
->
buf_use
=
0
;
dev
->
buf_use
=
0
;
...
@@ -311,9 +252,6 @@ static int DRM(setup)( drm_device_t *dev )
...
@@ -311,9 +252,6 @@ static int DRM(setup)( drm_device_t *dev )
#ifdef __HAVE_COUNTER14
#ifdef __HAVE_COUNTER14
dev
->
types
[
14
]
=
__HAVE_COUNTER14
;
dev
->
types
[
14
]
=
__HAVE_COUNTER14
;
#endif
#endif
#ifdef __HAVE_COUNTER15
dev
->
types
[
14
]
=
__HAVE_COUNTER14
;
#endif
for
(
i
=
0
;
i
<
DRM_ARRAY_SIZE
(
dev
->
counts
)
;
i
++
)
for
(
i
=
0
;
i
<
DRM_ARRAY_SIZE
(
dev
->
counts
)
;
i
++
)
atomic_set
(
&
dev
->
counts
[
i
],
0
);
atomic_set
(
&
dev
->
counts
[
i
],
0
);
...
@@ -371,7 +309,9 @@ static int DRM(setup)( drm_device_t *dev )
...
@@ -371,7 +309,9 @@ static int DRM(setup)( drm_device_t *dev )
* drm_select_queue fails between the time the interrupt is
* drm_select_queue fails between the time the interrupt is
* initialized and the time the queues are initialized.
* initialized and the time the queues are initialized.
*/
*/
DRIVER_POSTSETUP
();
if
(
dev
->
fn_tbl
.
postsetup
)
dev
->
fn_tbl
.
postsetup
(
dev
);
return
0
;
return
0
;
}
}
...
@@ -396,7 +336,9 @@ static int DRM(takedown)( drm_device_t *dev )
...
@@ -396,7 +336,9 @@ static int DRM(takedown)( drm_device_t *dev )
DRM_DEBUG
(
"
\n
"
);
DRM_DEBUG
(
"
\n
"
);
DRIVER_PRETAKEDOWN
();
if
(
dev
->
fn_tbl
.
pretakedown
)
dev
->
fn_tbl
.
pretakedown
(
dev
);
#if __HAVE_IRQ
#if __HAVE_IRQ
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
if
(
dev
->
irq_enabled
)
DRM
(
irq_uninstall
)(
dev
);
#endif
#endif
...
@@ -509,9 +451,6 @@ static int DRM(takedown)( drm_device_t *dev )
...
@@ -509,9 +451,6 @@ static int DRM(takedown)( drm_device_t *dev )
#if __HAVE_DMA_QUEUE || __HAVE_MULTIPLE_DMA_QUEUES
#if __HAVE_DMA_QUEUE || __HAVE_MULTIPLE_DMA_QUEUES
if
(
dev
->
queuelist
)
{
if
(
dev
->
queuelist
)
{
for
(
i
=
0
;
i
<
dev
->
queue_count
;
i
++
)
{
for
(
i
=
0
;
i
<
dev
->
queue_count
;
i
++
)
{
#if __HAVE_DMA_WAITLIST
DRM
(
waitlist_destroy
)(
&
dev
->
queuelist
[
i
]
->
waitlist
);
#endif
if
(
dev
->
queuelist
[
i
]
)
{
if
(
dev
->
queuelist
[
i
]
)
{
DRM
(
free
)(
dev
->
queuelist
[
i
],
DRM
(
free
)(
dev
->
queuelist
[
i
],
sizeof
(
*
dev
->
queuelist
[
0
]),
sizeof
(
*
dev
->
queuelist
[
0
]),
...
@@ -594,7 +533,12 @@ static int DRM(probe)(struct pci_dev *pdev)
...
@@ -594,7 +533,12 @@ static int DRM(probe)(struct pci_dev *pdev)
dev
->
pci_func
=
PCI_FUNC
(
pdev
->
devfn
);
dev
->
pci_func
=
PCI_FUNC
(
pdev
->
devfn
);
dev
->
irq
=
pdev
->
irq
;
dev
->
irq
=
pdev
->
irq
;
DRIVER_PREINIT
();
/* dev_priv_size can be changed by a driver in driver_register_fns */
dev
->
dev_priv_size
=
sizeof
(
u32
);
DRM
(
driver_register_fns
)(
dev
);
if
(
dev
->
fn_tbl
.
preinit
)
dev
->
fn_tbl
.
preinit
(
dev
);
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
dev
->
agp
=
DRM
(
agp_init
)();
dev
->
agp
=
DRM
(
agp_init
)();
...
@@ -635,7 +579,8 @@ static int DRM(probe)(struct pci_dev *pdev)
...
@@ -635,7 +579,8 @@ static int DRM(probe)(struct pci_dev *pdev)
dev
->
minor
,
dev
->
minor
,
pci_pretty_name
(
pdev
));
pci_pretty_name
(
pdev
));
DRIVER_POSTINIT
();
if
(
dev
->
fn_tbl
.
postinit
)
dev
->
fn_tbl
.
postinit
(
dev
);
return
0
;
return
0
;
}
}
...
@@ -718,8 +663,10 @@ static void __exit drm_cleanup( void )
...
@@ -718,8 +663,10 @@ static void __exit drm_cleanup( void )
dev
->
agp
=
NULL
;
dev
->
agp
=
NULL
;
}
}
#endif
#endif
if
(
dev
->
fn_tbl
.
postcleanup
)
dev
->
fn_tbl
.
postcleanup
(
dev
);
}
}
DRIVER_POSTCLEANUP
();
DRM
(
numdevs
)
=
0
;
DRM
(
numdevs
)
=
0
;
}
}
...
@@ -834,7 +781,8 @@ int DRM(release)( struct inode *inode, struct file *filp )
...
@@ -834,7 +781,8 @@ int DRM(release)( struct inode *inode, struct file *filp )
DRM_DEBUG
(
"open_count = %d
\n
"
,
dev
->
open_count
);
DRM_DEBUG
(
"open_count = %d
\n
"
,
dev
->
open_count
);
DRIVER_PRERELEASE
();
if
(
dev
->
fn_tbl
.
prerelease
)
dev
->
fn_tbl
.
prerelease
(
dev
,
filp
);
/* ========================================================
/* ========================================================
* Begin inline drm_release
* Begin inline drm_release
...
@@ -849,9 +797,10 @@ int DRM(release)( struct inode *inode, struct file *filp )
...
@@ -849,9 +797,10 @@ int DRM(release)( struct inode *inode, struct file *filp )
DRM_DEBUG
(
"File %p released, freeing lock for context %d
\n
"
,
DRM_DEBUG
(
"File %p released, freeing lock for context %d
\n
"
,
filp
,
filp
,
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
)
);
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
)
);
#if __HAVE_RELEASE
DRIVER_RELEASE
();
if
(
dev
->
fn_tbl
.
release
)
#endif
dev
->
fn_tbl
.
release
(
dev
,
filp
);
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
)
);
_DRM_LOCKING_CONTEXT
(
dev
->
lock
.
hw_lock
->
lock
)
);
...
@@ -860,8 +809,7 @@ int DRM(release)( struct inode *inode, struct file *filp )
...
@@ -860,8 +809,7 @@ int DRM(release)( struct inode *inode, struct file *filp )
processed via a callback to the X
processed via a callback to the X
server. */
server. */
}
}
#if __HAVE_RELEASE
else
if
(
dev
->
fn_tbl
.
release
&&
priv
->
lock_count
&&
dev
->
lock
.
hw_lock
)
{
else
if
(
priv
->
lock_count
&&
dev
->
lock
.
hw_lock
)
{
/* The lock is required to reclaim buffers */
/* The lock is required to reclaim buffers */
DECLARE_WAITQUEUE
(
entry
,
current
);
DECLARE_WAITQUEUE
(
entry
,
current
);
...
@@ -890,12 +838,14 @@ int DRM(release)( struct inode *inode, struct file *filp )
...
@@ -890,12 +838,14 @@ int DRM(release)( struct inode *inode, struct file *filp )
current
->
state
=
TASK_RUNNING
;
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
remove_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
if
(
!
retcode
)
{
if
(
!
retcode
)
{
DRIVER_RELEASE
();
if
(
dev
->
fn_tbl
.
release
)
dev
->
fn_tbl
.
release
(
dev
,
filp
);
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM_KERNEL_CONTEXT
);
DRM_KERNEL_CONTEXT
);
}
}
}
}
#elif __HAVE_DMA
#if __HAVE_DMA
DRM
(
reclaim_buffers
)(
filp
);
DRM
(
reclaim_buffers
)(
filp
);
#endif
#endif
...
@@ -908,9 +858,8 @@ int DRM(release)( struct inode *inode, struct file *filp )
...
@@ -908,9 +858,8 @@ int DRM(release)( struct inode *inode, struct file *filp )
list_for_each_entry_safe
(
pos
,
n
,
&
dev
->
ctxlist
->
head
,
head
)
{
list_for_each_entry_safe
(
pos
,
n
,
&
dev
->
ctxlist
->
head
,
head
)
{
if
(
pos
->
tag
==
priv
&&
if
(
pos
->
tag
==
priv
&&
pos
->
handle
!=
DRM_KERNEL_CONTEXT
)
{
pos
->
handle
!=
DRM_KERNEL_CONTEXT
)
{
#ifdef DRIVER_CTX_DTOR
if
(
dev
->
fn_tbl
.
context_dtor
)
DRIVER_CTX_DTOR
(
pos
->
handle
);
dev
->
fn_tbl
.
context_dtor
(
dev
,
pos
->
handle
);
#endif
#if __HAVE_CTX_BITMAP
#if __HAVE_CTX_BITMAP
DRM
(
ctxbitmap_free
)(
dev
,
pos
->
handle
);
DRM
(
ctxbitmap_free
)(
dev
,
pos
->
handle
);
#endif
#endif
...
@@ -1067,10 +1016,6 @@ int DRM(lock)( struct inode *inode, struct file *filp,
...
@@ -1067,10 +1016,6 @@ int DRM(lock)( struct inode *inode, struct file *filp,
q
=
dev
->
queuelist
[
lock
.
context
];
q
=
dev
->
queuelist
[
lock
.
context
];
#endif
#endif
#if __HAVE_DMA_FLUSH
ret
=
DRM
(
flush_block_and_flush
)(
dev
,
lock
.
context
,
lock
.
flags
);
#endif
if
(
!
ret
)
{
add_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
add_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
for
(;;)
{
for
(;;)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
current
->
state
=
TASK_INTERRUPTIBLE
;
...
@@ -1096,13 +1041,7 @@ int DRM(lock)( struct inode *inode, struct file *filp,
...
@@ -1096,13 +1041,7 @@ int DRM(lock)( struct inode *inode, struct file *filp,
}
}
current
->
state
=
TASK_RUNNING
;
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
remove_wait_queue
(
&
dev
->
lock
.
lock_queue
,
&
entry
);
}
#if __HAVE_DMA_FLUSH
DRM
(
flush_unblock
)(
dev
,
lock
.
context
,
lock
.
flags
);
/* cleanup phase */
#endif
if
(
!
ret
)
{
sigemptyset
(
&
dev
->
sigmask
);
sigemptyset
(
&
dev
->
sigmask
);
sigaddset
(
&
dev
->
sigmask
,
SIGSTOP
);
sigaddset
(
&
dev
->
sigmask
,
SIGSTOP
);
sigaddset
(
&
dev
->
sigmask
,
SIGTSTP
);
sigaddset
(
&
dev
->
sigmask
,
SIGTSTP
);
...
@@ -1113,28 +1052,21 @@ int DRM(lock)( struct inode *inode, struct file *filp,
...
@@ -1113,28 +1052,21 @@ int DRM(lock)( struct inode *inode, struct file *filp,
block_all_signals
(
DRM
(
notifier
),
block_all_signals
(
DRM
(
notifier
),
&
dev
->
sigdata
,
&
dev
->
sigmask
);
&
dev
->
sigdata
,
&
dev
->
sigmask
);
#if __HAVE_DMA_READY
if
(
dev
->
fn_tbl
.
dma_ready
&&
(
lock
.
flags
&
_DRM_LOCK_READY
))
if
(
lock
.
flags
&
_DRM_LOCK_READY
)
{
dev
->
fn_tbl
.
dma_ready
(
dev
);
DRIVER_DMA_READY
();
}
if
(
dev
->
fn_tbl
.
dma_quiescent
&&
(
lock
.
flags
&
_DRM_LOCK_QUIESCENT
))
#endif
return
dev
->
fn_tbl
.
dma_quiescent
(
dev
);
#if __HAVE_DMA_QUIESCENT
if
(
lock
.
flags
&
_DRM_LOCK_QUIESCENT
)
{
/* dev->fn_tbl.kernel_context_switch isn't used by any of the x86
DRIVER_DMA_QUIESCENT
();
* drivers but is used by the Sparc driver.
}
#endif
/* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the
* drm modules in the DRI cvs tree, but it is required
* by the Sparc driver.
*/
*/
#if __HAVE_KERNEL_CTX_SWITCH
if
(
dev
->
last_context
!=
lock
.
context
)
{
if
(
dev
->
fn_tbl
.
kernel_context_switch
&&
DRM
(
context_switch
)(
dev
,
dev
->
last_context
,
dev
->
last_context
!=
lock
.
context
)
{
dev
->
fn_tbl
.
kernel_context_switch
(
dev
,
dev
->
last_context
,
lock
.
context
);
lock
.
context
);
}
}
#endif
}
DRM_DEBUG
(
"%d %s
\n
"
,
lock
.
context
,
ret
?
"interrupted"
:
"has lock"
);
DRM_DEBUG
(
"%d %s
\n
"
,
lock
.
context
,
ret
?
"interrupted"
:
"has lock"
);
return
ret
;
return
ret
;
...
@@ -1169,40 +1101,20 @@ int DRM(unlock)( struct inode *inode, struct file *filp,
...
@@ -1169,40 +1101,20 @@ int DRM(unlock)( struct inode *inode, struct file *filp,
atomic_inc
(
&
dev
->
counts
[
_DRM_STAT_UNLOCKS
]
);
atomic_inc
(
&
dev
->
counts
[
_DRM_STAT_UNLOCKS
]
);
/* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the drm
/* kernel_context_switch isn't used by any of the x86 drm
* modules in the DRI cvs tree, but it is required by the
* modules but is required by the Sparc driver.
* Sparc driver.
*/
#if __HAVE_KERNEL_CTX_SWITCH
/* We no longer really hold it, but if we are the next
* agent to request it then we should just be able to
* take it immediately and not eat the ioctl.
*/
*/
dev
->
lock
.
filp
=
NULL
;
if
(
dev
->
fn_tbl
.
kernel_context_switch_unlock
)
{
dev
->
fn_tbl
.
kernel_context_switch_unlock
(
dev
);
__volatile__
unsigned
int
*
plock
=
&
dev
->
lock
.
hw_lock
->
lock
;
else
{
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
);
#else
DRM
(
lock_transfer
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM
(
lock_transfer
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM_KERNEL_CONTEXT
);
DRM_KERNEL_CONTEXT
);
#if __HAVE_DMA_SCHEDULE
DRM
(
dma_schedule
)(
dev
,
1
);
#endif
if
(
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
if
(
DRM
(
lock_free
)(
dev
,
&
dev
->
lock
.
hw_lock
->
lock
,
DRM_KERNEL_CONTEXT
)
)
{
DRM_KERNEL_CONTEXT
)
)
{
DRM_ERROR
(
"
\n
"
);
DRM_ERROR
(
"
\n
"
);
}
}
#endif
/* !__HAVE_KERNEL_CTX_SWITCH */
}
unblock_all_signals
();
unblock_all_signals
();
return
0
;
return
0
;
...
...
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)
...
@@ -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
->
authenticated
=
capable
(
CAP_SYS_ADMIN
);
priv
->
lock_count
=
0
;
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
);
down
(
&
dev
->
struct_sem
);
if
(
!
dev
->
file_last
)
{
if
(
!
dev
->
file_last
)
{
...
@@ -130,19 +131,15 @@ int DRM(fasync)(int fd, struct file *filp, int on)
...
@@ -130,19 +131,15 @@ int DRM(fasync)(int fd, struct file *filp, int on)
return
0
;
return
0
;
}
}
#if !__HAVE_DRIVER_FOPS_POLL
/** No-op. */
/** No-op. */
unsigned
int
DRM
(
poll
)(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
)
unsigned
int
DRM
(
poll
)(
struct
file
*
filp
,
struct
poll_table_struct
*
wait
)
{
{
return
0
;
return
0
;
}
}
#endif
#if !__HAVE_DRIVER_FOPS_READ
/** No-op. */
/** No-op. */
ssize_t
DRM
(
read
)(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
)
ssize_t
DRM
(
read
)(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
count
,
loff_t
*
off
)
{
{
return
0
;
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
...
@@ -187,6 +187,7 @@ static inline void drm_ioremapfree(void *pt, unsigned long size, drm_device_t *d
iounmap
(
pt
);
iounmap
(
pt
);
}
}
#if DEBUG_MEMORY
#if DEBUG_MEMORY
#include "drm_memory_debug.h"
#include "drm_memory_debug.h"
#else
#else
...
...
drivers/char/drm/ffb.h
View file @
eaa8fe26
...
@@ -8,9 +8,5 @@
...
@@ -8,9 +8,5 @@
*/
*/
#define DRM(x) ffb_##x
#define DRM(x) ffb_##x
/* General customization:
*/
#define __HAVE_KERNEL_CTX_SWITCH 1
#define __HAVE_RELEASE 1
#endif
#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,
...
@@ -537,3 +537,63 @@ int DRM(rmctx)(struct inode *inode, struct file *filp, unsigned int cmd,
}
}
return
0
;
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 @@
...
@@ -26,53 +26,7 @@
#define DRIVER_MINOR 0
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 1
#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()
#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 */
/* For mmap customization */
#define DRIVER_GET_MAP_OFS() (map->offset & 0xffffffff)
#define DRIVER_GET_MAP_OFS() (map->offset & 0xffffffff)
...
@@ -275,7 +229,7 @@ static drm_map_t *ffb_find_map(struct file *filp, unsigned long off)
...
@@ -275,7 +229,7 @@ static drm_map_t *ffb_find_map(struct file *filp, unsigned long off)
return
NULL
;
return
NULL
;
}
}
static
unsigned
long
ffb_get_unmapped_area
(
struct
file
*
filp
,
unsigned
long
ffb_get_unmapped_area
(
struct
file
*
filp
,
unsigned
long
hint
,
unsigned
long
hint
,
unsigned
long
len
,
unsigned
long
len
,
unsigned
long
pgoff
,
unsigned
long
pgoff
,
...
...
drivers/char/drm/ffb_drv.h
View file @
eaa8fe26
...
@@ -274,3 +274,10 @@ typedef struct ffb_dev_priv {
...
@@ -274,3 +274,10 @@ typedef struct ffb_dev_priv {
/* Context table. */
/* Context table. */
struct
ffb_hw_context
*
hw_state
[
FFB_MAX_CTXS
];
struct
ffb_hw_context
*
hw_state
[
FFB_MAX_CTXS
];
}
ffb_dev_priv_t
;
}
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 @@
...
@@ -77,38 +77,12 @@
#define __HAVE_OLD_DMA 1
#define __HAVE_OLD_DMA 1
#define __HAVE_PCI_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_MULTIPLE_DMA_QUEUES 1
#define __HAVE_DMA_WAITQUEUE 1
#define __HAVE_DMA_WAITQUEUE 1
#define __HAVE_DMA_WAITLIST 1
/* removed from DRM HAVE_DMA_FREELIST & HAVE_DMA_SCHEDULE */
#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)
#define __HAVE_IRQ 1
#define __HAVE_IRQ 1
#define __HAVE_IRQ_BH 1
#define __HAVE_IRQ_BH 1
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_gamma_private_t *)((dev)->dev_private))->buffers
#endif
/* __GAMMA_H__ */
#endif
/* __GAMMA_H__ */
drivers/char/drm/gamma_context.h
View file @
eaa8fe26
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
the circular buffer), is based on Alessandro Rubini's LINUX DEVICE
the circular buffer), is based on Alessandro Rubini's LINUX DEVICE
DRIVERS (Cambridge: O'Reilly, 1998), pages 111-113. */
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_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
dev
;
...
@@ -128,7 +128,7 @@ int DRM(write_string)(drm_device_t *dev, const char *s)
...
@@ -128,7 +128,7 @@ int DRM(write_string)(drm_device_t *dev, const char *s)
return
0
;
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_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
dev
;
...
...
drivers/char/drm/gamma_dma.c
View file @
eaa8fe26
...
@@ -640,10 +640,10 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
...
@@ -640,10 +640,10 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
}
}
}
}
DRM_FIND_MAP
(
dev_priv
->
mmio0
,
init
->
mmio0
);
dev_priv
->
mmio0
=
drm_core_findmap
(
dev
,
init
->
mmio0
);
DRM_FIND_MAP
(
dev_priv
->
mmio1
,
init
->
mmio1
);
dev_priv
->
mmio1
=
drm_core_findmap
(
dev
,
init
->
mmio1
);
DRM_FIND_MAP
(
dev_priv
->
mmio2
,
init
->
mmio2
);
dev_priv
->
mmio2
=
drm_core_findmap
(
dev
,
init
->
mmio2
);
DRM_FIND_MAP
(
dev_priv
->
mmio3
,
init
->
mmio3
);
dev_priv
->
mmio3
=
drm_core_findmap
(
dev
,
init
->
mmio3
);
dev_priv
->
sarea_priv
=
(
drm_gamma_sarea_t
*
)
dev_priv
->
sarea_priv
=
(
drm_gamma_sarea_t
*
)
((
u8
*
)
dev_priv
->
sarea
->
handle
+
((
u8
*
)
dev_priv
->
sarea
->
handle
+
...
@@ -661,9 +661,8 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
...
@@ -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
];
buf
=
dma
->
buflist
[
GLINT_DRI_BUF_COUNT
];
}
else
{
}
else
{
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
buf
=
dma
->
buflist
[
GLINT_DRI_BUF_COUNT
];
buf
=
dma
->
buflist
[
GLINT_DRI_BUF_COUNT
];
pgt
=
buf
->
address
;
pgt
=
buf
->
address
;
...
@@ -699,10 +698,9 @@ int gamma_do_cleanup_dma( drm_device_t *dev )
...
@@ -699,10 +698,9 @@ int gamma_do_cleanup_dma( drm_device_t *dev )
#endif
#endif
if
(
dev
->
dev_private
)
{
if
(
dev
->
dev_private
)
{
drm_gamma_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev
_priv
->
buffers
!=
NULL
)
if
(
dev
->
agp_buffer_map
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
DRM
(
free
)(
dev
->
dev_private
,
sizeof
(
drm_gamma_private_t
),
DRM
(
free
)(
dev
->
dev_private
,
sizeof
(
drm_gamma_private_t
),
DRM_MEM_DRIVER
);
DRM_MEM_DRIVER
);
...
@@ -904,3 +902,44 @@ void DRM(driver_irq_uninstall)( drm_device_t *dev ) {
...
@@ -904,3 +902,44 @@ void DRM(driver_irq_uninstall)( drm_device_t *dev ) {
GAMMA_WRITE
(
GAMMA_COMMANDINTENABLE
,
0x00000000
);
GAMMA_WRITE
(
GAMMA_COMMANDINTENABLE
,
0x00000000
);
GAMMA_WRITE
(
GAMMA_GINTENABLE
,
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 @@
...
@@ -35,7 +35,6 @@
typedef
struct
drm_gamma_private
{
typedef
struct
drm_gamma_private
{
drm_gamma_sarea_t
*
sarea_priv
;
drm_gamma_sarea_t
*
sarea_priv
;
drm_map_t
*
sarea
;
drm_map_t
*
sarea
;
drm_map_t
*
buffers
;
drm_map_t
*
mmio0
;
drm_map_t
*
mmio0
;
drm_map_t
*
mmio1
;
drm_map_t
*
mmio1
;
drm_map_t
*
mmio2
;
drm_map_t
*
mmio2
;
...
@@ -91,6 +90,10 @@ extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
...
@@ -91,6 +90,10 @@ extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
drm_buf_t
*
buf
);
drm_buf_t
*
buf
);
extern
drm_buf_t
*
DRM
(
freelist_get
)(
drm_freelist_t
*
bl
,
int
block
);
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
#define GLINT_DRI_BUF_COUNT 256
...
...
drivers/char/drm/i810.h
View file @
eaa8fe26
...
@@ -84,41 +84,16 @@
...
@@ -84,41 +84,16 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
#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:
/* DMA customization:
*/
*/
#define __HAVE_DMA 1
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_WAITLIST 0
#define __HAVE_DMA_RECLAIM 1
#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
/* Don't need an irq any more. The template code will make sure that
* a noop stub is generated for compatibility.
* a noop stub is generated for compatibility.
*/
*/
/* XXX: Add vblank support? */
/* XXX: Add vblank support? */
#define __HAVE_IRQ 0
#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
#endif
drivers/char/drm/i810_dma.c
View file @
eaa8fe26
...
@@ -364,15 +364,15 @@ static int i810_dma_initialize(drm_device_t *dev,
...
@@ -364,15 +364,15 @@ static int i810_dma_initialize(drm_device_t *dev,
DRM_ERROR
(
"can not find sarea!
\n
"
);
DRM_ERROR
(
"can not find sarea!
\n
"
);
return
-
EINVAL
;
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
)
{
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i810_dma_cleanup
(
dev
);
i810_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
DRM_FIND_MAP
(
dev_priv
->
buffer_map
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffer_map
)
{
if
(
!
dev
->
agp_
buffer_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i810_dma_cleanup
(
dev
);
i810_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find dma buffer map!
\n
"
);
DRM_ERROR
(
"can not find dma buffer map!
\n
"
);
...
@@ -1388,3 +1388,28 @@ int i810_flip_bufs(struct inode *inode, struct file *filp,
...
@@ -1388,3 +1388,28 @@ int i810_flip_bufs(struct inode *inode, struct file *filp,
i810_dma_dispatch_flip
(
dev
);
i810_dma_dispatch_flip
(
dev
);
return
0
;
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{
...
@@ -53,7 +53,6 @@ typedef struct _drm_i810_ring_buffer{
typedef
struct
drm_i810_private
{
typedef
struct
drm_i810_private
{
drm_map_t
*
sarea_map
;
drm_map_t
*
sarea_map
;
drm_map_t
*
buffer_map
;
drm_map_t
*
mmio_map
;
drm_map_t
*
mmio_map
;
drm_i810_sarea_t
*
sarea_priv
;
drm_i810_sarea_t
*
sarea_priv
;
...
...
drivers/char/drm/i830.h
View file @
eaa8fe26
...
@@ -83,30 +83,12 @@
...
@@ -83,30 +83,12 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
#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:
/* DMA customization:
*/
*/
#define __HAVE_DMA 1
#define __HAVE_DMA 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_QUEUE 1
#define __HAVE_DMA_WAITLIST 0
#define __HAVE_DMA_RECLAIM 1
#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
/* Driver will work either way: IRQ's save cpu time when waiting for
* the card, but are subject to subtle interactions between bios,
* the card, but are subject to subtle interactions between bios,
* hardware and the driver.
* hardware and the driver.
...
@@ -121,13 +103,4 @@
...
@@ -121,13 +103,4 @@
#define __HAVE_IRQ 0
#define __HAVE_IRQ 0
#endif
#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
#endif
drivers/char/drm/i830_dma.c
View file @
eaa8fe26
...
@@ -371,15 +371,15 @@ static int i830_dma_initialize(drm_device_t *dev,
...
@@ -371,15 +371,15 @@ static int i830_dma_initialize(drm_device_t *dev,
DRM_ERROR
(
"can not find sarea!
\n
"
);
DRM_ERROR
(
"can not find sarea!
\n
"
);
return
-
EINVAL
;
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
)
{
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i830_dma_cleanup
(
dev
);
i830_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
DRM_ERROR
(
"can not find mmio map!
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
DRM_FIND_MAP
(
dev_priv
->
buffer_map
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffer_map
)
{
if
(
!
dev
->
agp_
buffer_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i830_dma_cleanup
(
dev
);
i830_dma_cleanup
(
dev
);
DRM_ERROR
(
"can not find dma buffer map!
\n
"
);
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,
...
@@ -1582,3 +1582,29 @@ int i830_setparam( struct inode *inode, struct file *filp, unsigned int cmd,
return
0
;
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{
...
@@ -53,7 +53,6 @@ typedef struct _drm_i830_ring_buffer{
typedef
struct
drm_i830_private
{
typedef
struct
drm_i830_private
{
drm_map_t
*
sarea_map
;
drm_map_t
*
sarea_map
;
drm_map_t
*
buffer_map
;
drm_map_t
*
mmio_map
;
drm_map_t
*
mmio_map
;
drm_i830_sarea_t
*
sarea_priv
;
drm_i830_sarea_t
*
sarea_priv
;
...
...
drivers/char/drm/i915.h
View file @
eaa8fe26
...
@@ -55,27 +55,6 @@
...
@@ -55,27 +55,6 @@
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER9 _DRM_STAT_DMA
#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,
/* We use our own dma mechanisms, not the drm template code. However,
* the shared IRQ code is useful to us:
* 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)
...
@@ -91,7 +91,7 @@ int i915_dma_cleanup(drm_device_t * dev)
(
drm_i915_private_t
*
)
dev
->
dev_private
;
(
drm_i915_private_t
*
)
dev
->
dev_private
;
if
(
dev_priv
->
ring
.
virtual_start
)
{
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
)
{
if
(
dev_priv
->
hw_status_page
)
{
...
@@ -125,7 +125,7 @@ static int i915_initialize(drm_device_t * dev,
...
@@ -125,7 +125,7 @@ static int i915_initialize(drm_device_t * dev,
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
mmio_map
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
i915_dma_cleanup
(
dev
);
i915_dma_cleanup
(
dev
);
...
@@ -147,7 +147,7 @@ static int i915_initialize(drm_device_t * dev,
...
@@ -147,7 +147,7 @@ static int i915_initialize(drm_device_t * dev,
dev_priv
->
ring
.
map
.
flags
=
0
;
dev_priv
->
ring
.
map
.
flags
=
0
;
dev_priv
->
ring
.
map
.
mtrr
=
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
)
{
if
(
dev_priv
->
ring
.
map
.
handle
==
NULL
)
{
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
@@ -712,3 +712,26 @@ int i915_setparam(DRM_IOCTL_ARGS)
...
@@ -712,3 +712,26 @@ int i915_setparam(DRM_IOCTL_ARGS)
return
0
;
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 @@
...
@@ -69,12 +69,6 @@
#define __HAVE_COUNTER7 _DRM_STAT_PRIMARY
#define __HAVE_COUNTER7 _DRM_STAT_PRIMARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
#define __HAVE_COUNTER8 _DRM_STAT_SECONDARY
/* Driver customization:
*/
#define DRIVER_PRETAKEDOWN() do { \
mga_do_cleanup_dma( dev ); \
} while (0)
/* DMA customization:
/* DMA customization:
*/
*/
#define __HAVE_DMA 1
#define __HAVE_DMA 1
...
@@ -82,17 +76,4 @@
...
@@ -82,17 +76,4 @@
#define __HAVE_VBL_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_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
#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 )
...
@@ -500,7 +500,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"failed to find mmio region!
\n
"
);
DRM_ERROR
(
"failed to find mmio region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* 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 )
...
@@ -508,7 +508,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
status
)
{
DRM_ERROR
(
"failed to find status page!
\n
"
);
DRM_ERROR
(
"failed to find status page!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* 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 )
...
@@ -516,8 +516,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
return
DRM_ERR
(
EINVAL
);
}
}
dev_priv
->
warp
=
drm_core_findmap
(
dev
,
init
->
warp_offset
);
DRM_FIND_MAP
(
dev_priv
->
warp
,
init
->
warp_offset
);
if
(
!
dev_priv
->
warp
)
{
if
(
!
dev_priv
->
warp
)
{
DRM_ERROR
(
"failed to find warp microcode region!
\n
"
);
DRM_ERROR
(
"failed to find warp microcode region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* 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 )
...
@@ -525,7 +524,7 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
primary
)
{
DRM_ERROR
(
"failed to find primary dma region!
\n
"
);
DRM_ERROR
(
"failed to find primary dma region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* 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 )
...
@@ -533,8 +532,8 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
mga_do_cleanup_dma
(
dev
);
mga_do_cleanup_dma
(
dev
);
return
DRM_ERR
(
EINVAL
);
return
DRM_ERR
(
EINVAL
);
}
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"failed to find dma buffer region!
\n
"
);
DRM_ERROR
(
"failed to find dma buffer region!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* Assign dev_private so we can do cleanup. */
dev
->
dev_private
=
(
void
*
)
dev_priv
;
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 )
...
@@ -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
+
(
drm_mga_sarea_t
*
)((
u8
*
)
dev_priv
->
sarea
->
handle
+
init
->
sarea_priv_offset
);
init
->
sarea_priv_offset
);
DRM_IOREMAP
(
dev_priv
->
warp
,
dev
);
drm_core_ioremap
(
dev_priv
->
warp
,
dev
);
DRM_IOREMAP
(
dev_priv
->
primary
,
dev
);
drm_core_ioremap
(
dev_priv
->
primary
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
warp
->
handle
||
if
(
!
dev_priv
->
warp
->
handle
||
!
dev_priv
->
primary
->
handle
||
!
dev_priv
->
primary
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"failed to ioremap agp regions!
\n
"
);
DRM_ERROR
(
"failed to ioremap agp regions!
\n
"
);
/* Assign dev_private so we can do cleanup. */
/* Assign dev_private so we can do cleanup. */
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
...
@@ -643,11 +642,11 @@ int mga_do_cleanup_dma( drm_device_t *dev )
...
@@ -643,11 +642,11 @@ int mga_do_cleanup_dma( drm_device_t *dev )
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
warp
!=
NULL
)
if
(
dev_priv
->
warp
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
warp
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
warp
,
dev
);
if
(
dev_priv
->
primary
!=
NULL
)
if
(
dev_priv
->
primary
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
primary
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
primary
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
if
(
dev
->
agp_buffer_map
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
if
(
dev_priv
->
head
!=
NULL
)
{
if
(
dev_priv
->
head
!=
NULL
)
{
mga_freelist_cleanup
(
dev
);
mga_freelist_cleanup
(
dev
);
...
@@ -800,3 +799,20 @@ int mga_dma_buffers( DRM_IOCTL_ARGS )
...
@@ -800,3 +799,20 @@ int mga_dma_buffers( DRM_IOCTL_ARGS )
return
ret
;
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 @@
...
@@ -79,21 +79,6 @@
[DRM_IOCTL_NR(DRM_IOCTL_R128_INDIRECT)] = { r128_cce_indirect, 1, 1 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_INDIRECT)] = { r128_cce_indirect, 1, 1 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_GETPARAM)] = { r128_getparam, 1, 0 },
[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:
/* DMA customization:
*/
*/
#define __HAVE_DMA 1
#define __HAVE_DMA 1
...
@@ -101,20 +86,4 @@
...
@@ -101,20 +86,4 @@
#define __HAVE_VBL_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_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
#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 )
...
@@ -467,29 +467,29 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"could not find mmio region!
\n
"
);
DRM_ERROR
(
"could not find mmio region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
cce_ring
)
{
DRM_ERROR
(
"could not find cce ring region!
\n
"
);
DRM_ERROR
(
"could not find cce ring region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
ring_rptr
)
{
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
r128_do_cleanup_cce
(
dev
);
return
DRM_ERR
(
EINVAL
);
return
DRM_ERR
(
EINVAL
);
}
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
r128_do_cleanup_cce
(
dev
);
...
@@ -497,8 +497,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
...
@@ -497,8 +497,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
}
}
if
(
!
dev_priv
->
is_pci
)
{
if
(
!
dev_priv
->
is_pci
)
{
DRM_FIND_MAP
(
dev_priv
->
agp_textures
,
dev_priv
->
agp_textures
=
drm_core_findmap
(
dev
,
init
->
agp_textures_offset
);
init
->
agp_textures_offset
);
if
(
!
dev_priv
->
agp_textures
)
{
if
(
!
dev_priv
->
agp_textures
)
{
DRM_ERROR
(
"could not find agp texture region!
\n
"
);
DRM_ERROR
(
"could not find agp texture region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
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 )
...
@@ -513,12 +512,12 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
!
dev_priv
->
is_pci
)
{
DRM_IOREMAP
(
dev_priv
->
cce_ring
,
dev
);
drm_core_ioremap
(
dev_priv
->
cce_ring
,
dev
);
DRM_IOREMAP
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremap
(
dev_priv
->
ring_rptr
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
cce_ring
->
handle
||
if
(
!
dev_priv
->
cce_ring
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"Could not ioremap agp regions!
\n
"
);
DRM_ERROR
(
"Could not ioremap agp regions!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
r128_do_cleanup_cce
(
dev
);
r128_do_cleanup_cce
(
dev
);
...
@@ -531,7 +530,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
...
@@ -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
;
(
void
*
)
dev_priv
->
cce_ring
->
offset
;
dev_priv
->
ring_rptr
->
handle
=
dev_priv
->
ring_rptr
->
handle
=
(
void
*
)
dev_priv
->
ring_rptr
->
offset
;
(
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
#if __REALLY_HAVE_AGP
...
@@ -601,11 +600,11 @@ int r128_do_cleanup_cce( drm_device_t *dev )
...
@@ -601,11 +600,11 @@ int r128_do_cleanup_cce( drm_device_t *dev )
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
!
dev_priv
->
is_pci
)
{
if
(
dev_priv
->
cce_ring
!=
NULL
)
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
)
if
(
dev_priv
->
ring_rptr
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
if
(
dev
->
agp_buffer_map
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
}
else
}
else
#endif
#endif
{
{
...
...
drivers/char/drm/r128_drv.h
View file @
eaa8fe26
...
@@ -100,7 +100,6 @@ typedef struct drm_r128_private {
...
@@ -100,7 +100,6 @@ typedef struct drm_r128_private {
drm_local_map_t
*
mmio
;
drm_local_map_t
*
mmio
;
drm_local_map_t
*
cce_ring
;
drm_local_map_t
*
cce_ring
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
buffers
;
drm_local_map_t
*
agp_textures
;
drm_local_map_t
*
agp_textures
;
}
drm_r128_private_t
;
}
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,
...
@@ -667,7 +667,7 @@ static void r128_cce_dispatch_indirect( drm_device_t *dev,
*/
*/
if
(
dwords
&
1
)
{
if
(
dwords
&
1
)
{
u32
*
data
=
(
u32
*
)
u32
*
data
=
(
u32
*
)
((
char
*
)
dev
_priv
->
buffers
->
handle
((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
+
buf
->
offset
+
start
);
data
[
dwords
++
]
=
cpu_to_le32
(
R128_CCE_PACKET2
);
data
[
dwords
++
]
=
cpu_to_le32
(
R128_CCE_PACKET2
);
}
}
...
@@ -713,7 +713,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
...
@@ -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_buf_priv_t
*
buf_priv
=
buf
->
dev_private
;
drm_r128_sarea_t
*
sarea_priv
=
dev_priv
->
sarea_priv
;
drm_r128_sarea_t
*
sarea_priv
=
dev_priv
->
sarea_priv
;
int
format
=
sarea_priv
->
vc_format
;
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
;
int
prim
=
buf_priv
->
prim
;
u32
*
data
;
u32
*
data
;
int
dwords
;
int
dwords
;
...
@@ -733,7 +733,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
...
@@ -733,7 +733,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
dwords
=
(
end
-
start
+
3
)
/
sizeof
(
u32
);
dwords
=
(
end
-
start
+
3
)
/
sizeof
(
u32
);
data
=
(
u32
*
)((
char
*
)
dev
_priv
->
buffers
->
handle
data
=
(
u32
*
)((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
+
buf
->
offset
+
start
);
data
[
0
]
=
cpu_to_le32
(
CCE_PACKET3
(
R128_3D_RNDR_GEN_INDX_PRIM
,
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,
...
@@ -857,7 +857,7 @@ static int r128_cce_dispatch_blit( DRMFILE filp,
dwords
=
(
blit
->
width
*
blit
->
height
)
>>
dword_shift
;
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
[
0
]
=
cpu_to_le32
(
CCE_PACKET3
(
R128_CNTL_HOSTDATA_BLT
,
dwords
+
6
)
);
data
[
1
]
=
cpu_to_le32
(
(
R128_GMC_DST_PITCH_OFFSET_CNTL
|
data
[
1
]
=
cpu_to_le32
(
(
R128_GMC_DST_PITCH_OFFSET_CNTL
|
...
@@ -1694,3 +1694,25 @@ int r128_getparam( DRM_IOCTL_ARGS )
...
@@ -1694,3 +1694,25 @@ int r128_getparam( DRM_IOCTL_ARGS )
return
0
;
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 @@
...
@@ -118,43 +118,6 @@
#define DRIVER_FILE_FIELDS \
#define DRIVER_FILE_FIELDS \
int64_t radeon_fb_delta; \
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:
/* DMA customization:
*/
*/
#define __HAVE_DMA 1
#define __HAVE_DMA 1
...
@@ -162,12 +125,4 @@ do { \
...
@@ -162,12 +125,4 @@ do { \
#define __HAVE_VBL_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_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
#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 )
...
@@ -1118,29 +1118,29 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
mmio
)
{
DRM_ERROR
(
"could not find mmio region!
\n
"
);
DRM_ERROR
(
"could not find mmio region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
cp_ring
)
{
DRM_ERROR
(
"could not find cp ring region!
\n
"
);
DRM_ERROR
(
"could not find cp ring region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
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
)
{
if
(
!
dev_priv
->
ring_rptr
)
{
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
DRM_ERROR
(
"could not find ring read pointer!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
radeon_do_cleanup_cp
(
dev
);
return
DRM_ERR
(
EINVAL
);
return
DRM_ERR
(
EINVAL
);
}
}
DRM_FIND_MAP
(
dev_priv
->
buffers
,
init
->
buffers_offset
);
dev
->
agp_buffer_map
=
drm_core_findmap
(
dev
,
init
->
buffers_offset
);
if
(
!
dev
_priv
->
buffers
)
{
if
(
!
dev
->
agp_buffer_map
)
{
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
DRM_ERROR
(
"could not find dma buffer region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
radeon_do_cleanup_cp
(
dev
);
...
@@ -1148,7 +1148,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
...
@@ -1148,7 +1148,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
}
}
if
(
init
->
gart_textures_offset
)
{
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
)
{
if
(
!
dev_priv
->
gart_textures
)
{
DRM_ERROR
(
"could not find GART texture region!
\n
"
);
DRM_ERROR
(
"could not find GART texture region!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
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 )
...
@@ -1163,12 +1163,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
!
dev_priv
->
is_pci
)
{
DRM_IOREMAP
(
dev_priv
->
cp_ring
,
dev
);
drm_core_ioremap
(
dev_priv
->
cp_ring
,
dev
);
DRM_IOREMAP
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremap
(
dev_priv
->
ring_rptr
,
dev
);
DRM_IOREMAP
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremap
(
dev
->
agp_buffer_map
,
dev
);
if
(
!
dev_priv
->
cp_ring
->
handle
||
if
(
!
dev_priv
->
cp_ring
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev_priv
->
ring_rptr
->
handle
||
!
dev
_priv
->
buffers
->
handle
)
{
!
dev
->
agp_buffer_map
->
handle
)
{
DRM_ERROR
(
"could not find ioremap agp regions!
\n
"
);
DRM_ERROR
(
"could not find ioremap agp regions!
\n
"
);
dev
->
dev_private
=
(
void
*
)
dev_priv
;
dev
->
dev_private
=
(
void
*
)
dev_priv
;
radeon_do_cleanup_cp
(
dev
);
radeon_do_cleanup_cp
(
dev
);
...
@@ -1181,14 +1181,14 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
...
@@ -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
;
(
void
*
)
dev_priv
->
cp_ring
->
offset
;
dev_priv
->
ring_rptr
->
handle
=
dev_priv
->
ring_rptr
->
handle
=
(
void
*
)
dev_priv
->
ring_rptr
->
offset
;
(
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
"
,
DRM_DEBUG
(
"dev_priv->cp_ring->handle %p
\n
"
,
dev_priv
->
cp_ring
->
handle
);
dev_priv
->
cp_ring
->
handle
);
DRM_DEBUG
(
"dev_priv->ring_rptr->handle %p
\n
"
,
DRM_DEBUG
(
"dev_priv->ring_rptr->handle %p
\n
"
,
dev_priv
->
ring_rptr
->
handle
);
dev_priv
->
ring_rptr
->
handle
);
DRM_DEBUG
(
"dev
_priv->buffers
->handle %p
\n
"
,
DRM_DEBUG
(
"dev
->agp_buffer_map
->handle %p
\n
"
,
dev
_priv
->
buffers
->
handle
);
dev
->
agp_buffer_map
->
handle
);
}
}
dev_priv
->
fb_location
=
(
RADEON_READ
(
RADEON_MC_FB_LOCATION
)
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 )
...
@@ -1213,12 +1213,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
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
->
agp
->
base
+
dev_priv
->
gart_vm_start
);
+
dev_priv
->
gart_vm_start
);
else
else
#endif
#endif
dev_priv
->
gart_buffers_offset
=
(
dev
_priv
->
buffers
->
offset
dev_priv
->
gart_buffers_offset
=
(
dev
->
agp_buffer_map
->
offset
-
dev
->
sg
->
handle
-
dev
->
sg
->
handle
+
dev_priv
->
gart_vm_start
);
+
dev_priv
->
gart_vm_start
);
...
@@ -1289,11 +1289,11 @@ int radeon_do_cleanup_cp( drm_device_t *dev )
...
@@ -1289,11 +1289,11 @@ int radeon_do_cleanup_cp( drm_device_t *dev )
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
if
(
!
dev_priv
->
is_pci
)
{
if
(
!
dev_priv
->
is_pci
)
{
if
(
dev_priv
->
cp_ring
!=
NULL
)
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
)
if
(
dev_priv
->
ring_rptr
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
ring_rptr
,
dev
);
drm_core_ioremapfree
(
dev_priv
->
ring_rptr
,
dev
);
if
(
dev
_priv
->
buffers
!=
NULL
)
if
(
dev
->
agp_buffer_map
!=
NULL
)
DRM_IOREMAPFREE
(
dev_priv
->
buffers
,
dev
);
drm_core_ioremapfree
(
dev
->
agp_buffer_map
,
dev
);
}
else
}
else
#endif
#endif
{
{
...
...
drivers/char/drm/radeon_drv.h
View file @
eaa8fe26
...
@@ -138,7 +138,6 @@ typedef struct drm_radeon_private {
...
@@ -138,7 +138,6 @@ typedef struct drm_radeon_private {
drm_local_map_t
*
mmio
;
drm_local_map_t
*
mmio
;
drm_local_map_t
*
cp_ring
;
drm_local_map_t
*
cp_ring
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
ring_rptr
;
drm_local_map_t
*
buffers
;
drm_local_map_t
*
gart_textures
;
drm_local_map_t
*
gart_textures
;
struct
mem_block
*
gart_heap
;
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,
...
@@ -1247,7 +1247,7 @@ static void radeon_cp_dispatch_indirect( drm_device_t *dev,
*/
*/
if
(
dwords
&
1
)
{
if
(
dwords
&
1
)
{
u32
*
data
=
(
u32
*
)
u32
*
data
=
(
u32
*
)
((
char
*
)
dev
_priv
->
buffers
->
handle
((
char
*
)
dev
->
agp_buffer_map
->
handle
+
buf
->
offset
+
start
);
+
buf
->
offset
+
start
);
data
[
dwords
++
]
=
RADEON_CP_PACKET2
;
data
[
dwords
++
]
=
RADEON_CP_PACKET2
;
}
}
...
@@ -1301,7 +1301,7 @@ static void radeon_cp_dispatch_indices( drm_device_t *dev,
...
@@ -1301,7 +1301,7 @@ static void radeon_cp_dispatch_indices( drm_device_t *dev,
dwords
=
(
prim
->
finish
-
prim
->
start
+
3
)
/
sizeof
(
u32
);
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
);
elt_buf
->
offset
+
prim
->
start
);
data
[
0
]
=
CP_PACKET3
(
RADEON_3D_RNDR_GEN_INDX_PRIM
,
dwords
-
2
);
data
[
0
]
=
CP_PACKET3
(
RADEON_3D_RNDR_GEN_INDX_PRIM
,
dwords
-
2
);
...
@@ -1445,7 +1445,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
...
@@ -1445,7 +1445,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
/* Dispatch the indirect buffer.
/* 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
;
dwords
=
size
/
4
;
buffer
[
0
]
=
CP_PACKET3
(
RADEON_CNTL_HOSTDATA_BLT
,
dwords
+
6
);
buffer
[
0
]
=
CP_PACKET3
(
RADEON_CNTL_HOSTDATA_BLT
,
dwords
+
6
);
buffer
[
1
]
=
(
RADEON_GMC_DST_PITCH_OFFSET_CNTL
|
buffer
[
1
]
=
(
RADEON_GMC_DST_PITCH_OFFSET_CNTL
|
...
@@ -2547,3 +2547,43 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) {
...
@@ -2547,3 +2547,43 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) {
return
0
;
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 @@
...
@@ -64,15 +64,4 @@
#define __HAVE_COUNTERS 5
#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
#endif
drivers/char/drm/sis_drv.c
View file @
eaa8fe26
...
@@ -46,3 +46,4 @@
...
@@ -46,3 +46,4 @@
#include "drm_proc.h"
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_vm.h"
#include "drm_stub.h"
#include "drm_stub.h"
drivers/char/drm/sis_drv.h
View file @
eaa8fe26
...
@@ -31,8 +31,6 @@
...
@@ -31,8 +31,6 @@
#include "sis_ds.h"
#include "sis_ds.h"
typedef
struct
drm_sis_private
{
typedef
struct
drm_sis_private
{
drm_map_t
*
buffers
;
memHeap_t
*
AGPHeap
;
memHeap_t
*
AGPHeap
;
memHeap_t
*
FBHeap
;
memHeap_t
*
FBHeap
;
}
drm_sis_private_t
;
}
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 )
...
@@ -326,7 +326,7 @@ int sis_ioctl_agp_free( DRM_IOCTL_ARGS )
return
0
;
return
0
;
}
}
int
sis_init_context
(
int
context
)
int
sis_init_context
(
struct
drm_device
*
dev
,
int
context
)
{
{
int
i
;
int
i
;
...
@@ -358,7 +358,7 @@ int sis_init_context(int context)
...
@@ -358,7 +358,7 @@ int sis_init_context(int context)
return
1
;
return
1
;
}
}
int
sis_final_context
(
int
context
)
int
sis_final_context
(
struct
drm_device
*
dev
,
int
context
)
{
{
int
i
;
int
i
;
...
@@ -404,3 +404,9 @@ int sis_final_context(int context)
...
@@ -404,3 +404,9 @@ int sis_final_context(int context)
return
1
;
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 @@
...
@@ -49,3 +49,8 @@
#include "drm_proc.h"
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_vm.h"
#include "drm_stub.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