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
bfef4707
Commit
bfef4707
authored
Nov 14, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update r128 driver to DRI CVS tree. Add getparam and vblank
irq handling.
parent
5bb5e22a
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
157 additions
and
4 deletions
+157
-4
drivers/char/drm/Makefile
drivers/char/drm/Makefile
+1
-1
drivers/char/drm/r128.h
drivers/char/drm/r128.h
+7
-3
drivers/char/drm/r128_drm.h
drivers/char/drm/r128_drm.h
+11
-0
drivers/char/drm/r128_drv.h
drivers/char/drm/r128_drv.h
+6
-0
drivers/char/drm/r128_irq.c
drivers/char/drm/r128_irq.c
+99
-0
drivers/char/drm/r128_state.c
drivers/char/drm/r128_state.c
+33
-0
No files found.
drivers/char/drm/Makefile
View file @
bfef4707
...
...
@@ -4,7 +4,7 @@
gamma-objs
:=
gamma_drv.o gamma_dma.o
tdfx-objs
:=
tdfx_drv.o
r128-objs
:=
r128_drv.o r128_cce.o r128_state.o
r128-objs
:=
r128_drv.o r128_cce.o r128_state.o
r128_irq.o
mga-objs
:=
mga_drv.o mga_dma.o mga_state.o mga_warp.o
i810-objs
:=
i810_drv.o i810_dma.o
i830-objs
:=
i830_drv.o i830_dma.o
...
...
drivers/char/drm/r128.h
View file @
bfef4707
...
...
@@ -47,10 +47,10 @@
#define DRIVER_NAME "r128"
#define DRIVER_DESC "ATI Rage 128"
#define DRIVER_DATE "200
10917
"
#define DRIVER_DATE "200
21029
"
#define DRIVER_MAJOR 2
#define DRIVER_MINOR
2
#define DRIVER_MINOR
3
#define DRIVER_PATCHLEVEL 0
...
...
@@ -70,7 +70,8 @@
[DRM_IOCTL_NR(DRM_IOCTL_R128_BLIT)] = { r128_cce_blit, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_DEPTH)] = { r128_cce_depth, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_R128_STIPPLE)] = { r128_cce_stipple, 1, 0 }, \
[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, 1 },
/* Driver customization:
*/
...
...
@@ -90,6 +91,9 @@
/* DMA customization:
*/
#define __HAVE_DMA 1
#define __HAVE_DMA_IRQ 1
#define __HAVE_VBL_IRQ 1
#define __HAVE_SHARED_IRQ 1
#if 0
/* GH: Remove this for now... */
...
...
drivers/char/drm/r128_drm.h
View file @
bfef4707
...
...
@@ -190,6 +190,7 @@ typedef struct drm_r128_sarea {
#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(0x4f, drm_r128_indirect_t)
#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( 0x50, drm_r128_fullscreen_t)
#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( 0x51, drm_r128_clear2_t)
#define DRM_IOCTL_R128_GETPARAM DRM_IOW( 0x52, drm_r128_getparam_t)
typedef
struct
drm_r128_init
{
enum
{
...
...
@@ -305,4 +306,14 @@ typedef struct drm_r128_fullscreen {
}
func
;
}
drm_r128_fullscreen_t
;
/* 2.3: An ioctl to get parameters that aren't available to the 3d
* client any other way.
*/
#define R128_PARAM_IRQ_NR 1
typedef
struct
drm_r128_getparam
{
int
param
;
int
*
value
;
}
drm_r128_getparam_t
;
#endif
drivers/char/drm/r128_drv.h
View file @
bfef4707
...
...
@@ -124,6 +124,7 @@ extern int r128_cce_idle( DRM_IOCTL_ARGS );
extern
int
r128_engine_reset
(
DRM_IOCTL_ARGS
);
extern
int
r128_fullscreen
(
DRM_IOCTL_ARGS
);
extern
int
r128_cce_buffers
(
DRM_IOCTL_ARGS
);
extern
int
r128_getparam
(
DRM_IOCTL_ARGS
);
extern
void
r128_freelist_reset
(
drm_device_t
*
dev
);
extern
drm_buf_t
*
r128_freelist_get
(
drm_device_t
*
dev
);
...
...
@@ -213,6 +214,11 @@ extern int r128_cce_indirect( DRM_IOCTL_ARGS );
#define R128_DST_PITCH_OFFSET_C 0x1c80
# define R128_DST_TILE (1 << 31)
#define R128_GEN_INT_CNTL 0x0040
# define R128_CRTC_VBLANK_INT_EN (1 << 0)
#define R128_GEN_INT_STATUS 0x0044
# define R128_CRTC_VBLANK_INT (1 << 0)
# define R128_CRTC_VBLANK_INT_AK (1 << 0)
#define R128_GEN_RESET_CNTL 0x00f0
# define R128_SOFT_RESET_GUI (1 << 0)
...
...
drivers/char/drm/r128_irq.c
0 → 100644
View file @
bfef4707
/* r128_irq.c -- IRQ handling for radeon -*- linux-c -*-
*
* Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
*
* The Weather Channel (TM) funded Tungsten Graphics to develop the
* initial release of the Radeon 8500 driver under the XFree86 license.
* This notice must be preserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
* Eric Anholt <anholt@FreeBSD.org>
*/
#include "r128.h"
#include "drmP.h"
#include "drm.h"
#include "r128_drm.h"
#include "r128_drv.h"
void
r128_dma_service
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_r128_private_t
*
dev_priv
=
(
drm_r128_private_t
*
)
dev
->
dev_private
;
int
status
;
status
=
R128_READ
(
R128_GEN_INT_STATUS
);
/* VBLANK interrupt */
if
(
status
&
R128_CRTC_VBLANK_INT
)
{
R128_WRITE
(
R128_GEN_INT_STATUS
,
R128_CRTC_VBLANK_INT_AK
);
atomic_inc
(
&
dev
->
vbl_received
);
DRM_WAKEUP
(
&
dev
->
vbl_queue
);
}
}
int
DRM
(
vblank_wait
)(
drm_device_t
*
dev
,
unsigned
int
*
sequence
)
{
unsigned
int
cur_vblank
;
int
ret
=
0
;
/* Assume that the user has missed the current sequence number
* by about a day rather than she wants to wait for years
* using vertical blanks...
*/
DRM_WAIT_ON
(
ret
,
dev
->
vbl_queue
,
3
*
DRM_HZ
,
(
(
(
cur_vblank
=
atomic_read
(
&
dev
->
vbl_received
)
)
+
~*
sequence
+
1
)
<=
(
1
<<
23
)
)
);
*
sequence
=
cur_vblank
;
return
ret
;
}
void
r128_driver_irq_preinstall
(
drm_device_t
*
dev
)
{
drm_r128_private_t
*
dev_priv
=
(
drm_r128_private_t
*
)
dev
->
dev_private
;
/* Disable *all* interrupts */
R128_WRITE
(
R128_GEN_INT_CNTL
,
0
);
/* Clear vblank bit if it's already high */
R128_WRITE
(
R128_GEN_INT_STATUS
,
R128_CRTC_VBLANK_INT_AK
);
}
void
r128_driver_irq_postinstall
(
drm_device_t
*
dev
)
{
drm_r128_private_t
*
dev_priv
=
(
drm_r128_private_t
*
)
dev
->
dev_private
;
/* Turn on VBL interrupt */
R128_WRITE
(
R128_GEN_INT_CNTL
,
R128_CRTC_VBLANK_INT_EN
);
}
void
r128_driver_irq_uninstall
(
drm_device_t
*
dev
)
{
drm_r128_private_t
*
dev_priv
=
(
drm_r128_private_t
*
)
dev
->
dev_private
;
if
(
dev_priv
)
{
/* Disable *all* interrupts */
R128_WRITE
(
R128_GEN_INT_CNTL
,
0
);
}
}
drivers/char/drm/r128_state.c
View file @
bfef4707
...
...
@@ -1564,3 +1564,36 @@ int r128_cce_indirect( DRM_IOCTL_ARGS )
return
0
;
}
int
r128_getparam
(
DRM_IOCTL_ARGS
)
{
DRM_DEVICE
;
drm_r128_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_r128_getparam_t
param
;
int
value
;
if
(
!
dev_priv
)
{
DRM_ERROR
(
"%s called with no initialization
\n
"
,
__FUNCTION__
);
return
DRM_ERR
(
EINVAL
);
}
DRM_COPY_FROM_USER_IOCTL
(
param
,
(
drm_r128_getparam_t
*
)
data
,
sizeof
(
param
)
);
DRM_DEBUG
(
"pid=%d
\n
"
,
DRM_CURRENTPID
);
switch
(
param
.
param
)
{
case
R128_PARAM_IRQ_NR
:
value
=
dev
->
irq
;
break
;
default:
return
DRM_ERR
(
EINVAL
);
}
if
(
DRM_COPY_TO_USER
(
param
.
value
,
&
value
,
sizeof
(
int
)
)
)
{
DRM_ERROR
(
"copy_to_user
\n
"
);
return
DRM_ERR
(
EFAULT
);
}
return
0
;
}
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