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
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
Show 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