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
nexedi
linux
Commits
cea2e2d2
Commit
cea2e2d2
authored
Aug 28, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linuxusb.bkbits.net/linus-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
895e216d
5e051f29
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
106 additions
and
69 deletions
+106
-69
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+1
-1
drivers/char/drm/drm_agpsupport.h
drivers/char/drm/drm_agpsupport.h
+2
-2
drivers/char/drm/drm_drv.h
drivers/char/drm/drm_drv.h
+9
-9
drivers/char/drm/drm_stub.h
drivers/char/drm/drm_stub.h
+2
-2
drivers/char/drm/drm_vm.h
drivers/char/drm/drm_vm.h
+16
-16
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_dma.c
+14
-12
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_dma.c
+14
-10
drivers/char/drm/mga_drv.h
drivers/char/drm/mga_drv.h
+1
-1
drivers/char/drm/radeon.h
drivers/char/drm/radeon.h
+4
-3
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+21
-3
drivers/char/drm/radeon_drv.h
drivers/char/drm/radeon_drv.h
+5
-0
drivers/char/drm/radeon_state.c
drivers/char/drm/radeon_state.c
+17
-10
No files found.
drivers/char/drm/drmP.h
View file @
cea2e2d2
...
@@ -165,7 +165,7 @@
...
@@ -165,7 +165,7 @@
#define pte_unmap(pte)
#define pte_unmap(pte)
#endif
#endif
#if LINUX_VERSION_CODE < 0x020
500
#if LINUX_VERSION_CODE < 0x020
413
/* KERNEL_VERSION(2,4,19) */
static
inline
struct
page
*
vmalloc_to_page
(
void
*
vmalloc_addr
)
static
inline
struct
page
*
vmalloc_to_page
(
void
*
vmalloc_addr
)
{
{
unsigned
long
addr
=
(
unsigned
long
)
vmalloc_addr
;
unsigned
long
addr
=
(
unsigned
long
)
vmalloc_addr
;
...
...
drivers/char/drm/drm_agpsupport.h
View file @
cea2e2d2
...
@@ -268,11 +268,11 @@ drm_agp_head_t *DRM(agp_init)(void)
...
@@ -268,11 +268,11 @@ drm_agp_head_t *DRM(agp_init)(void)
case
INTEL_I810
:
head
->
chipset
=
"Intel i810"
;
break
;
case
INTEL_I810
:
head
->
chipset
=
"Intel i810"
;
break
;
case
INTEL_I815
:
head
->
chipset
=
"Intel i815"
;
break
;
case
INTEL_I815
:
head
->
chipset
=
"Intel i815"
;
break
;
#if LINUX_VERSION_CODE >= 0x0204
15
#if LINUX_VERSION_CODE >= 0x0204
0f
/* KERNEL_VERSION(2,4,15) */
case
INTEL_I820
:
head
->
chipset
=
"Intel i820"
;
break
;
case
INTEL_I820
:
head
->
chipset
=
"Intel i820"
;
break
;
#endif
#endif
case
INTEL_I840
:
head
->
chipset
=
"Intel i840"
;
break
;
case
INTEL_I840
:
head
->
chipset
=
"Intel i840"
;
break
;
#if LINUX_VERSION_CODE >= 0x0204
15
#if LINUX_VERSION_CODE >= 0x0204
0f
/* KERNEL_VERSION(2,4,15) */
case
INTEL_I845
:
head
->
chipset
=
"Intel i845"
;
break
;
case
INTEL_I845
:
head
->
chipset
=
"Intel i845"
;
break
;
#endif
#endif
case
INTEL_I850
:
head
->
chipset
=
"Intel i850"
;
break
;
case
INTEL_I850
:
head
->
chipset
=
"Intel i850"
;
break
;
...
...
drivers/char/drm/drm_drv.h
View file @
cea2e2d2
...
@@ -115,15 +115,15 @@
...
@@ -115,15 +115,15 @@
#ifndef DRIVER_FOPS
#ifndef DRIVER_FOPS
#define DRIVER_FOPS \
#define DRIVER_FOPS \
static struct file_operations DRM(fops) = { \
static struct file_operations DRM(fops) = { \
owner:
THIS_MODULE, \
.owner =
THIS_MODULE, \
open:
DRM(open), \
.open =
DRM(open), \
flush:
DRM(flush), \
.flush =
DRM(flush), \
release: DRM(release),
\
.release = DRM(release),
\
ioctl:
DRM(ioctl), \
.ioctl =
DRM(ioctl), \
mmap:
DRM(mmap), \
.mmap =
DRM(mmap), \
read:
DRM(read), \
.read =
DRM(read), \
fasync:
DRM(fasync), \
.fasync =
DRM(fasync), \
poll:
DRM(poll), \
.poll =
DRM(poll), \
}
}
#endif
#endif
...
...
drivers/char/drm/drm_stub.h
View file @
cea2e2d2
...
@@ -66,8 +66,8 @@ static int DRM(stub_open)(struct inode *inode, struct file *filp)
...
@@ -66,8 +66,8 @@ static int DRM(stub_open)(struct inode *inode, struct file *filp)
}
}
static
struct
file_operations
DRM
(
stub_fops
)
=
{
static
struct
file_operations
DRM
(
stub_fops
)
=
{
owner:
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
open:
DRM
(
stub_open
)
.
open
=
DRM
(
stub_open
)
};
};
static
int
DRM
(
stub_getminor
)(
const
char
*
name
,
struct
file_operations
*
fops
,
static
int
DRM
(
stub_getminor
)(
const
char
*
name
,
struct
file_operations
*
fops
,
...
...
drivers/char/drm/drm_vm.h
View file @
cea2e2d2
...
@@ -33,27 +33,27 @@
...
@@ -33,27 +33,27 @@
#include "drmP.h"
#include "drmP.h"
struct
vm_operations_struct
DRM
(
vm_ops
)
=
{
struct
vm_operations_struct
DRM
(
vm_ops
)
=
{
nopage:
DRM
(
vm_nopage
),
.
nopage
=
DRM
(
vm_nopage
),
open:
DRM
(
vm_open
),
.
open
=
DRM
(
vm_open
),
close:
DRM
(
vm_close
),
.
close
=
DRM
(
vm_close
),
};
};
struct
vm_operations_struct
DRM
(
vm_shm_ops
)
=
{
struct
vm_operations_struct
DRM
(
vm_shm_ops
)
=
{
nopage:
DRM
(
vm_shm_nopage
),
.
nopage
=
DRM
(
vm_shm_nopage
),
open:
DRM
(
vm_open
),
.
open
=
DRM
(
vm_open
),
close:
DRM
(
vm_shm_close
),
.
close
=
DRM
(
vm_shm_close
),
};
};
struct
vm_operations_struct
DRM
(
vm_dma_ops
)
=
{
struct
vm_operations_struct
DRM
(
vm_dma_ops
)
=
{
nopage:
DRM
(
vm_dma_nopage
),
.
nopage
=
DRM
(
vm_dma_nopage
),
open:
DRM
(
vm_open
),
.
open
=
DRM
(
vm_open
),
close:
DRM
(
vm_close
),
.
close
=
DRM
(
vm_close
),
};
};
struct
vm_operations_struct
DRM
(
vm_sg_ops
)
=
{
struct
vm_operations_struct
DRM
(
vm_sg_ops
)
=
{
nopage:
DRM
(
vm_sg_nopage
),
.
nopage
=
DRM
(
vm_sg_nopage
),
open:
DRM
(
vm_open
),
.
open
=
DRM
(
vm_open
),
close:
DRM
(
vm_close
),
.
close
=
DRM
(
vm_close
),
};
};
struct
page
*
DRM
(
vm_nopage
)(
struct
vm_area_struct
*
vma
,
struct
page
*
DRM
(
vm_nopage
)(
struct
vm_area_struct
*
vma
,
...
@@ -343,7 +343,7 @@ int DRM(mmap_dma)(struct file *filp, struct vm_area_struct *vma)
...
@@ -343,7 +343,7 @@ int DRM(mmap_dma)(struct file *filp, struct vm_area_struct *vma)
vma
->
vm_ops
=
&
DRM
(
vm_dma_ops
);
vma
->
vm_ops
=
&
DRM
(
vm_dma_ops
);
#if LINUX_VERSION_CODE <= 0x0204
14
#if LINUX_VERSION_CODE <= 0x0204
0e
/* KERNEL_VERSION(2,4,14) */
vma
->
vm_flags
|=
VM_LOCKED
|
VM_SHM
;
/* Don't swap */
vma
->
vm_flags
|=
VM_LOCKED
|
VM_SHM
;
/* Don't swap */
#else
#else
vma
->
vm_flags
|=
VM_RESERVED
;
/* Don't swap */
vma
->
vm_flags
|=
VM_RESERVED
;
/* Don't swap */
...
@@ -473,7 +473,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
...
@@ -473,7 +473,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
vma
->
vm_private_data
=
(
void
*
)
map
;
vma
->
vm_private_data
=
(
void
*
)
map
;
/* Don't let this area swap. Change when
/* Don't let this area swap. Change when
DRM_KERNEL advisory is supported. */
DRM_KERNEL advisory is supported. */
#if LINUX_VERSION_CODE <= 0x0204
14
#if LINUX_VERSION_CODE <= 0x0204
0e
/* KERNEL_VERSION(2,4,14) */
vma
->
vm_flags
|=
VM_LOCKED
;
vma
->
vm_flags
|=
VM_LOCKED
;
#else
#else
vma
->
vm_flags
|=
VM_RESERVED
;
vma
->
vm_flags
|=
VM_RESERVED
;
...
@@ -482,7 +482,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
...
@@ -482,7 +482,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
case
_DRM_SCATTER_GATHER
:
case
_DRM_SCATTER_GATHER
:
vma
->
vm_ops
=
&
DRM
(
vm_sg_ops
);
vma
->
vm_ops
=
&
DRM
(
vm_sg_ops
);
vma
->
vm_private_data
=
(
void
*
)
map
;
vma
->
vm_private_data
=
(
void
*
)
map
;
#if LINUX_VERSION_CODE <= 0x0204
14
#if LINUX_VERSION_CODE <= 0x0204
0e
/* KERNEL_VERSION(2,4,14) */
vma
->
vm_flags
|=
VM_LOCKED
;
vma
->
vm_flags
|=
VM_LOCKED
;
#else
#else
vma
->
vm_flags
|=
VM_RESERVED
;
vma
->
vm_flags
|=
VM_RESERVED
;
...
@@ -491,7 +491,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
...
@@ -491,7 +491,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
default:
default:
return
-
EINVAL
;
/* This should never happen. */
return
-
EINVAL
;
/* This should never happen. */
}
}
#if LINUX_VERSION_CODE <= 0x0204
14
#if LINUX_VERSION_CODE <= 0x0204
0e
/* KERNEL_VERSION(2,4,14) */
vma
->
vm_flags
|=
VM_LOCKED
|
VM_SHM
;
/* Don't swap */
vma
->
vm_flags
|=
VM_LOCKED
|
VM_SHM
;
/* Don't swap */
#else
#else
vma
->
vm_flags
|=
VM_RESERVED
;
/* Don't swap */
vma
->
vm_flags
|=
VM_RESERVED
;
/* Don't swap */
...
...
drivers/char/drm/i810_dma.c
View file @
cea2e2d2
...
@@ -131,14 +131,14 @@ static int i810_freelist_put(drm_device_t *dev, drm_buf_t *buf)
...
@@ -131,14 +131,14 @@ static int i810_freelist_put(drm_device_t *dev, drm_buf_t *buf)
}
}
static
struct
file_operations
i810_buffer_fops
=
{
static
struct
file_operations
i810_buffer_fops
=
{
open:
DRM
(
open
),
.
open
=
DRM
(
open
),
flush:
DRM
(
flush
),
.
flush
=
DRM
(
flush
),
release:
DRM
(
release
),
.
release
=
DRM
(
release
),
ioctl:
DRM
(
ioctl
),
.
ioctl
=
DRM
(
ioctl
),
mmap:
i810_mmap_buffers
,
.
mmap
=
i810_mmap_buffers
,
read:
DRM
(
read
),
.
read
=
DRM
(
read
),
fasync:
DRM
(
fasync
),
.
fasync
=
DRM
(
fasync
),
poll:
DRM
(
poll
),
.
poll
=
DRM
(
poll
),
};
};
int
i810_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
)
int
i810_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
)
...
@@ -272,12 +272,16 @@ static unsigned long i810_alloc_page(drm_device_t *dev)
...
@@ -272,12 +272,16 @@ static unsigned long i810_alloc_page(drm_device_t *dev)
if
(
address
==
0UL
)
if
(
address
==
0UL
)
return
0
;
return
0
;
#if LINUX_VERSION_CODE < 0x020
500
#if LINUX_VERSION_CODE < 0x020
409
atomic_inc
(
&
virt_to_page
(
address
)
->
count
);
atomic_inc
(
&
virt_to_page
(
address
)
->
count
);
set_bit
(
PG_locked
,
&
virt_to_page
(
address
)
->
flags
);
set_bit
(
PG_locked
,
&
virt_to_page
(
address
)
->
flags
);
#else
#else
get_page
(
virt_to_page
(
address
));
get_page
(
virt_to_page
(
address
));
#if LINUX_VERSION_CODE < 0x020500
LockPage
(
virt_to_page
(
address
));
#else
SetPageLocked
(
virt_to_page
(
address
));
SetPageLocked
(
virt_to_page
(
address
));
#endif
#endif
#endif
return
address
;
return
address
;
}
}
...
@@ -285,7 +289,7 @@ static unsigned long i810_alloc_page(drm_device_t *dev)
...
@@ -285,7 +289,7 @@ static unsigned long i810_alloc_page(drm_device_t *dev)
static
void
i810_free_page
(
drm_device_t
*
dev
,
unsigned
long
page
)
static
void
i810_free_page
(
drm_device_t
*
dev
,
unsigned
long
page
)
{
{
if
(
page
)
{
if
(
page
)
{
#if LINUX_VERSION_CODE < 0x020
500
#if LINUX_VERSION_CODE < 0x020
409
atomic_dec
(
&
virt_to_page
(
page
)
->
count
);
atomic_dec
(
&
virt_to_page
(
page
)
->
count
);
clear_bit
(
PG_locked
,
&
virt_to_page
(
page
)
->
flags
);
clear_bit
(
PG_locked
,
&
virt_to_page
(
page
)
->
flags
);
wake_up
(
&
virt_to_page
(
page
)
->
wait
);
wake_up
(
&
virt_to_page
(
page
)
->
wait
);
...
@@ -339,8 +343,6 @@ static int i810_wait_ring(drm_device_t *dev, int n)
...
@@ -339,8 +343,6 @@ static int i810_wait_ring(drm_device_t *dev, int n)
end
=
jiffies
+
(
HZ
*
3
);
end
=
jiffies
+
(
HZ
*
3
);
while
(
ring
->
space
<
n
)
{
while
(
ring
->
space
<
n
)
{
int
i
;
ring
->
head
=
I810_READ
(
LP_RING
+
RING_HEAD
)
&
HEAD_ADDR
;
ring
->
head
=
I810_READ
(
LP_RING
+
RING_HEAD
)
&
HEAD_ADDR
;
ring
->
space
=
ring
->
head
-
(
ring
->
tail
+
8
);
ring
->
space
=
ring
->
head
-
(
ring
->
tail
+
8
);
if
(
ring
->
space
<
0
)
ring
->
space
+=
ring
->
Size
;
if
(
ring
->
space
<
0
)
ring
->
space
+=
ring
->
Size
;
...
...
drivers/char/drm/i830_dma.c
View file @
cea2e2d2
...
@@ -153,14 +153,14 @@ static int i830_freelist_put(drm_device_t *dev, drm_buf_t *buf)
...
@@ -153,14 +153,14 @@ static int i830_freelist_put(drm_device_t *dev, drm_buf_t *buf)
}
}
static
struct
file_operations
i830_buffer_fops
=
{
static
struct
file_operations
i830_buffer_fops
=
{
open:
DRM
(
open
),
.
open
=
DRM
(
open
),
flush:
DRM
(
flush
),
.
flush
=
DRM
(
flush
),
release:
DRM
(
release
),
.
release
=
DRM
(
release
),
ioctl:
DRM
(
ioctl
),
.
ioctl
=
DRM
(
ioctl
),
mmap:
i830_mmap_buffers
,
.
mmap
=
i830_mmap_buffers
,
read:
DRM
(
read
),
.
read
=
DRM
(
read
),
fasync:
DRM
(
fasync
),
.
fasync
=
DRM
(
fasync
),
poll:
DRM
(
poll
),
.
poll
=
DRM
(
poll
),
};
};
int
i830_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
)
int
i830_mmap_buffers
(
struct
file
*
filp
,
struct
vm_area_struct
*
vma
)
...
@@ -303,12 +303,16 @@ static unsigned long i830_alloc_page(drm_device_t *dev)
...
@@ -303,12 +303,16 @@ static unsigned long i830_alloc_page(drm_device_t *dev)
if
(
address
==
0UL
)
if
(
address
==
0UL
)
return
0
;
return
0
;
#if LINUX_VERSION_CODE < 0x020
500
#if LINUX_VERSION_CODE < 0x020
409
atomic_inc
(
&
virt_to_page
(
address
)
->
count
);
atomic_inc
(
&
virt_to_page
(
address
)
->
count
);
set_bit
(
PG_locked
,
&
virt_to_page
(
address
)
->
flags
);
set_bit
(
PG_locked
,
&
virt_to_page
(
address
)
->
flags
);
#else
#else
get_page
(
virt_to_page
(
address
));
get_page
(
virt_to_page
(
address
));
#if LINUX_VERSION_CODE < 0x020500
LockPage
(
virt_to_page
(
address
));
#else
SetPageLocked
(
virt_to_page
(
address
));
SetPageLocked
(
virt_to_page
(
address
));
#endif
#endif
#endif
return
address
;
return
address
;
}
}
...
@@ -316,7 +320,7 @@ static unsigned long i830_alloc_page(drm_device_t *dev)
...
@@ -316,7 +320,7 @@ static unsigned long i830_alloc_page(drm_device_t *dev)
static
void
i830_free_page
(
drm_device_t
*
dev
,
unsigned
long
page
)
static
void
i830_free_page
(
drm_device_t
*
dev
,
unsigned
long
page
)
{
{
if
(
page
)
{
if
(
page
)
{
#if LINUX_VERSION_CODE < 0x020
500
#if LINUX_VERSION_CODE < 0x020
409
atomic_dec
(
&
virt_to_page
(
page
)
->
count
);
atomic_dec
(
&
virt_to_page
(
page
)
->
count
);
clear_bit
(
PG_locked
,
&
virt_to_page
(
page
)
->
flags
);
clear_bit
(
PG_locked
,
&
virt_to_page
(
page
)
->
flags
);
wake_up
(
&
virt_to_page
(
page
)
->
wait
);
wake_up
(
&
virt_to_page
(
page
)
->
wait
);
...
...
drivers/char/drm/mga_drv.h
View file @
cea2e2d2
...
@@ -38,7 +38,7 @@ typedef struct drm_mga_primary_buffer {
...
@@ -38,7 +38,7 @@ typedef struct drm_mga_primary_buffer {
u32
tail
;
u32
tail
;
int
space
;
int
space
;
int
wrapped
;
volatile
long
wrapped
;
volatile
u32
*
status
;
volatile
u32
*
status
;
...
...
drivers/char/drm/radeon.h
View file @
cea2e2d2
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
#define DRIVER_DATE "20020611"
#define DRIVER_DATE "20020611"
#define DRIVER_MAJOR 1
#define DRIVER_MAJOR 1
#define DRIVER_MINOR
4
#define DRIVER_MINOR
5
#define DRIVER_PATCHLEVEL 0
#define DRIVER_PATCHLEVEL 0
/* Interface history:
/* Interface history:
...
@@ -64,9 +64,10 @@
...
@@ -64,9 +64,10 @@
* - Add support for new radeon packets (keith)
* - Add support for new radeon packets (keith)
* - Add getparam ioctl (keith)
* - Add getparam ioctl (keith)
* - Add flip-buffers ioctl, deprecate fullscreen foo (keith).
* - Add flip-buffers ioctl, deprecate fullscreen foo (keith).
* 1.4 - Add r200 packets to cmdbuf ioctl
* 1.4 - Add scratch registers to get_param ioctl.
* 1.5 - Add r200 packets to cmdbuf ioctl
* - Add r200 function to init ioctl
* - Add r200 function to init ioctl
* - Add 'scalar2'
hack to cmdbuf ioctl (must die)
* - Add 'scalar2'
instruction to cmdbuf
*/
*/
#define DRIVER_IOCTLS \
#define DRIVER_IOCTLS \
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \
...
...
drivers/char/drm/radeon_cp.c
View file @
cea2e2d2
...
@@ -925,6 +925,24 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
...
@@ -925,6 +925,24 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
RADEON_WRITE
(
RADEON_SCRATCH_UMSK
,
0x7
);
RADEON_WRITE
(
RADEON_SCRATCH_UMSK
,
0x7
);
/* Writeback doesn't seem to work everywhere, test it first */
DRM_WRITE32
(
&
dev_priv
->
scratch
[
1
],
0
);
RADEON_WRITE
(
RADEON_SCRATCH_REG1
,
0xdeadbeef
);
for
(
tmp
=
0
;
tmp
<
dev_priv
->
usec_timeout
;
tmp
++
)
{
if
(
DRM_READ32
(
&
dev_priv
->
scratch
[
1
]
)
==
0xdeadbeef
)
break
;
DRM_UDELAY
(
1
);
}
if
(
tmp
<
dev_priv
->
usec_timeout
)
{
dev_priv
->
writeback_works
=
1
;
DRM_DEBUG
(
"writeback test succeeded, tmp=%d
\n
"
,
tmp
);
}
else
{
dev_priv
->
writeback_works
=
0
;
DRM_DEBUG
(
"writeback test failed
\n
"
);
}
dev_priv
->
sarea_priv
->
last_frame
=
dev_priv
->
scratch
[
0
]
=
0
;
dev_priv
->
sarea_priv
->
last_frame
=
dev_priv
->
scratch
[
0
]
=
0
;
RADEON_WRITE
(
RADEON_LAST_FRAME_REG
,
RADEON_WRITE
(
RADEON_LAST_FRAME_REG
,
dev_priv
->
sarea_priv
->
last_frame
);
dev_priv
->
sarea_priv
->
last_frame
);
...
@@ -1000,7 +1018,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
...
@@ -1000,7 +1018,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
}
}
dev_priv
->
is_r200
=
(
init
->
func
==
RADEON_INIT_R200_CP
);
dev_priv
->
is_r200
=
(
init
->
func
==
RADEON_INIT_R200_CP
);
dev_priv
->
do_boxes
=
1
;
dev_priv
->
do_boxes
=
0
;
dev_priv
->
cp_mode
=
init
->
cp_mode
;
dev_priv
->
cp_mode
=
init
->
cp_mode
;
/* We don't support anything other than bus-mastering ring mode,
/* We don't support anything other than bus-mastering ring mode,
...
@@ -1456,8 +1474,8 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev )
...
@@ -1456,8 +1474,8 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev )
start
=
dev_priv
->
last_buf
;
start
=
dev_priv
->
last_buf
;
for
(
t
=
0
;
t
<
dev_priv
->
usec_timeout
;
t
++
)
{
for
(
t
=
0
;
t
<
dev_priv
->
usec_timeout
;
t
++
)
{
u32
done_age
=
DRM_READ32
(
&
dev_priv
->
scratch
[
1
]
);
u32
done_age
=
GET_SCRATCH
(
1
);
DRM_DEBUG
(
"done_age = %d
\n
"
,
done_age
);
for
(
i
=
start
;
i
<
dma
->
buf_count
;
i
++
)
{
for
(
i
=
start
;
i
<
dma
->
buf_count
;
i
++
)
{
buf
=
dma
->
buflist
[
i
];
buf
=
dma
->
buflist
[
i
];
buf_priv
=
buf
->
dev_private
;
buf_priv
=
buf
->
dev_private
;
...
...
drivers/char/drm/radeon_drv.h
View file @
cea2e2d2
...
@@ -76,6 +76,7 @@ typedef struct drm_radeon_private {
...
@@ -76,6 +76,7 @@ typedef struct drm_radeon_private {
drm_radeon_freelist_t
*
tail
;
drm_radeon_freelist_t
*
tail
;
int
last_buf
;
int
last_buf
;
volatile
u32
*
scratch
;
volatile
u32
*
scratch
;
int
writeback_works
;
int
usec_timeout
;
int
usec_timeout
;
...
@@ -233,6 +234,10 @@ extern int radeon_cp_flip( DRM_IOCTL_ARGS );
...
@@ -233,6 +234,10 @@ extern int radeon_cp_flip( DRM_IOCTL_ARGS );
#define RADEON_SCRATCH_UMSK 0x0770
#define RADEON_SCRATCH_UMSK 0x0770
#define RADEON_SCRATCH_ADDR 0x0774
#define RADEON_SCRATCH_ADDR 0x0774
#define GET_SCRATCH( x ) (dev_priv->writeback_works \
? DRM_READ32( &dev_priv->scratch[(x)] ) \
: RADEON_READ( RADEON_SCRATCH_REG0 + 4*(x) ) )
#define RADEON_HOST_PATH_CNTL 0x0130
#define RADEON_HOST_PATH_CNTL 0x0130
# define RADEON_HDP_SOFT_RESET (1 << 26)
# define RADEON_HDP_SOFT_RESET (1 << 26)
# define RADEON_HDP_WC_TIMEOUT_MASK (7 << 28)
# define RADEON_HDP_WC_TIMEOUT_MASK (7 << 28)
...
...
drivers/char/drm/radeon_state.c
View file @
cea2e2d2
...
@@ -50,8 +50,7 @@ static __inline__ void radeon_emit_clip_rect( drm_radeon_private_t *dev_priv,
...
@@ -50,8 +50,7 @@ static __inline__ void radeon_emit_clip_rect( drm_radeon_private_t *dev_priv,
OUT_RING
(
CP_PACKET0
(
RADEON_RE_TOP_LEFT
,
0
)
);
OUT_RING
(
CP_PACKET0
(
RADEON_RE_TOP_LEFT
,
0
)
);
OUT_RING
(
(
box
->
y1
<<
16
)
|
box
->
x1
);
OUT_RING
(
(
box
->
y1
<<
16
)
|
box
->
x1
);
OUT_RING
(
CP_PACKET0
(
RADEON_RE_WIDTH_HEIGHT
,
0
)
);
OUT_RING
(
CP_PACKET0
(
RADEON_RE_WIDTH_HEIGHT
,
0
)
);
/* OUT_RING( ((box->y2 - 1) << 16) | (box->x2 - 1) );*/
OUT_RING
(
((
box
->
y2
-
1
)
<<
16
)
|
(
box
->
x2
-
1
)
);
OUT_RING
(
(
box
->
y2
<<
16
)
|
box
->
x2
);
ADVANCE_RING
();
ADVANCE_RING
();
}
}
...
@@ -412,7 +411,6 @@ static void radeon_cp_dispatch_clear( drm_device_t *dev,
...
@@ -412,7 +411,6 @@ static void radeon_cp_dispatch_clear( drm_device_t *dev,
RING_LOCALS
;
RING_LOCALS
;
DRM_DEBUG
(
"flags = 0x%x
\n
"
,
flags
);
DRM_DEBUG
(
"flags = 0x%x
\n
"
,
flags
);
dev_priv
->
stats
.
clears
++
;
dev_priv
->
stats
.
clears
++
;
if
(
dev_priv
->
page_flipping
&&
dev_priv
->
current_page
==
1
)
{
if
(
dev_priv
->
page_flipping
&&
dev_priv
->
current_page
==
1
)
{
...
@@ -810,9 +808,6 @@ static void radeon_cp_dispatch_flip( drm_device_t *dev )
...
@@ -810,9 +808,6 @@ static void radeon_cp_dispatch_flip( drm_device_t *dev )
BEGIN_RING
(
4
);
BEGIN_RING
(
4
);
RADEON_WAIT_UNTIL_3D_IDLE
();
RADEON_WAIT_UNTIL_3D_IDLE
();
/*
RADEON_WAIT_UNTIL_PAGE_FLIPPED();
*/
OUT_RING
(
CP_PACKET0
(
RADEON_CRTC_OFFSET
,
0
)
);
OUT_RING
(
CP_PACKET0
(
RADEON_CRTC_OFFSET
,
0
)
);
if
(
dev_priv
->
current_page
==
0
)
{
if
(
dev_priv
->
current_page
==
0
)
{
...
@@ -1941,6 +1936,19 @@ static int radeon_emit_packet3_cliprect( drm_device_t *dev,
...
@@ -1941,6 +1936,19 @@ static int radeon_emit_packet3_cliprect( drm_device_t *dev,
if
(
i
<
cmdbuf
->
nbox
)
{
if
(
i
<
cmdbuf
->
nbox
)
{
if
(
DRM_COPY_FROM_USER_UNCHECKED
(
&
box
,
&
boxes
[
i
],
sizeof
(
box
)
))
if
(
DRM_COPY_FROM_USER_UNCHECKED
(
&
box
,
&
boxes
[
i
],
sizeof
(
box
)
))
return
DRM_ERR
(
EFAULT
);
return
DRM_ERR
(
EFAULT
);
/* FIXME The second and subsequent times round this loop, send a
* WAIT_UNTIL_3D_IDLE before calling emit_clip_rect(). This
* fixes a lockup on fast machines when sending several
* cliprects with a cmdbuf, as when waving a 2D window over
* a 3D window. Something in the commands from user space
* seems to hang the card when they're sent several times
* in a row. That would be the correct place to fix it but
* this works around it until I can figure that out - Tim Smith */
if
(
i
)
{
BEGIN_RING
(
2
);
RADEON_WAIT_UNTIL_3D_IDLE
();
ADVANCE_RING
();
}
radeon_emit_clip_rect
(
dev_priv
,
&
box
);
radeon_emit_clip_rect
(
dev_priv
,
&
box
);
}
}
...
@@ -1949,7 +1957,6 @@ static int radeon_emit_packet3_cliprect( drm_device_t *dev,
...
@@ -1949,7 +1957,6 @@ static int radeon_emit_packet3_cliprect( drm_device_t *dev,
ADVANCE_RING
();
ADVANCE_RING
();
}
while
(
++
i
<
cmdbuf
->
nbox
);
}
while
(
++
i
<
cmdbuf
->
nbox
);
if
(
cmdbuf
->
nbox
==
1
)
if
(
cmdbuf
->
nbox
==
1
)
cmdbuf
->
nbox
=
0
;
cmdbuf
->
nbox
=
0
;
...
@@ -2112,14 +2119,14 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS )
...
@@ -2112,14 +2119,14 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS )
break
;
break
;
case
RADEON_PARAM_LAST_FRAME
:
case
RADEON_PARAM_LAST_FRAME
:
dev_priv
->
stats
.
last_frame_reads
++
;
dev_priv
->
stats
.
last_frame_reads
++
;
value
=
DRM_READ32
(
&
dev_priv
->
scratch
[
0
]
);
value
=
GET_SCRATCH
(
0
);
break
;
break
;
case
RADEON_PARAM_LAST_DISPATCH
:
case
RADEON_PARAM_LAST_DISPATCH
:
value
=
DRM_READ32
(
&
dev_priv
->
scratch
[
1
]
);
value
=
GET_SCRATCH
(
1
);
break
;
break
;
case
RADEON_PARAM_LAST_CLEAR
:
case
RADEON_PARAM_LAST_CLEAR
:
dev_priv
->
stats
.
last_clear_reads
++
;
dev_priv
->
stats
.
last_clear_reads
++
;
value
=
DRM_READ32
(
&
dev_priv
->
scratch
[
2
]
);
value
=
GET_SCRATCH
(
2
);
break
;
break
;
default:
default:
return
DRM_ERR
(
EINVAL
);
return
DRM_ERR
(
EINVAL
);
...
...
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