diff options
author | idr <idr> | 2003-04-07 21:50:07 +0000 |
---|---|---|
committer | idr <idr> | 2003-04-07 21:50:07 +0000 |
commit | 45c68b451f24380ab2c559ff22727db98674380c (patch) | |
tree | 0fa780ab3e28d5811c50c03fb96b6e50c2699e0b | |
parent | b4822972522a7bc360e36b924785ce1a0b348771 (diff) |
"Final" round of trunk-to-branch merges.texmem-0-0-1-20030407
229 files changed, 659 insertions, 55306 deletions
diff --git a/xc/extras/Mesa/docs/VERSIONS b/xc/extras/Mesa/docs/VERSIONS index b5626cc8d..8ab9c9a2f 100644 --- a/xc/extras/Mesa/docs/VERSIONS +++ b/xc/extras/Mesa/docs/VERSIONS @@ -1,5 +1,4 @@ - Mesa Version History ==================== @@ -1081,15 +1080,53 @@ Mesa Version History - fixed color overflow problem in DOT3 texture env mode -5.1 Month day, 2003 +5.0.1 March 30, 2003 + New: + - DOS driver updates from Daniel Borca + - updated GL/gl_mangle.h file (Bill Hoffman) + Bug fixes: + - auto mipmap generation for cube maps was broken (bug 641363) + - writing/clearing software alpha channels was unreliable + - minor compilation fixes for OS/2 (Evgeny Kotsuba) + - fixed some bad assertions found with shadowtex demo + - fixed error checking bug in glCopyTexSubImage2D (bug 659020) + - glRotate(angle, -x, 0, 0) was incorrect (bug 659677) + - fixed potential segfault in texture object validation (bug 659012) + - fixed some bogus code in _mesa_test_os_sse_exception_support (Linus) + - fix fog stride bug in tnl code for h/w drivers (Michel Danzer) + - fixed glActiveTexture / glMatrixMode(GL_TEXTURE) bug (#669080) + - glGet(GL_CURRENT_SECONDARY_COLOR) should return 4 values, not 3 + - fixed compilation problem on Solaris7/x86 (bug 536406) + - fixed prefetch bug in 3DNow! code (Felix Kuhling) + - fixed NeXT build problem (FABSF macro) + - glDrawPixels Z values when glPixelZoom!=1 were invalid (bug 687811) + - zoomed glDraw/CopyPixels with clipping sometimes failed (bug 689964) + - AA line and triangle Z values are now rounded, not truncated + - fixed color interpolation bug when GLchan==GLfloat (bug 694461) + - glArePrograms/TexturesResident() wasn't 100% correct (Jose Fonseca) + - fixed a minor GL_COLOR_MATERIAL bug + - NV vertex program EXP instruction was broken + - glColorMask misbehaved with X window / pixmap rendering + - fix autoconf/libtool GLU C++ linker problem on Linux (a total hack) + - attempt to fix GGI compilation problem when MesaDemos not present + - NV vertex program ARL-relative fetches didn't work + Changes: + - use glPolygonOffset in gloss demo to avoid z-fighting artifacts + - updated winpos and pointblast demos to use ARB extensions + - disable SPARC normal transformation code (bug 673938) + - GLU fixes for OS/2 (Evgeny Kotsuba) + + +5.0.2 Month day, 2003 New: - - GL_ATI_texture_env_combine3 extension (Ian Romanick) - - GL_SGI_texture_color_table extension (Eric Plante) - - new X86 feature detection code (Petr Sebor) Bug fixes: - - really enable OpenGL 1.4 features in DOS driver. - - glAreProgramsResidentNV was slightly incorrect - - fixed issues in glDrawPixels and glCopyPixels for very wide images + - fixed texgen problem causing texcoord's Q to be zero (stex3d) + - default GL_TEXTURE_COMPARE_MODE_ARB was wrong + - GL_CURRENT_MATRIX_NV query was wrong + - GL_CURRENT_MATRIX_STACK_DEPTH_NV query was off by one + - GL_LIST_MODE query wasn't correct + - GL_FOG_COORDINATE_SOURCE_EXT query wasn't supported + - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT query returned wrong value + - blended, wide lines didn't always work correctly (bug 711595) Changes: - - dropped API trace feature (src/Trace/) diff --git a/xc/extras/Mesa/include/GL/gl.h b/xc/extras/Mesa/include/GL/gl.h index 79de16821..93398c252 100644 --- a/xc/extras/Mesa/include/GL/gl.h +++ b/xc/extras/Mesa/include/GL/gl.h @@ -1,5 +1,3 @@ -/* $Id: gl.h,v 1.26.2.2 2003/04/02 04:28:36 idr Exp $ */ - /* * Mesa 3-D graphics library * Version: 5.0.1 diff --git a/xc/extras/Mesa/include/GL/glext.h b/xc/extras/Mesa/include/GL/glext.h index 7d1f396bb..245f100c7 100644 --- a/xc/extras/Mesa/include/GL/glext.h +++ b/xc/extras/Mesa/include/GL/glext.h @@ -2423,11 +2423,6 @@ extern "C" { #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 #endif -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif /*************************************************************/ @@ -5021,9 +5016,6 @@ GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); typedef void (APIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #endif -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif #ifdef __cplusplus } diff --git a/xc/extras/Mesa/include/GL/xmesa.h b/xc/extras/Mesa/include/GL/xmesa.h index 49a511cc9..2b7f36754 100644 --- a/xc/extras/Mesa/include/GL/xmesa.h +++ b/xc/extras/Mesa/include/GL/xmesa.h @@ -1,4 +1,3 @@ - /* * Mesa 3-D graphics library * Version: 4.1 diff --git a/xc/extras/Mesa/include/GL/xmesa_x.h b/xc/extras/Mesa/include/GL/xmesa_x.h index ee92e975b..831c98014 100644 --- a/xc/extras/Mesa/include/GL/xmesa_x.h +++ b/xc/extras/Mesa/include/GL/xmesa_x.h @@ -30,7 +30,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * Authors: * Kevin E. Martin <kevin@precisioninsight.com> * - * $Header: /home/ajax/dri-backup/xc/xc/extras/Mesa/include/GL/Attic/xmesa_x.h,v 1.7.14.1 2002/12/04 22:36:11 idr Exp $ + * $Header: /home/ajax/dri-backup/xc/xc/extras/Mesa/include/GL/Attic/xmesa_x.h,v 1.7.14.2 2003/04/07 21:50:43 idr Exp $ */ #ifndef _XMESA_X_H_ diff --git a/xc/extras/Mesa/include/GL/xmesa_xf86.h b/xc/extras/Mesa/include/GL/xmesa_xf86.h index 08b7f461c..48ae615f1 100644 --- a/xc/extras/Mesa/include/GL/xmesa_xf86.h +++ b/xc/extras/Mesa/include/GL/xmesa_xf86.h @@ -30,7 +30,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * Authors: * Kevin E. Martin <kevin@precisioninsight.com> * - * $Header: /home/ajax/dri-backup/xc/xc/extras/Mesa/include/GL/Attic/xmesa_xf86.h,v 1.8.14.1 2002/12/04 22:36:20 idr Exp $ + * $Header: /home/ajax/dri-backup/xc/xc/extras/Mesa/include/GL/Attic/xmesa_xf86.h,v 1.8.14.2 2003/04/07 21:50:44 idr Exp $ */ #ifndef _XMESA_XF86_H_ diff --git a/xc/extras/Mesa/src/OSmesa/osmesa.c b/xc/extras/Mesa/src/OSmesa/osmesa.c index e5a79e1c3..02303cd73 100644 --- a/xc/extras/Mesa/src/OSmesa/osmesa.c +++ b/xc/extras/Mesa/src/OSmesa/osmesa.c @@ -1,3 +1,4 @@ + /* * Mesa 3-D graphics library * Version: 5.0 diff --git a/xc/extras/Mesa/src/X/fakeglx.c b/xc/extras/Mesa/src/X/fakeglx.c index 279425ac1..78907bff5 100644 --- a/xc/extras/Mesa/src/X/fakeglx.c +++ b/xc/extras/Mesa/src/X/fakeglx.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 5.0 + * Version: 5.0.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -65,7 +65,7 @@ #define SERVER_MINOR_VERSION 4 /* This is appended onto the glXGetClient/ServerString version strings. */ -#define MESA_GLX_VERSION "Mesa 5.0" +#define MESA_GLX_VERSION "Mesa 5.0.1" /* Who implemented this GLX? */ #define VENDOR "Brian Paul" @@ -2646,7 +2646,6 @@ Fake_glXGetAGPOffsetMESA( const GLvoid *pointer ) } - extern struct _glxapi_table *_mesa_GetGLXDispatchTable(void); struct _glxapi_table *_mesa_GetGLXDispatchTable(void) { diff --git a/xc/extras/Mesa/src/X/xm_api.c b/xc/extras/Mesa/src/X/xm_api.c index 547abc6f3..f7c4dd282 100644 --- a/xc/extras/Mesa/src/X/xm_api.c +++ b/xc/extras/Mesa/src/X/xm_api.c @@ -1,5 +1,3 @@ -/* $Id: xm_api.c,v 1.9.4.2 2003/04/02 04:28:44 idr Exp $ */ - /* * Mesa 3-D graphics library * Version: 5.0.1 @@ -23,7 +21,6 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/X/xm_api.c,v 1.2 2002/02/26 23:37:31 tsi Exp $ */ /* * This file contains the implementations of all the XMesa* functions. @@ -2487,7 +2484,7 @@ const char *XMesaGetString( XMesaContext c, int name ) { (void) c; if (name==XMESA_VERSION) { - return "5.0"; + return "5.0.1"; } else if (name==XMESA_EXTENSIONS) { return ""; diff --git a/xc/extras/Mesa/src/X/xm_dd.c b/xc/extras/Mesa/src/X/xm_dd.c index e6313bab2..bdf906aea 100644 --- a/xc/extras/Mesa/src/X/xm_dd.c +++ b/xc/extras/Mesa/src/X/xm_dd.c @@ -1,10 +1,9 @@ -/* $Id: xm_dd.c,v 1.10.2.2 2003/04/02 04:28:45 idr Exp $ */ /* * Mesa 3-D graphics library - * Version: 4.0.3 + * Version: 5.0.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -23,7 +22,7 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/X/xm_dd.c,v 1.2 2002/02/26 23:37:31 tsi Exp $ */ + #include "glxheader.h" #include "context.h" @@ -244,6 +243,7 @@ color_mask(GLcontext *ctx, if (bmask) m |= GET_BLUEMASK(xmesa->xm_visual); } XMesaSetPlaneMask( xmesa->display, xmesa->xm_draw_buffer->cleargc, m ); + XMesaSetPlaneMask( xmesa->display, xmesa->xm_draw_buffer->gc, m ); } } diff --git a/xc/extras/Mesa/src/X/xm_span.c b/xc/extras/Mesa/src/X/xm_span.c index eda81ee0e..bb2ca7f1a 100644 --- a/xc/extras/Mesa/src/X/xm_span.c +++ b/xc/extras/Mesa/src/X/xm_span.c @@ -1,4 +1,3 @@ - /* * Mesa 3-D graphics library * Version: 3.5 @@ -22,7 +21,6 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/X/xm_span.c,v 1.3 2002/02/27 21:07:54 tsi Exp $ */ #include "glxheader.h" #include "colormac.h" diff --git a/xc/extras/Mesa/src/X/xmesaP.h b/xc/extras/Mesa/src/X/xmesaP.h index 90f275a66..89aeae1dc 100644 --- a/xc/extras/Mesa/src/X/xmesaP.h +++ b/xc/extras/Mesa/src/X/xmesaP.h @@ -1,4 +1,3 @@ -/* $Id: xmesaP.h,v 1.18.22.2 2003/04/02 04:28:45 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/X86/3dnow.c b/xc/extras/Mesa/src/X86/3dnow.c index 01cd056b5..d50c428b2 100644 --- a/xc/extras/Mesa/src/X86/3dnow.c +++ b/xc/extras/Mesa/src/X86/3dnow.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 5.0.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -78,7 +78,10 @@ void _mesa_init_3dnow_transform_asm( void ) ASSIGN_XFORM_GROUP( 3dnow, 3 ); ASSIGN_XFORM_GROUP( 3dnow, 4 ); + /* There's a bug somewhere in the 3dnow_normal.S file that causes + * bad shading. Disable for now. ASSIGN_NORM_GROUP( 3dnow ); + */ #ifdef DEBUG _math_test_all_transform_functions( "3DNow!" ); diff --git a/xc/extras/Mesa/src/X86/assyntax.h b/xc/extras/Mesa/src/X86/assyntax.h index 25da11604..0230d8d0d 100644 --- a/xc/extras/Mesa/src/X86/assyntax.h +++ b/xc/extras/Mesa/src/X86/assyntax.h @@ -23,7 +23,6 @@ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ -/* $XFree86: xc/extras/Mesa/src/X86/assyntax.h,v 1.12 2002/09/09 21:30:02 dawes Exp $ */ /* * assyntax.h diff --git a/xc/extras/Mesa/src/X86/common_x86.c b/xc/extras/Mesa/src/X86/common_x86.c index 1dda8fff3..d4e4894aa 100644 --- a/xc/extras/Mesa/src/X86/common_x86.c +++ b/xc/extras/Mesa/src/X86/common_x86.c @@ -1,4 +1,3 @@ -/* $Id: common_x86.c,v 1.15.10.3 2003/04/02 04:28:46 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/X86/common_x86_asm.S b/xc/extras/Mesa/src/X86/common_x86_asm.S index fdc2fe9e4..d068564f2 100644 --- a/xc/extras/Mesa/src/X86/common_x86_asm.S +++ b/xc/extras/Mesa/src/X86/common_x86_asm.S @@ -1,4 +1,3 @@ -/* $Id: common_x86_asm.S,v 1.13.2.5 2003/04/02 04:28:46 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/X86/common_x86_features.h b/xc/extras/Mesa/src/X86/common_x86_features.h index dd0adff7c..fb7fb38c5 100644 --- a/xc/extras/Mesa/src/X86/common_x86_features.h +++ b/xc/extras/Mesa/src/X86/common_x86_features.h @@ -1,4 +1,3 @@ -/* $Id: common_x86_features.h,v 1.5.22.3 2003/04/02 04:28:46 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/X86/mmx.h b/xc/extras/Mesa/src/X86/mmx.h index d5ba00c3f..068d96237 100644 --- a/xc/extras/Mesa/src/X86/mmx.h +++ b/xc/extras/Mesa/src/X86/mmx.h @@ -1,4 +1,3 @@ -/* $Id: mmx.h,v 1.6.22.2 2002/12/05 15:24:42 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/X86/x86_cliptest.S b/xc/extras/Mesa/src/X86/x86_cliptest.S index 7c5b892b9..8d6a5fe2c 100644 --- a/xc/extras/Mesa/src/X86/x86_cliptest.S +++ b/xc/extras/Mesa/src/X86/x86_cliptest.S @@ -22,7 +22,6 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/X86/x86_cliptest.S,v 1.4 2002/03/05 20:27:24 dawes Exp $ */ /* * NOTE: Avoid using spaces in between '(' ')' and arguments, especially diff --git a/xc/extras/Mesa/src/X86/x86_vertex.S b/xc/extras/Mesa/src/X86/x86_vertex.S deleted file mode 100644 index b69c52fb2..000000000 --- a/xc/extras/Mesa/src/X86/x86_vertex.S +++ /dev/null @@ -1,309 +0,0 @@ -/* $XFree86: xc/extras/Mesa/src/X86/x86_vertex.S,v 1.2 2002/03/05 20:27:24 dawes Exp $ */ - -#include "matypes.h" - - - SEG_TEXT - -/*#define MAT_SX 0*/ /* accessed by REGIND !! */ -#define MAT_SY 20 -#define MAT_SZ 40 -#define MAT_TX 48 -#define MAT_TY 52 -#define MAT_TZ 56 - - -#define FP_ONE 1065353216 -#define FP_ZERO 0 - -#define S0 REGOFF(0, ESI) -#define S1 REGOFF(4, ESI) -#define S2 REGOFF(8, ESI) -#define S3 REGOFF(12, ESI) -#define D0 REGOFF(0, EDI) -#define D1 REGOFF(4, EDI) -#define D2 REGOFF(8, EDI) -#define D3 REGOFF(12, EDI) -#define M0 REGOFF(0, EDX) -#define M1 REGOFF(4, EDX) -#define M2 REGOFF(8, EDX) -#define M3 REGOFF(12, EDX) - - - -/* - * void _mesa_v16_x86_general_xform ( GLfloat *dest, - * const GLfloat *m, - * const GLfloat *src, - * GLuint src_stride, - * GLuint count ) - */ - - -/* This is nothing more glamorous than an objdump of one of Josh's - * routines hacked to match the above. - */ -ALIGNTEXT16 -GLOBL GLNAME( _mesa_v16_x86_general_xform ) -GLNAME( _mesa_v16_x86_general_xform ): - - - PUSH_L ( EDI ) - PUSH_L ( ESI ) - - MOV_L ( REGOFF(12, ESP), EAX ) /* dest */ - MOV_L ( REGOFF(16, ESP), ESI ) /* mat */ - MOV_L ( REGOFF(20, ESP), EDX ) /* src */ - MOV_L ( REGOFF(24, ESP), EDI ) /* src_stride */ - MOV_L ( REGOFF(28, ESP), ECX ) /* count */ - - -LLBL(v16x86_loop): - FLD_S ( REGOFF( 0x0, EDX ) ) - FMUL_S ( REGOFF( 0x0, ESI ) ) - FLD_S ( REGOFF( 0x0, EDX ) ) - FMUL_S ( REGOFF( 0x4, ESI ) ) - FLD_S ( REGOFF( 0x0, EDX ) ) - FMUL_S ( REGOFF( 0x8, ESI ) ) - FLD_S ( REGOFF( 0x0, EDX ) ) - FMUL_S ( REGOFF( 0xc, ESI ) ) - FLD_S ( REGOFF( 0x4, EDX ) ) - FMUL_S ( REGOFF( 0x10, ESI ) ) - FLD_S ( REGOFF( 0x4, EDX ) ) - FMUL_S ( REGOFF( 0x14, ESI ) ) - FLD_S ( REGOFF( 0x4, EDX ) ) - FMUL_S ( REGOFF( 0x18, ESI ) ) - FLD_S ( REGOFF( 0x4, EDX ) ) - FMUL_S ( REGOFF( 0x1c, ESI ) ) - FXCH ( ST(3) ) - FADDP ( ST0,ST(7) ) - FXCH ( ST(1) ) - FADDP ( ST0,ST(5) ) - FADDP ( ST0,ST(3) ) - FADDP ( ST0,ST(1) ) - FLD_S ( REGOFF( 0x8, EDX ) ) - FMUL_S ( REGOFF( 0x20, ESI ) ) - FLD_S ( REGOFF( 0x8, EDX ) ) - FMUL_S ( REGOFF( 0x24, ESI ) ) - FLD_S ( REGOFF( 0x8, EDX ) ) - FMUL_S ( REGOFF( 0x28, ESI ) ) - FLD_S ( REGOFF( 0x8, EDX ) ) - FMUL_S ( REGOFF( 0x2c, ESI ) ) - FXCH ( ST(3) ) - FADDP ( ST0,ST(7) ) - FXCH ( ST(1) ) - FADDP ( ST0,ST(5) ) - FADDP ( ST0,ST(3) ) - FADDP ( ST0,ST(1) ) - FXCH ( ST(3) ) - FADD_S ( REGOFF( 0x30, ESI ) ) - FXCH ( ST(2) ) - FADD_S ( REGOFF( 0x34, ESI ) ) - FXCH ( ST(1) ) - FADD_S ( REGOFF( 0x38, ESI ) ) - FXCH ( ST(3) ) - FADD_S ( REGOFF( 0x3c, ESI ) ) - FXCH ( ST(2) ) - FSTP_S ( REGOFF( 0x0, EAX ) ) - FSTP_S ( REGOFF( 0x4, EAX ) ) - FXCH ( ST(1) ) - FSTP_S ( REGOFF( 0x8, EAX ) ) - FSTP_S ( REGOFF( 0xc, EAX ) ) - ADD_L ( CONST(64), EAX ) - ADD_L ( EDI, EDX ) - DEC_L ( ECX ) - JNE ( LLBL(v16x86_loop) ) - - POP_L ( ESI ) - POP_L ( EDI ) - RET - - -/* - * Table for clip test. - * - * bit6 = S3 < 0 - * bit5 = S2 < 0 - * bit4 = abs(S2) > abs(S3) - * bit3 = S1 < 0 - * bit2 = abs(S1) > abs(S3) - * bit1 = S0 < 0 - * bit0 = abs(S0) > abs(S3) - */ - - - SEG_DATA - -clip_table: - D_BYTE 0, 1, 0, 2, 4, 5, 4, 6 - D_BYTE 0, 1, 0, 2, 8, 9, 8, 10 - D_BYTE 32, 33, 32, 34, 36, 37, 36, 38 - D_BYTE 32, 33, 32, 34, 40, 41, 40, 42 - D_BYTE 0, 1, 0, 2, 4, 5, 4, 6 - D_BYTE 0, 1, 0, 2, 8, 9, 8, 10 - D_BYTE 16, 17, 16, 18, 20, 21, 20, 22 - D_BYTE 16, 17, 16, 18, 24, 25, 24, 26 - D_BYTE 63, 61, 63, 62, 55, 53, 55, 54 - D_BYTE 63, 61, 63, 62, 59, 57, 59, 58 - D_BYTE 47, 45, 47, 46, 39, 37, 39, 38 - D_BYTE 47, 45, 47, 46, 43, 41, 43, 42 - D_BYTE 63, 61, 63, 62, 55, 53, 55, 54 - D_BYTE 63, 61, 63, 62, 59, 57, 59, 58 - D_BYTE 31, 29, 31, 30, 23, 21, 23, 22 - D_BYTE 31, 29, 31, 30, 27, 25, 27, 26 - - SEG_TEXT - - -/* -######################################## -## -## _mesa_v16_x86_cliptest_points4 -## -## Performs cliptesting equivalent to that done by cliptest_v16() -## in vertices.c -## -## This is a hacked version of the original above. -## -######################################## -*/ - - - -#define OFFSET_V16_SOURCE 4 -#define OFFSET_V16_LAST 8 -#define OFFSET_V16_OR 12 -#define OFFSET_V16_AND 16 -#define OFFSET_V16_MASK 20 - -#define ARG_V16_SOURCE REGOFF(V16_FRAME_OFFSET+OFFSET_V16_SOURCE, ESP) -#define ARG_V16_LAST REGOFF(V16_FRAME_OFFSET+OFFSET_V16_LAST, ESP) -#define ARG_V16_OR REGOFF(V16_FRAME_OFFSET+OFFSET_V16_OR, ESP) -#define ARG_V16_AND REGOFF(V16_FRAME_OFFSET+OFFSET_V16_AND, ESP) -#define ARG_V16_MASK REGOFF(V16_FRAME_OFFSET+OFFSET_V16_MASK, ESP) - - -#if defined(__ELF__) && defined(__PIC__) && !defined(ELFPIC) -#define ELFPIC -#endif - - GLOBL GLNAME(_mesa_v16_x86_cliptest_points4) - ALIGNTEXT4 - -GLNAME(_mesa_v16_x86_cliptest_points4): -#ifdef ELFPIC -#define V16_FRAME_OFFSET 20 -#else -#define V16_FRAME_OFFSET 16 -#endif - PUSH_L( ESI ) - PUSH_L( EDI ) - PUSH_L( EBP ) - PUSH_L( EBX ) - -#ifdef ELFPIC - /* store pointer to clip_table on stack */ - CALL( LLBL(v16_ctp4_get_eip) ) - ADD_L( CONST(_GLOBAL_OFFSET_TABLE_), EBX ) - MOV_L( REGOFF(clip_table@GOT, EBX), EBX ) - PUSH_L( EBX ) - JMP( LLBL(v16_ctp4_clip_table_ready) ) - -LLBL(v16_ctp4_get_eip): - /* store eip in ebx */ - MOV_L( REGIND(ESP), EBX ) - RET - -LLBL(v16_ctp4_clip_table_ready): -#endif - - MOV_L( ARG_V16_SOURCE, ESI ) /* ptr to first source vertex */ - MOV_L( ARG_V16_LAST, EDX ) /* ptr to last source vertex */ - MOV_L( ARG_V16_OR, EBX ) - MOV_L( ARG_V16_AND, EBP ) - MOV_L( ARG_V16_MASK, EDI ) - - CMP_L( EDX, ESI ) - - MOV_B( REGIND(EBX), AL ) - MOV_B( REGIND(EBP), AH ) - - JZ( LLBL(v16_ctp4_finish) ) - - ALIGNTEXT4ifNOP -LLBL(v16_ctp4_top): -#if 0 - FLD1 /* F0 */ - FDIV_S( S3 ) -#endif - - MOV_L( S3, EBP ) - MOV_L( S2, EBX ) - - XOR_L( ECX, ECX ) - ADD_L( EBP, EBP ) /* ebp = abs(S3)*2 ; carry = sign of S3 */ - - ADC_L( ECX, ECX ) - ADD_L( EBX, EBX ) /* ebx = abs(S2)*2 ; carry = sign of S2 */ - - ADC_L( ECX, ECX ) - CMP_L( EBX, EBP ) /* carry = abs(S2)*2 > abs(S3)*2 */ - - ADC_L( ECX, ECX ) - MOV_L( S1, EBX ) - - ADD_L( EBX, EBX ) /* ebx = abs(S1)*2 ; carry = sign of S1 */ - - ADC_L( ECX, ECX ) - CMP_L( EBX, EBP ) /* carry = abs(S1)*2 > abs(S3)*2 */ - - ADC_L( ECX, ECX ) - MOV_L( S0, EBX ) - - ADD_L( EBX, EBX ) /* ebx = abs(S0)*2 ; carry = sign of S0 */ - - ADC_L( ECX, ECX ) - CMP_L( EBX, EBP ) /* carry = abs(S0)*2 > abs(S3)*2 */ - - ADC_L( ECX, ECX ) - -#ifdef ELFPIC - MOV_L( REGIND(ESP), EBP ) /* clip_table */ - - MOV_B( REGBI(EBP, ECX), CL ) -#else - MOV_B( REGOFF(clip_table,ECX), CL ) -#endif - - OR_B( CL, AL ) - AND_B( CL, AH ) - - MOV_B( CL, REGIND(EDI) ) /* save clipmask */ - INC_L( EDI ) /* next clipmask */ - -#if 0 - FSTP_S( S8 ) /* */ /* GR_VERTEX_OOW_OFFSET */ -#endif - - ADD_L( CONST(64), ESI ) /* next fxVertex */ - - CMP_L( EDX, ESI ) /* finished? */ - JNZ( LLBL(v16_ctp4_top) ) - - MOV_L( ARG_V16_OR, ECX ) - MOV_L( ARG_V16_AND, EDX ) - - MOV_B( AL, REGIND(ECX) ) - MOV_B( AH, REGIND(EDX) ) - -LLBL(v16_ctp4_finish): - -#ifdef ELFPIC - POP_L( ESI ) /* discard ptr to clip_table */ -#endif - POP_L( EBX ) - POP_L( EBP ) - POP_L( EDI ) - POP_L( ESI ) - - RET diff --git a/xc/extras/Mesa/src/config.h b/xc/extras/Mesa/src/config.h index a085f88ee..7b82bd7d8 100644 --- a/xc/extras/Mesa/src/config.h +++ b/xc/extras/Mesa/src/config.h @@ -1,4 +1,3 @@ -/* $Id: config.h,v 1.18.2.2 2003/04/02 04:28:37 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/context.c b/xc/extras/Mesa/src/context.c index 82037a2f6..c6baf57ec 100644 --- a/xc/extras/Mesa/src/context.c +++ b/xc/extras/Mesa/src/context.c @@ -984,19 +984,20 @@ init_attrib_groups( GLcontext *ctx ) ctx->Color.DitherFlag = GL_TRUE; /* Current group */ - ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_WEIGHT], 0.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_NORMAL], 0.0, 0.0, 1.0, 0.0 ); + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + ASSIGN_4V( ctx->Current.Attrib[i], 0.0, 0.0, 0.0, 1.0 ); + } + /* special cases: */ + ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_WEIGHT], 1.0, 0.0, 0.0, 1.0 ); + ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_NORMAL], 0.0, 0.0, 1.0, 1.0 ); ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR0], 1.0, 1.0, 1.0, 1.0 ); - ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR1], 0.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_FOG], 0.0, 0.0, 0.0, 0.0 ); - for (i = 0; i < MAX_TEXTURE_UNITS; i++) - ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_TEX0 + i], 0.0, 0.0, 0.0, 1.0 ); ctx->Current.Index = 1; ctx->Current.EdgeFlag = GL_TRUE; ASSIGN_4V( ctx->Current.RasterPos, 0.0, 0.0, 0.0, 1.0 ); ctx->Current.RasterDistance = 0.0; ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 ); + ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 0.0 ); ctx->Current.RasterIndex = 1; for (i=0; i<MAX_TEXTURE_UNITS; i++) ASSIGN_4V( ctx->Current.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 ); @@ -1367,7 +1368,7 @@ init_attrib_groups( GLcontext *ctx ) ctx->Array.Color.Ptr = NULL; ctx->Array.Color.Enabled = GL_FALSE; ctx->Array.Color.Flags = CA_CLIENT_DATA; - ctx->Array.SecondaryColor.Size = 4; + ctx->Array.SecondaryColor.Size = 3; ctx->Array.SecondaryColor.Type = GL_FLOAT; ctx->Array.SecondaryColor.Stride = 0; ctx->Array.SecondaryColor.StrideB = 0; diff --git a/xc/extras/Mesa/src/dd.h b/xc/extras/Mesa/src/dd.h index 6e5f759f4..1df55ba20 100644 --- a/xc/extras/Mesa/src/dd.h +++ b/xc/extras/Mesa/src/dd.h @@ -1,3 +1,4 @@ + /* * Mesa 3-D graphics library * Version: 4.1 diff --git a/xc/extras/Mesa/src/dlist.c b/xc/extras/Mesa/src/dlist.c index 0afa4438f..1e67f2b0e 100644 --- a/xc/extras/Mesa/src/dlist.c +++ b/xc/extras/Mesa/src/dlist.c @@ -1,4 +1,3 @@ -/* $Id: dlist.c,v 1.20.16.3 2003/04/02 04:28:37 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/enable.c b/xc/extras/Mesa/src/enable.c index dc35f2df9..a303a72d6 100644 --- a/xc/extras/Mesa/src/enable.c +++ b/xc/extras/Mesa/src/enable.c @@ -1,4 +1,3 @@ -/* $Id: enable.c,v 1.19.2.2 2003/04/02 04:28:38 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/extensions.c b/xc/extras/Mesa/src/extensions.c index 087f636cc..9b6662246 100644 --- a/xc/extras/Mesa/src/extensions.c +++ b/xc/extras/Mesa/src/extensions.c @@ -1,4 +1,3 @@ -/* $Id: extensions.c,v 1.23.2.5 2003/04/02 04:28:38 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/get.c b/xc/extras/Mesa/src/get.c index 8b50fe3c6..508d06921 100644 --- a/xc/extras/Mesa/src/get.c +++ b/xc/extras/Mesa/src/get.c @@ -1,8 +1,6 @@ -/* $Id: get.c,v 1.25.2.3 2003/04/02 04:28:38 idr Exp $ */ - /* * Mesa 3-D graphics library - * Version: 5.0.1 + * Version: 5.0.2 * * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * @@ -476,8 +474,12 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) *params = INT_TO_BOOL( ctx->CurrentListNum ); break; case GL_LIST_MODE: - *params = ENUM_TO_BOOL( ctx->ExecuteFlag - ? GL_COMPILE_AND_EXECUTE : GL_COMPILE ); + if (!ctx->CompileFlag) + *params = 0; + else if (ctx->ExecuteFlag) + *params = ENUM_TO_BOOL(GL_COMPILE_AND_EXECUTE); + else + *params = ENUM_TO_BOOL(GL_COMPILE); break; case GL_INDEX_LOGIC_OP: *params = ctx->Color.IndexLogicOpEnabled; @@ -1256,7 +1258,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = INT_TO_BOOL(ctx->Array.SecondaryColor.Stride); + *params = INT_TO_BOOL(ctx->Array.SecondaryColor.Size); break; /* GL_EXT_fog_coord */ @@ -1277,6 +1279,10 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) CHECK_EXTENSION_B(EXT_fog_coord, pname); *params = INT_TO_BOOL(ctx->Array.FogCoord.Stride); break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXTENSION_B(EXT_fog_coord, pname); + *params = ENUM_TO_BOOL(ctx->Fog.FogCoordinateSource); + break; /* GL_EXT_texture_lod_bias */ case GL_MAX_TEXTURE_LOD_BIAS_EXT: @@ -1368,11 +1374,12 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) break; case GL_CURRENT_MATRIX_STACK_DEPTH_NV: CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = (ctx->CurrentStack->Depth > 0) ? GL_TRUE : GL_FALSE; + *params = GL_TRUE; break; case GL_CURRENT_MATRIX_NV: CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = (ctx->Transform.MatrixMode != 0) ? GL_TRUE : GL_FALSE; + for (i = 0; i < 16; i++) + params[i] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[i]); break; case GL_VERTEX_PROGRAM_BINDING_NV: CHECK_EXTENSION_B(NV_vertex_program, pname); @@ -1845,8 +1852,12 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) *params = (GLdouble) ctx->CurrentListNum; break; case GL_LIST_MODE: - *params = ctx->ExecuteFlag ? ENUM_TO_DOUBLE(GL_COMPILE_AND_EXECUTE) - : ENUM_TO_DOUBLE(GL_COMPILE); + if (!ctx->CompileFlag) + *params = 0.0; + else if (ctx->ExecuteFlag) + *params = ENUM_TO_DOUBLE(GL_COMPILE_AND_EXECUTE); + else + *params = ENUM_TO_DOUBLE(GL_COMPILE); break; case GL_INDEX_LOGIC_OP: *params = (GLdouble) ctx->Color.IndexLogicOpEnabled; @@ -2622,7 +2633,7 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.Stride; + *params = (GLdouble) ctx->Array.SecondaryColor.Size; break; /* GL_EXT_fog_coord */ @@ -2643,6 +2654,10 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) CHECK_EXTENSION_D(EXT_fog_coord, pname); *params = (GLdouble) ctx->Array.FogCoord.Stride; break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXTENSION_D(EXT_fog_coord, pname); + *params = (GLdouble) ctx->Fog.FogCoordinateSource; + break; /* GL_EXT_texture_lod_bias */ case GL_MAX_TEXTURE_LOD_BIAS_EXT: @@ -2734,11 +2749,12 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) break; case GL_CURRENT_MATRIX_STACK_DEPTH_NV: CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->CurrentStack->Depth; + *params = (GLdouble) ctx->CurrentStack->Depth + 1; break; case GL_CURRENT_MATRIX_NV: CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->Transform.MatrixMode; + for (i = 0; i < 16; i++) + params[i] = (GLdouble) ctx->CurrentStack->Top->m[i]; break; case GL_VERTEX_PROGRAM_BINDING_NV: CHECK_EXTENSION_D(NV_vertex_program, pname); @@ -3211,8 +3227,12 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) *params = (GLfloat) ctx->CurrentListNum; break; case GL_LIST_MODE: - *params = ctx->ExecuteFlag ? ENUM_TO_FLOAT(GL_COMPILE_AND_EXECUTE) - : ENUM_TO_FLOAT(GL_COMPILE); + if (!ctx->CompileFlag) + *params = 0.0F; + else if (ctx->ExecuteFlag) + *params = ENUM_TO_FLOAT(GL_COMPILE_AND_EXECUTE); + else + *params = ENUM_TO_FLOAT(GL_COMPILE); break; case GL_INDEX_LOGIC_OP: *params = (GLfloat) ctx->Color.IndexLogicOpEnabled; @@ -3964,7 +3984,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.Stride; + *params = (GLfloat) ctx->Array.SecondaryColor.Size; break; /* GL_EXT_fog_coord */ @@ -3985,6 +4005,10 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) CHECK_EXTENSION_F(EXT_fog_coord, pname); *params = (GLfloat) ctx->Array.FogCoord.Stride; break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXTENSION_F(EXT_fog_coord, pname); + *params = (GLfloat) ctx->Fog.FogCoordinateSource; + break; /* GL_EXT_texture_lod_bias */ case GL_MAX_TEXTURE_LOD_BIAS_EXT: @@ -4076,11 +4100,12 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) break; case GL_CURRENT_MATRIX_STACK_DEPTH_NV: CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->CurrentStack->Depth; + *params = (GLfloat) ctx->CurrentStack->Depth + 1; break; case GL_CURRENT_MATRIX_NV: CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->Transform.MatrixMode; + for (i = 0; i < 16; i++) + params[i] = ctx->CurrentStack->Top->m[i]; break; case GL_VERTEX_PROGRAM_BINDING_NV: CHECK_EXTENSION_F(NV_vertex_program, pname); @@ -4554,8 +4579,12 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) *params = (GLint) ctx->CurrentListNum; break; case GL_LIST_MODE: - *params = ctx->ExecuteFlag ? (GLint) GL_COMPILE_AND_EXECUTE - : (GLint) GL_COMPILE; + if (!ctx->CompileFlag) + *params = 0; + else if (ctx->ExecuteFlag) + *params = (GLint) GL_COMPILE_AND_EXECUTE; + else + *params = (GLint) GL_COMPILE; break; case GL_INDEX_LOGIC_OP: *params = (GLint) ctx->Color.IndexLogicOpEnabled; @@ -5345,7 +5374,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Array.SecondaryColor.Stride; + *params = (GLint) ctx->Array.SecondaryColor.Size; break; /* GL_EXT_fog_coord */ @@ -5366,6 +5395,10 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) CHECK_EXTENSION_I(EXT_fog_coord, pname); *params = (GLint) ctx->Array.FogCoord.Stride; break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXTENSION_I(EXT_fog_coord, pname); + *params = (GLint) ctx->Fog.FogCoordinateSource; + break; /* GL_EXT_texture_lod_bias */ case GL_MAX_TEXTURE_LOD_BIAS_EXT: @@ -5457,11 +5490,12 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) break; case GL_CURRENT_MATRIX_STACK_DEPTH_NV: CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = ctx->CurrentStack->Depth; + *params = ctx->CurrentStack->Depth + 1; break; case GL_CURRENT_MATRIX_NV: CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = (GLint) ctx->Transform.MatrixMode; + for (i = 0; i < 16; i++) + params[i] = (GLint) ctx->CurrentStack->Top->m[i]; break; case GL_VERTEX_PROGRAM_BINDING_NV: CHECK_EXTENSION_I(NV_vertex_program, pname); diff --git a/xc/extras/Mesa/src/glheader.h b/xc/extras/Mesa/src/glheader.h index 794b99745..ea3ecee4a 100644 --- a/xc/extras/Mesa/src/glheader.h +++ b/xc/extras/Mesa/src/glheader.h @@ -22,7 +22,6 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/glheader.h,v 1.18 2002/09/09 21:29:38 dawes Exp $ */ #ifndef GLHEADER_H diff --git a/xc/extras/Mesa/src/glthread.h b/xc/extras/Mesa/src/glthread.h index 051965446..00710c105 100644 --- a/xc/extras/Mesa/src/glthread.h +++ b/xc/extras/Mesa/src/glthread.h @@ -22,7 +22,7 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/glthread.h,v 1.4 2002/02/22 19:25:32 dawes Exp $ */ + /* * Thread support for gl dispatch. diff --git a/xc/extras/Mesa/src/imports.c b/xc/extras/Mesa/src/imports.c index ef728186c..83e9ce0d7 100644 --- a/xc/extras/Mesa/src/imports.c +++ b/xc/extras/Mesa/src/imports.c @@ -1,4 +1,3 @@ -/* $Id: imports.c,v 1.4.22.3 2003/04/02 04:28:41 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/imports.h b/xc/extras/Mesa/src/imports.h index c5856a07d..33c329c9c 100644 --- a/xc/extras/Mesa/src/imports.h +++ b/xc/extras/Mesa/src/imports.h @@ -1,4 +1,3 @@ -/* $Id: imports.h,v 1.4.22.3 2003/04/02 04:28:41 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/light.c b/xc/extras/Mesa/src/light.c index 25ff41889..0e7f2295a 100644 --- a/xc/extras/Mesa/src/light.c +++ b/xc/extras/Mesa/src/light.c @@ -1242,11 +1242,6 @@ _mesa_compute_light_positions( GLcontext *ctx ) if (ctx->_NeedEyeCoords) { COPY_4FV( light->_Position, light->EyePosition ); -#if 0 - light->_Position[0] /= light->_Position[3]; - light->_Position[1] /= light->_Position[3]; - light->_Position[2] /= light->_Position[3]; -#endif } else { TRANSFORM_POINT( light->_Position, ctx->ModelviewMatrixStack.Top->inv, diff --git a/xc/extras/Mesa/src/mmath.c b/xc/extras/Mesa/src/mmath.c index 6abeb74cf..212628a4c 100644 --- a/xc/extras/Mesa/src/mmath.c +++ b/xc/extras/Mesa/src/mmath.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/extras/Mesa/src/mmath.c,v 1.6 2002/02/22 19:25:36 dawes Exp $ */ + /* * Mesa 3-D graphics library * Version: 3.5 diff --git a/xc/extras/Mesa/src/mmath.h b/xc/extras/Mesa/src/mmath.h index b701b941d..1c3d17d59 100644 --- a/xc/extras/Mesa/src/mmath.h +++ b/xc/extras/Mesa/src/mmath.h @@ -1,8 +1,6 @@ -/* $Id: mmath.h,v 1.29.10.2 2003/04/02 04:28:41 idr Exp $ */ - /* * Mesa 3-D graphics library - * Version: 5.0.1 + * Version: 5.0.2 * * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * @@ -189,22 +187,19 @@ do { \ /* * Single precision ceiling, floor, and absolute value functions */ -#if defined(__sparc__) || defined(__NeXT__) /* XXX this probably isn't the ideal test */ -#define CEILF(x) ceil(x) -#define FLOORF(x) floor(x) -#define FABSF(x) fabs(x) -#elif defined(__WIN32__) || defined(__IBMC__) || defined(__IBMCPP__) -#define CEILF(x) ((GLfloat)ceil(x)) -#define FLOORF(x) ((GLfloat)floor(x)) -#define FABSF(x) ((GLfloat)fabs(x)) -#elif defined(XFree86LOADER) && defined(IN_MODULE) +#if defined(XFree86LOADER) && defined(IN_MODULE) #define CEILF(x) ((GLfloat) xf86ceil(x)) #define FLOORF(x) ((GLfloat) xf86floor(x)) #define FABSF(x) ((GLfloat) xf86fabs(x)) -#else +#elif defined(__gnu_linux__) +/* C99 functions */ #define CEILF(x) ceilf(x) #define FLOORF(x) floorf(x) #define FABSF(x) fabsf(x) +#else +#define CEILF(x) ((GLfloat) ceil(x)) +#define FLOORF(x) ((GLfloat) floor(x)) +#define FABSF(x) ((GLfloat) fabs(x)) #endif diff --git a/xc/extras/Mesa/src/mtypes.h b/xc/extras/Mesa/src/mtypes.h index 1a3248ae6..bd81cc73f 100644 --- a/xc/extras/Mesa/src/mtypes.h +++ b/xc/extras/Mesa/src/mtypes.h @@ -1,4 +1,3 @@ -/* $Id: mtypes.h,v 1.8.2.5 2003/04/02 04:28:41 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/pixel.c b/xc/extras/Mesa/src/pixel.c index bf699d572..439e74003 100644 --- a/xc/extras/Mesa/src/pixel.c +++ b/xc/extras/Mesa/src/pixel.c @@ -1,4 +1,3 @@ -/* $Id: pixel.c,v 1.15.2.2 2003/04/02 04:28:41 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/points.c b/xc/extras/Mesa/src/points.c index 00941e6f2..3d59b3300 100644 --- a/xc/extras/Mesa/src/points.c +++ b/xc/extras/Mesa/src/points.c @@ -1,3 +1,4 @@ + /* * Mesa 3-D graphics library * Version: 4.1 diff --git a/xc/extras/Mesa/src/swrast/s_aaline.c b/xc/extras/Mesa/src/swrast/s_aaline.c index acbfe9e72..b2f5f8681 100644 --- a/xc/extras/Mesa/src/swrast/s_aaline.c +++ b/xc/extras/Mesa/src/swrast/s_aaline.c @@ -1,4 +1,3 @@ -/* $Id: s_aaline.c,v 1.4.22.2 2003/04/02 04:28:46 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/swrast/s_aalinetemp.h b/xc/extras/Mesa/src/swrast/s_aalinetemp.h index 14bea1363..2adf91867 100644 --- a/xc/extras/Mesa/src/swrast/s_aalinetemp.h +++ b/xc/extras/Mesa/src/swrast/s_aalinetemp.h @@ -1,4 +1,3 @@ -/* $Id: s_aalinetemp.h,v 1.4.22.2 2003/04/02 04:28:47 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/swrast/s_aatriangle.c b/xc/extras/Mesa/src/swrast/s_aatriangle.c index ab98b8ddf..5d25e6ffe 100644 --- a/xc/extras/Mesa/src/swrast/s_aatriangle.c +++ b/xc/extras/Mesa/src/swrast/s_aatriangle.c @@ -1,4 +1,3 @@ -/* $Id: s_aatriangle.c,v 1.4.22.2 2003/04/02 04:28:47 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/swrast/s_aatritemp.h b/xc/extras/Mesa/src/swrast/s_aatritemp.h index 21a6ba589..e76a2ac33 100644 --- a/xc/extras/Mesa/src/swrast/s_aatritemp.h +++ b/xc/extras/Mesa/src/swrast/s_aatritemp.h @@ -1,4 +1,3 @@ -/* $Id: s_aatritemp.h,v 1.4.22.2 2003/04/02 04:28:47 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/swrast/s_lines.c b/xc/extras/Mesa/src/swrast/s_lines.c index eabfdcce0..6900261bd 100644 --- a/xc/extras/Mesa/src/swrast/s_lines.c +++ b/xc/extras/Mesa/src/swrast/s_lines.c @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 5.0 + * Version: 5.0.2 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -64,7 +63,12 @@ compute_stipple_mask( GLcontext *ctx, GLuint len, GLubyte mask[] ) static void draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor ) { + GLchan colors[MAX_WIDTH][4]; GLint width, start; + GLboolean mutable = (ctx->Color.BlendEnabled || + ctx->Texture._EnabledUnits || + ctx->Fog.Enabled || + *((GLuint *) ctx->Color.ColorMask) != 0xffffffff); ASSERT(span->end < MAX_WIDTH); @@ -75,6 +79,13 @@ draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor ) else start = width / 2 - 1; + if (mutable) { + /* Backup colors because they'll get modified during span write. + * This is a bit of hack. The problem is properly fixed in Mesa 5.1. + */ + _mesa_memcpy(colors, span->array->rgba, span->end * 4 * sizeof(GLchan)); + } + if (xMajor) { GLint *y = span->array->y; GLuint i; @@ -94,6 +105,12 @@ draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor ) _mesa_write_rgba_span(ctx, span); else _mesa_write_index_span(ctx, span); + + if (w + 1 < width && mutable) { + /* restore original colors */ + _mesa_memcpy(span->array->rgba, colors, + span->end * 4 * sizeof(GLchan)); + } } } else { @@ -115,6 +132,11 @@ draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor ) _mesa_write_rgba_span(ctx, span); else _mesa_write_index_span(ctx, span); + if (w + 1 < width && mutable) { + /* restore original colors */ + _mesa_memcpy(span->array->rgba, colors, + span->end * 4 * sizeof(GLchan)); + } } } } diff --git a/xc/extras/Mesa/src/swrast/s_span.c b/xc/extras/Mesa/src/swrast/s_span.c index 8cd83f1ac..a43051964 100644 --- a/xc/extras/Mesa/src/swrast/s_span.c +++ b/xc/extras/Mesa/src/swrast/s_span.c @@ -1,4 +1,3 @@ -/* $Id: s_span.c,v 1.5.16.2 2003/04/02 04:28:47 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/swrast/s_texture.c b/xc/extras/Mesa/src/swrast/s_texture.c index 1e370029f..9354731b3 100644 --- a/xc/extras/Mesa/src/swrast/s_texture.c +++ b/xc/extras/Mesa/src/swrast/s_texture.c @@ -1,8 +1,7 @@ -/* $Id: s_texture.c,v 1.8.2.4 2003/04/02 04:28:48 idr Exp $ */ /* * Mesa 3-D graphics library - * Version: 5.0.1 + * Version: 5.0.2 * * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * @@ -2773,14 +2772,16 @@ _swrast_choose_texture_sample_func( GLcontext *ctx, GLuint texUnit, /** * Do texture application for GL_ARB/EXT_texture_env_combine. - * Input: - * ctx - rendering context - * textureUnit - the texture unit to apply - * n - number of fragments to process (span width) - * primary_rgba - incoming fragment color array - * texelBuffer - pointer to texel colors for all texture units - * Input/Output: - * rgba - incoming colors, which get modified here + * This function also supports GL_{EXT,ARB}_texture_env_dot3 and + * GL_ATI_texture_env_combine3 + * + * \param ctx rendering context + * \param textureUnit the texture unit to apply + * \param n number of fragments to process (span width) + * \param primary_rgba incoming fragment color array + * \param texelBuffer pointer to texel colors for all texture units + * + * \param rgba incoming colors, which get modified here */ static INLINE void texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, @@ -2796,10 +2797,16 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, #if CHAN_TYPE == GL_FLOAT const GLchan RGBmult = (GLfloat) (1 << RGBshift); const GLchan Amult = (GLfloat) (1 << Ashift); + static const GLchan one[4] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLchan zero[4] = { 0.0, 0.0, 0.0, 0.0 }; #else const GLint half = (CHAN_MAX + 1) / 2; + static const GLchan one[4] = { CHAN_MAX, CHAN_MAX, CHAN_MAX, CHAN_MAX }; + static const GLchan zero[4] = { 0, 0, 0, 0 }; #endif GLuint i, j; + GLuint numColorArgs; + GLuint numAlphaArgs; /* GLchan ccolor[3][4]; */ DEFMNARRAY(GLchan, ccolor, 3, 3 * MAX_WIDTH, 4); /* mac 32k limitation */ @@ -2823,54 +2830,70 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, /* * Do operand setup for up to 3 operands. Loop over the terms. */ - for (j = 0; j < 3; j++) { - const GLenum srcA = textureUnit->CombineSourceA[j]; + switch (textureUnit->CombineModeRGB) { + case GL_REPLACE: + numColorArgs = 1; + break; + case GL_MODULATE: + case GL_ADD: + case GL_ADD_SIGNED: + case GL_SUBTRACT: + case GL_DOT3_RGB: + case GL_DOT3_RGBA: + case GL_DOT3_RGB_EXT: + case GL_DOT3_RGBA_EXT: + numColorArgs = 2; + break; + case GL_INTERPOLATE: + case GL_MODULATE_ADD_ATI: + case GL_MODULATE_SIGNED_ADD_ATI: + case GL_MODULATE_SUBTRACT_ATI: + numColorArgs = 3; + break; + default: + numColorArgs = 0; + ASSERT(0); + break; + } + + switch (textureUnit->CombineModeA) { + case GL_REPLACE: + numAlphaArgs = 1; + break; + case GL_MODULATE: + case GL_ADD: + case GL_ADD_SIGNED: + case GL_SUBTRACT: + numAlphaArgs = 2; + break; + case GL_INTERPOLATE: + case GL_MODULATE_ADD_ATI: + case GL_MODULATE_SIGNED_ADD_ATI: + case GL_MODULATE_SUBTRACT_ATI: + numAlphaArgs = 3; + break; + default: + numAlphaArgs = 0; + ASSERT(0); + break; + } + + for (j = 0; j < numColorArgs; j++) { const GLenum srcRGB = textureUnit->CombineSourceRGB[j]; - switch (srcA) { - case GL_TEXTURE: - argA[j] = (const GLchan (*)[4]) - (texelBuffer + unit * (n * 4 * sizeof(GLchan))); - break; - case GL_PRIMARY_COLOR_EXT: - argA[j] = primary_rgba; - break; - case GL_PREVIOUS_EXT: - argA[j] = (const GLchan (*)[4]) rgba; - break; - case GL_CONSTANT_EXT: - { - GLchan alpha, (*c)[4] = ccolor[j]; - UNCLAMPED_FLOAT_TO_CHAN(alpha, textureUnit->EnvColor[3]); - for (i = 0; i < n; i++) - c[i][ACOMP] = alpha; - argA[j] = (const GLchan (*)[4]) ccolor[j]; - } - break; - default: - /* ARB_texture_env_crossbar source */ - { - const GLuint srcUnit = srcA - GL_TEXTURE0_ARB; - ASSERT(srcUnit < ctx->Const.MaxTextureUnits); - if (!ctx->Texture.Unit[srcUnit]._ReallyEnabled) - return; - argA[j] = (const GLchan (*)[4]) - (texelBuffer + srcUnit * (n * 4 * sizeof(GLchan))); - } - } switch (srcRGB) { case GL_TEXTURE: argRGB[j] = (const GLchan (*)[4]) (texelBuffer + unit * (n * 4 * sizeof(GLchan))); break; - case GL_PRIMARY_COLOR_EXT: + case GL_PRIMARY_COLOR: argRGB[j] = primary_rgba; break; - case GL_PREVIOUS_EXT: + case GL_PREVIOUS: argRGB[j] = (const GLchan (*)[4]) rgba; break; - case GL_CONSTANT_EXT: + case GL_CONSTANT: { GLchan (*c)[4] = ccolor[j]; GLchan red, green, blue, alpha; @@ -2887,10 +2910,18 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, argRGB[j] = (const GLchan (*)[4]) ccolor[j]; } break; + /* GL_ATI_texture_env_combine3 allows GL_ZERO & GL_ONE as sources. + */ + case GL_ZERO: + argRGB[j] = & zero; + break; + case GL_ONE: + argRGB[j] = & one; + break; default: /* ARB_texture_env_crossbar source */ { - const GLuint srcUnit = srcRGB - GL_TEXTURE0_ARB; + const GLuint srcUnit = srcRGB - GL_TEXTURE0; ASSERT(srcUnit < ctx->Const.MaxTextureUnits); if (!ctx->Texture.Unit[srcUnit]._ReallyEnabled) return; @@ -2929,6 +2960,51 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, } } } + } + + + for (j = 0; j < numAlphaArgs; j++) { + const GLenum srcA = textureUnit->CombineSourceA[j]; + + switch (srcA) { + case GL_TEXTURE: + argA[j] = (const GLchan (*)[4]) + (texelBuffer + unit * (n * 4 * sizeof(GLchan))); + break; + case GL_PRIMARY_COLOR: + argA[j] = primary_rgba; + break; + case GL_PREVIOUS: + argA[j] = (const GLchan (*)[4]) rgba; + break; + case GL_CONSTANT: + { + GLchan alpha, (*c)[4] = ccolor[j]; + UNCLAMPED_FLOAT_TO_CHAN(alpha, textureUnit->EnvColor[3]); + for (i = 0; i < n; i++) + c[i][ACOMP] = alpha; + argA[j] = (const GLchan (*)[4]) ccolor[j]; + } + break; + /* GL_ATI_texture_env_combine3 allows GL_ZERO & GL_ONE as sources. + */ + case GL_ZERO: + argA[j] = & zero; + break; + case GL_ONE: + argA[j] = & one; + break; + default: + /* ARB_texture_env_crossbar source */ + { + const GLuint srcUnit = srcA - GL_TEXTURE0; + ASSERT(srcUnit < ctx->Const.MaxTextureUnits); + if (!ctx->Texture.Unit[srcUnit]._ReallyEnabled) + return; + argA[j] = (const GLchan (*)[4]) + (texelBuffer + srcUnit * (n * 4 * sizeof(GLchan))); + } + } if (textureUnit->CombineOperandA[j] == GL_ONE_MINUS_SRC_ALPHA) { const GLchan (*src)[4] = argA[j]; @@ -2938,17 +3014,6 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, dst[i][ACOMP] = CHAN_MAX - src[i][ACOMP]; } } - - if (textureUnit->CombineModeRGB == GL_REPLACE && - textureUnit->CombineModeA == GL_REPLACE) { - break; /* done, we need only arg0 */ - } - - if (j == 1 && - textureUnit->CombineModeRGB != GL_INTERPOLATE_EXT && - textureUnit->CombineModeA != GL_INTERPOLATE_EXT) { - break; /* arg0 and arg1 are done. we don't need arg2. */ - } } /* @@ -3155,6 +3220,93 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, } } break; + case GL_MODULATE_ADD_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argRGB[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - RGBshift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][RCOMP] = ((arg0[i][RCOMP] * arg2[i][RCOMP]) + arg1[i][RCOMP]) * RGBmult; + rgba[i][GCOMP] = ((arg0[i][GCOMP] * arg2[i][GCOMP]) + arg1[i][GCOMP]) * RGBmult; + rgba[i][BCOMP] = ((arg0[i][BCOMP] * arg2[i][BCOMP]) + arg1[i][BCOMP]) * RGBmult; +#else + GLuint r = (PROD(arg0[i][RCOMP], arg2[i][RCOMP]) + + ((GLuint) arg1[i][RCOMP] << CHAN_BITS)) >> shift; + GLuint g = (PROD(arg0[i][GCOMP], arg2[i][GCOMP]) + + ((GLuint) arg1[i][GCOMP] << CHAN_BITS)) >> shift; + GLuint b = (PROD(arg0[i][BCOMP], arg2[i][BCOMP]) + + ((GLuint) arg1[i][BCOMP] << CHAN_BITS)) >> shift; + rgba[i][RCOMP] = (GLchan) MIN2(r, CHAN_MAX); + rgba[i][GCOMP] = (GLchan) MIN2(g, CHAN_MAX); + rgba[i][BCOMP] = (GLchan) MIN2(b, CHAN_MAX); +#endif + } + } + break; + case GL_MODULATE_SIGNED_ADD_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argRGB[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - RGBshift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][RCOMP] = ((arg0[i][RCOMP] * arg2[i][RCOMP]) + arg1[i][RCOMP] - 0.5) * RGBmult; + rgba[i][GCOMP] = ((arg0[i][GCOMP] * arg2[i][GCOMP]) + arg1[i][GCOMP] - 0.5) * RGBmult; + rgba[i][BCOMP] = ((arg0[i][BCOMP] * arg2[i][BCOMP]) + arg1[i][BCOMP] - 0.5) * RGBmult; +#else + GLint r = (S_PROD(arg0[i][RCOMP], arg2[i][RCOMP]) + + (((GLint) arg1[i][RCOMP] - half) << CHAN_BITS)) + >> shift; + GLint g = (S_PROD(arg0[i][GCOMP], arg2[i][GCOMP]) + + (((GLint) arg1[i][GCOMP] - half) << CHAN_BITS)) + >> shift; + GLint b = (S_PROD(arg0[i][BCOMP], arg2[i][BCOMP]) + + (((GLint) arg1[i][BCOMP] - half) << CHAN_BITS)) + >> shift; + rgba[i][RCOMP] = (GLchan) CLAMP(r, 0, CHAN_MAX); + rgba[i][GCOMP] = (GLchan) CLAMP(g, 0, CHAN_MAX); + rgba[i][BCOMP] = (GLchan) CLAMP(b, 0, CHAN_MAX); +#endif + } + } + break; + case GL_MODULATE_SUBTRACT_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argRGB[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - RGBshift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][RCOMP] = ((arg0[i][RCOMP] * arg2[i][RCOMP]) - arg1[i][RCOMP]) * RGBmult; + rgba[i][GCOMP] = ((arg0[i][GCOMP] * arg2[i][GCOMP]) - arg1[i][GCOMP]) * RGBmult; + rgba[i][BCOMP] = ((arg0[i][BCOMP] * arg2[i][BCOMP]) - arg1[i][BCOMP]) * RGBmult; +#else + GLint r = (S_PROD(arg0[i][RCOMP], arg2[i][RCOMP]) + - ((GLint) arg1[i][RCOMP] << CHAN_BITS)) + >> shift; + GLint g = (S_PROD(arg0[i][GCOMP], arg2[i][GCOMP]) + - ((GLint) arg1[i][GCOMP] << CHAN_BITS)) + >> shift; + GLint b = (S_PROD(arg0[i][BCOMP], arg2[i][BCOMP]) + - ((GLint) arg1[i][BCOMP] << CHAN_BITS)) + >> shift; + rgba[i][RCOMP] = (GLchan) CLAMP(r, 0, CHAN_MAX); + rgba[i][GCOMP] = (GLchan) CLAMP(g, 0, CHAN_MAX); + rgba[i][BCOMP] = (GLchan) CLAMP(b, 0, CHAN_MAX); +#endif + } + } + break; default: _mesa_problem(ctx, "invalid combine mode"); } @@ -3262,7 +3414,66 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, } } break; - + case GL_MODULATE_ADD_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argA[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argA[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - Ashift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][ACOMP] = ((arg0[i][ACOMP] * arg2[i][ACOMP]) + arg1[i][ACOMP]) * Amult; +#else + GLuint a = (PROD(arg0[i][ACOMP], arg2[i][ACOMP]) + + ((GLuint) arg1[i][ACOMP] << CHAN_BITS)) + >> shift; + rgba[i][ACOMP] = (GLchan) CLAMP(a, 0, CHAN_MAX); +#endif + } + } + break; + case GL_MODULATE_SIGNED_ADD_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argA[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argA[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - Ashift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][ACOMP] = ((arg0[i][ACOMP] * arg2[i][ACOMP]) + arg1[i][ACOMP] - 0.5F) * Amult; +#else + GLint a = (S_PROD(arg0[i][ACOMP], arg2[i][ACOMP]) + + (((GLint) arg1[i][ACOMP] - half) << CHAN_BITS)) + >> shift; + rgba[i][ACOMP] = (GLchan) CLAMP(a, 0, CHAN_MAX); +#endif + } + } + break; + case GL_MODULATE_SUBTRACT_ATI: + { + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argA[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; + const GLchan (*arg2)[4] = (const GLchan (*)[4]) argA[2]; +#if CHAN_TYPE != GL_FLOAT + const GLint shift = CHAN_BITS - Ashift; +#endif + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + rgba[i][ACOMP] = ((arg0[i][ACOMP] * arg2[i][ACOMP]) - arg1[i][ACOMP]) * Amult; +#else + GLint a = (S_PROD(arg0[i][ACOMP], arg2[i][ACOMP]) + - ((GLint) arg1[i][ACOMP] << CHAN_BITS)) + >> shift; + rgba[i][ACOMP] = (GLchan) CLAMP(a, 0, CHAN_MAX); +#endif + } + } + break; default: _mesa_problem(ctx, "invalid combine mode"); } diff --git a/xc/extras/Mesa/src/swrast/s_tritemp.h b/xc/extras/Mesa/src/swrast/s_tritemp.h index 2feeb8b13..58fa90c4f 100644 --- a/xc/extras/Mesa/src/swrast/s_tritemp.h +++ b/xc/extras/Mesa/src/swrast/s_tritemp.h @@ -1,4 +1,3 @@ - /* * Mesa 3-D graphics library * Version: 3.5 @@ -22,7 +21,6 @@ * 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. */ -/* $XFree86: xc/extras/Mesa/src/swrast/s_tritemp.h,v 1.2 2002/02/27 21:07:54 tsi Exp $ */ /* * Triangle Rasterizer Template diff --git a/xc/extras/Mesa/src/swrast/s_zoom.c b/xc/extras/Mesa/src/swrast/s_zoom.c index 1581509bb..a8c1a939e 100644 --- a/xc/extras/Mesa/src/swrast/s_zoom.c +++ b/xc/extras/Mesa/src/swrast/s_zoom.c @@ -1,4 +1,3 @@ -/* $Id: s_zoom.c,v 1.5.16.2 2003/04/02 04:28:49 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/texcompress.c b/xc/extras/Mesa/src/texcompress.c index 0ef0cb394..6ecf8cad0 100644 --- a/xc/extras/Mesa/src/texcompress.c +++ b/xc/extras/Mesa/src/texcompress.c @@ -1,4 +1,3 @@ -/* $Id: texcompress.c,v 1.2.2.2 2003/04/02 04:28:42 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/teximage.c b/xc/extras/Mesa/src/teximage.c index 9c67c2f8a..8e1d63d35 100644 --- a/xc/extras/Mesa/src/teximage.c +++ b/xc/extras/Mesa/src/teximage.c @@ -1,8 +1,6 @@ -/* $Id: teximage.c,v 1.32.2.3 2003/04/02 04:28:42 idr Exp $ */ - /* * Mesa 3-D graphics library - * Version: 5.0.1 + * Version: 5.0.2 * * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * @@ -447,7 +445,8 @@ is_proxy_target(GLenum target) return (target == GL_PROXY_TEXTURE_1D || target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_3D || - target == GL_PROXY_TEXTURE_CUBE_MAP_ARB); + target == GL_PROXY_TEXTURE_CUBE_MAP_ARB || + target == GL_PROXY_TEXTURE_RECTANGLE_NV); } diff --git a/xc/extras/Mesa/src/texobj.c b/xc/extras/Mesa/src/texobj.c index b20262314..22042579e 100644 --- a/xc/extras/Mesa/src/texobj.c +++ b/xc/extras/Mesa/src/texobj.c @@ -1,8 +1,6 @@ -/* $Id: texobj.c,v 1.25.2.4 2003/04/02 04:28:42 idr Exp $ */ - /* * Mesa 3-D graphics library - * Version: 5.0.1 + * Version: 5.0.2 * * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * @@ -90,7 +88,7 @@ _mesa_alloc_texture_object( struct gl_shared_state *shared, obj->MaxAnisotropy = 1.0; obj->CompareFlag = GL_FALSE; /* SGIX_shadow */ obj->CompareOperator = GL_TEXTURE_LEQUAL_R_SGIX; /* SGIX_shadow */ - obj->CompareMode = GL_LUMINANCE; /* ARB_shadow */ + obj->CompareMode = GL_NONE; /* ARB_shadow */ obj->CompareFunc = GL_LEQUAL; /* ARB_shadow */ obj->DepthMode = GL_LUMINANCE; /* ARB_depth_texture */ obj->ShadowAmbient = 0.0F; /* ARB/SGIX_shadow_ambient */ diff --git a/xc/extras/Mesa/src/texstate.c b/xc/extras/Mesa/src/texstate.c index 47a58f3c7..87024cc07 100644 --- a/xc/extras/Mesa/src/texstate.c +++ b/xc/extras/Mesa/src/texstate.c @@ -1,4 +1,3 @@ -/* $Id: texstate.c,v 1.29.2.7 2003/04/02 04:28:42 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/texstate.h b/xc/extras/Mesa/src/texstate.h index 66e7dfd88..a9de0c6e0 100644 --- a/xc/extras/Mesa/src/texstate.h +++ b/xc/extras/Mesa/src/texstate.h @@ -1,8 +1,9 @@ + /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 5.0.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/xc/extras/Mesa/src/texstore.c b/xc/extras/Mesa/src/texstore.c index 3424fe62a..1f20d2cfa 100644 --- a/xc/extras/Mesa/src/texstore.c +++ b/xc/extras/Mesa/src/texstore.c @@ -1,4 +1,3 @@ -/* $Id: texstore.c,v 1.7.2.3 2003/04/02 04:28:42 idr Exp $ */ /* * Mesa 3-D graphics library @@ -482,6 +481,7 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions, baseInternalFormat == GL_ALPHA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RGBA || + baseInternalFormat == GL_COLOR_INDEX || baseInternalFormat == GL_DEPTH_COMPONENT); if (transferOps & IMAGE_CONVOLUTION_BIT) { diff --git a/xc/extras/Mesa/src/texutil_tmp.h b/xc/extras/Mesa/src/texutil_tmp.h index d6b94376b..becbd24f1 100644 --- a/xc/extras/Mesa/src/texutil_tmp.h +++ b/xc/extras/Mesa/src/texutil_tmp.h @@ -1,3 +1,4 @@ + /* * Mesa 3-D graphics library * Version: 4.0.2 diff --git a/xc/extras/Mesa/src/tnl/t_imm_api.c b/xc/extras/Mesa/src/tnl/t_imm_api.c index 86e5636d6..86458d626 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_api.c +++ b/xc/extras/Mesa/src/tnl/t_imm_api.c @@ -1,4 +1,3 @@ -/* $Id: t_imm_api.c,v 1.7.12.3 2003/04/02 04:28:50 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/tnl/t_imm_exec.c b/xc/extras/Mesa/src/tnl/t_imm_exec.c index bf5050856..64c970118 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_exec.c +++ b/xc/extras/Mesa/src/tnl/t_imm_exec.c @@ -511,8 +511,10 @@ void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM ) begin_state, saved_begin_state ); } - if (ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1) - ctx->Driver.NeedFlush &= ~FLUSH_STORED_VERTICES; + /* Don't unset FLUSH_STORED_VERTICES flag here as the driver might + * have other stored data of its own & be relying on the + * FlushVertices notification to clear it. + */ } diff --git a/xc/extras/Mesa/src/tnl/t_vb_program.c b/xc/extras/Mesa/src/tnl/t_vb_program.c index 7611d4b4d..3cddb2be3 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_program.c +++ b/xc/extras/Mesa/src/tnl/t_vb_program.c @@ -1,4 +1,3 @@ -/* $Id: t_vb_program.c,v 1.2.4.1 2003/04/02 04:28:50 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/tnl/t_vb_texgen.c b/xc/extras/Mesa/src/tnl/t_vb_texgen.c index 25ae2bcd5..79601a836 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_texgen.c +++ b/xc/extras/Mesa/src/tnl/t_vb_texgen.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 5.0.2 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -367,7 +367,7 @@ static void texgen( GLcontext *ctx, GLuint count = VB->Count; GLfloat (*f)[3] = store->tmp_f; GLfloat *m = store->tmp_m; - GLuint holes = 0; + GLuint holes = 0; if (texUnit->_GenFlags & TEXGEN_NEED_M) { @@ -399,6 +399,7 @@ static void texgen( GLcontext *ctx, } if (holes) { + if (holes & VEC_DIRTY_3) _mesa_vector4f_clean_elem(out, count, 3); if (holes & VEC_DIRTY_2) _mesa_vector4f_clean_elem(out, count, 2); if (holes & VEC_DIRTY_1) _mesa_vector4f_clean_elem(out, count, 1); if (holes & VEC_DIRTY_0) _mesa_vector4f_clean_elem(out, count, 0); diff --git a/xc/extras/Mesa/src/tnl/t_vtx_api.c b/xc/extras/Mesa/src/tnl/t_vtx_api.c index 4076051c8..5fb08a9b5 100644 --- a/xc/extras/Mesa/src/tnl/t_vtx_api.c +++ b/xc/extras/Mesa/src/tnl/t_vtx_api.c @@ -1,4 +1,3 @@ -/* $XFree86$ */ /************************************************************************** Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. diff --git a/xc/extras/Mesa/src/tnl/t_vtx_api.h b/xc/extras/Mesa/src/tnl/t_vtx_api.h index 6bfdbe8fe..ace962c31 100644 --- a/xc/extras/Mesa/src/tnl/t_vtx_api.h +++ b/xc/extras/Mesa/src/tnl/t_vtx_api.h @@ -1,4 +1,3 @@ -/* $XFree86$ */ /************************************************************************** Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. diff --git a/xc/extras/Mesa/src/tnl/t_vtx_exec.c b/xc/extras/Mesa/src/tnl/t_vtx_exec.c index 7e9db7892..c0dda08e8 100644 --- a/xc/extras/Mesa/src/tnl/t_vtx_exec.c +++ b/xc/extras/Mesa/src/tnl/t_vtx_exec.c @@ -1,4 +1,3 @@ -/* $XFree86$ */ /************************************************************************** Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. diff --git a/xc/extras/Mesa/src/tnl/t_vtx_sse.c b/xc/extras/Mesa/src/tnl/t_vtx_sse.c index 8998c901b..6d6ba356e 100644 --- a/xc/extras/Mesa/src/tnl/t_vtx_sse.c +++ b/xc/extras/Mesa/src/tnl/t_vtx_sse.c @@ -1,4 +1,3 @@ -/* $XFree86$ */ /************************************************************************** Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. diff --git a/xc/extras/Mesa/src/tnl/t_vtx_x86.c b/xc/extras/Mesa/src/tnl/t_vtx_x86.c index 7a55db72d..0d9421d1d 100644 --- a/xc/extras/Mesa/src/tnl/t_vtx_x86.c +++ b/xc/extras/Mesa/src/tnl/t_vtx_x86.c @@ -1,4 +1,3 @@ -/* $XFree86$ */ /************************************************************************** Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. diff --git a/xc/extras/Mesa/src/tnl_dd/t_dd_vbtmp.h b/xc/extras/Mesa/src/tnl_dd/t_dd_vbtmp.h index 0fc1a64e2..5aad0b562 100644 --- a/xc/extras/Mesa/src/tnl_dd/t_dd_vbtmp.h +++ b/xc/extras/Mesa/src/tnl_dd/t_dd_vbtmp.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 5.0.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/xc/extras/Mesa/src/varray.h b/xc/extras/Mesa/src/varray.h index 344309bd0..98a7733b5 100644 --- a/xc/extras/Mesa/src/varray.h +++ b/xc/extras/Mesa/src/varray.h @@ -1,4 +1,3 @@ -/* $Id: varray.h,v 1.11.22.2 2002/12/04 22:57:02 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/vpexec.c b/xc/extras/Mesa/src/vpexec.c index 182275276..8e6af9c34 100644 --- a/xc/extras/Mesa/src/vpexec.c +++ b/xc/extras/Mesa/src/vpexec.c @@ -1,4 +1,3 @@ -/* $Id: vpexec.c,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library @@ -277,11 +276,11 @@ fetch_vector4( const struct vp_src_register *source, const GLfloat *src; if (source->RelAddr) { - GLint reg = source->Register + machine->AddressReg; - if (reg < VP_PROG_REG_START || reg > VP_PROG_REG_END) + const GLint reg = source->Register + machine->AddressReg; + if (reg < 0 || reg > VP_NUM_PROG_REGS) src = zero; else - src = machine->Registers[reg]; + src = machine->Registers[VP_PROG_REG_START + reg]; } else { src = machine->Registers[source->Register]; @@ -314,11 +313,11 @@ fetch_vector1( const struct vp_src_register *source, const GLfloat *src; if (source->RelAddr) { - GLint reg = source->Register + machine->AddressReg; - if (reg < VP_PROG_REG_START || reg > VP_PROG_REG_END) + const GLint reg = source->Register + machine->AddressReg; + if (reg < 0 || reg > VP_NUM_PROG_REGS) src = zero; else - src = machine->Registers[reg]; + src = machine->Registers[VP_PROG_REG_START + reg]; } else { src = machine->Registers[source->Register]; @@ -438,15 +437,11 @@ _mesa_exec_program(GLcontext *ctx, const struct vp_program *program) floor_t0 = (float) floor(t[0]); if (floor_t0 > FLT_MAX_EXP) { SET_POS_INFINITY(q[0]); - q[1] = 0.0F; SET_POS_INFINITY(q[2]); - q[3] = 1.0F; } else if (floor_t0 < FLT_MIN_EXP) { q[0] = 0.0F; - q[1] = 0.0F; q[2] = 0.0F; - q[3] = 0.0F; } else { #ifdef USE_IEEE @@ -457,10 +452,10 @@ _mesa_exec_program(GLcontext *ctx, const struct vp_program *program) #else q[0] = (GLfloat) pow(2.0, floor_t0); #endif - q[1] = t[0] - floor_t0; q[2] = (GLfloat) (q[0] * LOG2(q[1])); - q[3] = 1.0F; } + q[1] = t[0] - floor_t0; + q[3] = 1.0F; store_vector4( &inst->DstReg, machine, q ); } break; diff --git a/xc/extras/Mesa/src/vpexec.h b/xc/extras/Mesa/src/vpexec.h index 08db6e389..5fed9d365 100644 --- a/xc/extras/Mesa/src/vpexec.h +++ b/xc/extras/Mesa/src/vpexec.h @@ -1,4 +1,3 @@ -/* $Id: vpexec.h,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/vpparse.c b/xc/extras/Mesa/src/vpparse.c index 35bef73b7..4526d79b0 100644 --- a/xc/extras/Mesa/src/vpparse.c +++ b/xc/extras/Mesa/src/vpparse.c @@ -1,10 +1,9 @@ -/* $Id: vpparse.c,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 5.0.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -1423,7 +1422,7 @@ _mesa_parse_program(GLcontext *ctx, GLenum dstTarget, } program->Instructions = newInst; -#ifdef DEBUG_foo +#if 0 _mesa_printf("--- glLoadProgramNV result ---\n"); _mesa_print_program(program); _mesa_printf("------------------------------\n"); diff --git a/xc/extras/Mesa/src/vpparse.h b/xc/extras/Mesa/src/vpparse.h index b17b8fbea..2f90f2162 100644 --- a/xc/extras/Mesa/src/vpparse.h +++ b/xc/extras/Mesa/src/vpparse.h @@ -1,4 +1,3 @@ -/* $Id: vpparse.h,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/vpstate.c b/xc/extras/Mesa/src/vpstate.c index 49bee3926..2918aad93 100644 --- a/xc/extras/Mesa/src/vpstate.c +++ b/xc/extras/Mesa/src/vpstate.c @@ -1,4 +1,3 @@ -/* $Id: vpstate.c,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/extras/Mesa/src/vpstate.h b/xc/extras/Mesa/src/vpstate.h index be7b4be00..eb5d7655d 100644 --- a/xc/extras/Mesa/src/vpstate.h +++ b/xc/extras/Mesa/src/vpstate.h @@ -1,4 +1,3 @@ -/* $Id: vpstate.h,v 1.1.4.1 2003/04/02 04:28:43 idr Exp $ */ /* * Mesa 3-D graphics library diff --git a/xc/include/GL/glx.h b/xc/include/GL/glx.h index 1bc010a7e..b02a237d8 100644 --- a/xc/include/GL/glx.h +++ b/xc/include/GL/glx.h @@ -1,7 +1,7 @@ #ifndef __GLX_glx_h__ #define __GLX_glx_h__ -/* $XFree86: xc/include/GL/glx.h,v 1.9 2002/02/22 21:32:50 dawes Exp $ */ +/* $XFree86: xc/include/GL/glx.h,v 1.10 2002/10/30 08:52:36 alanh Exp $ */ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free diff --git a/xc/include/GL/glxproto.h b/xc/include/GL/glxproto.h index 2715d7f47..7405c55b6 100644 --- a/xc/include/GL/glxproto.h +++ b/xc/include/GL/glxproto.h @@ -1923,4 +1923,5 @@ typedef struct { #define X_GLrop_ActiveStencilFaceEXT 4220 + #endif /* _GLX_glxproto_h_ */ diff --git a/xc/lib/GL/dri/dri_util.c b/xc/lib/GL/dri/dri_util.c index f2013dbda..f83128efc 100644 --- a/xc/lib/GL/dri/dri_util.c +++ b/xc/lib/GL/dri/dri_util.c @@ -59,7 +59,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #ifdef GLX_DIRECT_RENDERING -#include <inttypes.h> +#include <stdint.h> #include <assert.h> #include <stdarg.h> #include <unistd.h> diff --git a/xc/lib/GL/dri/drm/Imakefile b/xc/lib/GL/dri/drm/Imakefile index e878b2502..149bd6c33 100644 --- a/xc/lib/GL/dri/drm/Imakefile +++ b/xc/lib/GL/dri/drm/Imakefile @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/lib/GL/dri/drm/Imakefile,v 1.19 2002/02/22 21:32:52 dawes Exp $ +XCOMM $XFree86: xc/lib/GL/dri/drm/Imakefile,v 1.20 2002/10/30 12:51:25 alanh Exp $ #if GlxUseBuiltInDRIDriver #define DoNormalLib (NormalLibGlx || SharedLibGlxWithoutPIC) diff --git a/xc/lib/GL/glx/glxclient.h b/xc/lib/GL/glx/glxclient.h index a95be5fde..51c254cb6 100644 --- a/xc/lib/GL/glx/glxclient.h +++ b/xc/lib/GL/glx/glxclient.h @@ -31,7 +31,7 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. */ -/* $XFree86: xc/lib/GL/glx/glxclient.h,v 1.14 2002/02/22 21:32:53 dawes Exp $ */ +/* $XFree86: xc/lib/GL/glx/glxclient.h,v 1.15 2002/10/30 12:51:26 alanh Exp $ */ /* * Direct rendering support added by Precision Insight, Inc. @@ -757,6 +757,11 @@ extern char *__glXInternalQueryServerString( Display *dpy, int opcode, extern char *__glXstrdup(const char *str); + +extern const char __glXGLClientExtensions[]; +extern char *__glXCombineExtensionStrings( const char *cext_string, + const char *sext_string ); + /* Determine the internal API version */ typedef int (* PFNGLXGETINTERNALVERSIONPROC) ( void ); extern int __glXGetInternalVersion(void); diff --git a/xc/lib/GL/glx/glxcmds.c b/xc/lib/GL/glx/glxcmds.c index 9c5770130..c35bf071c 100644 --- a/xc/lib/GL/glx/glxcmds.c +++ b/xc/lib/GL/glx/glxcmds.c @@ -49,7 +49,7 @@ #include "glxextensions.h" #include <sys/time.h> -static const char __glXGLClientExtensions[] = +const char __glXGLClientExtensions[] = "GL_ARB_depth_texture " "GL_ARB_imaging " "GL_ARB_multitexture " @@ -1186,6 +1186,61 @@ char *__glXInternalQueryServerString( Display *dpy, int opcode, return buf; } +#define SEPARATOR " " + +char *__glXCombineExtensionStrings( const char *cext_string, const char *sext_string ) +{ + int clen, slen; + char *combo_string, *token, *s1; + const char *s2, *end; + + /* + ** String can't be longer than min(cstring, sstring) + ** pull tokens out of shortest string + ** include space in combo_string for final separator and null terminator + */ + if ( (clen = strlen( cext_string)) > (slen = strlen( sext_string)) ) { + combo_string = (char *) Xmalloc( slen + 2 ); + s1 = (char *) Xmalloc( slen + 2 ); strcpy( s1, sext_string ); + s2 = cext_string; + } else { + combo_string = (char *) Xmalloc( clen + 2 ); + s1 = (char *) Xmalloc( clen + 2 ); strcpy( s1, cext_string); + s2 = sext_string; + } + if (!combo_string || !s1) { + if (combo_string) Xfree(combo_string); + if (s1) Xfree(s1); + return NULL; + } + combo_string[0] = '\0'; + + /* Get first extension token */ + token = strtok( s1, SEPARATOR); + while ( token != NULL ) { + + /* + ** if token in second string then save it + ** beware of extension names which are prefixes of other extension names + */ + const char *p = s2; + end = p + strlen(p); + while (p < end) { + int n = strcspn(p, SEPARATOR); + if ((strlen(token) == n) && (strncmp(token, p, n) == 0)) { + combo_string = strcat( combo_string, token); + combo_string = strcat( combo_string, SEPARATOR); + } + p += (n + 1); + } + + /* Get next extension token */ + token = strtok( NULL, SEPARATOR); + } + Xfree(s1); + return combo_string; +} + const char *GLX_PREFIX(glXQueryExtensionsString)( Display *dpy, int screen ) { __GLXFBConfig *pConfig; @@ -2783,10 +2838,6 @@ static struct name_address_pair GLX_functions[] = { /*** GLX_SGI_swap_control ***/ { "glXSwapIntervalSGI", (GLvoid *) glXSwapIntervalSGI, NULL }, - /*** GLX_MESA_swap_control ***/ - { "glXSwapIntervalMESA", (GLvoid *) glXSwapIntervalMESA, NULL }, - { "glXGetSwapIntervalMESA", (GLvoid *) glXGetSwapIntervalMESA, NULL }, - /*** GLX_SGI_video_sync ***/ { "glXGetVideoSyncSGI", (GLvoid *) glXGetVideoSyncSGI, NULL }, { "glXWaitVideoSyncSGI", (GLvoid *) glXWaitVideoSyncSGI, NULL }, @@ -2860,6 +2911,16 @@ static struct name_address_pair GLX_functions[] = { /*** GLX_MESA_set_3dfx_mode ***/ { "glXSet3DfxModeMESA", (GLvoid *) glXSet3DfxModeMESA, NULL }, + /*** GLX_MESA_swap_control ***/ + { "glXSwapIntervalMESA", (GLvoid *) glXSwapIntervalMESA, NULL }, + { "glXGetSwapIntervalMESA", (GLvoid *) glXGetSwapIntervalMESA, NULL }, + + /*** GLX_MESA_swap_frame_usage ***/ + { "glXBeginFrameTrackingMESA", (GLvoid *) glXBeginFrameTrackingMESA, NULL }, + { "glXEndFrameTrackingMESA", (GLvoid *) glXEndFrameTrackingMESA, NULL }, + { "glXGetFrameUsageMESA", (GLvoid *) glXGetFrameUsageMESA, NULL }, + { "glXQueryFrameTrackingMESA", (GLvoid *) glXQueryFrameTrackingMESA, NULL }, + /*** GLX_ARB_get_proc_address ***/ { "glXGetProcAddressARB", (GLvoid *) glXGetProcAddressARB, NULL }, diff --git a/xc/lib/GL/glx/glxext.c b/xc/lib/GL/glx/glxext.c index 3c45b740e..f168e4c13 100644 --- a/xc/lib/GL/glx/glxext.c +++ b/xc/lib/GL/glx/glxext.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/glx/glxext.c,v 1.14 2002/02/22 21:32:53 dawes Exp $ */ +/* $XFree86: xc/lib/GL/glx/glxext.c,v 1.16 2003/01/20 21:37:19 tsi Exp $ */ /* ** License Applicability. Except to the extent portions of this file are diff --git a/xc/lib/GL/glx/pixel.c b/xc/lib/GL/glx/pixel.c index 5c26f6df5..7236165c2 100644 --- a/xc/lib/GL/glx/pixel.c +++ b/xc/lib/GL/glx/pixel.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/glx/pixel.c,v 1.6 2002/02/22 21:32:54 dawes Exp $ */ +/* $XFree86: xc/lib/GL/glx/pixel.c,v 1.7 2002/10/30 12:51:26 alanh Exp $ */ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free diff --git a/xc/lib/GL/glx/single2.c b/xc/lib/GL/glx/single2.c index 06514d85a..ebd8a863a 100644 --- a/xc/lib/GL/glx/single2.c +++ b/xc/lib/GL/glx/single2.c @@ -983,7 +983,8 @@ const GLubyte *glGetString(GLenum name) gc->version = s; break; case GL_EXTENSIONS: - gc->extensions = s; + gc->extensions = __glXCombineExtensionStrings( s, __glXGLClientExtensions ); + XFree( s ); break; } } diff --git a/xc/lib/GL/mesa/src/X86/Imakefile b/xc/lib/GL/mesa/src/X86/Imakefile index f04ed7078..96795bd0c 100644 --- a/xc/lib/GL/mesa/src/X86/Imakefile +++ b/xc/lib/GL/mesa/src/X86/Imakefile @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/lib/GL/mesa/src/X86/Imakefile,v 1.23 2002/07/14 17:08:16 alanh Exp $ +XCOMM $XFree86: xc/lib/GL/mesa/src/X86/Imakefile,v 1.24 2002/11/25 12:58:55 tsi Exp $ /* * Need both shared and unshared Mesa objects in the following cases: diff --git a/xc/lib/GL/mesa/src/drv/common/vblank.h b/xc/lib/GL/mesa/src/drv/common/vblank.h index 857fc1bd0..91c5d98ab 100644 --- a/xc/lib/GL/mesa/src/drv/common/vblank.h +++ b/xc/lib/GL/mesa/src/drv/common/vblank.h @@ -54,6 +54,7 @@ extern int driWaitForVBlank( GLuint * vbl_seq, GLuint flags, do { \ if (0) fprintf(stderr, "%s: usleep for %u\n", __FUNCTION__, nr ); \ if (1) usleep( nr ); \ + sched_yield(); \ } while( 0 ) #endif /* DRI_VBLANK_H */ diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_points.c b/xc/lib/GL/mesa/src/drv/ffb/ffb_points.c index ee956d371..6505530c7 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_points.c +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_points.c @@ -26,7 +26,7 @@ */ #include "mtypes.h" - +#include "mmath.h" #include "ffb_dd.h" #include "ffb_context.h" #include "ffb_vb.h" diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h b/xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h index d1a376cd5..9d18db5fd 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h @@ -1,4 +1,4 @@ -/* $XFree86$ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h,v 1.2 2003/01/29 23:00:40 dawes Exp $ */ #define IMPL_LOCAL_VARS \ ffbContextPtr fmesa = FFB_CONTEXT(ctx); \ diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_state.c b/xc/lib/GL/mesa/src/drv/ffb/ffb_state.c index 6f33a35d2..ba9bab988 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_state.c +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_state.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_state.c,v 1.4 2002/09/10 00:39:37 dawes Exp $ +/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_state.c,v 1.5 2002/10/30 12:51:27 alanh Exp $ * * GLX Hardware Device Driver for Sun Creator/Creator3D * Copyright (C) 2000, 2001 David S. Miller @@ -26,7 +26,7 @@ */ #include "mtypes.h" - +#include "colormac.h" #include "mm.h" #include "ffb_dd.h" #include "ffb_span.h" diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c b/xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c index d0d3c3b9d..63113f09c 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c,v 1.2 2002/02/22 21:32:59 dawes Exp $ +/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_tris.c,v 1.3 2002/10/30 12:51:28 alanh Exp $ * * GLX Hardware Device Driver for Sun Creator/Creator3D * Copyright (C) 2000, 2001 David S. Miller @@ -28,7 +28,7 @@ #include "glheader.h" #include "mtypes.h" #include "macros.h" - +#include "mmath.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" #include "swrast/s_context.h" diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.c b/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.c index 09c9d041e..40820c641 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.c +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.c @@ -28,6 +28,7 @@ #include "ffb_xmesa.h" #include "ffb_context.h" #include "ffb_vb.h" +#include "mmath.h" #include "imports.h" #include "tnl/t_context.h" #include "swrast_setup/swrast_setup.h" diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.h b/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.h index 925971af6..9eb6759f6 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.h +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_vb.h @@ -5,7 +5,6 @@ #include "mtypes.h" #include "macros.h" -#include "mmath.h" #include "tnl/t_context.h" #include "swrast/swrast.h" diff --git a/xc/lib/GL/mesa/src/drv/ffb/ffb_xmesa.c b/xc/lib/GL/mesa/src/drv/ffb/ffb_xmesa.c index eff0d5d9f..fa87e8bb1 100644 --- a/xc/lib/GL/mesa/src/drv/ffb/ffb_xmesa.c +++ b/xc/lib/GL/mesa/src/drv/ffb/ffb_xmesa.c @@ -31,7 +31,6 @@ #include "context.h" #include "matrix.h" #include "simple_list.h" -#include "mmath.h" #include "imports.h" #include "swrast/swrast.h" diff --git a/xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c b/xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c index 1324ee6e9..47eb802b4 100644 --- a/xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c +++ b/xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c @@ -23,7 +23,7 @@ * Kevin E. Martin <martin@valinux.com> * */ -/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c,v 1.8 2002/02/22 21:33:02 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c,v 1.9 2002/10/30 12:51:29 alanh Exp $ */ #include "gamma_context.h" #include "glint_dri.h" diff --git a/xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c b/xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c index 12a48ee1f..631df03ae 100644 --- a/xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c +++ b/xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c @@ -1,3 +1,4 @@ +/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c,v 1.4 2002/11/05 17:46:07 tsi Exp $ */ #include "gamma_context.h" diff --git a/xc/lib/GL/mesa/src/drv/gamma/gamma_state.c b/xc/lib/GL/mesa/src/drv/gamma/gamma_state.c index 867cd678b..8a7672067 100644 --- a/xc/lib/GL/mesa/src/drv/gamma/gamma_state.c +++ b/xc/lib/GL/mesa/src/drv/gamma/gamma_state.c @@ -1,3 +1,4 @@ +/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_state.c,v 1.5 2002/11/05 17:46:07 tsi Exp $ */ /* * Copyright 2001 by Alan Hourihane. * diff --git a/xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c b/xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c index 3591bd24a..dfd82b489 100644 --- a/xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c +++ b/xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c @@ -1,3 +1,7 @@ +/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c,v 1.5 2002/11/05 17:46:07 tsi Exp $ */ + +#include <stdlib.h> +#include <stdio.h> #include "glheader.h" #include "macros.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c b/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c index 640ce6623..6039aa2f6 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c +++ b/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c,v 1.16 2002/09/15 21:07:49 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c,v 1.18 2002/12/16 16:18:52 dawes Exp $ */ /* * Copyright 2000-2001 VA Linux Systems, Inc. * All Rights Reserved. diff --git a/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h b/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h index 3ef3db7c5..558ab274f 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h +++ b/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h,v 1.10 2002/02/22 21:33:05 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mga_xmesa.h,v 1.12 2002/12/16 16:18:52 dawes Exp $ */ #ifndef _MGA_INIT_H_ #define _MGA_INIT_H_ @@ -46,7 +46,7 @@ typedef struct mga_screen_private_s { int cpp; /* for front and back buffers */ GLint agpMode; - unsigned int irq; /* IRQ number (0 means none) */ + unsigned int irq; /* IRQ number (0 means none) */ unsigned int mAccess; diff --git a/xc/lib/GL/mesa/src/drv/mga/mgacontext.h b/xc/lib/GL/mesa/src/drv/mga/mgacontext.h index d6c56c63a..6770c59a1 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgacontext.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgacontext.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgacontext.h,v 1.5 2002/02/22 21:33:06 dawes Exp $*/ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgacontext.h,v 1.7 2002/12/16 16:18:52 dawes Exp $*/ /* * Copyright 2000-2001 VA Linux Systems, Inc. * All Rights Reserved. diff --git a/xc/lib/GL/mesa/src/drv/mga/mgadd.c b/xc/lib/GL/mesa/src/drv/mga/mgadd.c index 580bcae79..bbbd9f41d 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgadd.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgadd.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgadd.c,v 1.13 2002/09/11 19:49:07 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgadd.c,v 1.14 2002/10/30 12:51:35 alanh Exp $ */ #include "mtypes.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgaioctl.c b/xc/lib/GL/mesa/src/drv/mga/mgaioctl.c index 246ab9d97..fadaafe5b 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgaioctl.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgaioctl.c @@ -25,7 +25,7 @@ * Keith Whitwell <keith@tungstengraphics.com> * Gareth Hughes <gareth@valinux.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaioctl.c,v 1.14 2002/09/18 17:11:40 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaioctl.c,v 1.16 2002/12/16 16:18:52 dawes Exp $ */ #include "mtypes.h" #include "macros.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgaioctl.h b/xc/lib/GL/mesa/src/drv/mga/mgaioctl.h index 6d246bca2..2d959d824 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgaioctl.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgaioctl.h @@ -25,7 +25,7 @@ * Keith Whitwell <keith@tungstengraphics.com> * Gareth Hughes <gareth@valinux.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaioctl.h,v 1.10 2002/09/18 17:11:41 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaioctl.h,v 1.11 2002/10/30 12:51:36 alanh Exp $ */ #ifndef MGA_IOCTL_H #define MGA_IOCTL_H diff --git a/xc/lib/GL/mesa/src/drv/mga/mgapixel.c b/xc/lib/GL/mesa/src/drv/mga/mgapixel.c index 60f0a49a1..07e0c3a75 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgapixel.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgapixel.c @@ -25,7 +25,7 @@ * Keith Whitwell <keith@tungstengraphics.com> * Gareth Hughes <gareth@valinux.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgapixel.c,v 1.7 2002/09/18 17:11:41 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgapixel.c,v 1.9 2002/11/05 17:46:08 tsi Exp $ */ #include "enums.h" #include "mtypes.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgapixel.h b/xc/lib/GL/mesa/src/drv/mga/mgapixel.h index f0436ce6a..c44fd769a 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgapixel.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgapixel.h @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgapixel.h,v 1.4 2002/02/22 21:33:07 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgapixel.h,v 1.5 2002/10/30 12:51:36 alanh Exp $ */ #ifndef MGA_PIXELS_H #define MGA_PIXELS_H diff --git a/xc/lib/GL/mesa/src/drv/mga/mgarender.c b/xc/lib/GL/mesa/src/drv/mga/mgarender.c index c0dbc9b38..516a99099 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgarender.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgarender.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgarender.c,v 1.3 2002/02/22 21:37:18 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgarender.c,v 1.4 2002/10/30 12:51:36 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/mga/mgaspan.c b/xc/lib/GL/mesa/src/drv/mga/mgaspan.c index fe45de1e9..684239865 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgaspan.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgaspan.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaspan.c,v 1.10 2002/02/26 23:37:35 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgaspan.c,v 1.11 2002/10/30 12:51:36 alanh Exp $ */ #include "mtypes.h" #include "mgadd.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgastate.c b/xc/lib/GL/mesa/src/drv/mga/mgastate.c index 353ff668c..bda711921 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgastate.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgastate.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgastate.c,v 1.12 2002/02/22 21:44:55 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgastate.c,v 1.13 2002/10/30 12:51:36 alanh Exp $ */ #include "mtypes.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgastate.h b/xc/lib/GL/mesa/src/drv/mga/mgastate.h index 0f072d32b..afbe0aaf9 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgastate.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgastate.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgastate.h,v 1.4 2002/02/22 21:44:55 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgastate.h,v 1.5 2002/10/30 12:51:36 alanh Exp $ */ /* * Copyright 2000-2001 VA Linux Systems, Inc. * All Rights Reserved. diff --git a/xc/lib/GL/mesa/src/drv/mga/mgatex.c b/xc/lib/GL/mesa/src/drv/mga/mgatex.c index fd0b32044..6f47b4a87 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgatex.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgatex.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatex.c,v 1.13 2002/02/22 21:44:55 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatex.c,v 1.14 2002/10/30 12:51:36 alanh Exp $ */ #include "glheader.h" #include "mm.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgatexmem.c b/xc/lib/GL/mesa/src/drv/mga/mgatexmem.c index b4f60e83a..bd32ebbda 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgatexmem.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgatexmem.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatexmem.c,v 1.6 2002/02/26 23:37:35 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatexmem.c,v 1.7 2002/10/30 12:51:36 alanh Exp $ */ #include "glheader.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgatris.c b/xc/lib/GL/mesa/src/drv/mga/mgatris.c index ce36cb7f5..949482f47 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgatris.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgatris.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatris.c,v 1.9 2002/02/22 21:44:56 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatris.c,v 1.10 2002/10/30 12:51:36 alanh Exp $ */ #include "mtypes.h" #include "macros.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgatris.h b/xc/lib/GL/mesa/src/drv/mga/mgatris.h index f2d76fad9..a8c0b8936 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgatris.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgatris.h @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatris.h,v 1.9 2002/02/22 21:44:56 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgatris.h,v 1.10 2002/10/30 12:51:36 alanh Exp $ */ #ifndef MGATRIS_INC #define MGATRIS_INC diff --git a/xc/lib/GL/mesa/src/drv/mga/mgavb.c b/xc/lib/GL/mesa/src/drv/mga/mgavb.c index 51c02d735..04cd93ec9 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgavb.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgavb.c @@ -24,7 +24,7 @@ * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgavb.c,v 1.13 2002/02/26 23:37:35 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgavb.c,v 1.14 2002/10/30 12:51:36 alanh Exp $ */ #include "mgacontext.h" #include "mgavb.h" diff --git a/xc/lib/GL/mesa/src/drv/mga/mgavb.h b/xc/lib/GL/mesa/src/drv/mga/mgavb.h index 39a83c7f8..88cc3108d 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgavb.h +++ b/xc/lib/GL/mesa/src/drv/mga/mgavb.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgavb.h,v 1.7 2002/02/22 21:44:56 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/mga/mgavb.h,v 1.8 2002/10/30 12:51:36 alanh Exp $ */ /* * Copyright 2000-2001 VA Linux Systems, Inc. * All Rights Reserved. diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_context.c b/xc/lib/GL/mesa/src/drv/r128/r128_context.c index 126a05f64..38a461ac0 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_context.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_context.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_context.c,v 1.7 2002/02/22 21:44:57 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_context.c,v 1.8 2002/10/30 12:51:38 alanh Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_context.h b/xc/lib/GL/mesa/src/drv/r128/r128_context.h index 22f150770..585f06448 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_context.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_context.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_context.h,v 1.10 2002/02/22 21:44:57 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_context.h,v 1.12 2002/12/16 16:18:52 dawes Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_dd.c b/xc/lib/GL/mesa/src/drv/r128/r128_dd.c index b201e33bb..d6b47efcc 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_dd.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_dd.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_dd.c,v 1.14 2002/09/10 00:39:39 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_dd.c,v 1.15 2002/10/30 12:51:38 alanh Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h b/xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h index aff80e9ee..b0f6b363a 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h,v 1.4 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_ioctl.h,v 1.6 2002/12/16 16:18:53 dawes Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_lock.c b/xc/lib/GL/mesa/src/drv/r128/r128_lock.c index 53050f3d5..7f819cdf7 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_lock.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_lock.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_lock.c,v 1.4 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_lock.c,v 1.5 2002/10/30 12:51:38 alanh Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_lock.h b/xc/lib/GL/mesa/src/drv/r128/r128_lock.h index 21c55ff9d..e734ba29d 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_lock.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_lock.h @@ -42,7 +42,7 @@ extern void r128GetLock( r128ContextPtr rmesa, GLuint flags ); /* Turn DEBUG_LOCKING on to find locking conflicts. */ -#define DEBUG_LOCKING 1 +#define DEBUG_LOCKING 0 #if DEBUG_LOCKING extern char *prevLockFile; @@ -66,7 +66,7 @@ extern int prevLockLine; fprintf( stderr, \ "LOCK SET!\n\tPrevious %s:%d\n\tCurrent: %s:%d\n", \ prevLockFile, prevLockLine, __FILE__, __LINE__ ); \ - abort( ); \ + exit( 1 ); \ } \ } while (0) diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_screen.c b/xc/lib/GL/mesa/src/drv/r128/r128_screen.c index 7705ca6ff..e8b8c731a 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_screen.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_screen.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_screen.c,v 1.6 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_screen.c,v 1.8 2002/12/16 16:18:53 dawes Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., @@ -170,21 +170,6 @@ r128CreateScreen( __DRIscreenPrivate *sPriv ) r128DRIPriv->log2AGPTexGran; } - if (sPriv->drmMinor >= 3) { - drmR128GetParam gp; - int ret; - - gp.param = R128_PARAM_IRQ_NR; - gp.value = &r128Screen->irq; - - ret = drmCommandWriteRead( sPriv->fd, DRM_R128_GETPARAM, - &gp, sizeof(gp)); - if (ret) { - fprintf(stderr, "drmR128GetParam (R128_PARAM_IRQ_NR): %d\n", ret); - return NULL; - } - } - r128Screen->driScreen = sPriv; return r128Screen; diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_screen.h b/xc/lib/GL/mesa/src/drv/r128/r128_screen.h index 411b29b56..4b1a57292 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_screen.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_screen.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_screen.h,v 1.6 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_screen.h,v 1.7 2002/12/16 16:18:53 dawes Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_span.c b/xc/lib/GL/mesa/src/drv/r128/r128_span.c index 653f893b3..57af0af92 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_span.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_span.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_span.c,v 1.7 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_span.c,v 1.8 2002/10/30 12:51:39 alanh Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_state.c b/xc/lib/GL/mesa/src/drv/r128/r128_state.c index a97f238b6..b4a2b7f3f 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_state.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_state.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_state.c,v 1.10 2002/09/10 00:39:39 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_state.c,v 1.11 2002/10/30 12:51:39 alanh Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_tex.c b/xc/lib/GL/mesa/src/drv/r128/r128_tex.c index 931f7180c..df7fa5c6e 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_tex.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_tex.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tex.c,v 1.12 2002/09/18 17:11:41 tsi Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tex.c,v 1.14 2002/11/05 17:46:08 tsi Exp $ */ /************************************************************************** Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc., diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_tris.c b/xc/lib/GL/mesa/src/drv/r128/r128_tris.c index 5cf905700..4e2860288 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_tris.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_tris.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tris.c,v 1.7 2002/02/22 21:44:58 dawes Exp $ */ /* -*- c-basic-offset: 3 -*- */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tris.c,v 1.8 2002/10/30 12:51:43 alanh Exp $ */ /* -*- c-basic-offset: 3 -*- */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_tris.h b/xc/lib/GL/mesa/src/drv/r128/r128_tris.h index d03772eb1..755d3320b 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_tris.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_tris.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tris.h,v 1.7 2002/02/22 21:44:58 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tris.h,v 1.8 2002/10/30 12:51:43 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_vb.c b/xc/lib/GL/mesa/src/drv/r128/r128_vb.c index 0488c35bf..d3691b693 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_vb.c +++ b/xc/lib/GL/mesa/src/drv/r128/r128_vb.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.c,v 1.14 2002/09/10 00:39:39 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.c,v 1.15 2002/10/30 12:51:43 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/r128/r128_vb.h b/xc/lib/GL/mesa/src/drv/r128/r128_vb.h index 35686f87b..31afa74f1 100644 --- a/xc/lib/GL/mesa/src/drv/r128/r128_vb.h +++ b/xc/lib/GL/mesa/src/drv/r128/r128_vb.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.h,v 1.7 2002/02/22 21:44:59 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.h,v 1.8 2002/10/30 12:51:46 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_cmdbuf.c b/xc/lib/GL/mesa/src/drv/r200/r200_cmdbuf.c index 7513ced2e..a64b32d91 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_cmdbuf.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_cmdbuf.c @@ -195,6 +195,7 @@ GLushort *r200AllocEltsOpenEnded( r200ContextPtr rmesa, cmd[1].i, primitive); assert(!rmesa->dma.flush); + rmesa->glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; rmesa->dma.flush = r200FlushElts; rmesa->store.elts_start = ((char *)cmd) - rmesa->store.cmd_buf; diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_context.c b/xc/lib/GL/mesa/src/drv/r200/r200_context.c index 7b93c1e92..ec0776904 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_context.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_context.c @@ -40,7 +40,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "simple_list.h" #include "imports.h" #include "matrix.h" -#include "state.h" #include "extensions.h" #include "state.h" @@ -401,7 +400,7 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual, rmesa->do_usleeps = !getenv("R200_NO_USLEEPS"); - rmesa->vblank_flags = (rmesa->do_irqs) + rmesa->vblank_flags = (rmesa->do_irqs) ? driGetDefaultVBlankFlags() : VBLANK_FLAG_NO_IRQ; rmesa->prefer_agp_client_texturing = diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_ioctl.c b/xc/lib/GL/mesa/src/drv/r200/r200_ioctl.c index 3c6e5d6ec..99022f0a7 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_ioctl.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_ioctl.c @@ -460,6 +460,8 @@ void r200CopyBuffer( const __DRIdrawablePrivate *dPriv ) } rmesa->swap_ust = ust; + + sched_yield(); } void r200PageFlip( const __DRIdrawablePrivate *dPriv ) diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_maos_arrays.c b/xc/lib/GL/mesa/src/drv/r200/r200_maos_arrays.c index b82448095..f2abaff3a 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_maos_arrays.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_maos_arrays.c @@ -37,7 +37,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "mtypes.h" #include "colormac.h" #include "imports.h" -#include "mmath.h" #include "macros.h" #include "swrast_setup/swrast_setup.h" diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_span.c b/xc/lib/GL/mesa/src/drv/r200/r200_span.c index 06bc01409..b469aec42 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_span.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_span.c @@ -37,6 +37,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "glheader.h" #include "imports.h" #include "swrast/swrast.h" +#include "colormac.h" #include "r200_context.h" #include "r200_ioctl.h" diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_state.c b/xc/lib/GL/mesa/src/drv/r200/r200_state.c index fba9e84f6..f025a8847 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_state.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_state.c @@ -37,7 +37,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "glheader.h" #include "imports.h" #include "api_arrayelt.h" -#include "mmath.h" #include "enums.h" #include "colormac.h" diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_swtcl.c b/xc/lib/GL/mesa/src/drv/r200/r200_swtcl.c index 191cee363..fa23a27cc 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_swtcl.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_swtcl.c @@ -40,9 +40,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "enums.h" #include "image.h" #include "imports.h" -#include "mmath.h" #include "macros.h" +#include "swrast/s_context.h" #include "swrast/s_fog.h" #include "swrast_setup/swrast_setup.h" #include "math/m_translate.h" @@ -417,9 +417,9 @@ static void flush_last_swtcl_prim( r200ContextPtr rmesa ) rmesa->swtcl.numverts = 0; current->start = current->ptr; - - rmesa->dma.flush = 0; } + + rmesa->dma.flush = 0; } @@ -434,6 +434,7 @@ static __inline void *r200AllocDmaLowVerts( r200ContextPtr rmesa, r200RefillCurrentDmaRegion( rmesa ); if (!rmesa->dma.flush) { + rmesa->glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; rmesa->dma.flush = flush_last_swtcl_prim; } @@ -1231,8 +1232,8 @@ void r200FlushVertices( GLcontext *ctx, GLuint flags ) { _tnl_flush_vertices( ctx, flags ); - if (flags & FLUSH_STORED_VERTICES) - R200_FIREVERTICES( R200_CONTEXT( ctx ) ); + if (flags & FLUSH_STORED_VERTICES) + R200_NEWPRIM( R200_CONTEXT( ctx ) ); } /**********************************************************************/ diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_tcl.c b/xc/lib/GL/mesa/src/drv/r200/r200_tcl.c index 53aa77901..1af66aece 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_tcl.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_tcl.c @@ -36,7 +36,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "glheader.h" #include "imports.h" -#include "mmath.h" #include "mtypes.h" #include "enums.h" #include "colormac.h" @@ -290,6 +289,9 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx, if (rmesa->TclFallback) return GL_TRUE; /* fallback to software t&l */ + if (R200_DEBUG & DEBUG_PRIMS) + fprintf(stderr, "%s\n", __FUNCTION__); + if (VB->Count == 0) return GL_FALSE; @@ -340,7 +342,7 @@ static void r200_check_tcl_render( GLcontext *ctx, if (ctx->Light.Enabled) { inputs |= VERT_BIT_NORMAL; - if (ctx->Light.ColorMaterialEnabled) { + if (1 || ctx->Light.ColorMaterialEnabled) { inputs |= VERT_BIT_COLOR0; } } diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_tex.c b/xc/lib/GL/mesa/src/drv/r200/r200_tex.c index db6cdaca4..048108188 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_tex.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_tex.c @@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "context.h" #include "enums.h" #include "image.h" -#include "mmath.h" #include "simple_list.h" #include "texformat.h" #include "texstore.h" diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_texmem.c b/xc/lib/GL/mesa/src/drv/r200/r200_texmem.c index 9f2a28729..63dc38ffa 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_texmem.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_texmem.c @@ -40,7 +40,6 @@ SOFTWARE. #include "imports.h" #include "context.h" #include "colormac.h" -#include "mmath.h" #include "macros.h" #include "simple_list.h" #include "radeon_reg.h" /* gets definition for usleep */ diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_texstate.c b/xc/lib/GL/mesa/src/drv/r200/r200_texstate.c index 8940c3264..a6e8034ff 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_texstate.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_texstate.c @@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "imports.h" #include "context.h" #include "macros.h" -#include "mmath.h" #include "texformat.h" #include "enums.h" diff --git a/xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c b/xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c index 81d2bfab1..a2107e5b4 100644 --- a/xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c +++ b/xc/lib/GL/mesa/src/drv/r200/r200_vtxfmt.c @@ -104,6 +104,9 @@ void r200_copy_to_current( GLcontext *ctx ) { r200ContextPtr rmesa = R200_CONTEXT(ctx); + if (R200_DEBUG & DEBUG_VFMT) + fprintf(stderr, "%s\n", __FUNCTION__); + assert(ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT); if (rmesa->vb.vtxfmt_0 & R200_VTX_N0) { @@ -594,12 +597,10 @@ static GLboolean check_vtx_fmt( GLcontext *ctx ) * checking for overflow) is cheaper than sending floats * directly. */ - if (ctx->Light.ColorMaterialEnabled) { - if (1 || ctx->Color.AlphaEnabled) - ind0 |= R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT; - else - ind0 |= R200_VTX_FP_RGB << R200_VTX_COLOR_0_SHIFT; - } + if (ctx->Light.ColorMaterialEnabled) + ind0 |= R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT; + else + ind0 |= R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT; } else { /* TODO: make this data driven? diff --git a/xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc b/xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc index 6536654d5..175a3e3bf 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc +++ b/xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc,v 1.3 2002/02/22 21:45:00 dawes Exp $ +XCOMM $XFree86: xc/lib/GL/mesa/src/drv/radeon/Imakefile.inc,v 1.4 2002/10/30 12:51:54 alanh Exp $ #ifndef MesaDrvSrcDir #define MesaDrvSrcDir $(GLXLIBSRC)/mesa/src/drv diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_context.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_context.c index 169be3dea..6c0a7b8d0 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_context.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_context.c @@ -36,10 +36,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "glheader.h" -#include "imports.h" #include "api_arrayelt.h" #include "context.h" #include "simple_list.h" +#include "imports.h" #include "matrix.h" #include "extensions.h" @@ -462,6 +462,7 @@ void radeonDestroyContext( __DRIcontextPrivate *driContextPriv ) if ( rmesa ) { GLboolean release_texture_heaps; + release_texture_heaps = (rmesa->glCtx->Shared->RefCount == 1); _swsetup_DestroyContext( rmesa->glCtx ); _tnl_DestroyContext( rmesa->glCtx ); diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_context.h b/xc/lib/GL/mesa/src/drv/radeon/radeon_context.h index 4004d3fe5..3e8816df2 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_context.h +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_context.h @@ -40,18 +40,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #ifdef GLX_DIRECT_RENDERING +#include <stdint.h> +#include "dri_util.h" +#include "radeon_common.h" +#include "texmem.h" + +#include "macros.h" +#include "mtypes.h" +#include "colormac.h" + struct radeon_context; typedef struct radeon_context radeonContextRec; typedef struct radeon_context *radeonContextPtr; -#include <stdint.h> -#include "mtypes.h" -#include "macros.h" #include "radeon_lock.h" #include "radeon_screen.h" #include "mm.h" -#include "texmem.h" -#include "colormac.h" /* Flags for software fallback cases */ /* See correponding strings in radeon_swtcl.c */ diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c index 6e911518f..3b3d9b8ce 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c,v 1.7 2002/09/16 18:05:19 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c,v 1.11 2003/01/29 22:04:59 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and @@ -296,6 +296,7 @@ GLushort *radeonAllocEltsOpenEnded( radeonContextPtr rmesa, cmd[1].i, vertex_format, primitive); assert(!rmesa->dma.flush); + rmesa->glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; rmesa->dma.flush = radeonFlushElts; rmesa->store.elts_start = ((char *)cmd) - rmesa->store.cmd_buf; diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h b/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h index 8b94d486c..f53b3efe9 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h,v 1.4 2002/09/16 18:05:20 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.h,v 1.6 2002/12/16 16:18:58 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c index 643c9c10e..96a4f9d11 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c,v 1.4 2002/02/22 21:45:00 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c,v 1.5 2002/10/30 12:51:55 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h b/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h index 0bebb4bb2..783db7e92 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h,v 1.2 2002/02/22 21:45:00 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h,v 1.3 2002/10/30 12:51:55 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c index b92b4f45a..65ef74d35 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c,v 1.4 2002/02/22 21:45:00 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_screen.c,v 1.6 2002/12/16 16:18:58 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h b/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h index 47408aa6b..2c69d8657 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h,v 1.3 2002/02/22 21:45:01 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_screen.h,v 1.5 2002/12/16 16:18:58 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_span.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_span.c index d8b6dd9dd..029d7cd8e 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_span.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_span.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_span.c,v 1.5 2002/02/22 21:45:01 dawes Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_span.c,v 1.6 2002/10/30 12:51:56 alanh Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_state.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_state.c index 2172fb3fb..dd8774f5d 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_state.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_state.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_state.c,v 1.5 2002/09/16 18:05:20 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_state.c,v 1.8 2002/12/16 16:18:58 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 VA Linux Systems Inc., Fremont, California. @@ -36,7 +36,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "glheader.h" #include "imports.h" #include "api_arrayelt.h" -#include "mmath.h" #include "enums.h" #include "colormac.h" @@ -1296,14 +1295,6 @@ static void radeonStencilOp( GLcontext *ctx, GLenum fail, case GL_DECR: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_DEC; break; -#if 0 - case GL_INCR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_INC_WRAP; - break; - case GL_DECR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_DEC_WRAP; - break; -#endif case GL_INVERT: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_FAIL_INVERT; break; @@ -1325,14 +1316,6 @@ static void radeonStencilOp( GLcontext *ctx, GLenum fail, case GL_DECR: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_DEC; break; -#if 0 - case GL_INCR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_INC_WRAP; - break; - case GL_DECR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_DEC_WRAP; - break; -#endif case GL_INVERT: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZFAIL_INVERT; break; @@ -1354,14 +1337,6 @@ static void radeonStencilOp( GLcontext *ctx, GLenum fail, case GL_DECR: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_DEC; break; -#if 0 - case GL_INCR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_INC_WRAP; - break; - case GL_DECR_WRAP_EXT: - rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_DEC_WRAP; - break; -#endif case GL_INVERT: rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_STENCIL_ZPASS_INVERT; break; diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_state.h b/xc/lib/GL/mesa/src/drv/radeon/radeon_state.h index a06c061f7..a181d427e 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_state.h +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_state.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_state.h,v 1.3 2002/09/16 18:05:20 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_state.h,v 1.5 2002/11/05 17:46:09 tsi Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_state_init.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_state_init.c index 12453c77e..4f0841489 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_state_init.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_state_init.c @@ -30,7 +30,6 @@ #include "glheader.h" #include "imports.h" -#include "mmath.h" #include "api_arrayelt.h" #include "swrast/swrast.h" diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_swtcl.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_swtcl.c index 9486bcc4c..583e88350 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_swtcl.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_swtcl.c @@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "colormac.h" #include "enums.h" #include "imports.h" -#include "mmath.h" #include "macros.h" #include "swrast_setup/swrast_setup.h" @@ -403,9 +402,9 @@ static void flush_last_swtcl_prim( radeonContextPtr rmesa ) rmesa->swtcl.numverts = 0; current->start = current->ptr; - - rmesa->dma.flush = 0; } + + rmesa->dma.flush = 0; } @@ -459,6 +458,7 @@ static __inline void *radeonAllocDmaLowVerts( radeonContextPtr rmesa, radeonRefillCurrentDmaRegion( rmesa ); if (!rmesa->dma.flush) { + rmesa->glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; if (rmesa->dri.drmMinor == 1) rmesa->dma.flush = flush_last_swtcl_prim_compat; else @@ -1145,8 +1145,8 @@ void radeonFlushVertices( GLcontext *ctx, GLuint flags ) { _tnl_flush_vertices( ctx, flags ); - if (flags & FLUSH_STORED_VERTICES) - RADEON_FIREVERTICES( RADEON_CONTEXT( ctx ) ); + if (flags & FLUSH_STORED_VERTICES) + RADEON_NEWPRIM( RADEON_CONTEXT( ctx ) ); } /**********************************************************************/ diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_tcl.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_tcl.c index 3102b060d..b361815b6 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_tcl.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_tcl.c @@ -36,7 +36,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "glheader.h" #include "imports.h" #include "light.h" -#include "mmath.h" #include "mtypes.h" #include "enums.h" @@ -354,7 +353,7 @@ static void radeon_check_tcl_render( GLcontext *ctx, if (ctx->Light.Enabled) { inputs |= VERT_BIT_NORMAL; - if (ctx->Light.ColorMaterialEnabled) { + if (1 || ctx->Light.ColorMaterialEnabled) { inputs |= VERT_BIT_COLOR0; } } diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c index 596b32cae..27b793443 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c,v 1.4 2002/09/16 18:05:20 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c,v 1.7 2002/12/16 16:18:59 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and @@ -39,7 +39,6 @@ SOFTWARE. #include "glheader.h" #include "imports.h" #include "context.h" -#include "mmath.h" #include "macros.h" #include "simple_list.h" diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c index 8fc6b5325..fe52f60da 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c,v 1.3 2002/09/16 18:05:21 eich Exp $ */ +/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_texstate.c,v 1.6 2002/12/16 16:18:59 dawes Exp $ */ /************************************************************************** Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and @@ -39,7 +39,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "colormac.h" #include "context.h" #include "macros.h" -#include "mmath.h" #include "texformat.h" #include "enums.h" diff --git a/xc/lib/GL/mesa/src/drv/radeon/radeon_vtxfmt.c b/xc/lib/GL/mesa/src/drv/radeon/radeon_vtxfmt.c index 3d11518c1..b613e9eb4 100644 --- a/xc/lib/GL/mesa/src/drv/radeon/radeon_vtxfmt.c +++ b/xc/lib/GL/mesa/src/drv/radeon/radeon_vtxfmt.c @@ -549,9 +549,6 @@ static GLboolean check_vtx_fmt( GLcontext *ctx ) if (rmesa->TclFallback || rmesa->vb.fell_back || ctx->CompileFlag) return GL_FALSE; - if (!_glapi_Context) - return GL_FALSE; - if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) ctx->Driver.FlushVertices( ctx, FLUSH_UPDATE_CURRENT ); @@ -566,11 +563,11 @@ static GLboolean check_vtx_fmt( GLcontext *ctx ) * directly. */ if (ctx->Light.ColorMaterialEnabled) { - ind |= RADEON_CP_VC_FRMT_FPCOLOR; - if (ctx->Color.AlphaEnabled) { - ind |= RADEON_CP_VC_FRMT_FPALPHA; - } + ind |= (RADEON_CP_VC_FRMT_FPCOLOR | + RADEON_CP_VC_FRMT_FPALPHA); } + else + ind |= RADEON_CP_VC_FRMT_PKCOLOR; /* for alpha? */ } else { /* TODO: make this data driven? diff --git a/xc/programs/Xserver/GL/dri/dri.c b/xc/programs/Xserver/GL/dri/dri.c index 9d60fc5c9..b08379099 100644 --- a/xc/programs/Xserver/GL/dri/dri.c +++ b/xc/programs/Xserver/GL/dri/dri.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/GL/dri/dri.c,v 1.35 2002/09/18 18:14:50 martin Exp $ */ +/* $XFree86: xc/programs/Xserver/GL/dri/dri.c,v 1.38 2002/11/20 18:10:24 dawes Exp $ */ /************************************************************************** Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. diff --git a/xc/programs/Xserver/GL/dri/dristruct.h b/xc/programs/Xserver/GL/dri/dristruct.h index ba3b9704a..e733ac210 100644 --- a/xc/programs/Xserver/GL/dri/dristruct.h +++ b/xc/programs/Xserver/GL/dri/dristruct.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/GL/dri/dristruct.h,v 1.11 2002/09/18 18:14:51 martin Exp $ */ +/* $XFree86: xc/programs/Xserver/GL/dri/dristruct.h,v 1.13 2002/11/20 18:10:24 dawes Exp $ */ /************************************************************************** Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/Imakefile b/xc/programs/Xserver/hw/xfree86/drivers/geode/Imakefile deleted file mode 100644 index 60af17575..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/Imakefile +++ /dev/null @@ -1,146 +0,0 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/Imakefile,v 1.3 2002/10/23 08:16:56 alanh Exp $ -XCOMM Imakefile for the National Semiconductor Geode driver -XCOMM that is based on the durango code. -XCOMM -XCOMM (c) 2000 National Semiconductor corporation -XCOMM (c) 2000 by Juergen Schneider, Infomatec IAS GmbH -XCOMM -#define IHaveModules -#include <Server.tmpl> - -XCOMM Turn this off for the Set-Top-Box (STB) mode which uses -XCOMM the linux kernel driver interface. -#if 1 -DURANGOSRCS = durango.c panel.c -DURANGOOBJS = durango.o panel.o -EXTINCLUDES = -I./gfx -I./panel -#else -DEFINES = -DSTB_X -STBSRCS = galstub.c -STBOBJS = galstub.o -EXTINCLUDES = -I/usr/src/nsm -I/usr/src/linux/drivers/video/geode/gfx \ - -I/usr/src/linux/drivers/video/geode/panel -#endif - - - -SRCS = geode_driver.c \ - geode_accel.c \ - geode_cursor.c \ - $(STBSRCS) \ - geode_dga.c \ - geode_video.c \ - geode_shadow.c \ - $(DURANGOSRCS) - -OBJS = geode_driver.o \ - geode_accel.o \ - geode_cursor.o \ - $(STBOBJS) \ - geode_dga.o \ - geode_video.o \ - geode_shadow.o \ - $(DURANGOOBJS) - -#if defined(XF86DriverSDK) -INCLUDES = -I. -I../../include -#else -INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86OSSRC) -I$(SERVERSRC)/Xext \ - -I$(SERVERSRC)/mfb -I$(SERVERSRC)/mi \ - -I$(SERVERSRC)/cfb -I$(SERVERSRC)/fb -I$(XF86SRC)/xaa \ - -I$(XF86SRC)/vgahw -I$(XF86SRC)/ramdac \ - -I$(XF86SRC)/ddc -I$(XF86SRC)/i2c \ - -I$(XF86SRC)/rac -I$(XF86SRC)/int10 \ - -I$(XF86SRC)/xf24_32bpp -I$(FONTINCSRC) \ - -I$(XF86SRC)/xf8_32bpp -I$(XF86SRC)/xf1bpp \ - -I$(XF86SRC)/xf4bpp -I$(SERVERSRC)/include -I$(XINCLUDESRC) \ - -I$(XF86SRC)/ddc -I$(XF86SRC)/i2c -I$(EXTINCSRC) $(DRIINCLUDES) \ - -I$(XF86SRC)/shadowfb -I$(XF86SRC)/fbdevhw \ - -I$(XTOP)/include -I$(XF86OSSRC)/vbe -I$(SERVERSRC)/render \ - $(EXTINCLUDES) -#endif - - -#if MakeHasPosixVariableSubstitutions -SubdirLibraryRule($(OBJS)) -#endif - -ModuleObjectRule() - -ObjectModuleTarget(geode,$(OBJS)) - -InstallObjectModule(geode,$(MODULEDIR),drivers) - -#if !defined(XF86DriverSDK) -CppManTarget(geode,) -InstallModuleManPage(geode) -#endif - -DependTarget() - -InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/geode) - -InstallDriverSDKNonExecFile(geode_driver.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(durango.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(galstub.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_accel.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_dga.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_fourcc.h,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_accel.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode.h,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_shadow.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(geode_video.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(panel.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(regacc.c,$(DRIVERSDKDIR)/drivers/geode) -InstallDriverSDKNonExecFile(gfx/disp_gu1.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/disp_gu2.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/durango.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_dcdr.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_defs.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_disp.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_i2c.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_init.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_mode.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_msr.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_regs.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_rndr.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_rtns.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_tv.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_type.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_vga.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_vid.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/gfx_vip.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/history.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/i2c_acc.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/i2c_gpio.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/init_gu1.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/init_gu2.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/msr_rdcl.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/release.txt,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/rndr_gu1.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/rndr_gu2.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/saa7114.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/tv_1200.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/tv_fs450.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/tv_fs450.h,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/vga_gu1.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/vid_1200.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/vid_5530.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/vid_rdcl.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(gfx/vip_1200.c,$(DRIVERSDKDIR)/drivers/geode/gfx) -InstallDriverSDKNonExecFile(panel/92xx.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/cen9211.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/cen9211.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/dora9211.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/dora9211.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/drac9210.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/drac9210.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/panel.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/panel.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/platform.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/pnl_bios.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/pnl_defs.h,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/pnl_init.c,$(DRIVERSDKDIR)/drivers/geode/panel) -InstallDriverSDKNonExecFile(panel/readme.txt,$(DRIVERSDKDIR)/drivers/geode/panel) - -InstallDriverSDKObjectModule(geode,$(DRIVERSDKMODULEDIR),drivers) diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/durango.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/durango.c deleted file mode 100644 index b442035eb..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/durango.c +++ /dev/null @@ -1,618 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/durango.c,v 1.2 2002/10/18 20:52:41 dawes Exp $ */ -/* - * $Workfile: durango.c $ - * - * This is the main file used to add Durango graphics support to a software - * project. The main reason to have a single file include the other files - * is that it centralizes the location of the compiler options. This file - * should be tuned for a specific implementation, and then modified as needed - * for new Durango releases. The releases.txt file indicates any updates to - * this main file, such as a new definition for a new hardware platform. - * - * In other words, this file should be copied from the Durango source files - * once when a software project starts, and then maintained as necessary. - * It should not be recopied with new versions of Durango unless the - * developer is willing to tune the file again for the specific project. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* COMPILER OPTIONS - * These compiler options specify how the Durango routines are compiled - * for the different hardware platforms. For best performance, a driver - * would build for a specific platform. The "dynamic" switches are set - * by diagnostic applications such as Darwin that will run on a variety - * of platforms and use the appropriate code at runtime. Each component - * may be separately dynamic, so that a driver has the option of being - * tuned for a specific 2D accelerator, but will still run with a variety - * of chipsets. - */ - -#define GFX_DISPLAY_DYNAMIC 0 /* runtime selection */ -#define GFX_DISPLAY_GU1 1 /* 1st generation display controller */ -#define GFX_DISPLAY_GU2 0 /* 2nd generation display controller */ - -#define GFX_INIT_DYNAMIC 0 /* runtime selection */ -#define GFX_INIT_GU1 1 /* Geode family */ -#define GFX_INIT_GU2 0 /* Redcloud */ - -#define GFX_MSR_DYNAMIC 0 /* runtime selection */ -#define GFX_MSR_REDCLOUD 0 /* Redcloud */ - -#define GFX_2DACCEL_DYNAMIC 0 /* runtime selection */ -#define GFX_2DACCEL_GU1 1 /* 1st generation 2D accelerator */ -#define GFX_2DACCEL_GU2 0 /* 2nd generation 2D accelerator */ - -#define GFX_VIDEO_DYNAMIC 1 /* runtime selection */ -#define GFX_VIDEO_CS5530 1 /* support for CS5530 */ -#define GFX_VIDEO_SC1200 1 /* support for SC1200 */ -#define GFX_VIDEO_REDCLOUD 0 /* support for Redcloud */ - -#define GFX_VIP_DYNAMIC 0 /* runtime selection */ -#define GFX_VIP_SC1200 0 /* support for SC1200 */ - -#define GFX_DECODER_DYNAMIC 0 /* runtime selection */ -#define GFX_DECODER_SAA7114 0 /* Philips SAA7114 decoder */ - -#define GFX_TV_DYNAMIC 0 /* runtime selection */ -#define GFX_TV_FS451 0 /* Focus Enhancements FS450 */ -#define GFX_TV_SC1200 1 /* SC1200 integrated TV encoder */ - -#define GFX_I2C_DYNAMIC 1 /* runtime selection */ -#define GFX_I2C_ACCESS 1 /* support for ACCESS.BUS */ -#define GFX_I2C_GPIO 1 /* support for CS5530 GPIOs */ - -#define GFX_VGA_DYNAMIC 0 /* runtime selection */ -#define GFX_VGA_GU1 1 /* 1st generation graphics unit */ - -#define FB4MB 1 /* Set to use 4Mb video ram for Pyramid */ - -#define GFX_NO_IO_IN_WAIT_MACROS 0 /* Set to remove I/O accesses in GP bit testing */ - -/* ROUTINES TO READ VALUES - * These are routines used by Darwin or other diagnostics to read the - * current state of the hardware. Display drivers or embedded applications can - * reduce the size of the Durango code by not including these routines. - */ -#define GFX_READ_ROUTINES 1 /* add routines to read values */ - -/* VARIABLES USED FOR RUNTIME SELECTION - * If part of the graphics subsystem is declared as dynamic, then the - * following variables are used to specify which platform has been detected. - * The variables are set in the "gfx_detect_cpu" routine. The values should - * be bit flags to allow masks to be used to check for multiple platforms. - */ - -#if GFX_DISPLAY_DYNAMIC -int gfx_display_type = 0; -#endif - -#if GFX_INIT_DYNAMIC -int gfx_init_type = 0; -#endif - -#if GFX_MSR_DYNAMIC -int gfx_msr_type = 0; -#endif - -#if GFX_2DACCEL_DYNAMIC -int gfx_2daccel_type = 0; -#endif - -#if GFX_VIDEO_DYNAMIC -int gfx_video_type = 0; -#endif - -#if GFX_VIP_DYNAMIC -int gfx_vip_type = 0; -#endif - -#if GFX_DECODER_DYNAMIC -int gfx_decoder_type = 0; -#endif - -#if GFX_TV_DYNAMIC -int gfx_tv_type = 0; -#endif - -#if GFX_I2C_DYNAMIC -int gfx_i2c_type = 0; -#endif - -#if GFX_VGA_DYNAMIC -int gfx_vga_type = 0; -#endif - -/* HEADER FILE FOR DURANGO ROUTINE DEFINITIONS - * Needed since some of the Durango routines call other Durango routines. - * Also defines the size of chipset array (GFX_CSPTR_SIZE). - */ -#include "gfx_rtns.h" /* routine definitions */ - -/* DEFINE POINTERS TO MEMORY MAPPED REGIONS - * These pointers are used by the Durango routines to access the hardware. - * The variables must be set by the project's initialization code after - * mapping the regions in the appropriate manner. - */ - -/* DEFINE VIRTUAL ADDRESSES */ -/* Note: These addresses define the starting base expected by all */ -/* Durango offsets. Under an OS that requires these pointers */ -/* to be mapped to linear addresses (i.e Windows), it may not */ -/* be possible to keep these base offsets. In these cases, */ -/* the addresses are modified to point to the beginning of the */ -/* relevant memory region and the access macros are adjusted */ -/* to subtract the offset from the default base. For example, */ -/* the register pointer could be moved to be 0x40008000, while */ -/* the WRITE_REG* macros are modified to subtract 0x8000 from */ -/* the offset. */ - -unsigned char *gfx_virt_regptr = (unsigned char *)0x40000000; -unsigned char *gfx_virt_fbptr = (unsigned char *)0x40800000; -unsigned char *gfx_virt_vidptr = (unsigned char *)0x40010000; -unsigned char *gfx_virt_vipptr = (unsigned char *)0x40015000; -unsigned char *gfx_virt_spptr = (unsigned char *)0x40000000; -unsigned char *gfx_virt_gpptr = (unsigned char *)0x40000000; - -/* DEFINE PHYSICAL ADDRESSES */ -unsigned char *gfx_phys_regptr = (unsigned char *)0x40000000; -unsigned char *gfx_phys_fbptr = (unsigned char *)0x40800000; -unsigned char *gfx_phys_vidptr = (unsigned char *)0x40010000; -unsigned char *gfx_phys_vipptr = (unsigned char *)0x40015000; - -/* HEADER FILE FOR GRAPHICS REGISTER DEFINITIONS - * This contains only constant definitions, so it should be able to be - * included in any software project as is. - */ -#include "gfx_regs.h" /* graphics register definitions */ - -/* HEADER FILE FOR REGISTER ACCESS MACROS - * This file contains the definitions of the WRITE_REG32 and similar macros - * used by the Durango routines to access the hardware. The file assumes - * that the environment can handle 32-bit pointer access. If this is not - * the case, or if there are special requirements, then this header file - * should not be included and the project must define the macros itself. - * (A project may define WRITE_REG32 to call a routine, for example). - */ -#include "gfx_defs.h" /* register access macros */ - -/* IO MACROS AND ROUTINES - * These macros must be defined before the initialization or I2C - * routines will work properly. - */ - -#if defined(OS_WIN32) /* For Windows */ - -/* VSA II CALL */ - -void -gfx_msr_asm_read(unsigned short msrReg, unsigned long msrAddr, - unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long temp1, temp2; - - _asm { - mov dx, 0x0AC1C - mov eax, 0x0FC530007 - out dx, eax add dl, 2 mov ecx, msrAddr mov cx, msrReg in ax, dx; - EDX:EAX will contain MSR contents.mov temp1, edx mov temp2, eax} - - *ptrHigh = temp1; - *ptrLow = temp2; -} - -void -gfx_msr_asm_write(unsigned short msrReg, unsigned long msrAddr, - unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long temp1 = *ptrHigh; - unsigned long temp2 = *ptrLow; - - _asm { - - mov dx, 0x0AC1C - mov eax, 0x0FC530007 out dx, eax add dl, 2 mov ecx, msrAddr; - ECX contains msrAddr | msrReg mov cx, msrReg; - mov ebx, temp1; - - <OR_mask_hi > mov eax, temp2; - <OR_mask_hi > mov esi, 0; - <AND_mask_hi > mov edi, 0; - <AND_mask_lo > out dx, ax; - MSR is written at this point} -} - -unsigned char -gfx_inb(unsigned short port) -{ - unsigned char data; - - _asm { - pushf mov dx, port in al, dx mov data, al popf} - return (data); -} - -unsigned short -gfx_inw(unsigned short port) -{ - unsigned short data; - - _asm { - pushf mov dx, port in ax, dx mov data, ax popf} - return (data); -} - -unsigned long -gfx_ind(unsigned short port) -{ - unsigned long data; - - _asm { - pushf mov dx, port in eax, dx mov data, eax popf} - return (data); -} - -void -gfx_outb(unsigned short port, unsigned char data) -{ - _asm { - pushf mov al, data mov dx, port out dx, al popf} -} - -void -gfx_outw(unsigned short port, unsigned short data) -{ - _asm { - pushf mov ax, data mov dx, port out dx, ax popf} -} - -void -gfx_outd(unsigned short port, unsigned long data) -{ - _asm { - pushf mov eax, data mov dx, port out dx, eax popf} -} - -#elif defined(OS_VXWORKS) || defined (OS_UNIX) /* VxWorks and Linux etc. */ - -void -gfx_msr_asm_read(unsigned short msrReg, unsigned long msrAddr, - unsigned long *ptrHigh, unsigned long *ptrLow) -{ - /* ADD LINUX IMPLEMENTATION */ - ; -} - -void -gfx_msr_asm_write(unsigned short msrReg, unsigned long msrAddr, - unsigned long *ptrHigh, unsigned long *ptrLow) -{ - /* ADD LINUX IMPLEMENTATION */ - ; -} - -unsigned char -gfx_inb(unsigned short port) -{ - unsigned char value; - __asm__ volatile ("inb %1,%0":"=a" (value):"d"(port)); - - return value; -} - -unsigned short -gfx_inw(unsigned short port) -{ - unsigned short value; - __asm__ volatile ("in %1,%0":"=a" (value):"d"(port)); - - return value; -} - -unsigned long -gfx_ind(unsigned short port) -{ - unsigned long value; - __asm__ volatile ("inl %1,%0":"=a" (value):"d"(port)); - - return value; -} - -void -gfx_outb(unsigned short port, unsigned char data) -{ - __asm__ volatile ("outb %0,%1"::"a" (data), "d"(port)); -} - -void -gfx_outw(unsigned short port, unsigned short data) -{ - __asm__ volatile ("out %0,%1"::"a" (data), "d"(port)); -} - -void -gfx_outd(unsigned short port, unsigned long data) -{ - __asm__ volatile ("outl %0,%1"::"a" (data), "d"(port)); -} - -#elif defined(XFree86Server) - -#include <xf86_ansic.h> -#include <compiler.h> -#define INB(port) inb(port) -#define INW(port) inw(port) -#define IND(port) inl(port) -#define OUTB(port,data) outb(port, data) -#define OUTW(port,data) outw(port, data) -#define OUTD(port,data) outl(port, data) - -unsigned char -gfx_inb(unsigned short port) -{ - return inb(port); -} - -unsigned short -gfx_inw(unsigned short port) -{ - return inw(port); -} - -unsigned long -gfx_ind(unsigned short port) -{ - return inl(port); -} - -void -gfx_outb(unsigned short port, unsigned char data) -{ - outb(port, data); -} - -void -gfx_outw(unsigned short port, unsigned short data) -{ - outw(port, data); -} - -void -gfx_outd(unsigned short port, unsigned long data) -{ - outl(port, data); -} - -#else /* else nothing */ - -unsigned char -gfx_inb(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return (0); -} - -unsigned short -gfx_inw(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return (0); -} - -unsigned long -gfx_ind(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return (0); -} - -void -gfx_outb(unsigned short port, unsigned char data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} - -void -gfx_outw(unsigned short port, unsigned short data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} - -void -gfx_outd(unsigned short port, unsigned long data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} -#endif - -#ifndef XFree86Server -#define INB(port) gfx_inb(port) -#define INW(port) gfx_inw(port) -#define IND(port) gfx_ind(port) -#define OUTB(port, data) gfx_outb(port, data) -#define OUTW(port, data) gfx_outw(port, data) -#define OUTD(port, data) gfx_outd(port, data) -#endif - -/* INITIALIZATION ROUTINES - * These routines are used during the initialization of the driver to - * perform such tasks as detecting the type of CPU and video hardware. - * The routines require the use of IO, so the above IO routines need - * to be implemented before the initialization routines will work - * properly. - */ - -#include "gfx_init.c" - -/* INCLUDE MSR ACCESS ROUTINES */ - -#include "gfx_msr.c" - -/* INCLUDE GRAPHICS ENGINE ROUTINES - * These routines are used to program the 2D graphics accelerator. If - * the project does not use graphics acceleration (direct frame buffer - * access only), then this file does not need to be included. - */ -#include "gfx_rndr.c" /* graphics engine routines */ - -/* INCLUDE DISPLAY CONTROLLER ROUTINES - * These routines are used if the display mode is set directly. If the - * project uses VGA registers to set a display mode, then these files - * do not need to be included. - */ -#include "gfx_mode.h" /* display mode tables */ -#include "gfx_disp.c" /* display controller routines */ - -/* INCLUDE VIDEO OVERLAY ROUTINES - * These routines control the video overlay hardware. - */ -#include "gfx_vid.c" /* video overlay routines */ - -/* VIDEO PORT AND VIDEO DECODER ROUTINES - * These routines rely on the I2C routines. - */ -#include "gfx_vip.c" /* video port routines */ -#include "gfx_dcdr.c" /* video decoder routines */ - -/* I2C BUS ACCESS ROUTINES - * These routines are used by the video decoder and possibly an - * external TV encoer. - */ -#include "gfx_i2c.c" /* I2C bus access routines */ - -/* TV ENCODER ROUTINES - * This file does not need to be included if the system does not - * support TV output. - */ -#include "gfx_tv.c" /* TV encoder routines */ - -/* VGA ROUTINES - * This file is used if setting display modes using VGA registers. - */ -#include "gfx_vga.c" /* VGA routines */ - -/* ROUTINES added accessing hardware reg */ -#include "regacc.c" - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/galstub.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/galstub.c deleted file mode 100644 index a016531af..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/galstub.c +++ /dev/null @@ -1,158 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/galstub.c,v 1.1 2002/10/11 14:32:58 alanh Exp $ */ -/* - * $Workfile: galstub.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the file inclusions of the GAL - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#if defined(STB_X) -#ifdef XFree86LOADER -/* all driver need this */ -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86_ansic.h" -/* pci stuff */ -#include "xf86PciInfo.h" -#include "xf86Pci.h" -#include "xf86cmap.h" -#include "asm/page.h" /* #define for PAGE_* */ - -#define makedev(major, minor) ((((unsigned int) (major)) << 8) \ - | ((unsigned int) (minor))) -#endif - -#include "galfns.c" -#endif /* STB_X */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.h deleted file mode 100644 index a081c0609..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.h +++ /dev/null @@ -1,332 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode.h,v 1.1 2002/10/11 14:32:58 alanh Exp $ */ -/* - * $Workfile: geode.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the data structures Geode driver. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#ifndef _GEODE_H_ -#define _GEODE_H_ - -#include "xaa.h" -#include "xf86Cursor.h" -#include "vgaHW.h" -#include "xf86xv.h" - -#if defined(STB_X) -#define GFX(x) Gal_##x -#else -#define GFX(x) gfx_##x -#endif - -#if defined(STB_X) -#include "galproto.h" -#else -#include "gfx_rtns.h" -#include "gfx_defs.h" -#include "gfx_regs.h" -#include "panel.h" - -typedef struct __TVPARAMS -{ - unsigned int dwFlags; - unsigned short wWidth; - unsigned short wHeight; - unsigned short wStandard; - unsigned short wType; - unsigned short wOutput; - unsigned short wResolution; - Bool bState; -} -TVPARAMS, *PTVPARAMS; - -typedef struct __DISPLAYTIMING -{ - unsigned int dwDotClock; - unsigned short wPitch; - unsigned short wBpp; - unsigned short wHTotal; - unsigned short wHActive; - unsigned short wHSyncStart; - unsigned short wHSyncEnd; - unsigned short wHBlankStart; - unsigned short wHBlankEnd; - unsigned short wVTotal; - unsigned short wVActive; - unsigned short wVSyncStart; - unsigned short wVSyncEnd; - unsigned short wVBlankStart; - unsigned short wVBlankEnd; - unsigned short wPolarity; -} -DISPLAYTIMING, *PDISPLAYTIMING; - -/* TV Timings */ -typedef struct __TVTIMING -{ - unsigned long HorzTim; - unsigned long HorzSync; - unsigned long VertSync; - unsigned long LineEnd; - unsigned long VertDownscale; - unsigned long HorzScaling; - unsigned long TimCtrl1; - unsigned long TimCtrl2; - unsigned long Subfreq; - unsigned long DispPos; - unsigned long DispSize; - unsigned long Debug; - unsigned long DacCtrl; - unsigned int DotClock; -} -TVTIMING, *PTVTIMING; - -#endif /* STB_X */ - -/* XFree86 macros */ -#define GEODEPTR(p) ((GeodePtr)((p)->driverPrivate)) - -#define DEBUGMSG(cond, drv_msg) if((cond)) xf86DrvMsg drv_msg - -#define DEFAULT_NUM_OF_BUF 20 /* default # of buffers */ - -/* Overlay Transparency Key */ -#define TRANSPARENCY_KEY 255 - -typedef struct -{ - /* Private struct for the server */ - unsigned long cpu_version; /* [7:0] Type:1=GXLV,2=SC1400 */ - /* [15:8] Major version */ - /* [23:16] Minor version */ - unsigned long vid_version; /* [7:0] Type:1=CS5530,2=SC1400 */ - - EntityInfoPtr pEnt; - ScreenBlockHandlerProcPtr BlockHandler; /* needed for video */ - CloseScreenProcPtr CloseScreen; - int Chipset; - int FBLinearAddr; - unsigned char *FBBase; - unsigned long FBSize; - int Pitch; - Bool HWCursor; - Bool NoAccel; - Bool HWOverlay; - Bool HWVideo; - unsigned long ColorKey; - unsigned long VideoKey; - - Bool TVSupport; -#if defined(STB_X) - GAL_TVPARAMS TvParam; -#else - TVPARAMS TvParam; -#endif /* STB_X */ - - int TVOx, TVOy, TVOw, TVOh; - Bool TV_Overscan_On; - - Bool Panel; - Pnl_PanelParams PnlParam; - - /* Flatpanel support from Bios */ - Bool FPInBios; - int FPBX; /* xres */ - int FPBY; /* yres */ - int FPBB; /* bpp */ - int FPBF; /* freq */ - - int Rotate; - Bool ShadowFB; - unsigned char *ShadowPtr; - int ShadowPitch; - void (*PointerMoved) (int index, int x, int y); - - Bool Compression; - unsigned long CursorStartOffset; - unsigned int CursorSize; - xf86CursorInfoPtr CursorInfo; - int CursorXHot; - int CursorYHot; - unsigned long OffscreenStartOffset; - unsigned int OffscreenSize; - - /***Image Write structures ***/ - - /* offset in video memory for ImageWrite Buffers */ - unsigned char **AccelImageWriteBufferOffsets; - int NoOfImgBuffers; - /*****************************************/ -/* Saved Console State */ -#if defined(STB_X) - GAL_VGAMODEDATA FBgfxVgaRegs; - GAL_DISPLAYTIMING FBgfxdisplaytiming; - GAL_TVTIMING FBgfxtvtiming; -#else - gfx_vga_struct FBgfxVgaRegs; - DISPLAYTIMING FBgfxdisplaytiming; - TVTIMING FBtvtiming; -#endif /* STB_X */ - int FBSoftVGAActive; - unsigned int FBTVEnabled; - unsigned long FBDisplayOffset; - - /* compression */ - int FBCompressionEnable; - unsigned long FBCompressionOffset; - unsigned short FBCompressionPitch; - unsigned short FBCompressionSize; - - /* Save the Cursor offset of the FB */ - unsigned long FBCursorOffset; -/*****************************************/ - - XAAInfoRecPtr AccelInfoRec; - - DGAModePtr DGAModes; - int numDGAModes; - Bool DGAactive; - int DGAViewportStatus; - - int videoKey; - XF86VideoAdaptorPtr adaptor; - int OverlaySkewX; - int OverlaySkewY; - int VideoZoomMax; -} -GeodeRec, *GeodePtr; - -#endif /* _GEODE_H_ */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.man b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.man deleted file mode 100644 index f9ee9190c..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode.man +++ /dev/null @@ -1,31 +0,0 @@ -.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode.man,v 1.1 2002/10/11 14:32:58 alanh Exp $ -.\" shorthand for double quote that works everywhere. -.ds q \N'34' -.TH GEODE __drivermansuffix__ __vendorversion__ -.SH NAME -geode \- Geode video driver -.SH SYNOPSIS -.nf -.B "Section \*qDevice\*q" -.BI " Identifier \*q" devname \*q -.B " Driver \*qgeode\*q" -\ \ ... -.B EndSection -.fi -.SH DESCRIPTION -.B geode -is an driver for National Semiconductors GEODE processor family. -It uses the DURANGO kit provided by National Semiconductors. -.SH SUPPORTED HARDWARE -The -.B geode -driver supports GXLV (5530 companion chip), SC1200, SC1400 -.SH CONFIGURATION DETAILS -Please refer to XF86Config(5x) for general configuration -details. This section only covers configuration details specific to this -driver. -.SH "SEE ALSO" -XFree86(1), XF86Config(5x), xf86config(1), Xserver(1), X(1) -.SH AUTHORS -Juergen Schneider, Infomatec IAS GmbH -Alan Hourihane <alanh@fairlite.demon.co.uk> diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_accel.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_accel.c deleted file mode 100644 index 371d66622..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_accel.c +++ /dev/null @@ -1,1076 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_accel.c,v 1.1 2002/10/11 14:32:58 alanh Exp $ */ -/* - * $Workfile: geode_accel.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file is consists of main Xfree - * acceleration supported routines like solid fill used - * here. - * Project: Geode Xfree Frame buffer device driver. - * - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* - * Fixes by - * Alan Hourihane <alanh@fairlite.demon.co.uk> - */ - -/* Xfree86 header files */ -#include "vgaHW.h" -#include "xf86.h" -#include "xf86_ansic.h" -#include "xaalocal.h" -#include "xf86fbman.h" -#include "miline.h" -#include "xf86_libc.h" -#include "xaarop.h" -#include "geode.h" - -/* The following ROPs only use pattern and destination data. - * They are used when the planemask specifies all planes (no mask). - */ - -static const int windowsROPpat[16] = { - 0x00, 0xA0, 0x50, 0xF0, 0x0A, 0xAA, 0x5A, 0xFA, - 0x05, 0xA5, 0x55, 0xF5, 0x0F, 0xAF, 0x5F, 0xFF -}; - -/* The following ROPs use source data to specify a planemask. - * If the planemask (src) is one, then the result is the appropriate - * combination of pattern and destination data. If the planemask (src) - * is zero, then the result is always just destination data. - */ - -static const int windowsROPsrcMask[16] = { - 0x22, 0xA2, 0x62, 0xE2, 0x2A, 0xAA, 0x6A, 0xEA, - 0x26, 0xA6, 0x66, 0xE6, 0x2E, 0xAE, 0x6E, 0xEE -}; - -/* The following ROPs use pattern data to specify a planemask. - * If the planemask (pat) is one, then the result is the appropriate - * combination of source and destination data. If the planemask (pat) - * is zero, then the result is always just destination data. - */ - -static const int windowsROPpatMask[16] = { - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA -}; - -/* STATIC VARIABLES FOR THIS FILE - * Used to maintain state between setup and rendering calls. - */ - -static int GeodeTransparent; -static int GeodeTransColor; -static int Geodedstx; -static int Geodedsty; -static int Geodesrcx; -static int Geodesrcy; -static int Geodewidth; -static int Geodeheight; -static int Geodebpp; -static int GeodeCounter; - -/* DECLARATION OF ROUTINES THAT ARE HOOKED */ - -Bool GeodeAccelInit(ScreenPtr pScreen); -void GeodeAccelSync(ScrnInfoPtr pScreenInfo); -void GeodeSetupForFillRectSolid(ScrnInfoPtr pScreenInfo, int color, int rop, - unsigned int planemask); -void GeodeSubsequentFillRectSolid(ScrnInfoPtr pScreenInfo, int x, int y, - int w, int h); -void GeodeSetupFor8x8PatternMonoExpand(ScrnInfoPtr pScreenInfo, - int patternx, int patterny, int fg, - int bg, int rop, - unsigned int planemask); -void GeodeSubsequent8x8PatternMonoExpand(ScrnInfoPtr pScreenInfo, - int patternx, int patterny, int x, - int y, int w, int h); -void GeodeSetupForScreenToScreenCopy(ScrnInfoPtr pScreenInfo, int xdir, - int ydir, int rop, - unsigned int planemask, - int transparency_color); -void GeodeSubsequentScreenToScreenCopy(ScrnInfoPtr pScreenInfo, int x1, - int y1, int x2, int y2, int w, int h); -void GeodeSetupForSolidLine(ScrnInfoPtr pScreenInfo, int color, int rop, - unsigned int planemask); -void GeodeSetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop, - unsigned int planemask, int length, - unsigned char *pattern); -void GeodeSubsequentBresenhamLine(ScrnInfoPtr pScreenInfo, int x1, int y1, - int absmaj, int absmin, int err, int len, - int octant); -void GeodeSubsequentHorVertLine(ScrnInfoPtr pScreenInfo, int x, int y, - int len, int dir); - -void GeodeSetupForScanlineImageWrite(ScrnInfoPtr pScreenInfo, - int rop, unsigned int planemask, - int transparency_color, int bpp, - int depth); - -void GeodeSubsequentScanlineImageWriteRect(ScrnInfoPtr pScreenInfo, - int x, int y, int w, int h, - int skipleft); - -void GeodeSubsequentImageWriteScanline(ScrnInfoPtr pScreenInfo, int bufno); - -#if 0 -void GeodeFillCacheBltRects(ScrnInfoPtr pScrn, - int rop, unsigned int planemask, - int nBox, BoxPtr pBox, int xorg, int yorg, - XAACacheInfoPtr pCache); -#endif - -static XAAInfoRecPtr localRecPtr; - -/*---------------------------------------------------------------------------- - * GeodeAccelInit. - * - * Description :This function sets up the supported acceleration routines and - * appropriate flags. - * - * Parameters: - * pScreen :Screeen pointer structure. - * - * Returns :TRUE on success and FALSE on Failure - * - * Comments :This function is called in GeodeScreenInit in - geode_driver.c to set * the acceleration. -*---------------------------------------------------------------------------- -*/ -Bool -GeodeAccelInit(ScreenPtr pScreen) -{ - GeodePtr pGeode; - ScrnInfoPtr pScreenInfo; - BoxRec AvailBox; - RegionRec OffscreenRegion; - unsigned long offset; - - pScreenInfo = xf86Screens[pScreen->myNum]; - pGeode = GEODEPTR(pScreenInfo); - - /* Getting the pointer for acceleration Inforecord */ - pGeode->AccelInfoRec = localRecPtr = XAACreateInfoRec(); - - /* SET ACCELERATION FLAGS */ - localRecPtr->Flags = PIXMAP_CACHE | OFFSCREEN_PIXMAPS | LINEAR_FRAMEBUFFER; - - /* HOOK SYNCRONIZATION ROUTINE */ - localRecPtr->Sync = GeodeAccelSync; - - /* HOOK FILLED RECTANGLES */ - localRecPtr->SetupForSolidFill = GeodeSetupForFillRectSolid; - localRecPtr->SubsequentSolidFillRect = GeodeSubsequentFillRectSolid; - localRecPtr->SolidFillFlags = 0; - - /* HOOK 8x8 COLOR EXPAND PATTERNS */ - localRecPtr->SetupForMono8x8PatternFill = - GeodeSetupFor8x8PatternMonoExpand; - localRecPtr->SubsequentMono8x8PatternFillRect = - GeodeSubsequent8x8PatternMonoExpand; - localRecPtr->Mono8x8PatternFillFlags = BIT_ORDER_IN_BYTE_MSBFIRST | - HARDWARE_PATTERN_PROGRAMMED_BITS | HARDWARE_PATTERN_SCREEN_ORIGIN; - - /* HOOK SCREEN TO SCREEN COPIES - * * Set flag to only allow copy if transparency is enabled. - */ - localRecPtr->SetupForScreenToScreenCopy = GeodeSetupForScreenToScreenCopy; - localRecPtr->SubsequentScreenToScreenCopy = - GeodeSubsequentScreenToScreenCopy; - - localRecPtr->ScreenToScreenCopyFlags = GXCOPY_ONLY | NO_TRANSPARENCY; - - /* HOOK BRESENHAM SOLID LINES */ - /* Do not hook unless flag can be set preventing use of planemask. */ - localRecPtr->SolidLineFlags = NO_PLANEMASK; - localRecPtr->SetupForSolidLine = GeodeSetupForSolidLine; - localRecPtr->SubsequentSolidBresenhamLine = GeodeSubsequentBresenhamLine; - localRecPtr->SubsequentSolidHorVertLine = GeodeSubsequentHorVertLine; - localRecPtr->SolidBresenhamLineErrorTermBits = 15; - -#if 0 - /* HOOK BRESENHAM DASHED LINES */ - localRecPtr->DashedLineFlags = NO_PLANEMASK; - localRecPtr->DashPatternMaxLength = 64; - localRecPtr->SetupForDashedLine = GeodeSetupForDashedLine; - localRecPtr->SubsequentDashedBresenhamLine = GeodeSubsequentBresenhamLine; - localRecPtr->DashedBresenhamLineErrorTermBits = 15; -#endif - - /* - * ImageWrite. - * - * SInce this uses off-screen scanline buffers, it is only of use when - * complex ROPs are used. But since the current XAA pixmap cache code - * only works when an ImageWrite is provided, the NO_GXCOPY flag is - * temporarily disabled. - */ - if (pGeode->AccelImageWriteBufferOffsets) { - localRecPtr->ScanlineImageWriteFlags = NO_GXCOPY | NO_TRANSPARENCY; - localRecPtr->NumScanlineImageWriteBuffers = pGeode->NoOfImgBuffers; - localRecPtr->SetupForScanlineImageWrite = - GeodeSetupForScanlineImageWrite; - localRecPtr->SubsequentScanlineImageWriteRect = - GeodeSubsequentScanlineImageWriteRect; - localRecPtr->SubsequentImageWriteScanline = - GeodeSubsequentImageWriteScanline; - - localRecPtr->ScanlineImageWriteBuffers = - pGeode->AccelImageWriteBufferOffsets; - - offset = (unsigned long)pGeode->AccelImageWriteBufferOffsets[0] - - (unsigned long)pGeode->FBBase; - Geodesrcy = offset / pGeode->Pitch; - - Geodesrcx = offset & (pGeode->Pitch - 1); - Geodesrcx >>= (Geodebpp >> 3) - 1; - } - - /* CACHE COPY FUNCTION - * * - * * localRecPtr->FillCacheBltRects = GeodeFillCacheBltRects; - * * localRecPtr->FillCacheBltRectsFlags = NO_TRANSPARENCY; - */ - - /* SET UP GRAPHICS MEMORY AVAILABLE FOR PIXMAP CACHE */ - AvailBox.x1 = 0; - AvailBox.x2 = pScreenInfo->displayWidth; - AvailBox.y1 = pGeode->OffscreenStartOffset / pGeode->Pitch; - AvailBox.y2 = AvailBox.y1 + - ((pGeode->OffscreenSize / pGeode->Pitch / - (pScreenInfo->bitsPerPixel >> 3))); - - REGION_INIT(pScreen, &OffscreenRegion, &AvailBox, 2); - if (!xf86InitFBManagerRegion(pScreen, &OffscreenRegion)) { - xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR, - "Region (%d,%d,%d,%d) at 0x%08lX not provided for pixmap caching.\n", - OffscreenRegion.extents.x1, - OffscreenRegion.extents.y1, - OffscreenRegion.extents.x2, - OffscreenRegion.extents.y2, OffscreenRegion.data); - xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR, - "Couln't initialize the offscreen memory manager.\n"); - } else { - xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED, - "Region (%d,%d,%d,%d) at 0x%08lX provided for pixmap caching.\n", - OffscreenRegion.extents.x1, - OffscreenRegion.extents.y1, - OffscreenRegion.extents.x2, - OffscreenRegion.extents.y2, OffscreenRegion.data); - } - REGION_UNINIT(pScreen, &OffscreenRegion); - - /* TEXT IS NOT HOOKED */ - /* Actually faster to not accelerate it. To accelerate, the data */ - /* is copied from the font data to a buffer by the OS, then the */ - /* driver copies it from the buffer to the BLT buffer, then the */ - /* rendering engine reads it from the BLT buffer. May be worthwhile */ - /* to hook text later with the second generation graphics unit that */ - /* can take the data directly. */ - - return (XAAInit(pScreen, localRecPtr)); -} - -/*---------------------------------------------------------------------------- - * GeodeAccelSync. - * - * Description :This function is called to syncronize with the graphics - * engine and it waits the graphic engine is idle.This is - * required before allowing direct access to the - * framebuffer. - * Parameters. - * pScreenInfo:Screeen info pointer structure. - * - * Returns :none - * - * Comments :This function is called on geode_video routines. -*---------------------------------------------------------------------------- -*/ -void -GeodeAccelSync(ScrnInfoPtr pScreenInfo) -{ - GFX(wait_until_idle()); -} - -/*---------------------------------------------------------------------------- - * GeodeSetupForFillRectSolid. - * - * Description :This routine is called to setup the solid pattern - * color for future rectangular fills or vectors. - * - * Parameters. - * pScreenInfo - * Ptr :Screen handler pointer having screen information. - * color :Specifies the color to be filled up in defined area. - * rop :Specifies the raster operation value. - * planemask :Specifies the masking value based rop srcdata. - * - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeSetupForFillRectSolid(ScrnInfoPtr pScreenInfo, - int color, int rop, unsigned int planemask) -{ - GFX(set_solid_pattern((unsigned long)color)); - - /* CHECK IF PLANEMASK IS NOT USED (ALL PLANES ENABLED) */ - if (planemask == (unsigned int)-1) { - /* USE NORMAL PATTERN ROPs IF ALL PLANES ARE ENABLED */ - GFX(set_raster_operation(windowsROPpat[rop & 0x0F])); - } else { - /* SELECT ROP THAT USES SOURCE DATA FOR PLANEMASK */ - GFX(set_solid_source((unsigned long)planemask)); - GFX(set_raster_operation(windowsROPsrcMask[rop & 0x0F])); - } -} - - /*---------------------------------------------------------------------------- - * GeodeSubsequentFillRectSolid. - * - * Description :This routine is used to fill the rectangle of previously - * specified solid pattern. - * - * Parameters. - * pScreenInfo :Screen handler pointer having screen information. - * x and y :Specifies the x and y co-ordinatesarea. - * w and h :Specifies width and height respectively. - * - * Returns :none - * - * Comments :desired pattern can be set before this function by - * gfx_set_solid_pattern. - * Sample application uses: - * - Window backgrounds. - * - x11perf: rectangle tests (-rect500). - * - x11perf: fill trapezoid tests (-trap100). - * - x11perf: horizontal line segments (-hseg500). - *---------------------------------------------------------------------------- -*/ -void -GeodeSubsequentFillRectSolid(ScrnInfoPtr pScreenInfo, int x, int y, int w, - int h) -{ - /* SIMPLY PASS THE PARAMETERS TO THE DURANGO ROUTINE */ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x += pGeode->TVOx; - y += pGeode->TVOy; - } - - GFX(pattern_fill((unsigned short)x, (unsigned short)y, - (unsigned short)w, (unsigned short)h)); -} - -/*---------------------------------------------------------------------------- - * GeodeSetupFor8x8PatternMonoExpand - * - * Description :This routine is called to fill the monochrome pattern of - * 8x8. - * Parameters. - * pScreenInfo :Screen handler pointer having screen information. - * patternx:This is set from on rop data. - * patterny:This is set based on rop data. - * fg :Specifies the foreground color - * bg :Specifies the background color - * planemask :Specifies the value of masking from rop data - - * Returns :none. - * - * Comments :none. - * -*---------------------------------------------------------------------------- -*/ -void -GeodeSetupFor8x8PatternMonoExpand(ScrnInfoPtr pScreenInfo, - int patternx, int patterny, int fg, - int bg, int rop, unsigned int planemask) -{ - int trans = (bg == -1); - - /* LOAD PATTERN COLORS AND DATA */ - GFX(set_mono_pattern((unsigned long)bg, (unsigned long)fg, - (unsigned long)patternx, (unsigned long)patterny, - (unsigned char)trans)); - - /* CHECK IF PLANEMASK IS NOT USED (ALL PLANES ENABLED) */ - if (planemask == (unsigned int)-1) { - /* USE NORMAL PATTERN ROPs IF ALL PLANES ARE ENABLED */ - GFX(set_raster_operation(windowsROPpat[rop & 0x0F])); - } else { - /* SELECT ROP THAT USES SOURCE DATA FOR PLANEMASK */ - GFX(set_solid_source((unsigned long)planemask)); - GFX(set_raster_operation(windowsROPsrcMask[rop & 0x0F])); - } -} - -/*---------------------------------------------------------------------------- - * GeodeSubsequent8x8PatternMonoExpand - * - * Description :This routine is called to fill a ractanglethe - * monochrome pattern of previusly loaded pattern. - * - * Parameters. - * pScreenInfo :Screen handler pointer having screen information. - * patternx :This is set from on rop data. - * patterny :This is set based on rop data. - * fg :Specifies the foreground color - * bg :Specifies the background color - * planemask :Specifies the value of masking from rop data - - * Returns :none - * - * Comments :The patterns specified is ignored inside the function - * Sample application uses: - * - Patterned desktops - * - x11perf: stippled rectangle tests (-srect500). - * - x11perf: opaque stippled rectangle tests (-osrect500). -*---------------------------------------------------------------------------- -*/ -void -GeodeSubsequent8x8PatternMonoExpand(ScrnInfoPtr pScreenInfo, - int patternx, int patterny, int x, int y, - int w, int h) -{ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x += pGeode->TVOx; - y += pGeode->TVOy; - } - - /* SIMPLY PASS THE PARAMETERS TO THE DURANGO ROUTINE */ - /* Ignores specified pattern. */ - GFX(pattern_fill((unsigned short)x, (unsigned short)y, - (unsigned short)w, (unsigned short)h)); -} - -/*---------------------------------------------------------------------------- - * GeodeSetupForScreenToScreenCopy - * - * Description :This function is used to set up the planemask and raster - * for future Bliting functionality. - * - * Parameters: - * pScreenInfo :Screen handler pointer having screen information. - * xdir :This is set based on rop data. - * ydir :This is set based on rop data. - * rop :sets the raster operation - * transparency:tobeadded - * planemask :Specifies the value of masking from rop data - - * Returns :none - * - * Comments :The patterns specified is ignored inside the function -*---------------------------------------------------------------------------- -*/ -void -GeodeSetupForScreenToScreenCopy(ScrnInfoPtr pScreenInfo, - int xdir, int ydir, int rop, - unsigned int planemask, - int transparency_color) -{ - GFX(set_solid_pattern((unsigned long)planemask)); - /* SET RASTER OPERATION FOR USING PATTERN AS PLANE MASK */ - GFX(set_raster_operation(windowsROPpatMask[rop & 0x0F])); - - /* SAVE TRANSPARENCY FLAG */ - GeodeTransparent = (transparency_color == -1) ? 0 : 1; - GeodeTransColor = transparency_color; -} - -/*---------------------------------------------------------------------------- - * GeodeSubsquentScreenToScreenCopy - * - * Description :This function is called to perform a screen to screen - * BLT using the previously specified planemask,raster - * operation and * transparency flag - * - * Parameters. - * pScreenInfo :Screen handler pointer having screen information. - * x1 :x -coordinates of the source window - * y1 :y-co-ordinates of the source window - * x2 :x -coordinates of the destination window - * y2 :y-co-ordinates of the destination window - * w :Specifies width of the window to be copied - * h :Height of the window to be copied. - * Returns :none - * - * Comments :The patterns specified is ignored inside the function - * Sample application uses (non-transparent): - * - Moving windows. - * - x11perf: scroll tests (-scroll500). - * - x11perf: copy from window to window (-copywinwin500). - * - * No application found using transparency. -*---------------------------------------------------------------------------- -*/ -void -GeodeSubsequentScreenToScreenCopy(ScrnInfoPtr pScreenInfo, - int x1, int y1, int x2, int y2, int w, - int h) -{ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x1 += pGeode->TVOx; - y1 += pGeode->TVOy; - x2 += pGeode->TVOx; - y2 += pGeode->TVOy; - } - - if (GeodeTransparent) { - /* CALL ROUTINE FOR TRANSPARENT SCREEN TO SCREEN BLT - * * Should only be called for the "copy" raster operation. - */ - GFX(screen_to_screen_xblt((unsigned short)x1, (unsigned short)y1, - (unsigned short)x2, (unsigned short)y2, - (unsigned short)w, (unsigned short)h, - (unsigned short)GeodeTransColor)); - } else { - /* CALL ROUTINE FOR NORMAL SCREEN TO SCREEN BLT */ - GFX(screen_to_screen_blt((unsigned short)x1, (unsigned short)y1, - (unsigned short)x2, (unsigned short)y2, - (unsigned short)w, (unsigned short)h)); - } -} - -void -GeodeSetupForScanlineImageWrite(ScrnInfoPtr pScreenInfo, - int rop, unsigned int planemask, - int transparency_color, int bpp, int depth) -{ - GFX(set_solid_pattern((unsigned long)planemask)); - /* SET RASTER OPERATION FOR USING PATTERN AS PLANE MASK */ - GFX(set_raster_operation(windowsROPpatMask[rop & 0x0F])); - - /* SAVE TRANSPARENCY FLAG */ - GeodeTransparent = (transparency_color == -1) ? 0 : 1; - GeodeTransColor = transparency_color; - Geodebpp = bpp; -} - -void -GeodeSubsequentScanlineImageWriteRect(ScrnInfoPtr pScreenInfo, - int x, int y, int w, int h, - int skipleft) -{ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - Geodedstx = x; - Geodedsty = y; - - if (pGeode->TV_Overscan_On) { - Geodedstx += pGeode->TVOx; - Geodedsty += pGeode->TVOy; - } - - Geodewidth = w; - Geodeheight = h; - - GeodeCounter = 0; -} - -void -GeodeSubsequentImageWriteScanline(ScrnInfoPtr pScreenInfo, int bufno) -{ - - GeodePtr pGeode; - int blt_height = 0; - char blit = FALSE; - - pGeode = GEODEPTR(pScreenInfo); - - GeodeCounter++; - - if ((Geodeheight <= pGeode->NoOfImgBuffers) && - (GeodeCounter == Geodeheight)) { - blit = TRUE; - blt_height = Geodeheight; - } else if ((Geodeheight > pGeode->NoOfImgBuffers) - && (GeodeCounter == pGeode->NoOfImgBuffers)) { - blit = TRUE; - Geodeheight -= pGeode->NoOfImgBuffers; - blt_height = pGeode->NoOfImgBuffers; - } else - return; - - if (blit) { - - blit = FALSE; - - GeodeCounter = 0; - - if (GeodeTransparent) { - /* CALL ROUTINE FOR TRANSPARENT SCREEN TO SCREEN BLT - * * Should only be called for the "copy" raster operation. - */ - GFX(screen_to_screen_xblt((unsigned short)Geodesrcx, - (unsigned short)Geodesrcy, - (unsigned short)Geodedstx, - (unsigned short)Geodedsty, - (unsigned short)Geodewidth, - (unsigned short)blt_height, - (unsigned short)GeodeTransColor)); - } else { - /* CALL ROUTINE FOR NORMAL SCREEN TO SCREEN BLT */ - GFX(screen_to_screen_blt((unsigned short)Geodesrcx, - (unsigned short)Geodesrcy, - (unsigned short)Geodedstx, - (unsigned short)Geodedsty, - (unsigned short)Geodewidth, - (unsigned short)blt_height)); - } - Geodedsty += blt_height; - GeodeAccelSync(pScreenInfo); - } - -} - -/*---------------------------------------------------------------------------- - * GeodeSetupForSolidLine - * - * Description :This function is used setup the solid line color for - * future line draws. - * - * - * Parameters. - * pScreenInfo :Screen handler pointer having screen information. - * color :Specifies the color value od line - * rop :Specifies rop values. - * Planemask :Specifies planemask value. - * Returns :none - * - * Comments :none -*---------------------------------------------------------------------------- -*/ -void -GeodeSetupForSolidLine(ScrnInfoPtr pScreenInfo, - int color, int rop, unsigned int planemask) -{ - /* LOAD THE SOLID PATTERN COLOR */ - GFX(set_solid_pattern((unsigned long)color)); - - /* USE NORMAL PATTERN ROPs IF ALL PLANES ARE ENABLED */ - GFX(set_raster_operation(windowsROPpat[rop & 0x0F])); -} - -unsigned short vector_mode_table[] = { - VM_MAJOR_INC | VM_MINOR_INC | VM_X_MAJOR, - VM_MAJOR_INC | VM_MINOR_INC | VM_Y_MAJOR, - VM_MAJOR_INC | VM_Y_MAJOR, - VM_MINOR_INC | VM_X_MAJOR, - VM_X_MAJOR, - VM_Y_MAJOR, - VM_MINOR_INC | VM_Y_MAJOR, - VM_MAJOR_INC | VM_X_MAJOR, -}; - -/*--------------------------------------------------------------------------- - * GeodeSubsequentBresenhamLine - * - * Description :This function is used to render a vector using the - * specified bresenham parameters. - * - * Parameters: - * pScreenInfo :Screen handler pointer having screen information. - * x1 :Specifies the starting x position - * y1 :Specifies starting y possition - * absmaj :Specfies the Bresenman absolute major. - * absmin :Specfies the Bresenman absolute minor. - * err :Specifies the bresenham err term. - * len :Specifies the length of the vector interms of pixels. - * octant :not used in this function,may be added for standard - * interface. - * Returns :none - * - * Comments :none - * Sample application uses: - * - Window outlines on window move. - * - x11perf: line segments (-seg500). -*---------------------------------------------------------------------------- -*/ -void -GeodeSubsequentBresenhamLine(ScrnInfoPtr pScreenInfo, - int x1, int y1, int absmaj, int absmin, int err, - int len, int octant) -{ - unsigned short flags; - int octant_reg; - int axial, init, diag; - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x1 += pGeode->TVOx; - y1 += pGeode->TVOy; - } - - /*ErrorF("BresenhamLine(%d, %d, %d, %d, %d, %d, %d)\n", - * x1, y1, absmaj, absmin, err, len, octant); - */ - - /* DETERMINE YMAJOR AND DIRECTION FLAGS */ - if (octant & YMAJOR) { - if (!(octant & YDECREASING)) { - if (!(octant & XDECREASING)) - octant_reg = 1; - else - octant_reg = 2; - } else { - if (!(octant & XDECREASING)) - octant_reg = 6; - else - octant_reg = 5; - } - } else { - if (!(octant & YDECREASING)) { - if (!(octant & XDECREASING)) - octant_reg = 0; - else - octant_reg = 3; - } else { - if (!(octant & XDECREASING)) - octant_reg = 7; - else - octant_reg = 4; - } - } - - flags = vector_mode_table[octant_reg & 7]; - - /* DETERMINE BRESENHAM PARAMETERS */ - - axial = ((int)absmin << 1); - init = axial - (int)absmaj; - diag = init - (int)absmaj; - - /* ADJUST INITIAL ERROR - * * Adjust by -1 for certain directions so that the vector - * * hits the same pixels when drawn in either direction. - * * The Gamma value is assumed to account for the initial - * * error adjustment for clipped lines. - */ - - init += err; - - /* CALL ROUTINE TO DRAW VECTOR */ - - GFX(bresenham_line((unsigned short)x1, (unsigned short)y1, - (unsigned short)len, (unsigned short)init, - (unsigned short)axial, (unsigned short)diag, - (unsigned short)flags); - ) -} - -/*--------------------------------------------------------------------------- - * GeodeSubsequentHorVertLine - * - * This routine is called to render a vector using the specified Bresenham - * parameters. - * - * Sample application uses: - * - Window outlines on window move. - * - x11perf: line segments (-hseg500). - * - x11perf: line segments (-vseg500). - *--------------------------------------------------------------------------- - */ -void -GeodeSubsequentHorVertLine(ScrnInfoPtr pScreenInfo, - int x, int y, int len, int dir) -{ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x += pGeode->TVOx; - y += pGeode->TVOy; - } - GFX(pattern_fill((unsigned short)x, (unsigned short)y, - (unsigned short)((dir == DEGREES_0) ? len : 1), - (unsigned short)((dir == DEGREES_0) ? 1 : len))); -} - -void -GeodeSetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop, - unsigned int planemask, int length, - unsigned char *pattern) -{ - int trans = (bg == -1); - unsigned long *pat = (unsigned long *)pattern; - - /* LOAD PATTERN COLORS AND DATA */ - - GFX(set_mono_pattern((unsigned long)bg, (unsigned long)fg, - (unsigned long)pat, (unsigned long)pat, - (unsigned char)trans)); - - /* CHECK IF PLANEMASK IS NOT USED (ALL PLANES ENABLED) */ - - if (planemask == (unsigned int)-1) { - /* USE NORMAL PATTERN ROPs IF ALL PLANES ARE ENABLED */ - - GFX(set_raster_operation(windowsROPpat[rop & 0x0F])); - } else { - /* SELECT ROP THAT USES SOURCE DATA FOR PLANEMASK */ - - GFX(set_solid_source((unsigned long)planemask)); - GFX(set_raster_operation(windowsROPsrcMask[rop & 0x0F])); - } -} - -#if 0 -void -GeodeFillCacheBltRects(ScrnInfoPtr pScrn, int rop, unsigned int planemask, - int nBox, BoxPtr pBox, int xorg, int yorg, - XAACacheInfoPtr pCache) -{ - XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn); - int x, y; - int phaseY, phaseX, skipleft, height, width, w, blit_w, blit_h, start; - - ErrorF("FillCacheBltRects\n"); - - (*infoRec->SetupForScreenToScreenCopy) (pScrn, 1, 1, rop, planemask, - pCache->trans_color); - - while (nBox--) { - y = pBox->y1; - phaseY = (y - yorg) % pCache->orig_h; - if (phaseY < 0) - phaseY += pCache->orig_h; - phaseX = (pBox->x1 - xorg) % pCache->orig_w; - if (phaseX < 0) - phaseX += pCache->orig_w; - height = pBox->y2 - y; - width = pBox->x2 - pBox->x1; - start = phaseY ? (pCache->orig_h - phaseY) : 0; - - /* This is optimized for WRAM */ - - if ((rop == GXcopy) && (height >= (pCache->orig_h + start))) { - w = width; - skipleft = phaseX; - x = pBox->x1; - blit_h = pCache->orig_h; - - while (1) { - blit_w = pCache->w - skipleft; - if (blit_w > w) - blit_w = w; - (*infoRec->SubsequentScreenToScreenCopy) (pScrn, - pCache->x + skipleft, - pCache->y, x, y + start, - blit_w, blit_h); - w -= blit_w; - if (!w) - break; - x += blit_w; - skipleft = (skipleft + blit_w) % pCache->orig_w; - } - height -= blit_h; - if (start) { - (*infoRec->SubsequentScreenToScreenCopy) (pScrn, - pBox->x1, y + blit_h, - pBox->x1, y, width, - start); - height -= start; - y += start; - } - start = blit_h; - - while (height) { - if (blit_h > height) - blit_h = height; - (*infoRec->SubsequentScreenToScreenCopy) (pScrn, - pBox->x1, y, - pBox->x1, y + start, - width, blit_h); - height -= blit_h; - start += blit_h; - blit_h <<= 1; - } - } else { - while (1) { - w = width; - skipleft = phaseX; - x = pBox->x1; - blit_h = pCache->h - phaseY; - if (blit_h > height) - blit_h = height; - - while (1) { - blit_w = pCache->w - skipleft; - if (blit_w > w) - blit_w = w; - (*infoRec->SubsequentScreenToScreenCopy) (pScrn, - pCache->x + skipleft, - pCache->y + phaseY, - x, y, blit_w, - blit_h); - w -= blit_w; - if (!w) - break; - x += blit_w; - skipleft = (skipleft + blit_w) % pCache->orig_w; - } - height -= blit_h; - if (!height) - break; - y += blit_h; - phaseY = (phaseY + blit_h) % pCache->orig_h; - } - } - pBox++; - } - - SET_SYNC_FLAG(infoRec); -} -#endif -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_cursor.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_cursor.c deleted file mode 100644 index 9a73b3924..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_cursor.c +++ /dev/null @@ -1,362 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_cursor.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_cursor.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: Xfree cursor implementation routines - * for geode HWcursor init.setting cursor color,image etc - * are done here. - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86_ansic.h" -#include "xf86Pci.h" -#include "xf86PciInfo.h" -#include "geode.h" - -/* Forward declarations of the functions */ -Bool GeodeHWCursorInit(ScreenPtr pScreen); -static void GeodeSetCursorColors(ScrnInfoPtr pScreenInfo, int bg, int fg); -static void GeodeSetCursorPosition(ScrnInfoPtr pScreenInfo, int x, int y); -void GeodeLoadCursorImage(ScrnInfoPtr pScreenInfo, unsigned char *src); -void GeodeHideCursor(ScrnInfoPtr pScreenInfo); -void GeodeShowCursor(ScrnInfoPtr pScreenInfo); -static Bool GeodeUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs); - -/*---------------------------------------------------------------------------- - * GeodeHWCursorInit. - * - * Description :This function sets the cursor information by probing the - * hardware. - * - * Parameters. - * pScreen :Screeen pointer structure. - * - * Returns :TRUE on success and FALSE on Failure - * - * Comments :Geode supports the hardware_cursor,no need to enable SW - * cursor. -*---------------------------------------------------------------------------- -*/ -Bool -GeodeHWCursorInit(ScreenPtr pScreen) -{ - ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum]; - GeodePtr pGeode = GEODEPTR(pScreenInfo); - xf86CursorInfoPtr infoPtr; - - infoPtr = xf86CreateCursorInfoRec(); - if (!infoPtr) - return FALSE; - /* the geode structure is intiallized with the cursor infoRec */ - pGeode->CursorInfo = infoPtr; - infoPtr->MaxWidth = 32; - infoPtr->MaxHeight = 32; - /* seeting up the cursor flags */ - infoPtr->Flags = HARDWARE_CURSOR_BIT_ORDER_MSBFIRST | - HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | - HARDWARE_CURSOR_SOURCE_MASK_NOT_INTERLEAVED; - /* cursor info ptr is intiallized with the values obtained from - * * durnago calls - */ - infoPtr->SetCursorColors = GeodeSetCursorColors; - infoPtr->SetCursorPosition = GeodeSetCursorPosition; - infoPtr->LoadCursorImage = GeodeLoadCursorImage; - infoPtr->HideCursor = GeodeHideCursor; - infoPtr->ShowCursor = GeodeShowCursor; - infoPtr->UseHWCursor = GeodeUseHWCursor; - return (xf86InitCursor(pScreen, infoPtr)); -} - -/*---------------------------------------------------------------------------- - * GeodeSetCursorColors. - * - * Description :This function sets the cursor foreground and background - * colors - * Parameters: - * pScreen: Screeen pointer structure. - * bg: Specifies the color value of cursor background color. - * fg: Specifies the color value of cursor foreground color. - * Returns: none. - * - * Comments: The integer color value passed by this function is - * converted into * RGB value by the gfx_set_color routines. - *---------------------------------------------------------------------------- - */ -static void -GeodeSetCursorColors(ScrnInfoPtr pScreenInfo, int bg, int fg) -{ - GFX(set_cursor_colors(bg, fg)); -} - -/*---------------------------------------------------------------------------- - * GeodeSetCursorPosition. - * - * Description :This function sets the cursor co -ordinates and enable the - * cursor. - * - * Parameters: - * pScreen: Screeen pointer structure. - * x: Specifies the x-cordinates of the cursor. - * y: Specifies the y co-ordinate of the cursor. - * Returns: none. - * - *---------------------------------------------------------------------------- - */ -static void -GeodeSetCursorPosition(ScrnInfoPtr pScreenInfo, int x, int y) -{ - GeodePtr pGeode = GEODEPTR(pScreenInfo); - - if (pGeode->TV_Overscan_On) { - x += pGeode->TVOx; - y += pGeode->TVOy; - } - GFX(set_cursor_position(pGeode->CursorStartOffset, x, y, 0, 0)); - GFX(set_cursor_enable(1)); -} - -/*---------------------------------------------------------------------------- - * GeodeLoadCursorImage - * - * Description :This function loads the 32x32 cursor pattern.The shape - * and color is set by AND and XOR masking of arrays of 32 - * DWORD. - * Parameters: - * pScreen: Screeen pointer structure. - * src : Specifies cursor data. - * Returns : none - * - *---------------------------------------------------------------------------- -*/ -void -GeodeLoadCursorImage(ScrnInfoPtr pScreenInfo, unsigned char *src) -{ - int i, j; - unsigned long shape; - unsigned long mask; - unsigned long andMask[32] = { 0, }; - unsigned long xorMask[32] = { 0, }; - GeodePtr pGeode = GEODEPTR(pScreenInfo); - - j = 0; - for (i = 0; i < 32; i++) { - if (src) { - shape = ((unsigned long)src[i * 4] << 24) | - ((unsigned long)src[i * 4 + 1] << 16) | - ((unsigned long)src[i * 4 + 2] << 8) | - ((unsigned long)src[i * 4 + 3] << 0); - mask = ((unsigned long)src[i * 4 + 128] << 24) | - ((unsigned long)src[i * 4 + 1 + 128] << 16) | - ((unsigned long)src[i * 4 + 2 + 128] << 8) | - ((unsigned long)src[i * 4 + 3 + 128] << 0); - } else { - mask = 0x0; - shape = 0xFFFFFFFF; - } - - andMask[i] = ~(mask); - xorMask[i] = shape & mask; - } - - GFX(set_cursor_shape32(pGeode->CursorStartOffset, andMask, xorMask)); -} - -/*---------------------------------------------------------------------------- - * GeodeHideCursor. - * - * Description :This function will disable the cursor. - * - * Parameters: - * pScreen: Handles to the Screeen pointer structure. - * - * Returns: none. - * - * Comments: gfx_set_cursor enable function is hardcoded to disable - * the cursor. - *---------------------------------------------------------------------------- - */ -void -GeodeHideCursor(ScrnInfoPtr pScreenInfo) -{ - GFX(set_cursor_enable(0)); -} - -/*---------------------------------------------------------------------------- - * GeodeShowCursor - * - * Description :This function will enable the cursor. - * - * Parameters: - * pScreen :Handles to the Screeen pointer structure. - * - * Returns :none - * - * Comments :gfx_set_cursor enable function is hardcoded to enable the - * cursor - *---------------------------------------------------------------------------- -*/ -void -GeodeShowCursor(ScrnInfoPtr pScreenInfo) -{ - GFX(set_cursor_enable(1)); -} - -/*---------------------------------------------------------------------------- - * GeodeUseHwCursor. - * - * Description :This function will sets the hardware cursor flag in - * pscreen structure. - * - * Parameters. - * pScreen :Handles to the Screeen pointer structure. - * - * Returns :none - * - * Comments :none - * - *---------------------------------------------------------------------------- -*/ -static Bool -GeodeUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs) -{ - ScrnInfoPtr pScreenInfo = XF86SCRNINFO(pScreen); - - if (pScreenInfo->currentMode->Flags & V_DBLSCAN) - return FALSE; - return TRUE; -} - -/* End of File */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_dga.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_dga.c deleted file mode 100644 index bbefe6831..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_dga.c +++ /dev/null @@ -1,504 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_dga.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_dga.c $ - * $Revision: 1.2.8.2 $ - * - * File contents: DGA(Direct Acess Graphics mode) is feature of - * XFree86 that allows the program to access directly to video - * memory on the graphics card.DGA supports the double - * flickering.This file has the functions to support the DGA - * modes. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86_ansic.h" -#include "xf86Pci.h" -#include "xf86PciInfo.h" -#include "xaa.h" -#include "xaalocal.h" -#include "geode.h" -#include "dgaproc.h" - -/* forward declarations */ -Bool GeodeDGAInit(ScreenPtr pScreen); -static Bool Geode_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **, - int *, int *, int *); -static void Geode_CloseFramebuffer(ScrnInfoPtr pScrn); -static Bool Geode_SetMode(ScrnInfoPtr, DGAModePtr); -static int Geode_GetViewport(ScrnInfoPtr); -static void Geode_SetViewport(ScrnInfoPtr, int, int, int); -static void Geode_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long); -static void Geode_BlitRect(ScrnInfoPtr, int, int, int, int, int, int); - -extern void GeodeAdjustFrame(int, int, int, int); -extern Bool GeodeSwitchMode(int, DisplayModePtr, int); -extern void GeodeAccelSync(ScrnInfoPtr pScreenInfo); - -static DGAFunctionRec GeodeDGAFuncs = { - Geode_OpenFramebuffer, - Geode_CloseFramebuffer, - Geode_SetMode, - Geode_SetViewport, - Geode_GetViewport, - GeodeAccelSync, - Geode_FillRect, - Geode_BlitRect, - NULL -}; - -/*---------------------------------------------------------------------------- - * GeodeDGAInit. - * - * Description :This function is used to intiallize the DGA modes and sets the - viewport based on the screen mode. - * Parameters. - * pScreeen :Pointer to screen info structure. - * - * Returns :TRUE on success and FALSE on failure. - * - * Comments :This function prepares the DGA mode settings for - * other func reference. - * -*---------------------------------------------------------------------------- -*/ -Bool -GeodeDGAInit(ScreenPtr pScreen) -{ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - GeodePtr pGeode = GEODEPTR(pScrn); - DGAModePtr modes = NULL, newmodes = NULL, currentMode; - DisplayModePtr pMode, firstMode; - int Bpp = pScrn->bitsPerPixel >> 3; - int num = 0; - Bool oneMore; - - pMode = firstMode = pScrn->modes; - DEBUGMSG(0, (0, X_NONE, "GeodeDGAInit\n")); - while (pMode) { - - /* redundant but it can be used in future:if(0). */ - if (0) { /*pScrn->displayWidth != pMode->HDisplay */ - /* memory is allocated for dga to - *setup the viewport and mode parameters - */ - newmodes = xrealloc(modes, (num + 2) * sizeof(DGAModeRec)); - oneMore = TRUE; - } else { - /* one record is allocated here */ - newmodes = xrealloc(modes, (num + 1) * sizeof(DGAModeRec)); - oneMore = FALSE; - } - if (!newmodes) { - xfree(modes); - return FALSE; - } - modes = newmodes; - - SECOND_PASS: /* DGA mode flgas and viewport parametrs are set here. */ - - currentMode = modes + num; - num++; - currentMode->mode = pMode; - currentMode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE; - currentMode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT; - if (pMode->Flags & V_DBLSCAN) - currentMode->flags |= DGA_DOUBLESCAN; - if (pMode->Flags & V_INTERLACE) - currentMode->flags |= DGA_INTERLACED; - currentMode->byteOrder = pScrn->imageByteOrder; - currentMode->depth = pScrn->depth; - currentMode->bitsPerPixel = pScrn->bitsPerPixel; - currentMode->red_mask = pScrn->mask.red; - currentMode->green_mask = pScrn->mask.green; - currentMode->blue_mask = pScrn->mask.blue; - currentMode->visualClass = (Bpp == 1) ? PseudoColor : TrueColor; - currentMode->viewportWidth = pMode->HDisplay; - currentMode->viewportHeight = pMode->VDisplay; - currentMode->xViewportStep = 1; - currentMode->yViewportStep = 1; - currentMode->viewportFlags = DGA_FLIP_RETRACE; - currentMode->offset = 0; - currentMode->address = pGeode->FBBase; - if (oneMore) { /* first one is narrow width */ - currentMode->bytesPerScanline = ((pMode->HDisplay * Bpp) + 3) & ~3L; - currentMode->imageWidth = pMode->HDisplay; - currentMode->imageHeight = pMode->VDisplay; - currentMode->pixmapWidth = currentMode->imageWidth; - currentMode->pixmapHeight = currentMode->imageHeight; - currentMode->maxViewportX = currentMode->imageWidth - - currentMode->viewportWidth; - /* this might need to get clamped to some maximum */ - currentMode->maxViewportY = currentMode->imageHeight - - currentMode->viewportHeight; - oneMore = FALSE; - goto SECOND_PASS; - } else { - currentMode->bytesPerScanline = - ((pScrn->displayWidth * Bpp) + 3) & ~3L; - currentMode->imageWidth = pScrn->displayWidth; - currentMode->imageHeight = pMode->VDisplay; - currentMode->pixmapWidth = currentMode->imageWidth; - currentMode->pixmapHeight = currentMode->imageHeight; - currentMode->maxViewportX = currentMode->imageWidth - - currentMode->viewportWidth; - /* this might need to get clamped to some maximum */ - currentMode->maxViewportY = currentMode->imageHeight - - currentMode->viewportHeight; - } - pMode = pMode->next; - if (pMode == firstMode) - break; - } - pGeode->numDGAModes = num; - pGeode->DGAModes = modes; - return DGAInit(pScreen, &GeodeDGAFuncs, modes, num); -} - -/*---------------------------------------------------------------------------- - * Geode_SetMode. - * - * Description :This function is sets into the DGA mode. - *. - * Parameters. - * pScreeen :Pointer to screen info structure. - * pMode :Points to the DGAmode ptr data - * Returns :TRUE on success and FALSE on failure. - * - * Comments :none. - * - * -*---------------------------------------------------------------------------- -*/ -static Bool -Geode_SetMode(ScrnInfoPtr pScrn, DGAModePtr pMode) -{ - static int OldDisplayWidth[MAXSCREENS]; - int index = pScrn->pScreen->myNum; - GeodePtr pGeode = GEODEPTR(pScrn); - - DEBUGMSG(0, (0, X_NONE, "Geode_SetMode\n")); - if (!pMode) { - /* restore the original mode - * * put the ScreenParameters back - */ - pScrn->displayWidth = OldDisplayWidth[index]; - GeodeSwitchMode(index, pScrn->currentMode, 0); - pGeode->DGAactive = FALSE; - } else { - if (!pGeode->DGAactive) { /* save the old parameters */ - OldDisplayWidth[index] = pScrn->displayWidth; - pGeode->DGAactive = TRUE; - } - pScrn->displayWidth = pMode->bytesPerScanline / - (pMode->bitsPerPixel >> 3); - GeodeSwitchMode(index, pMode->mode, 0); - } - /* enable/disable cursor */ - if (pGeode->HWCursor) { -#if defined(STB_X) - Gal_set_compression_state(((pGeode->DGAactive) ? - GAL_COMPRESSION_DISABLE : - GAL_COMPRESSION_ENABLE)); - Gal_set_cursor_enable(!pGeode->DGAactive); -#else - gfx_set_cursor_enable(!pGeode->DGAactive); - gfx_set_compression_enable(!pGeode->DGAactive); -#endif /* STB_X */ - } - - return TRUE; -} - -/*---------------------------------------------------------------------------- - * Geode_GetViewPort. - * - * Description :This function is Gets the viewport window memory. - *. - * Parameters. - * pScrn :Pointer to screen info structure. - * - * Returns :returns the viewport status. - * - * Comments :none. - * - * -*---------------------------------------------------------------------------- -*/ -static int -Geode_GetViewport(ScrnInfoPtr pScrn) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - - return pGeode->DGAViewportStatus; -} - -/*---------------------------------------------------------------------------- - * Geode_SetViewPort. - * - * Description :This function is Gets the viewport window memory. - * - * Parameters. - * pScrn :Pointer to screen info structure. - x :x-cordinate of viewport window - * y :y-codinate of the viewport window. - * flags :indicates the viewport to be flipped or not. - * Returns :returns the viewport status as zero. - * - * Comments :none. - * -*---------------------------------------------------------------------------- -*/ -static void -Geode_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - - GeodeAdjustFrame(pScrn->pScreen->myNum, x, y, flags); - pGeode->DGAViewportStatus = 0; /*GeodeAdjustFrame loops until finished */ -} - -/*---------------------------------------------------------------------------- - * Geode_FillRect. - * - * Description :This function is Gets the viewport window memory. - *. - * Parameters. - * pScrn :Pointer to screen info structure. - * x :x-cordinate of viewport window - * y :y-codinate of the viewport window. - * w :width of the rectangle - * h :height of the rectangle. - * color :color to be filled in rectangle. - * - * Returns :returns the viewport status as zero. - * - * Comments :This function is implemented by solidfill routines.. - * -*---------------------------------------------------------------------------- -*/ -static void -Geode_FillRect(ScrnInfoPtr pScrn, int x, int y, - int w, int h, unsigned long color) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - - if (pGeode->AccelInfoRec) { - (*pGeode->AccelInfoRec->SetupForSolidFill) (pScrn, color, GXcopy, ~0); - (*pGeode->AccelInfoRec->SubsequentSolidFillRect) (pScrn, x, y, w, h); - SET_SYNC_FLAG(pGeode->AccelInfoRec); - } -} - -/*---------------------------------------------------------------------------- - * Geode_BlitRect. - * - * Description :This function implementing Blit and it moves a - * Rectangular block of data from one location to other - * Location. - * - * Parameters. - * pScrn :Pointer to screen info structure. - * srcx :x-cordinate of the src rectangle - * srcy :y-codinate of src rectangle. - * w :width of the rectangle - * h :height of the rectangle. - * dstx :x-cordinate of the dst rectangle. - * dsty :y -coordinates of the dst rectangle. - * Returns :none. - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -static void -Geode_BlitRect(ScrnInfoPtr pScrn, - int srcx, int srcy, int w, int h, int dstx, int dsty) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - - if (pGeode->AccelInfoRec) { - int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1; - int ydir = (srcy < dsty) ? -1 : 1; - - (*pGeode->AccelInfoRec->SetupForScreenToScreenCopy) - (pScrn, xdir, ydir, GXcopy, ~0, -1); - (*pGeode->AccelInfoRec->SubsequentScreenToScreenCopy) (pScrn, srcx, - srcy, dstx, dsty, - w, h); - SET_SYNC_FLAG(pGeode->AccelInfoRec); - } -} - -/*---------------------------------------------------------------------------- - * Geode_OpenFramebuffer. - * - * Description :This function open the framebuffer driver for DGA. - * - * Parameters. - * pScrn :Pointer to screen info structure. - * srcx :x-cordinate of the src rectangle - * srcy :y-codinate of src rectangle. - * w :width of the rectangle - * h :height of the rectangle. - * dstx :x-cordinate of the dst rectangle. - * dsty :y -coordinates of the dst rectangle. - * Returns :none. - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -static Bool -Geode_OpenFramebuffer(ScrnInfoPtr pScrn, - char **name, unsigned char **mem, - int *size, int *offset, int *flags) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - - *name = NULL; /* no special device */ - *mem = (unsigned char *)pGeode->FBLinearAddr; - *size = pGeode->FBSize; - *offset = 0; - *flags = DGA_NEED_ROOT; - return TRUE; -} - -static void -Geode_CloseFramebuffer(ScrnInfoPtr pScrn) -{ -} - -/* end of file */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_driver.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_driver.c deleted file mode 100644 index f054bdc40..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_driver.c +++ /dev/null @@ -1,2997 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_driver.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_driver.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This is the main module configures the interfacing - * with the X server. The individual modules will be - * loaded based upon the options selected from the - * XF86Config. This file also has modules for finding - * supported modes, turning on the modes based on options. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* - * Lots of fixes & updates - * Alan Hourihane <alanh@fairlite.demon.co.uk> - */ - -#define DEBUG(x) - -#define GEODE_TRACE 0 -#define MAGIC 0 -/* Flat Panel HACK!!!! */ -extern int gfx_dont_program; - -#if GEODE_TRACE -/* ANSI C does not allow var arg macros */ -#define GeodeDebug(args) ErrorF##args -#else -#define GeodeDebug(args) -#endif - -/* Includes that are used by all drivers */ -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86_ansic.h" -#include "xf86Resources.h" - -/* We may want inb() and outb() */ -#include "compiler.h" - -/* We may want to access the PCI config space */ -#include "xf86PciInfo.h" -#include "xf86Pci.h" - -/* Colormap handling stuff */ -#include "xf86cmap.h" - -/* Frame buffer stuff */ -#include "fb.h" -#include "shadowfb.h" - -/* Machine independent stuff */ -#include "mipointer.h" -#include "mibank.h" -#include "micmap.h" -/* All drivers implementing backing store need this */ -#include "mibstore.h" -#include "vgaHW.h" -#include "vbe.h" - -/* Check for some extensions */ -#ifdef XFreeXDGA -#define _XF86_DGA_SERVER_ -#include "extensions/xf86dgastr.h" -#endif /* XFreeXDGA */ - -#ifdef DPMSExtension -#include "globals.h" -#include "opaque.h" -#define DPMS_SERVER -#include "extensions/dpms.h" -#endif /* DPMSExtension */ - -/* Our private include file (this also includes the durango headers) */ -#include "geode.h" - -#define PCI_VENDOR_ID_CYRIX 0x1078 -#define PCI_VENDOR_ID_NS 0x100b - -#define PCI_CHIP_5530 0x0104 -#define PCI_CHIP_SC1200 0x0504 -#define PCI_CHIP_SC1400 0x0104 - -/* A few things all drivers should have */ -#define GEODE_NAME "GEODE" -#define GEODE_DRIVER_NAME "geode" - -/* This should match the durango code version. - * The patchlevel may be used to indicate changes in geode.c - */ -#define GEODE_VERSION_NAME "1.2.2" -#define GEODE_VERSION_MAJOR 1 -#define GEODE_VERSION_MINOR 2 -#define GEODE_PATCHLEVEL 2 -#define GEODE_VERSION_CURRENT ((GEODE_VERSION_MAJOR << 24) | \ - (GEODE_VERSION_MINOR << 16) | GEODE_PATCHLEVEL) - -typedef struct _MemOffset -{ - unsigned long xres; - unsigned long yres; - unsigned long bpp; - unsigned long CBOffset; - unsigned short CBPitch; - unsigned short CBSize; - unsigned long CurOffset; - unsigned long OffScreenOffset; -} -MemOffset; - -/* predefined memory address for compression and cursor offsets - * if COMPRESSION enabled. - */ -MemOffset GeodeMemOffset[] = { - {640, 480, 8, 640, 1024, 272, 0x78000, 0x78100}, - {640, 480, 16, 1280, 2048, 272, 0x610, 0xF0000}, - {800, 600, 8, 800, 1024, 208, 0x96000, 0x96100}, - {800, 600, 16, 1600, 2048, 272, 0x12C000, 0x12C100}, - {1024, 768, 8, 0xC0000, 272, 272, 0xF3000, 0xF3100}, - {1024, 768, 16, 0x180000, 272, 272, 0x1B3000, 0x1B3100}, - {1152, 864, 8, 1152, 2048, 272, 0x590, 0x1B0000}, - {1152, 864, 16, 2304, 4096, 272, 0xA10, 0x360000}, - {1280, 1024, 8, 1280, 2048, 272, 0x610, 0x200000}, - {1280, 1024, 16, 2560, 4096, 272, 0xB10, 0x400000}, - - /* PAL TV modes */ - - {704, 576, 16, 1408, 2048, 272, 0x690, 0x120000}, - {720, 576, 16, 1440, 2048, 272, 0x6B0, 0x120000}, - {768, 576, 16, 1536, 2048, 256, 0x700, 0x120000}, - - /* NTSC TV modes */ - - {704, 480, 16, 1408, 2048, 272, 0x690, 0xF0000}, - {720, 480, 16, 1440, 2048, 272, 0x6B0, 0xF0000} - -}; -static int MemIndex = 0; - -/* Forward definitions */ -static const OptionInfoRec *GeodeAvailableOptions(int chipid, int busid); -static void GeodeIdentify(int); -static Bool GeodeProbe(DriverPtr, int); -static Bool GeodePreInit(ScrnInfoPtr, int); -static Bool GeodeScreenInit(int, ScreenPtr, int, char **); -static Bool GeodeEnterVT(int, int); -static void GeodeLeaveVT(int, int); -static void GeodeFreeScreen(int, int); -void GeodeAdjustFrame(int, int, int, int); -Bool GeodeSwitchMode(int, DisplayModePtr, int); -static int GeodeValidMode(int, DisplayModePtr, Bool, int); -static void GeodeLoadPalette(ScrnInfoPtr pScreenInfo, - int numColors, int *indizes, - LOCO * colors, VisualPtr pVisual); -static Bool GeodeMapMem(ScrnInfoPtr); -static Bool GeodeUnmapMem(ScrnInfoPtr); - -extern Bool GeodeAccelInit(ScreenPtr pScreen); -extern Bool GeodeHWCursorInit(ScreenPtr pScreen); -extern void GeodeHideCursor(ScrnInfoPtr pScreenInfo); -extern void GeodeShowCursor(ScrnInfoPtr pScreenInfo); -extern void GeodePointerMoved(int index, int x, int y); -extern void GeodeRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -extern void GeodeRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -extern void GeodeRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -extern void GeodeInitVideo(ScreenPtr pScreen); -extern Bool GeodeDGAInit(ScreenPtr pScreen); -extern void GeodeLoadCursorImage(ScrnInfoPtr pScreenInfo, unsigned char *src); - -void get_tv_overscan_geom(const char *options, int *X, int *Y, int *W, - int *H); - -#if !defined(STB_X) -extern unsigned char *XpressROMPtr; -#endif /* STB_X */ - -/* driver record contains the functions needed by the server after loading - * the driver module. - */ -DriverRec GEODE = { - GEODE_VERSION_CURRENT, - GEODE_DRIVER_NAME, - GeodeIdentify, - GeodeProbe, - GeodeAvailableOptions, - NULL, - 0 -}; - -/* Supported chipsets */ -static SymTabRec GeodeChipsets[] = { - {PCI_CHIP_5530, "5530"}, - {PCI_CHIP_SC1200, "SC1200"}, - {PCI_CHIP_SC1400, "SC1400"}, - {-1, NULL} -}; - -static PciChipsets GeodePCIchipsets[] = { - {PCI_CHIP_5530, PCI_CHIP_5530, RES_SHARED_VGA}, - {PCI_CHIP_SC1200, PCI_CHIP_SC1200, RES_SHARED_VGA}, - {PCI_CHIP_SC1400, PCI_CHIP_SC1400, RES_SHARED_VGA}, - {-1, -1, RES_UNDEFINED}, -}; - -/* option flags are self-explanatory */ -typedef enum -{ - OPTION_SW_CURSOR, - OPTION_HW_CURSOR, - OPTION_COMPRESSION, - OPTION_NOACCEL, - OPTION_TV_SUPPORT, - OPTION_TV_OUTPUT, - OPTION_TV_OVERSCAN, - OPTION_SHADOW_FB, - OPTION_ROTATE, - OPTION_FLATPANEL, - OPTION_FLATPANEL_IN_BIOS, - OPTION_OVERLAY, - OPTION_COLOR_KEY, - OPTION_VIDEO_KEY, - OPTION_IMG_BUFS, - OPTION_DONT_PROGRAM -} -GeodeOpts; - -static OptionInfoRec GeodeOptions[] = { - {OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_HW_CURSOR, "HWcursor", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_COMPRESSION, "Compression", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_TV_SUPPORT, "TV", OPTV_ANYSTR, {0}, FALSE}, - {OPTION_TV_OUTPUT, "TV_Output", OPTV_ANYSTR, {0}, FALSE}, - {OPTION_TV_OVERSCAN, "TVOverscan", OPTV_ANYSTR, {0}, FALSE}, - {OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE}, - {OPTION_FLATPANEL, "FlatPanel", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_FLATPANEL_IN_BIOS, "FlatPanelInBios", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_OVERLAY, "Overlay", OPTV_ANYSTR, {0}, FALSE}, - {OPTION_COLOR_KEY, "ColorKey", OPTV_INTEGER, {0}, FALSE}, - {OPTION_VIDEO_KEY, "VideoKey", OPTV_INTEGER, {0}, FALSE}, - {OPTION_IMG_BUFS, "ImageWriteBuffers", OPTV_INTEGER, {0}, FALSE }, - {OPTION_DONT_PROGRAM, "DontProgram", OPTV_BOOLEAN, {0}, FALSE}, - {-1, NULL, OPTV_NONE, {0}, FALSE} -}; - -/* List of symbols from other modules that this module references.The purpose -* is that to avoid unresolved symbol warnings -*/ -static const char *vgahwSymbols[] = { - "vgaHWGetHWRec", - "vgaHWUnlock", - "vgaHWInit", - "vgaHWSave", - "vgaHWRestore", - "vgaHWProtect", - "vgaHWGetIOBase", - "vgaHWMapMem", - "vgaHWLock", - "vgaHWFreeHWRec", - "vgaHWSaveScreen", - NULL -}; - -static const char *vbeSymbols[] = { - "VBEInit", - "vbeDoEDID", - "vbeFree", - NULL -}; - -static const char *fbSymbols[] = { - "fbScreenInit", - "fbPictureInit", - NULL -}; - -static const char *xaaSymbols[] = { - "XAADestroyInfoRec", - "XAACreateInfoRec", - "XAAInit", - "XAAScreenIndex", - NULL -}; - -static const char *ramdacSymbols[] = { - "xf86InitCursor", - "xf86CreateCursorInfoRec", - "xf86DestroyCursorInfoRec", - NULL -}; - -static const char *shadowSymbols[] = { - "ShadowFBInit", - NULL -}; - -#ifdef XFree86LOADER - -/* Module loader interface */ - -static MODULESETUPPROTO(GeodeSetup); - -static XF86ModuleVersionInfo GeodeVersionRec = { - "geode", - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XF86_VERSION_CURRENT, - GEODE_VERSION_MAJOR, GEODE_VERSION_MINOR, GEODE_PATCHLEVEL, - ABI_CLASS_VIDEODRV, /* This is a video driver */ - ABI_VIDEODRV_VERSION, - MOD_CLASS_VIDEODRV, - {0, 0, 0, 0} -}; - -/* - * This data is accessed by the loader. The name must be the module name - * followed by "ModuleInit". - */ -XF86ModuleData geodeModuleData = { &GeodeVersionRec, GeodeSetup, NULL }; - -/*------------------------------------------------------------------------- - * GeodeSetup. - * - * Description :This function sets up the driver in X list and load the - * module symbols through xf86loader routines.. - * - * Parameters. - * Module :Pointer to the geode module - * options :Driver module options. - * ErrorMajor:Major no - * ErrorMinor:Minor no. - * - * Returns :NULL on success - * - * Comments :Module setup is done by this function - * - *------------------------------------------------------------------------- -*/ -static pointer -GeodeSetup(pointer Module, pointer Options, int *ErrorMajor, int *ErrorMinor) -{ - static Bool Initialised = FALSE; - - if (!Initialised) { - Initialised = TRUE; - xf86AddDriver(&GEODE, Module, 0); - /* Tell the loader about symbols from other modules that this - * module might refer to. - */ - LoaderRefSymLists(vgahwSymbols, fbSymbols, vbeSymbols, - xaaSymbols, ramdacSymbols, shadowSymbols, NULL); - return (pointer) TRUE; - } - /*The return value must be non-NULL on success */ - if (ErrorMajor) - *ErrorMajor = LDR_ONCEONLY; - return NULL; -} -#endif /*End of XFree86Loader */ - -/* This functions may be used in future implementations */ - -#if 0 -/* This is not used code and it may be used for vga setup */ -static void -print_gxm_gfx_reg(GeodePtr pGeode, unsigned int count) -{ - int i, base = 0x8300; - unsigned int *preg; - - GeodeDebug(("Geode Registers:\n")); - for (i = 0; i <= count; i += 4) { - preg = (unsigned int *)(gfx_regptr + base + i); - DEBUGMSG(0, (0, X_NONE, "%x = %x\n", base + i, *preg)); - } - GeodeDebug(("CS5530 Display Registers:\n")); - base = 0x24; - for (i = 0; i <= 8; i += 4) { - preg = (unsigned int *)(gfx_vidptr + base + i); - DEBUGMSG(0, (0, X_NONE, "%x = %x\n", base + i, *preg)); - } -} - -static unsigned char -gfx_inb(unsigned short port) -{ - unsigned char value; - __asm__ volatile ("inb %1,%0":"=a" (value):"d"(port)); - - return value; -} - -static void -gfx_outb(unsigned short port, unsigned char data) -{ - __asm__ volatile ("outb %0,%1"::"a" (data), "d"(port)); -} - -static void -print_gxm_vga_reg() -{ - int i, index, data; - - GeodeDebug(("Geode CRT Registers:\n")); - - index = 0x3d4; - data = 0x3d5; - for (i = 0; i < STD_CRTC_REGS; i++) { - OUTB(index, (unsigned char)i); - DEBUGMSG(0, (0, X_NONE, "CRT[%x] = %x\n", i, INB(data))); - } - for (i = 0; i < EXT_CRTC_REGS; i++) { - OUTB(index, (unsigned char)0x40 + i); - DEBUGMSG(0, (0, X_NONE, "CRT[%x] = %x\n", 0x40 + i, INB(data))); - } - - index = 0x3c4; - data = 0x3c5; - for (i = 0; i <= 4; i++) { - OUTB(index, (unsigned char)i); - DEBUGMSG(0, (0, X_NONE, "SR[%x] = %x\n", i, INB(data))); - } - - index = 0x3ce; - data = 0x3cf; - for (i = 0; i <= 8; i++) { - OUTB(index, (unsigned char)i); - DEBUGMSG(0, (0, X_NONE, "GR[%x] = %x\n", i, INB(data))); - } - -#if 0 - index = 0x3c0; - data = 0x3c1; - for (i = 0; i <= 0x14; i++) { - INB(0x3da); - OUTB(index, (unsigned char)i); - DEBUGMSG(0, (0, X_NONE, "AR[%x] = %x\n", i, INB(data))); - } - - DEBUGMSG(0, (0, X_NONE, "MISC = %x\n", INB(0x3CC))); -#endif -} -#endif /* end of Geode_reg_settings */ - -/*---------------------------------------------------------------------------- - * GeodeGetRec. - * - * Description :This function allocate an GeodeRec and hooked into - * pScreenInfo str driverPrivate member of ScreeenInfo - * structure. - * Parameters. - * pScreenInfo :Pointer handle to the screenonfo structure. - * - * Returns :allocated pScreeninfo structure. - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -static GeodePtr -GeodeGetRec(ScrnInfoPtr pScreenInfo) -{ - if (!pScreenInfo->driverPrivate) - pScreenInfo->driverPrivate = xnfcalloc(sizeof(GeodeRec), 1); - return GEODEPTR(pScreenInfo); -} - -/*---------------------------------------------------------------------------- - * GeodeFreeRec. - * - * Description :This function deallocate an GeodeRec and freed from - * pScreenInfo str driverPrivate member of ScreeenInfo - * structure. - * Parameters. - * pScreenInfo :Pointer handle to the screenonfo structure. - * - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -static void -GeodeFreeRec(ScrnInfoPtr pScreenInfo) -{ - if (pScreenInfo->driverPrivate == NULL) { - return; - } - xfree(pScreenInfo->driverPrivate); - pScreenInfo->driverPrivate = NULL; -} - -/*------------------------------------------------------------------------- - * GeodeIdentify. - * - * Description : This function identify an Geodefamily version. - * - * - * Parameters. - * flags : flags may be used in GeodePreInit* - * - * Returns : none - * - * Comments : none - * -*------------------------------------------------------------------------ -*/ -static void -GeodeIdentify(int flags) -{ - xf86PrintChipsets(GEODE_NAME, - "Geode family driver (version " GEODE_VERSION_NAME ") " - "for chipsets", GeodeChipsets); -} - -/*---------------------------------------------------------------------------- - * GeodeAvailableOptions. - * - * Description :This function returns the geodeoptions set geodeoption - * - * Parameters. - * chipid :This will identify the chipset. - * busid :This will identify the PCI busid - * - * Returns :ptr to GeodeOptions. - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -static const OptionInfoRec * -GeodeAvailableOptions(int chipid, int busid) -{ - return GeodeOptions; -} - -/*---------------------------------------------------------------------------- - * GeodeProbe. - * - * Description :This is to find that hardware is claimed by another - * driver if not claim the slot & allocate ScreenInfoRec. - * - * Parameters. - * drv :a pointer to the geode driver - * flags :flags may passed to check the config and probe detect - * - * Returns :TRUE on success and FALSE on failure. - * - * Comments :This should ne minimal probe and it should under no - * circumstances change the state of the hardware.Don't do - * any intiallizations other than the required - * ScreenInforec. -*---------------------------------------------------------------------------- -*/ - -static Bool -GeodeProbe(DriverPtr drv, int flags) -{ - Bool foundScreen = FALSE; - int numDevSections, numUsed; - GDevPtr *devSections = NULL; - int *usedChips = NULL; - int i; - - GeodeDebug(("GeodeProbe: Probing for supported devices!\n")); - /* - * *Find the config file Device sections that match this - * *driver, and return if there are none. - */ - if ((numDevSections = xf86MatchDevice(GEODE_NAME, &devSections)) <= 0) { - GeodeDebug(("GeodeProbe: failed 1!\n")); - return FALSE; - } - /* PCI BUS */ - if (xf86GetPciVideoInfo()) { - numUsed = xf86MatchPciInstances(GEODE_NAME, PCI_VENDOR_ID_NS, - GeodeChipsets, GeodePCIchipsets, - devSections, numDevSections, - drv, &usedChips); - if (numUsed <= 0) { - /* Check for old CYRIX vendor ID (5530) */ - numUsed = xf86MatchPciInstances(GEODE_NAME, - PCI_VENDOR_ID_CYRIX, - GeodeChipsets, GeodePCIchipsets, - devSections, numDevSections, - drv, &usedChips); - } - - if (numUsed > 0) { - if (flags & PROBE_DETECT) - foundScreen = TRUE; - else { - /* Durango only supports one instance, */ - /* so take the first one */ - for (i = 0; i < numUsed; i++) { - /* Allocate a ScrnInfoRec */ - ScrnInfoPtr pScrn = xf86AllocateScreen(drv, 0); - - pScrn->driverVersion = GEODE_VERSION_CURRENT; - pScrn->driverName = GEODE_DRIVER_NAME; - pScrn->name = GEODE_NAME; - pScrn->Probe = GeodeProbe; - pScrn->PreInit = GeodePreInit; - pScrn->ScreenInit = GeodeScreenInit; - pScrn->SwitchMode = GeodeSwitchMode; - pScrn->AdjustFrame = GeodeAdjustFrame; - pScrn->EnterVT = GeodeEnterVT; - pScrn->LeaveVT = GeodeLeaveVT; - pScrn->FreeScreen = GeodeFreeScreen; - pScrn->ValidMode = GeodeValidMode; - foundScreen = TRUE; - xf86ConfigActivePciEntity(pScrn, - usedChips[i], - GeodePCIchipsets, - NULL, NULL, NULL, NULL, NULL); - } - } - } - } - - if (usedChips) - xfree(usedChips); - if (devSections) - xfree(devSections); - GeodeDebug(("GeodeProbe: result (%d)!\n", foundScreen)); - return foundScreen; -} - -/*---------------------------------------------------------------------------- - * GeodeSaveScreen. - * - * Description :This is todo the screen blanking - * - * Parameters. - * pScreen :Handle to ScreenPtr structure. - * mode :mode is used by vgaHWSaveScren to check blnak os on. - * - * Returns :TRUE on success and FALSE on failure. - * - * Comments :none -*---------------------------------------------------------------------------- -*/ -static Bool -GeodeSaveScreen(ScreenPtr pScreen, int mode) -{ - GeodeDebug(("GeodeSaveScreen!\n")); - return vgaHWSaveScreen(pScreen, mode); -} - -/*---------------------------------------------------------------------------- - * get_tv_overscan_geom. - * - * Description :This is todo the screen blanking - * - * Parameters: - * options : Pointer to the display options. - * X: Pointer to the offset of the screen X-co-ordinate. - * Y: Pointer to the offset of the screen Y-co-ordinate. - * W: Pointer to the width of the screen. - * H: Pointer to the height of the screen. - * Returns : none. - * - * Comments :none - *------------------------------------------------------------------------ - */ -void -get_tv_overscan_geom(const char *options, int *X, int *Y, int *W, int *H) -{ - char *tv_opt; - - tv_opt = strtok((char *)options, ":"); - *X = strtoul(tv_opt, NULL, 0); - tv_opt = strtok(NULL, ":"); - *Y = strtoul(tv_opt, NULL, 0); - tv_opt = strtok(NULL, ":"); - *W = strtoul(tv_opt, NULL, 0); - tv_opt = strtok(NULL, ":"); - *H = strtoul(tv_opt, NULL, 0); -} - -static void -GeodeProbeDDC(ScrnInfoPtr pScrn, int index) -{ - vbeInfoPtr pVbe; - - if (xf86LoadSubModule(pScrn, "vbe")) { - pVbe = VBEInit(NULL, index); - ConfiguredMonitor = vbeDoEDID(pVbe, NULL); - vbeFree(pVbe); - } -} - -/*---------------------------------------------------------------------------- - * GeodePreInit. - * - * Description :This function is called only once ate teh server startup - * - * Parameters. - * pScreenInfo :Handle to ScreenPtr structure. - * flags :flags may be used to check the probeed one with config. - * - * Returns :TRUE on success and FALSE on failure. - * - * Comments :none. - *---------------------------------------------------------------------------- - */ -static Bool -GeodePreInit(ScrnInfoPtr pScreenInfo, int flags) -{ - static ClockRange GeodeClockRange = - { NULL, 25175, 135000, 0, FALSE, TRUE, 1, 1, 0 }; - MessageType from; - int i = 0; - GeodePtr pGeode; - char *mod = NULL; - char *reqSymbol = NULL; - -#if defined(STB_X) - GAL_ADAPTERINFO sAdapterInfo; -#endif /* STB_X */ - unsigned int PitchInc, minPitch, maxPitch; - const char *s; - char **modes; - char **tvmodes_defa; - - GeodeDebug(("GeodePreInit!\n")); - /* Allocate driver private structure */ - if (!(pGeode = GeodeGetRec(pScreenInfo))) - return FALSE; - - /* This is the general case */ - for (i = 0; i < pScreenInfo->numEntities; i++) { - pGeode->pEnt = xf86GetEntityInfo(pScreenInfo->entityList[i]); - if (pGeode->pEnt->resources) - return FALSE; - pGeode->Chipset = pGeode->pEnt->chipset; - pScreenInfo->chipset = (char *)xf86TokenToString(GeodeChipsets, - pGeode->pEnt->chipset); - } - - if (flags & PROBE_DETECT) { - GeodeProbeDDC(pScreenInfo, pGeode->pEnt->index); - return TRUE; - } - - /* If the vgahw module would be needed it would be loaded here */ - if (!xf86LoadSubModule(pScreenInfo, "vgahw")) { - return FALSE; - } - xf86LoaderReqSymLists(vgahwSymbols, NULL); - GeodeDebug(("GeodePreInit(1)!\n")); - /* Do the durango hardware detection */ -#if defined(STB_X) - if (!Gal_initialize_interface()) - return FALSE; - if (Gal_get_adapter_info(&sAdapterInfo)) { - pGeode->cpu_version = sAdapterInfo.dwCPUVersion; - pGeode->vid_version = sAdapterInfo.dwVideoVersion; - pGeode->FBSize = sAdapterInfo.dwFrameBufferSize; - /* update the max clock from the one system suports */ - GeodeClockRange.maxClock = sAdapterInfo.dwMaxSupportedPixelClock; - pGeode->FBLinearAddr = sAdapterInfo.dwFrameBufferBase; - - if (!GeodeMapMem(pScreenInfo)) - return FALSE; - - pGeode->HWVideo = pGeode->vid_version; - } else { - return FALSE; - } -#else - pGeode->cpu_version = gfx_detect_cpu(); - pGeode->vid_version = gfx_detect_video(); - pGeode->FBLinearAddr = gfx_get_frame_buffer_base(); - pGeode->FBSize = gfx_get_frame_buffer_size(); - /* update the max clock from the one system suports */ - GeodeClockRange.maxClock = gfx_get_max_supported_pixel_clock(); - - if (!GeodeMapMem(pScreenInfo)) - return FALSE; - - /* does this make sense!?!? */ - pGeode->HWVideo = gfx_detect_video(); - - DEBUGMSG(1, - (0, X_INFO, - "Geode chip info: cpu:%x vid:%x size:%x base:%x, rom:%X\n", - pGeode->cpu_version, pGeode->vid_version, pGeode->FBSize, - pGeode->FBBase, XpressROMPtr)); -#endif /* STB_X */ - - /* Fill in the monitor field */ - pScreenInfo->monitor = pScreenInfo->confScreen->monitor; - GeodeDebug(("GeodePreInit(2)!\n")); - /* Determine depth, bpp, etc. */ - if (!xf86SetDepthBpp(pScreenInfo, 8, 8, 8, 0)) { - return FALSE; - } else { - switch (pScreenInfo->depth) { - case 8: - case 16: - break; - default: - /* Depth not supported */ - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "Given depth (%d bpp) is not supported by this driver\n", - pScreenInfo->depth)); - return FALSE; - } - } - - /*This must happen after pScreenInfo->display has been set - * * because xf86SetWeight references it. - */ - if (pScreenInfo->depth > 8) { - /* The defaults are OK for us */ - rgb zeros = { 0, 0, 0 }; - - if (!xf86SetWeight(pScreenInfo, zeros, zeros)) { - return FALSE; - } else { - /* XXX Check if the returned weight is supported */ - } - } - xf86PrintDepthBpp(pScreenInfo); - GeodeDebug(("GeodePreInit(3)!\n")); - if (!xf86SetDefaultVisual(pScreenInfo, -1)) - return FALSE; - GeodeDebug(("GeodePreInit(4)!\n")); - - /* The new cmap layer needs this to be initialized */ - if (pScreenInfo->depth > 1) { - Gamma zeros = { 0.0, 0.0, 0.0 }; - - if (!xf86SetGamma(pScreenInfo, zeros)) { - return FALSE; - } - } - GeodeDebug(("GeodePreInit(5)!\n")); - /* We use a programmable clock */ - pScreenInfo->progClock = TRUE; - - /*Collect all of the relevant option flags - * *(fill in pScreenInfo->options) - */ - xf86CollectOptions(pScreenInfo, NULL); - - /*Process the options */ - xf86ProcessOptions(pScreenInfo->scrnIndex, pScreenInfo->options, - GeodeOptions); - - /*Set the bits per RGB for 8bpp mode */ - if (pScreenInfo->depth == 8) { - /* Default to 8 */ - pScreenInfo->rgbBits = 8; - } - from = X_DEFAULT; - pGeode->HWCursor = TRUE; - /* - * *The preferred method is to use the "hw cursor" option as a tri-state - * *option, with the default set above. - */ - if (xf86GetOptValBool(GeodeOptions, OPTION_HW_CURSOR, &pGeode->HWCursor)) { - from = X_CONFIG; - } - /* For compatibility, accept this too (as an override) */ - if (xf86ReturnOptValBool(GeodeOptions, OPTION_SW_CURSOR, FALSE)) { - from = X_CONFIG; - pGeode->HWCursor = FALSE; - } - DEBUGMSG(1, (pScreenInfo->scrnIndex, from, "Using %s cursor\n", - pGeode->HWCursor ? "HW" : "SW")); - - pGeode->Compression = FALSE; - if (xf86ReturnOptValBool(GeodeOptions, OPTION_COMPRESSION, FALSE)) { - pGeode->Compression = TRUE; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, "Compression \ - enabled\n")); - } - - pGeode->NoAccel = FALSE; - if (xf86ReturnOptValBool(GeodeOptions, OPTION_NOACCEL, FALSE)) { - pGeode->NoAccel = TRUE; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, "Acceleration \ - disabled\n")); - } - - pGeode->TVSupport = FALSE; - if ((s = xf86GetOptValString(GeodeOptions, OPTION_TV_SUPPORT))) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, "TV = %s\n", s)); - if (!xf86NameCmp(s, "PAL-768x576")) { - pGeode->TvParam.wStandard = TV_STANDARD_PAL; - pGeode->TvParam.wType = GFX_ON_TV_SQUARE_PIXELS; - pGeode->TvParam.wWidth = 768; - pGeode->TvParam.wHeight = 576; - pGeode->TVSupport = TRUE; - } else if (!xf86NameCmp(s, "PAL-720x576")) { - pGeode->TvParam.wStandard = TV_STANDARD_PAL; - pGeode->TvParam.wType = GFX_ON_TV_NO_SCALING; - pGeode->TvParam.wWidth = 720; - pGeode->TvParam.wHeight = 576; - pGeode->TVSupport = TRUE; - } else if (!xf86NameCmp(s, "NTSC-640x480")) { - pGeode->TvParam.wStandard = TV_STANDARD_NTSC; - pGeode->TvParam.wType = GFX_ON_TV_SQUARE_PIXELS; - pGeode->TvParam.wWidth = 640; - pGeode->TvParam.wHeight = 480; - pGeode->TVSupport = TRUE; - } else if (!xf86NameCmp(s, "NTSC-720x480")) { - pGeode->TvParam.wStandard = TV_STANDARD_NTSC; - pGeode->TvParam.wType = GFX_ON_TV_NO_SCALING; - pGeode->TvParam.wWidth = 720; - pGeode->TvParam.wHeight = 480; - pGeode->TVSupport = TRUE; - } - - if (pGeode->TVSupport == TRUE) { - unsigned int status = 0; - - GFX(get_tv_enable(&status)); - - DEBUGMSG(1, (0, X_PROBED, "status %d \n", status)); - if (status == 0) { - pGeode->TVSupport = FALSE; - DEBUGMSG(1, (0, X_NONE, "Not a TV Supported Platform\n")); - } - pGeode->TvParam.wOutput = TV_OUTPUT_S_VIDEO; /* default */ - /* Now find the output */ - if (pGeode->TVSupport) { - if ((s = xf86GetOptValString(GeodeOptions, OPTION_TV_OUTPUT))) { - if (!xf86NameCmp(s, "COMPOSITE")) { - pGeode->TvParam.wOutput = TV_OUTPUT_COMPOSITE; - } else if (!xf86NameCmp(s, "SVIDEO")) { - pGeode->TvParam.wOutput = TV_OUTPUT_S_VIDEO; - } else if (!xf86NameCmp(s, "YUV")) { - pGeode->TvParam.wOutput = TV_OUTPUT_YUV; - } else if (!xf86NameCmp(s, "SCART")) { - pGeode->TvParam.wOutput = TV_OUTPUT_SCART; - } - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "TVOutput = %s %d\n", s, - pGeode->TvParam.wOutput)); - } - } - } - - /*TV can be turned on only in 16BPP mode */ - if ((pScreenInfo->depth == 8) && (pGeode->TVSupport == TRUE)) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "Warning TV Disabled, TV Can't be supported in 8Bpp !!!\n")); - pGeode->TVSupport = FALSE; - } - } - - /* If TV Supported then check for TVO support */ - if (pGeode->TVSupport == TRUE) { - pGeode->TVOx = 0; - pGeode->TVOy = 0; - pGeode->TVOw = 0; - pGeode->TVOh = 0; - pGeode->TV_Overscan_On = FALSE; - if ((s = xf86GetOptValString(GeodeOptions, OPTION_TV_OVERSCAN))) { - get_tv_overscan_geom(s, &(pGeode->TVOx), - &(pGeode->TVOy), &(pGeode->TVOw), - &(pGeode->TVOh)); - - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "TVO %d %d %d %d\n", pGeode->TVOx, pGeode->TVOy, - pGeode->TVOw, pGeode->TVOh)); - - if ((pGeode->TVOx >= 0 && pGeode->TVOy >= 0) && - (pGeode->TVOh > 0 && pGeode->TVOw > 0)) { - if (((pGeode->TVOx + pGeode->TVOw) <= pGeode->TvParam.wWidth) && - ((pGeode->TVOy + pGeode->TVOh) <= pGeode->TvParam.wHeight)) { - pGeode->TV_Overscan_On = TRUE; - } - } - } - } - - /* If TV is not selected and currently TV is enabled, disable the TV out */ - if (pGeode->TVSupport == FALSE) { - unsigned int status = 0; - - GFX(get_tv_enable(&status)); - if (status) - GFX(set_tv_enable(0)); - } - - pGeode->NoOfImgBuffers = DEFAULT_NUM_OF_BUF; /* default # of buffers */ - if(!xf86GetOptValInteger(GeodeOptions, OPTION_IMG_BUFS, - &(pGeode->NoOfImgBuffers))) { - if(pGeode->NoOfImgBuffers < 0) - pGeode->NoOfImgBuffers = DEFAULT_NUM_OF_BUF; /* default # of buffers */ - } - - pGeode->Panel = FALSE; - if (xf86ReturnOptValBool(GeodeOptions, OPTION_FLATPANEL, FALSE)) { - DEBUGMSG(0, (pScreenInfo->scrnIndex, X_CONFIG, "FlatPanel Selected\n")); - pGeode->Panel = TRUE; - } - - pGeode->FPInBios = FALSE; - if (xf86ReturnOptValBool(GeodeOptions, OPTION_FLATPANEL_IN_BIOS, FALSE)) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "FlatPanel Support from BIOS\n")); - pGeode->FPInBios = TRUE; - } - - DEBUGMSG(0, (pScreenInfo->scrnIndex, X_CONFIG, - "FP Bios %d %d\n", pGeode->FPInBios, pGeode->Panel)); - - /* if FP not supported in BIOS, then turn off user option */ - if (pGeode->FPInBios) { - int ret; - - /* check if bios supports FP */ -#if defined(STB_X) - Gal_get_softvga_state(&ret); - if (!ret) { - /* its time to wakeup softvga */ - Gal_set_softvga_state(TRUE); - Gal_vga_mode_switch(0); - } - Gal_pnl_enabled_in_bios(&pGeode->FPInBios); - - if (pGeode->FPInBios) { - Gal_pnl_info_from_bios(&pGeode->FPBX, &pGeode->FPBY, - &pGeode->FPBB, &pGeode->FPBF); - } - if (!ret) { - /* its time to put softvga back to sleep */ - Gal_set_softvga_state(FALSE); - Gal_vga_mode_switch(1); - } -#else - ret = gfx_get_softvga_active(); - if (!ret) { - /* its time to wakeup softvga */ - gfx_enable_softvga(); - gfx_vga_mode_switch(0); - } - pGeode->FPInBios = Pnl_IsPanelEnabledInBIOS(); - if (pGeode->FPInBios) { - Pnl_GetPanelInfoFromBIOS(&pGeode->FPBX, &pGeode->FPBY, - &pGeode->FPBB, &pGeode->FPBF); - } - if (!ret) { - /* its time to put softvga back to sleep */ - gfx_disable_softvga(); - gfx_vga_mode_switch(1); - } -#endif - if (pGeode->FPInBios == 0) { - pGeode->Panel = 0; - } else { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_PROBED, - "Flat Panel Dimensions (from BIOS) %dx%d\n", - pGeode->FPBX, pGeode->FPBY)); - } - } - - DEBUGMSG(0, (pScreenInfo->scrnIndex, X_CONFIG, - "FP Bios %d %d\n", pGeode->FPInBios, pGeode->Panel)); - - /* if Panel enabled and Flatpanel support not from BIOS then - * detect if the platform can support a panel */ - - if (pGeode->Panel && (!pGeode->FPInBios)) { - pGeode->PnlParam.PanelPresent = 1; -#if defined(STB_X) - Gal_pnl_get_params(PNL_PLATFORM | PNL_PANELCHIP | PNL_PANELSTAT, - &(pGeode->PnlParam)); -#else - pGeode->PnlParam.Flags = PNL_PLATFORM | PNL_PANELCHIP | PNL_PANELSTAT; - - Pnl_GetPanelParam(&(pGeode->PnlParam)); -#endif /* STB_X */ - DEBUGMSG(0, (pScreenInfo->scrnIndex, X_CONFIG, - "chip = %X\n", pGeode->PnlParam.PanelChip)); - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "%s Platform with %s Chip, %s Panel %dx%d %dBpp%sColor \n", - ((pGeode->PnlParam.Platform == - CENTAURUS_PLATFORM) ? "Centaurus" : ((pGeode->PnlParam. - Platform == - DORADO_PLATFORM) ? - "Dorado" : - "Unknown")), - ((pGeode->PnlParam. - PanelChip & PNL_9210) ? "9210" : ((pGeode->PnlParam. - PanelChip & - PNL_9211_A) ? "9211_A" - : ((pGeode->PnlParam. - PanelChip & - PNL_9211_C) ? - "9211_C" : - "Unknown"))), - ((pGeode->PnlParam.PanelStat. - Type & PNL_TFT) ? "TFT" : ((pGeode->PnlParam.PanelStat. - Type & PNL_SSTN) ? "SSTN" - : ((pGeode->PnlParam. - PanelStat. - Type & PNL_DSTN) ? "DSTN" - : "Unknown"))), - pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pGeode->PnlParam.PanelStat.Depth, - ((pGeode->PnlParam.PanelStat. - MonoColor & PNL_MONO_PANEL) ? " Mono" : ((pGeode-> - PnlParam. - PanelStat. - MonoColor & - PNL_COLOR_PANEL) - ? " " : - " Unknown")) - )); - - /* check if we found a vaild configuration */ - if ((pGeode->PnlParam.Platform == OTHER_PLATFORM) || - (pGeode->PnlParam.PanelChip & PNL_UNKNOWN_CHIP) || - (pGeode->PnlParam.PanelStat.Type & PNL_UNKNOWN_PANEL) || - (pGeode->PnlParam.PanelStat.MonoColor & PNL_UNKNOWN_COLOR)) { - pGeode->Panel = FALSE; - } - } - - DEBUGMSG(0, (0, X_CONFIG, "FP Bios pGeode->Panel %d \n", pGeode->Panel)); - - /* if panel not selected and Panel can be supported. - * Power down the panel. - */ - if (!pGeode->Panel) { -#if defined(STB_X) - Gal_pnl_powerdown(); -#else - Pnl_PowerDown(); -#endif /* STB_X */ - } - - pGeode->ShadowFB = FALSE; - if (xf86ReturnOptValBool(GeodeOptions, OPTION_SHADOW_FB, FALSE)) { - pGeode->ShadowFB = TRUE; - pGeode->NoAccel = TRUE; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "Using \"Shadow Framebuffer\" - acceleration disabled\n")); - } - - if (xf86ReturnOptValBool(GeodeOptions, OPTION_DONT_PROGRAM, FALSE)) { - gfx_dont_program = 1; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "Don't Program enabled\n")); - } else - gfx_dont_program = 0; - - pGeode->Rotate = 0; - if ((s = xf86GetOptValString(GeodeOptions, OPTION_ROTATE))) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, "Rotating - %s\n", s)); - if (!xf86NameCmp(s, "CW")) { - pGeode->ShadowFB = TRUE; - pGeode->NoAccel = TRUE; - pGeode->HWCursor = FALSE; - pGeode->Rotate = 1; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "Rotating screen clockwise - acceleration disabled\n")); - } else { - if (!xf86NameCmp(s, "CCW")) { - pGeode->ShadowFB = TRUE; - pGeode->NoAccel = TRUE; - pGeode->HWCursor = FALSE; - pGeode->Rotate = -1; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "Rotating screen counter clockwise - acceleration \ - disabled\n")); - } else { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "\"%s\" is not a valid value for Option \"Rotate\"\n", - s)); - DEBUGMSG(1, - (pScreenInfo->scrnIndex, X_INFO, - "Valid options are \"CW\" or \"CCW\"\n")); - } - } - } - - if ((s = xf86GetOptValString(GeodeOptions, OPTION_OVERLAY))) { - if (!*s || !xf86NameCmp(s, "8,16") || !xf86NameCmp(s, "16,8")) { - if (pScreenInfo->bitsPerPixel == 16) { - pGeode->HWOverlay = TRUE; - if (!xf86GetOptValInteger - (GeodeOptions, OPTION_COLOR_KEY, &(pScreenInfo->colorKey))) - pScreenInfo->colorKey = TRANSPARENCY_KEY; - pScreenInfo->overlayFlags = OVERLAY_8_16_DUALFB; - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "PseudoColor overlay enabled.\n")); - } else { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_WARNING, - "Option \"Overlay\" is not supported in this configuration\n")); - } - } else { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_WARNING, - "\"%s\" is not a valid value for Option \"Overlay\"\n", - s)); - } - } - if (1 || pGeode->HWOverlay) { - if (xf86GetOptValInteger(GeodeOptions, OPTION_VIDEO_KEY, - &(pGeode->videoKey))) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_CONFIG, - "video key set to 0x%x\n", pGeode->videoKey)); - } else { - pGeode->videoKey = (1 << pScreenInfo->offset.red) | - (1 << pScreenInfo->offset.green) | - (((pScreenInfo->mask.blue >> pScreenInfo->offset.blue) - 1) - << pScreenInfo->offset.blue); - } - } - - /* XXX Init further private data here */ - - /* - * * This shouldn't happen because such problems should be caught in - * * GeodeProbe(), but check it just in case. - */ - if (pScreenInfo->chipset == NULL) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "ChipID 0x%04X is not recognised\n", pGeode->Chipset)); - return FALSE; - } - if (pGeode->Chipset < 0) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "Chipset \"%s\" is not recognised\n", - pScreenInfo->chipset)); - return FALSE; - } - GeodeDebug(("GeodePreInit(6)!\n")); - - /* - * * Init the screen with some values - */ - DEBUGMSG(1, (pScreenInfo->scrnIndex, from, - "Video I/O registers at 0x%08lX\n", - (unsigned long)VGAHW_GET_IOBASE())); - - if (pScreenInfo->memPhysBase == 0) { - from = X_PROBED; -#if defined(STB_X) - pScreenInfo->memPhysBase = sAdapterInfo.dwFrameBufferBase; -#else - pScreenInfo->memPhysBase = gfx_get_frame_buffer_base(); -#endif /* STB_X */ - } - DEBUGMSG(1, (pScreenInfo->scrnIndex, from, - "Linear framebuffer at 0x%08lX\n", - (unsigned long)pScreenInfo->memPhysBase)); - - if (pGeode->pEnt->device->videoRam == 0) { - from = X_PROBED; - pScreenInfo->videoRam = pGeode->FBSize / 1024; - } else { - pScreenInfo->videoRam = pGeode->pEnt->device->videoRam; - from = X_CONFIG; - } - DEBUGMSG(1, (pScreenInfo->scrnIndex, from, - "VideoRam: %d kByte\n", - (unsigned long)pScreenInfo->videoRam)); - - GeodeDebug(("GeodePreInit(7)!\n")); - - /* - * * xf86ValidateModes will check that the mode HTotal and VTotal values - * * don't exceed the chipset's limit if pScreenInfo->maxHValue adn - * * pScreenInfo->maxVValue are set. Since our GeodeValidMode() - * * already takes care of this, we don't worry about setting them here. - */ - /* Select valid modes from those available */ - /* - * * min pitch 1024, max 2048 (Pixel count) - * * min height 480, max 1024 (Pixel count) - */ - minPitch = 1024; - maxPitch = 2048; - if (pScreenInfo->depth == 16) { - PitchInc = 1024 << 4; /* in bits */ - } else { - PitchInc = 1024 << 3; /* in bits */ - } - - /* by default use what user sets in the XF86Config file */ - modes = pScreenInfo->display->modes; - if (pGeode->TVSupport == TRUE) { - char str[20]; - - sprintf(str, "%dx%d-%d", - pGeode->TvParam.wWidth, - pGeode->TvParam.wHeight, - ((pGeode->TvParam.wStandard == TV_STANDARD_PAL) ? 50 : 60)); - - tvmodes_defa = (char **)malloc(sizeof(char *) * 2); - tvmodes_defa[0] = (char *)malloc(strlen(str)); - tvmodes_defa[1] = NULL; - strcpy(str, tvmodes_defa[0]); - - modes = tvmodes_defa; - } - - i = xf86ValidateModes(pScreenInfo, - pScreenInfo->monitor->Modes, - modes, - &GeodeClockRange, - NULL, minPitch, maxPitch, - PitchInc, 480, 1024, - pScreenInfo->display->virtualX, - pScreenInfo->display->virtualY, -#if defined(STB_X) - sAdapterInfo.dwFrameBufferSize, -#else - gfx_get_frame_buffer_size(), -#endif /* STB_X */ - LOOKUP_BEST_REFRESH); - - DEBUGMSG(1, (pScreenInfo->scrnIndex, from, - "xf86ValidateModes: %d %d %d\n", - pScreenInfo->virtualX, - pScreenInfo->virtualY, pScreenInfo->displayWidth)); - if (i == -1) { - GeodeFreeRec(pScreenInfo); - return FALSE; - } - GeodeDebug(("GeodePreInit(8)!\n")); - /* Prune the modes marked as invalid */ - xf86PruneDriverModes(pScreenInfo); - GeodeDebug(("GeodePreInit(9)!\n")); - if (i == 0 || pScreenInfo->modes == NULL) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "No valid modes found\n")); - GeodeFreeRec(pScreenInfo); - return FALSE; - } - GeodeDebug(("GeodePreInit(10)!\n")); - xf86SetCrtcForModes(pScreenInfo, 0); - GeodeDebug(("GeodePreInit(11)!\n")); - /* Set the current mode to the first in the list */ - pScreenInfo->currentMode = pScreenInfo->modes; - GeodeDebug(("GeodePreInit(12)!\n")); - /* Print the list of modes being used */ - xf86PrintModes(pScreenInfo); - GeodeDebug(("GeodePreInit(13)!\n")); - /* Set the display resolution */ - xf86SetDpi(pScreenInfo, 0, 0); - GeodeDebug(("GeodePreInit(14)!\n")); - /* Load bpp-specific modules */ - mod = NULL; - switch (pScreenInfo->bitsPerPixel) { - case 8: - case 16: - mod = "fb"; - reqSymbol = "fbScreenInit"; - break; - } - if (mod && !xf86LoadSubModule(pScreenInfo, mod)) { - GeodeFreeRec(pScreenInfo); - return FALSE; - } - xf86LoaderReqSymbols(reqSymbol, NULL); - GeodeDebug(("GeodePreInit(15)!\n")); - if (pGeode->NoAccel == FALSE) { - if (!xf86LoadSubModule(pScreenInfo, "xaa")) { - GeodeFreeRec(pScreenInfo); - return FALSE; - } - xf86LoaderReqSymLists(xaaSymbols, NULL); - } - if (pGeode->HWCursor == TRUE) { - if (!xf86LoadSubModule(pScreenInfo, "ramdac")) { - GeodeFreeRec(pScreenInfo); - return FALSE; - } - xf86LoaderReqSymLists(ramdacSymbols, NULL); - } - /* Load shadowfb if needed */ - if (pGeode->ShadowFB) { - if (!xf86LoadSubModule(pScreenInfo, "shadowfb")) { - GeodeFreeRec(pScreenInfo); - return FALSE; - } - xf86LoaderReqSymLists(shadowSymbols, NULL); - } - if (xf86RegisterResources(pGeode->pEnt->index, NULL, ResExclusive)) { - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "xf86RegisterResources() found resource conflicts\n")); - GeodeFreeRec(pScreenInfo); - return FALSE; - } - - GeodeUnmapMem(pScreenInfo); - - GeodeDebug(("GeodePreInit(16)!\n")); - GeodeDebug(("GeodePreInit(17)!\n")); - GeodeDebug(("GeodePreInit ... done successfully!\n")); - return TRUE; -} - -#if 0 -/*---------------------------------------------------------------------------- - * GeodeRestoreEx. - * - * Description :This function restores the mode that was saved on server - entry - * Parameters. - * pScreenInfo :Handle to ScreenPtr structure. - * Pmode :poits to screen mode - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static void -GeodeRestoreEx(ScrnInfoPtr pScreenInfo, DisplayModePtr pMode) -{ - GeodePtr pGeode; - - GeodeDebug(("GeodeRestoreEx!\n")); - /* Get driver private structure */ - if (!(pGeode = GeodeGetRec(pScreenInfo))) - return; - /* Restore the extended registers */ -#if defined(STB_X) - pGeode->FBgfxVgaRegs.dwFlags = GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC; - Gal_vga_restore(&(pGeode->FBgfxVgaRegs)); -#else - gfx_vga_restore(&(pGeode->FBgfxVgaRegs), - GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC); -#endif /* STB_X */ -} -#endif - -/*---------------------------------------------------------------------------- - * GeodeCalculatePitchBytes. - * - * Description :This function restores the mode that was saved on server - * - * Parameters. - * pScreenInfo :Handle to ScreenPtr structure. - * Pmode :Points to screenmode - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static int -GeodeCalculatePitchBytes(ScrnInfoPtr pScreenInfo) -{ - GeodePtr pGeode; - int lineDelta = pScreenInfo->virtualX * (pScreenInfo->bitsPerPixel >> 3); - - pGeode = GEODEPTR(pScreenInfo); - - /* needed in Rotate mode when in accel is turned off */ - if (1) { /*!pGeode->NoAccel */ - /* Force to 1K or 2K if acceleration is enabled - * we should check for pyramid here!! - */ - if (lineDelta > 2048) - lineDelta = 4096; - else if (lineDelta > 1024) - lineDelta = 2048; - else - lineDelta = 1024; - } - - DEBUGMSG(1, - (0, X_PROBED, "pitch %d %d\n", pScreenInfo->virtualX, lineDelta)); - - return lineDelta; -} - -/*---------------------------------------------------------------------------- - * GeodeGetRefreshRate. - * - * Description :This function restores the mode that saved on server - * - * Parameters. - * Pmode :Pointer to the screen modes - * - * Returns :It returns the selected refresh rate. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static int -GeodeGetRefreshRate(DisplayModePtr pMode) -{ -#define THRESHOLD 2 - int i; - static int validRates[] = { 50, 56, 60, 70, 72, 75, 85 }; /* Hz */ - unsigned long dotClock; - int refreshRate; - int selectedRate; - - dotClock = pMode->SynthClock * 1000; - refreshRate = dotClock / pMode->CrtcHTotal / pMode->CrtcVTotal; - selectedRate = validRates[0]; - for (i = 0; i < (sizeof(validRates) / sizeof(validRates[0])); i++) { - if (validRates[i] < (refreshRate + THRESHOLD)) { - selectedRate = validRates[i]; - } - } - return selectedRate; -} - -#if 1 -static void -clear_screen(int width, int height) -{ - /* clean up the frame buffer memory */ - - GFX(set_solid_pattern(0)); - GFX(set_raster_operation(0xF0)); - GFX(pattern_fill(0, 0, width, height)); -} -#endif - -/*---------------------------------------------------------------------------- - * GeodeSetMode. - * - * Description :This function sets parametrs for screen mode - * - * Parameters. - * pScreenInfo :Pointer to the screenInfo structure. - * Pmode :Pointer to the screen modes - * - * Returns :TRUE on success and FALSE on Failure. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ - -static Bool -GeodeSetMode(ScrnInfoPtr pScreenInfo, DisplayModePtr pMode) -{ - GeodePtr pGeode; - - /* unsigned int compOffset, compPitch, compSize; */ - GeodeDebug(("GeodeSetMode!\n")); - pGeode = GEODEPTR(pScreenInfo); - - /* Set the VT semaphore */ - pScreenInfo->vtSema = TRUE; - - /* The timing will be adjusted later */ - GeodeDebug(("Set display mode: %dx%d-%d (%dHz)\n", - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, GeodeGetRefreshRate(pMode))); - GeodeDebug(("Before setting the mode\n")); -#if 0 - if ((pMode->CrtcHDisplay >= 640) && (pMode->CrtcVDisplay >= 480)) - if (1) { -#endif - GFX(set_display_bpp(pScreenInfo->bitsPerPixel)); - - if (pGeode->TVSupport == TRUE) { - pGeode->TvParam.bState = 1; /* enable */ - /* wWidth and wHeight already set in init. */ -#if defined(STB_X) - Gal_tv_set_params(GAL_TVSTATE | GAL_TVOUTPUT | - GAL_TVFORMAT | GAL_TVRESOLUTION, - &(pGeode->TvParam)); -#else - /* sequence might be important */ - gfx_set_tv_display(pGeode->TvParam.wWidth, - pGeode->TvParam.wHeight); - gfx_set_tv_format(pGeode->TvParam.wStandard, - pGeode->TvParam.wType); - gfx_set_tv_output(pGeode->TvParam.wOutput); - gfx_set_tv_enable(pGeode->TvParam.bState); - -#endif /* STB_X */ - } else { /* TV not selected */ - - DEBUGMSG(0, (0, X_PROBED, "Setting Display for CRT or TFT\n")); - - if (pGeode->Panel) { - DEBUGMSG(0, (0, X_PROBED, "Setting Display for TFT\n")); - if (gfx_dont_program) { - if (pGeode->FPBX != pMode->CrtcHDisplay && - pGeode->FPBY != pMode->CrtcVDisplay) { - gfx_dont_program = 0; - DEBUGMSG(1, - (1, X_PROBED, - "Disabling Dont Program - Panel/Res mismatch %dx%d != %dx%d\n", - pGeode->FPBX, pGeode->FPBY, - pMode->CrtcHDisplay, pMode->CrtcVDisplay)); - } - } -#if defined(STB_X) - if (pGeode->FPInBios) { - DEBUGMSG(0, (0, X_PROBED, "Restore Panel %d %d %d %d %d\n", - pGeode->FPBX, - pGeode->FPBY, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel)); - Gal_set_fixed_timings(pGeode->FPBX, pGeode->FPBY, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); - } else { - DEBUGMSG(0, (0, X_PROBED, "Restore Panel %d %d %d %d %d\n", - pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel)); - - Gal_set_fixed_timings(pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); - Gal_pnl_init(&(pGeode->PnlParam)); - } -#else - GeodeDebug(("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", READ_REG32(DC_OUTPUT_CFG), READ_REG32(DC_TIMING_CFG), READ_REG32(DC_GENERAL_CFG), READ_REG32(DC_H_TIMING_1), READ_REG32(DC_H_TIMING_2), READ_REG32(DC_H_TIMING_3), READ_REG32(DC_FP_H_TIMING), READ_REG32(DC_V_TIMING_1), READ_REG32(DC_V_TIMING_2), READ_REG32(DC_V_TIMING_3), READ_REG32(DC_FP_V_TIMING))); - - if (pGeode->FPInBios) { - DEBUGMSG(0, (0, X_PROBED, "Restore Panel %d %d %d %d %d\n", - pGeode->FPBX, - pGeode->FPBY, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel)); - -#ifdef MAGIC - /* XXX: We do this twice - magic ! */ - gfx_set_fixed_timings(pGeode->FPBX, pGeode->FPBY, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); -#endif - gfx_set_fixed_timings(pGeode->FPBX, pGeode->FPBY, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); - } else { - DEBUGMSG(0, (0, X_PROBED, "Restore Panel %d %d %d %d %d\n", - pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel)); -#ifdef MAGIC - /* XXX: We do this twice - magic ! */ - gfx_set_fixed_timings(pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); -#endif - gfx_set_fixed_timings(pGeode->PnlParam.PanelStat.XRes, - pGeode->PnlParam.PanelStat.YRes, - pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel); - Pnl_InitPanel(&(pGeode->PnlParam)); - } - GeodeDebug(("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", READ_REG32(DC_OUTPUT_CFG), READ_REG32(DC_TIMING_CFG), READ_REG32(DC_GENERAL_CFG), READ_REG32(DC_H_TIMING_1), READ_REG32(DC_H_TIMING_2), READ_REG32(DC_H_TIMING_3), READ_REG32(DC_FP_H_TIMING), READ_REG32(DC_V_TIMING_1), READ_REG32(DC_V_TIMING_2), READ_REG32(DC_V_TIMING_3), READ_REG32(DC_FP_V_TIMING))); -#endif /* STB_X */ - } else { - /* display is crt */ - DEBUGMSG(0, (0, X_PROBED, "Setting Display for CRT\n")); -#if defined(STB_X) - Gal_set_display_mode(pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, - GeodeGetRefreshRate(pMode)); - - /* adjust the pitch */ - Gal_set_display_pitch(pGeode->Pitch); -#else -#ifdef MAGIC - /* XXX: We do this twice - magic ! */ - gfx_set_display_mode(pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, - GeodeGetRefreshRate(pMode)); -#endif - gfx_set_display_mode(pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, - GeodeGetRefreshRate(pMode)); - - /* adjust the pitch */ - gfx_set_display_pitch(pGeode->Pitch); -#endif /* STB_X */ - } - /* enable crt */ -#if defined(STB_X) - Gal_set_crt_state(CRT_ENABLE); -#else -#ifdef MAGIC - /* XXX: We do this twice - magic ! */ - gfx_set_crt_enable(CRT_ENABLE); -#endif - gfx_set_crt_enable(CRT_ENABLE); -#endif /* STB_X */ - } - - GFX(set_display_offset(0L)); - GFX(wait_vertical_blank()); - - pGeode->CursorSize = 256; - - /* enable compression if option selected */ - if (pGeode->Compression) { - pGeode->CursorStartOffset = GeodeMemOffset[MemIndex].CurOffset; - /* set the compression parameters,and it will be turned on later. */ -#if defined(STB_X) - Gal_set_compression_parameters(GAL_COMPRESSION_ALL, - GeodeMemOffset[MemIndex].CBOffset, - GeodeMemOffset[MemIndex].CBPitch, - GeodeMemOffset[MemIndex].CBSize - - 16); - - /* set the compression buffer, all parameters already set */ - Gal_set_compression_state(GAL_COMPRESSION_ENABLE); -#else - gfx_set_compression_offset(GeodeMemOffset[MemIndex].CBOffset); - gfx_set_compression_pitch(GeodeMemOffset[MemIndex].CBPitch); - gfx_set_compression_size(GeodeMemOffset[MemIndex].CBSize - 16); - - /* set the compression buffer, all parameters already set */ - gfx_set_compression_enable(1); -#endif /* STB_X */ - - } else { - /* Default cursor offset, end of the frame buffer */ - pGeode->CursorStartOffset = pGeode->FBSize - pGeode->CursorSize; - } - if (pGeode->HWCursor) { - /* Load blank cursor */ - GeodeLoadCursorImage(pScreenInfo, NULL); - GFX(set_cursor_position(pGeode->CursorStartOffset, 0, 0, 0, 0)); - GFX(set_cursor_enable(1)); - } -#if 0 - } else { - GeodeDebug(("GeodeRestoreEx ... ")); - GeodeRestoreEx(pScreenInfo, pMode); - GeodeDebug(("done.\n")); - } -#endif - - GeodeDebug(("done.\n")); - /* Reenable the hardware cursor after the mode switch */ - if (pGeode->HWCursor == TRUE) { - GeodeDebug(("GeodeShowCursor ... ")); - GeodeShowCursor(pScreenInfo); - GeodeDebug(("done.\n")); - } - /* Restore the contents in the screen info */ - GeodeDebug(("After setting the mode\n")); - return TRUE; -} - -/*---------------------------------------------------------------------------- - * GeodeEnterGraphics. - * - * Description :This function will intiallize the displaytiming - structure for nextmode and switch to VGA mode. - * - * Parameters. - * pScreen :Screen information will be stored in this structure. - * pScreenInfo :Pointer to the screenInfo structure. - * - * Returns :TRUE on success and FALSE on Failure. - * - * Comments :gfx_vga_mode_switch() will start and end the - * switching based on the arguments 0 or 1.soft_vga - * is disabled in this function. -*---------------------------------------------------------------------------- -*/ -static Bool -GeodeEnterGraphics(ScreenPtr pScreen, ScrnInfoPtr pScreenInfo) -{ - GeodePtr pGeode; - vgaHWPtr hwp = VGAHWPTR(pScreenInfo); - - GeodeDebug(("GeodeEnterGraphics!\n")); - vgaHWUnlock(hwp); - /* Should we re-save the text mode on each VT enter? */ - pGeode = GeodeGetRec(pScreenInfo); -#if 0 - print_gxm_gfx_reg(pGeode, 0x4C); - print_gxm_vga_reg(); -#endif - /* This routine saves the current VGA state in Durango VGA structure */ -#if defined(STB_X) - Gal_get_softvga_state(&pGeode->FBSoftVGAActive); - pGeode->FBgfxVgaRegs.dwFlags = GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC; - Gal_vga_save(&(pGeode->FBgfxVgaRegs)); -#else - pGeode->FBSoftVGAActive = gfx_get_softvga_active(); - gfx_vga_save(&(pGeode->FBgfxVgaRegs), - GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC); -#endif /* STB_X */ - DEBUGMSG(0, (0, X_PROBED, "VSA = %d\n", pGeode->FBSoftVGAActive)); - - vgaHWSave(pScreenInfo, &VGAHWPTR(pScreenInfo)->SavedReg, - VGA_SR_ALL); - -#if defined(STB_X) - Gal_get_display_timing(&pGeode->FBgfxdisplaytiming); - Gal_tv_get_timings(0, &pGeode->FBgfxtvtiming); - - /* Save Display offset */ - Gal_get_display_offset(&(pGeode->FBDisplayOffset)); - - /* Save the current Compression state */ - Gal_get_compression_state(&(pGeode->FBCompressionEnable)); - Gal_get_compression_parameters(GAL_COMPRESSION_ALL, - &(pGeode->FBCompressionOffset), - &(pGeode->FBCompressionPitch), - &(pGeode->FBCompressionSize)); - - /* Save Cursor offset */ - { - unsigned short x, y, xhot, yhot; - - Gal_get_cursor_position(&(pGeode->FBCursorOffset), - &x, &y, &xhot, &yhot); - } - /* Save the Panel state */ - Gal_pnl_save(); - - /* its time to put softvga to sleep */ - Gal_set_softvga_state(FALSE); - Gal_vga_mode_switch(1); - -#else - /* Save TV State */ - gfx_get_tv_enable(&(pGeode->FBTVEnabled)); - if (pGeode->FBTVEnabled) { - /* TV Format */ - pGeode->FBtvtiming.HorzTim = READ_VID32(SC1200_TVOUT_HORZ_TIM); - pGeode->FBtvtiming.HorzSync = READ_VID32(SC1200_TVOUT_HORZ_SYNC); - pGeode->FBtvtiming.VertSync = READ_VID32(SC1200_TVOUT_VERT_SYNC); - pGeode->FBtvtiming.LineEnd = READ_VID32(SC1200_TVOUT_LINE_END); - pGeode->FBtvtiming.VertDownscale = - READ_VID32(SC1200_TVOUT_VERT_DOWNSCALE); - pGeode->FBtvtiming.HorzScaling = READ_VID32(SC1200_TVOUT_HORZ_SCALING); - pGeode->FBtvtiming.TimCtrl1 = READ_VID32(SC1200_TVENC_TIM_CTRL_1); - pGeode->FBtvtiming.TimCtrl2 = READ_VID32(SC1200_TVENC_TIM_CTRL_2); - pGeode->FBtvtiming.Subfreq = READ_VID32(SC1200_TVENC_SUB_FREQ); - pGeode->FBtvtiming.DispPos = READ_VID32(SC1200_TVENC_DISP_POS); - pGeode->FBtvtiming.DispSize = READ_VID32(SC1200_TVENC_DISP_SIZE); - /* TV Output */ - pGeode->FBtvtiming.TimCtrl2 = READ_VID32(SC1200_TVENC_TIM_CTRL_2); - pGeode->FBtvtiming.Debug = READ_VID32(SC1200_TVOUT_DEBUG); - /* TV Enable */ - pGeode->FBtvtiming.DacCtrl = READ_VID32(SC1200_TVENC_DAC_CONTROL); - } - - /* Save CRT State */ - pGeode->FBgfxdisplaytiming.dwDotClock = gfx_get_clock_frequency(); - pGeode->FBgfxdisplaytiming.wPitch = gfx_get_display_pitch(); - pGeode->FBgfxdisplaytiming.wBpp = gfx_get_display_bpp(); - pGeode->FBgfxdisplaytiming.wHTotal = gfx_get_htotal(); - pGeode->FBgfxdisplaytiming.wHActive = gfx_get_hactive(); - pGeode->FBgfxdisplaytiming.wHSyncStart = gfx_get_hsync_start(); - pGeode->FBgfxdisplaytiming.wHSyncEnd = gfx_get_hsync_end(); - pGeode->FBgfxdisplaytiming.wHBlankStart = gfx_get_hblank_start(); - pGeode->FBgfxdisplaytiming.wHBlankEnd = gfx_get_hblank_end(); - pGeode->FBgfxdisplaytiming.wVTotal = gfx_get_vtotal(); - pGeode->FBgfxdisplaytiming.wVActive = gfx_get_vactive(); - pGeode->FBgfxdisplaytiming.wVSyncStart = gfx_get_vsync_start(); - pGeode->FBgfxdisplaytiming.wVSyncEnd = gfx_get_vsync_end(); - pGeode->FBgfxdisplaytiming.wVBlankStart = gfx_get_vblank_start(); - pGeode->FBgfxdisplaytiming.wVBlankEnd = gfx_get_vblank_end(); - pGeode->FBgfxdisplaytiming.wPolarity = gfx_get_sync_polarities(); - - /* Save Display offset */ - pGeode->FBDisplayOffset = gfx_get_display_offset(); - - /* Save the current Compression state */ - pGeode->FBCompressionEnable = gfx_get_compression_enable(); - pGeode->FBCompressionOffset = gfx_get_compression_offset(); - pGeode->FBCompressionPitch = gfx_get_compression_pitch(); - pGeode->FBCompressionSize = gfx_get_compression_size(); - - /* Save Cursor offset */ - pGeode->FBCursorOffset = gfx_get_cursor_offset(); - - /* Save the Panel state */ - Pnl_SavePanelState(); - - /* its time to put softvga to sleep */ - gfx_disable_softvga(); - gfx_vga_mode_switch(1); - -#endif /* STB_X */ - - if (!GeodeSetMode(pScreenInfo, pScreenInfo->currentMode)) { - return FALSE; - } -#if 1 - /* clear the frame buffer, for annoying noise during mode switch */ - clear_screen(pScreenInfo->currentMode->CrtcHDisplay, - pScreenInfo->currentMode->CrtcVDisplay); -#endif - return TRUE; -} - -/*---------------------------------------------------------------------------- - * GeodeLeaveGraphics: - * - * Description :This function will restore the displaymode parameters - * and switches the VGA mode - * - * Parameters. - * pScreen :Screen information will be stored in this structure. - * pScreenInfo :Pointer to the screenInfo structure. - * - * - * Returns :none. - * - * Comments : gfx_vga_mode_switch() will start and end the switching - * based on the arguments 0 or 1.soft_vga is disabled in - * this function. -*---------------------------------------------------------------------------- -*/ -static void -GeodeLeaveGraphics(ScrnInfoPtr pScreenInfo) -{ - GeodePtr pGeode; - - GeodeDebug(("GeodeLeaveGraphics!\n")); - pGeode = GEODEPTR(pScreenInfo); - -#if 1 - /* clear the frame buffer, when leaving X */ - clear_screen(pScreenInfo->virtualX, pScreenInfo->virtualY); -#endif - -#if defined(STB_X) - Gal_set_display_timing(&pGeode->FBgfxdisplaytiming); - Gal_tv_set_timings(0, &pGeode->FBgfxtvtiming); - Gal_set_display_offset(pGeode->FBDisplayOffset); - - /* Restore Panel */ - if (pGeode->PnlParam.PanelPresent == PNL_PANELPRESENT) { - Gal_pnl_restore(); - } - - /* Restore Cursor */ - Gal_set_cursor_position(pGeode->FBCursorOffset, 0, 0, 0, 0); - - /* Restore the previous Compression state */ - if (pGeode->FBCompressionEnable) { - Gal_set_compression_parameters(GAL_COMPRESSION_ALL, - pGeode->FBCompressionOffset, - pGeode->FBCompressionPitch, - pGeode->FBCompressionSize); - - Gal_set_compression_state(GAL_COMPRESSION_ENABLE); - } -#else - GeodeDebug(("GeodeLeaveGraphics(1)!\n")); - /* Restore Panel */ - if (pGeode->PnlParam.PanelPresent == PNL_PANELPRESENT) { - Pnl_RestorePanelState(); - } - - GeodeDebug(("GeodeLeaveGraphics(2)!\n")); - /* Restore TV */ - if (pGeode->FBTVEnabled) { - /* TV Format */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, pGeode->FBtvtiming.HorzTim); - WRITE_VID32(SC1200_TVOUT_HORZ_SYNC, pGeode->FBtvtiming.HorzSync); - WRITE_VID32(SC1200_TVOUT_VERT_SYNC, pGeode->FBtvtiming.VertSync); - WRITE_VID32(SC1200_TVOUT_LINE_END, pGeode->FBtvtiming.LineEnd); - WRITE_VID32(SC1200_TVOUT_VERT_DOWNSCALE, - pGeode->FBtvtiming.VertDownscale); - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, pGeode->FBtvtiming.HorzScaling); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, pGeode->FBtvtiming.TimCtrl1); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, pGeode->FBtvtiming.TimCtrl2); - WRITE_VID32(SC1200_TVENC_SUB_FREQ, pGeode->FBtvtiming.Subfreq); - WRITE_VID32(SC1200_TVENC_DISP_POS, pGeode->FBtvtiming.DispPos); - WRITE_VID32(SC1200_TVENC_DISP_SIZE, pGeode->FBtvtiming.DispSize); - /* TV Output */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, pGeode->FBtvtiming.TimCtrl2); - /* WRITE_VID32(SC1200_TVENC_DAC_CONTROL, tmp); */ - WRITE_VID32(SC1200_TVOUT_DEBUG, pGeode->FBtvtiming.Debug); - /* TV Enable */ - WRITE_VID32(SC1200_TVENC_DAC_CONTROL, pGeode->FBtvtiming.DacCtrl); - } - GeodeDebug(("GeodeLeaveGraphics(3)!\n")); - - /* Restore CRT */ - gfx_set_display_timings(pGeode->FBgfxdisplaytiming.wBpp, - pGeode->FBgfxdisplaytiming.wPolarity, - pGeode->FBgfxdisplaytiming.wHActive, - pGeode->FBgfxdisplaytiming.wHBlankStart, - pGeode->FBgfxdisplaytiming.wHSyncStart, - pGeode->FBgfxdisplaytiming.wHSyncEnd, - pGeode->FBgfxdisplaytiming.wHBlankEnd, - pGeode->FBgfxdisplaytiming.wHTotal, - pGeode->FBgfxdisplaytiming.wVActive, - pGeode->FBgfxdisplaytiming.wVBlankStart, - pGeode->FBgfxdisplaytiming.wVSyncStart, - pGeode->FBgfxdisplaytiming.wVSyncEnd, - pGeode->FBgfxdisplaytiming.wVBlankEnd, - pGeode->FBgfxdisplaytiming.wVTotal, - pGeode->FBgfxdisplaytiming.dwDotClock); - - gfx_set_display_pitch(pGeode->FBgfxdisplaytiming.wPitch); - - GeodeDebug(("GeodeLeaveGraphics(4)!\n")); - gfx_set_display_offset(pGeode->FBDisplayOffset); - GeodeDebug(("GeodeLeaveGraphics(5)!\n")); - - /* Restore Cursor */ - gfx_set_cursor_position(pGeode->FBCursorOffset, 0, 0, 0, 0); - GeodeDebug(("GeodeLeaveGraphics(6)!\n")); - - /* Restore the previous Compression state */ - if (pGeode->FBCompressionEnable) { - gfx_set_compression_offset(pGeode->FBCompressionOffset); - gfx_set_compression_pitch(pGeode->FBCompressionPitch); - gfx_set_compression_size(pGeode->FBCompressionSize); - gfx_set_compression_enable(1); - } - GeodeDebug(("GeodeLeaveGraphics(7)!\n")); -#endif /* STB_X */ - - /* We need this to get back to vga mode when soft-vga - * * kicks in. - * * We actually need to examine the attribute Ctlr to find out - * * what kinda crap (grafix or text) we need to enter in - * * For now just lookout for 720x400 - */ -#if 0 - if ((pGeode->FBgfxdisplaytiming.wHActive == 720) && - (pGeode->FBgfxdisplaytiming.wVActive == 400)) -#else - if (pGeode->FBSoftVGAActive) -#endif - { - /* VSA was active before we started. Since we disabled it - * we got to enable it */ -#if defined(STB_X) - Gal_set_softvga_state(TRUE); - Gal_vga_mode_switch(1); - Gal_vga_clear_extended(); - pGeode->FBgfxVgaRegs.dwFlags = GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC; - Gal_vga_restore(&(pGeode->FBgfxVgaRegs)); - Gal_vga_mode_switch(0); -#else - GeodeDebug(("GeodeLeaveGraphics(8)!\n")); - gfx_enable_softvga(); - GeodeDebug(("GeodeLeaveGraphics(9)!\n")); - gfx_vga_mode_switch(1); - GeodeDebug(("GeodeLeaveGraphics(10)!\n")); - gfx_vga_clear_extended(); - GeodeDebug(("GeodeLeaveGraphics(11)!\n")); - gfx_vga_restore(&(pGeode->FBgfxVgaRegs), - GFX_VGA_FLAG_MISC_OUTPUT | - GFX_VGA_FLAG_STD_CRTC | GFX_VGA_FLAG_EXT_CRTC); - GeodeDebug(("GeodeLeaveGraphics(12)!\n")); - gfx_vga_mode_switch(0); -#endif /* STB_X */ - vgaHWRestore(pScreenInfo, &VGAHWPTR(pScreenInfo)->SavedReg, - VGA_SR_ALL); - GeodeDebug(("GeodeLeaveGraphics(13)!\n")); - } -#if 0 - print_gxm_gfx_reg(pGeode, 0x4C); - print_gxm_vga_reg(); -#endif - GeodeDebug(("GeodeLeaveGraphics Done!\n")); -} - -/*---------------------------------------------------------------------------- - * GeodeCloseScreen. - * - * Description :This function will restore the original mode - * and also it unmap video memory - * - * Parameters. - * ScrnIndex :Screen index value of the screen will be closed. - * pScreen :Pointer to the screen structure. - * - * - * Returns :TRUE on success and FALSE on Failure. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static Bool -GeodeCloseScreen(int scrnIndex, ScreenPtr pScreen) -{ - ScrnInfoPtr pScreenInfo = xf86Screens[scrnIndex]; - GeodePtr pGeode; - - GeodeDebug(("GeodeCloseScreen!\n")); - pGeode = GEODEPTR(pScreenInfo); - /* Shouldn't try to restore graphics, if we're already in textmode */ - if (pScreenInfo->vtSema) - GeodeLeaveGraphics(pScreenInfo); - if (pGeode->AccelInfoRec) - XAADestroyInfoRec(pGeode->AccelInfoRec); - pScreenInfo->vtSema = FALSE; - if (pGeode->DGAModes) - xfree(pGeode->DGAModes); - pGeode->DGAModes = 0; - if (pGeode->ShadowPtr) - xfree(pGeode->ShadowPtr); - if (pGeode->AccelImageWriteBufferOffsets) - xfree(pGeode->AccelImageWriteBufferOffsets); - - GeodeUnmapMem(pScreenInfo); - - pScreen->CloseScreen = pGeode->CloseScreen; - return (*pScreen->CloseScreen) (scrnIndex, pScreen); -} - -#ifdef DPMSExtension -/*---------------------------------------------------------------------------- - * GeodeDPMSet. - * - * Description :This function sets geode into Power Management - * Signalling mode. - * - * Parameters. - * pScreenInfo :Pointer to screen info strucrure. - * mode :Specifies the power management mode. - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static void -GeodeDPMSSet(ScrnInfoPtr pScreenInfo, int mode, int flags) -{ - GeodePtr pGeode; - - pGeode = GEODEPTR(pScreenInfo); - - GeodeDebug(("GeodeDPMSSet!\n")); - - /* Check if we are actively controlling the display */ - if (!pScreenInfo->vtSema) { - ErrorF("GeodeDPMSSet called when we not controlling the VT!\n"); - return; - } - switch (mode) { - case DPMSModeOn: - /* Screen: On; HSync: On; VSync: On */ -#if defined(STB_X) - Gal_set_crt_state(CRT_ENABLE); - if (pGeode->Panel) - Gal_pnl_powerup(); -#else - gfx_set_crt_enable(CRT_ENABLE); - if (pGeode->Panel) - Pnl_PowerUp(); -#endif /* STB_X */ - if (pGeode->TVSupport) - GFX(set_tv_enable(1)); - break; - - case DPMSModeStandby: - /* Screen: Off; HSync: Off; VSync: On */ -#if defined(STB_X) - Gal_set_crt_state(CRT_STANDBY); - if (pGeode->Panel) - Gal_pnl_powerdown(); -#else - gfx_set_crt_enable(CRT_STANDBY); - if (pGeode->Panel) - Pnl_PowerDown(); -#endif /* STB_X */ - if (pGeode->TVSupport) - GFX(set_tv_enable(0)); - break; - - case DPMSModeSuspend: - /* Screen: Off; HSync: On; VSync: Off */ -#if defined(STB_X) - Gal_set_crt_state(CRT_SUSPEND); - if (pGeode->Panel) - Gal_pnl_powerdown(); -#else - gfx_set_crt_enable(CRT_SUSPEND); - if (pGeode->Panel) - Pnl_PowerDown(); -#endif /* STB_X */ - if (pGeode->TVSupport) - GFX(set_tv_enable(0)); - break; - case DPMSModeOff: - /* Screen: Off; HSync: Off; VSync: Off */ -#if defined(STB_X) - Gal_set_crt_state(CRT_DISABLE); - if (pGeode->Panel) - Gal_pnl_powerdown(); -#else - gfx_set_crt_enable(CRT_DISABLE); - if (pGeode->Panel) - Pnl_PowerDown(); -#endif /* STB_X */ - if (pGeode->TVSupport) - GFX(set_tv_enable(0)); - break; - } -} -#endif - -/*---------------------------------------------------------------------------- - * GeodeScreenInit. - * - * Description :This function will be called at the each ofserver - * generation. - * - * Parameters. - * scrnIndex :Specfies the screenindex value during generation. - * pScreen :Pointer to screen info strucrure. - * argc :parameters for command line arguments count - * argv :command line arguments if any it is not used. - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static Bool -GeodeScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) -{ - ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum]; - GeodePtr pGeode; - int i; - unsigned char *FBStart; - unsigned int req_offscreenmem; - int width, height, displayWidth; - VisualPtr visual; - - GeodeDebug(("GeodeScreenInit!\n")); - - /* Get driver private */ - pGeode = GeodeGetRec(pScreenInfo); - GeodeDebug(("GeodeScreenInit(0)!\n")); - - /* - * * Allocate a vgaHWRec - */ - if (!vgaHWGetHWRec(pScreenInfo)) - return FALSE; - VGAHWPTR(pScreenInfo)->MapSize = 0x10000; /* Standard 64k VGA window */ - if (!vgaHWMapMem(pScreenInfo)) - return FALSE; - - if (!GeodeMapMem(pScreenInfo)) - return FALSE; - - vgaHWGetIOBase(VGAHWPTR(pScreenInfo)); - pGeode->Pitch = GeodeCalculatePitchBytes(pScreenInfo); - - /* find the index to our operating mode the offsets are located */ - for (i = 0; i < (sizeof(GeodeMemOffset) / sizeof(MemOffset)); i++) { - if ((pScreenInfo->virtualX == GeodeMemOffset[i].xres) && - (pScreenInfo->virtualY == GeodeMemOffset[i].yres) && - (pScreenInfo->bitsPerPixel == GeodeMemOffset[i].bpp)) { - MemIndex = i; - break; - } - } - if (MemIndex == -1) /* no match */ - return FALSE; - pGeode->CursorSize = 8 * 32; /* 32 DWORDS */ - - /* Compute cursor buffer */ - if (pGeode->Compression) { - pGeode->CursorStartOffset = GeodeMemOffset[MemIndex].CurOffset; - } else { - /* Default cursor offset, end of the frame buffer */ - pGeode->CursorStartOffset = pGeode->FBSize - pGeode->CursorSize; - } - - if (pGeode->HWCursor) { - if ((pGeode->CursorStartOffset + pGeode->CursorSize) > pGeode->FBSize) { - /* Not enough memory for HW cursor disable it */ - pGeode->HWCursor = FALSE; - pGeode->CursorSize = 0; - DEBUGMSG(1, (scrnIndex, X_ERROR, - "Not enough memory for HW cursor. HW cursor disabled.\n")); - } else { - DEBUGMSG(1, (scrnIndex, X_PROBED, - "HW cursor offset: 0x%08lX (%d bytes allocated)\n", - pGeode->CursorStartOffset, pGeode->CursorSize)); - } - } else { - pGeode->CursorSize = 0; - } - - /* set the offscreen offset accordingly */ - if (pGeode->Compression) { - pGeode->OffscreenStartOffset = - (GeodeMemOffset[MemIndex].OffScreenOffset + pGeode->Pitch - 1) - & (~(pGeode->Pitch - 1)); - pGeode->OffscreenSize = pGeode->FBSize - pGeode->OffscreenStartOffset; - } else { - pGeode->OffscreenStartOffset = pGeode->Pitch * pScreenInfo->virtualY; - pGeode->OffscreenSize = pGeode->FBSize - - pGeode->OffscreenStartOffset - pGeode->CursorSize; - } - - if (pGeode->OffscreenSize < 0) - pGeode->OffscreenSize = 0; - if ((pGeode->OffscreenStartOffset + pGeode->OffscreenSize) > - pGeode->FBSize) { - pGeode->OffscreenSize = 0; - DEBUGMSG(1, (scrnIndex, X_ERROR, "No offscreen memory available.\n")); - } else { - DEBUGMSG(1, (scrnIndex, X_PROBED, - "Offscreen memory offset: 0x%08lX (0x%08lX bytes available)\n", - pGeode->OffscreenStartOffset, pGeode->OffscreenSize)); - } - - /* XAA Image Write support needs two entire line buffers. */ - req_offscreenmem = pGeode->NoOfImgBuffers * pGeode->Pitch; - pGeode->AccelImageWriteBufferOffsets = NULL; - if (req_offscreenmem > pGeode->OffscreenSize) { - DEBUGMSG(1, (scrnIndex, X_PROBED, - "Offscreen memory not adequate for acceleration\n")); - } else { - pGeode->OffscreenSize -= req_offscreenmem; - pGeode->AccelImageWriteBufferOffsets = - xalloc(sizeof(unsigned long) * pGeode->NoOfImgBuffers); - - pGeode->AccelImageWriteBufferOffsets[0] = (unsigned char *)(((unsigned - long) - pGeode-> - FBBase) + - pGeode-> - OffscreenStartOffset); - - for (i = 1; i < pGeode->NoOfImgBuffers; i++) { - pGeode->AccelImageWriteBufferOffsets[i] = - pGeode->AccelImageWriteBufferOffsets[i - 1] + pGeode->Pitch; - } - - for (i = 0; i < pGeode->NoOfImgBuffers; i++) { - DEBUGMSG(0, (scrnIndex, X_PROBED, - "memory %x %x\n", pGeode->FBBase, - pGeode->AccelImageWriteBufferOffsets[i])); - } - } - - /* Initialise graphics mode */ - if (!GeodeEnterGraphics(pScreen, pScreenInfo)) - return FALSE; - - GeodeAdjustFrame(scrnIndex, pScreenInfo->frameX0, pScreenInfo->frameY0, 0); - GeodeDebug(("GeodeScreenInit(1)!\n")); - - /* Reset visual list */ - miClearVisualTypes(); - GeodeDebug(("GeodeScreenInit(2)!\n")); - - /* Setup the visual we support */ - if (pScreenInfo->bitsPerPixel > 8) { - if (!miSetVisualTypes(pScreenInfo->depth, - TrueColorMask, - pScreenInfo->rgbBits, - pScreenInfo->defaultVisual)) { - return FALSE; - } - } else { - if (!miSetVisualTypes(pScreenInfo->depth, - miGetDefaultVisualMask(pScreenInfo->depth), - pScreenInfo->rgbBits, - pScreenInfo->defaultVisual)) { - return FALSE; - } - } - GeodeDebug(("GeodeScreenInit(3)!\n")); - - /* Set this for RENDER extension */ - miSetPixmapDepths(); - - /* Call the framebuffer layer's ScreenInit function, and fill in other - * * pScreen fields. - */ - - if (pGeode->TV_Overscan_On) { - width = pGeode->TVOw; - height = pGeode->TVOh; - GeodeDebug(("width : %d , height : %d", width, height)); - } else { - width = pScreenInfo->virtualX; - height = pScreenInfo->virtualY; - } - - displayWidth = pScreenInfo->displayWidth; - if (pGeode->Rotate) { - if (pGeode->TV_Overscan_On) { - width = pGeode->TVOh; - height = pGeode->TVOw; - } else { - width = pScreenInfo->virtualY; - height = pScreenInfo->virtualX; - } - } - if (pGeode->ShadowFB) { - pGeode->ShadowPitch = BitmapBytePad(pScreenInfo->bitsPerPixel * width); - pGeode->ShadowPtr = xalloc(pGeode->ShadowPitch * height); - displayWidth = pGeode->ShadowPitch / (pScreenInfo->bitsPerPixel >> 3); - FBStart = pGeode->ShadowPtr; - } else { - pGeode->ShadowPtr = NULL; - - if (pGeode->TV_Overscan_On) { - GeodeDebug(("pGeode->Pitch (%d)!\n", pGeode->Pitch)); - FBStart = pGeode->FBBase + (pGeode->Pitch * pGeode->TVOy) + - (pGeode->TVOx << ((pScreenInfo->depth >> 3) - 1)); - } else { - FBStart = pGeode->FBBase; - } - DEBUGMSG(1, (0, X_PROBED, "FBStart %X \n", FBStart)); - } - - /* Initialise the framebuffer */ - switch (pScreenInfo->depth) { - case 8: - case 16: - if (!fbScreenInit(pScreen, FBStart, width, height, - pScreenInfo->xDpi, pScreenInfo->yDpi, - displayWidth, pScreenInfo->bitsPerPixel)) - return FALSE; - break; - default: - DEBUGMSG(1, (scrnIndex, X_ERROR, - "Internal error: invalid bpp (%d) " - "in GeodeScreenInit. Geode only supports 8 and 16 bpp.\n", - pScreenInfo->bitsPerPixel)); - return FALSE; - } - GeodeDebug(("GeodeScreenInit(4)!\n")); - xf86SetBlackWhitePixels(pScreen); - - if (!pGeode->ShadowFB && (!pGeode->TV_Overscan_On)) { - GeodeDGAInit(pScreen); - } - GeodeDebug(("GeodeScreenInit(5)!\n")); - if (pScreenInfo->bitsPerPixel > 8) { - /* Fixup RGB ordering */ - visual = pScreen->visuals + pScreen->numVisuals; - while (--visual >= pScreen->visuals) { - if ((visual->class | DynamicClass) == DirectColor) { - visual->offsetRed = pScreenInfo->offset.red; - visual->offsetGreen = pScreenInfo->offset.green; - visual->offsetBlue = pScreenInfo->offset.blue; - visual->redMask = pScreenInfo->mask.red; - visual->greenMask = pScreenInfo->mask.green; - visual->blueMask = pScreenInfo->mask.blue; - } - } - } - - /* must be after RGB ordering fixed */ - fbPictureInit(pScreen, 0, 0); - - GeodeDebug(("GeodeScreenInit(6)!\n")); - if (!pGeode->NoAccel) { - GeodeAccelInit(pScreen); - } - GeodeDebug(("GeodeScreenInit(7)!\n")); - miInitializeBackingStore(pScreen); - xf86SetBackingStore(pScreen); - GeodeDebug(("GeodeScreenInit(8)!\n")); - /* Initialise software cursor */ - miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); - /* Initialize HW cursor layer. - * * Must follow software cursor initialization - */ - if (pGeode->HWCursor) { - if (!GeodeHWCursorInit(pScreen)) - DEBUGMSG(1, (pScreenInfo->scrnIndex, X_ERROR, - "Hardware cursor initialization failed\n")); - } - GeodeDebug(("GeodeScreenInit(9)!\n")); - /* Setup default colourmap */ - if (!miCreateDefColormap(pScreen)) { - return FALSE; - } - GeodeDebug(("GeodeScreenInit(10)!\n")); - /* Initialize colormap layer. - * * Must follow initialization of the default colormap - */ - if (!xf86HandleColormaps(pScreen, 256, 8, - GeodeLoadPalette, NULL, - CMAP_PALETTED_TRUECOLOR | - CMAP_RELOAD_ON_MODE_SWITCH)) { - return FALSE; - } - GeodeDebug(("GeodeScreenInit(11)!\n")); - - if (pGeode->ShadowFB) { - RefreshAreaFuncPtr refreshArea = GeodeRefreshArea; - - if (pGeode->Rotate) { - if (!pGeode->PointerMoved) { - pGeode->PointerMoved = pScreenInfo->PointerMoved; - pScreenInfo->PointerMoved = GeodePointerMoved; - } - switch (pScreenInfo->bitsPerPixel) { - case 8: - refreshArea = GeodeRefreshArea8; - break; - case 16: - refreshArea = GeodeRefreshArea16; - break; - } - } - ShadowFBInit(pScreen, refreshArea); - } -#ifdef DPMSExtension - xf86DPMSInit(pScreen, GeodeDPMSSet, 0); -#endif - GeodeDebug(("GeodeScreenInit(12)!\n")); - - if (pGeode->TV_Overscan_On) { - GeodeDebug(("pGeode->Pitch (%d)!\n", pGeode->Pitch)); - - pScreenInfo->memPhysBase = (unsigned long)(pGeode->FBBase + - (pGeode->Pitch * - pGeode->TVOy) + - (pGeode-> - TVOx << - ((pScreenInfo->depth >> 3) - - 1))); - GeodeDebug(("->memPhysBase (%X)!\n", pScreenInfo->memPhysBase)); - } else { - pScreenInfo->memPhysBase = (unsigned long)pGeode->FBBase; - } - pScreenInfo->fbOffset = 0; - - GeodeDebug(("GeodeScreenInit(13)!\n")); - GeodeInitVideo(pScreen); /* needed for video */ - /* Wrap the screen's CloseScreen vector and set its - * SaveScreen vector - */ - pGeode->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = GeodeCloseScreen; - pScreen->SaveScreen = GeodeSaveScreen; - GeodeDebug(("GeodeScreenInit(14)!\n")); - /* Report any unused options */ - if (serverGeneration == 1) { - xf86ShowUnusedOptions(pScreenInfo->scrnIndex, pScreenInfo->options); - } - return TRUE; -} - -/*---------------------------------------------------------------------------- - * GeodeSwitchMode. - * - * Description :This function will switches the screen mode - * - * Parameters: - * scrnIndex :Specfies the screen index value. - * pMode :pointer to the mode structure. - * flags :may be used for status check?. - * - * Returns :Returns TRUE on success and FALSE on failure. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -Bool -GeodeSwitchMode(int scrnIndex, DisplayModePtr pMode, int flags) -{ - GeodeDebug(("GeodeSwitchMode!\n")); - return GeodeSetMode(xf86Screens[scrnIndex], pMode); -} - -/*---------------------------------------------------------------------------- - * GeodeAdjustFrame. - * - * Description :This function is used to intiallize the start - * address of the memory. - * Parameters. - * scrnIndex :Specfies the screen index value. - * x :x co-ordinate value interms of pixels. - * y :y co-ordinate value interms of pixels. - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -void -GeodeAdjustFrame(int scrnIndex, int x, int y, int flags) -{ - ScrnInfoPtr pScreenInfo = xf86Screens[scrnIndex]; - GeodePtr pGeode; - unsigned long offset; - - pGeode = GeodeGetRec(pScreenInfo); - offset = (unsigned long)y *(unsigned long)pGeode->Pitch; - - offset += x; - if (pScreenInfo->bitsPerPixel > 8) { - offset += x; - } - GFX(set_display_offset(offset)); -} - -/*---------------------------------------------------------------------------- - * GeodeEnterVT. - * - * Description :This is called when VT switching back to the X server - * - * Parameters. - * scrnIndex :Specfies the screen index value. - * flags :Not used inside the function. - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static Bool -GeodeEnterVT(int scrnIndex, int flags) -{ - GeodeDebug(("GeodeEnterVT!\n")); - return GeodeEnterGraphics(NULL, xf86Screens[scrnIndex]); -} - -/*---------------------------------------------------------------------------- - * GeodeLeaveVT. - * - * Description :This is called when VT switching X server text mode. - * - * Parameters. - * scrnIndex :Specfies the screen index value. - * flags :Not used inside the function. - * - * Returns :none. - * - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static void -GeodeLeaveVT(int scrnIndex, int flags) -{ - GeodeDebug(("GeodeLeaveVT!\n")); - GeodeLeaveGraphics(xf86Screens[scrnIndex]); -} - -/*---------------------------------------------------------------------------- - * GeodeFreeScreen. - * - * Description :This is called to free any persistent data structures. - * - * Parameters. - * scrnIndex :Specfies the screen index value. - * flags :Not used inside the function. - * - * Returns :none. - * - * Comments :This will be called only when screen being deleted.. -*---------------------------------------------------------------------------- -*/ -static void -GeodeFreeScreen(int scrnIndex, int flags) -{ - GeodeDebug(("GeodeFreeScreen!\n")); - if (xf86LoaderCheckSymbol("vgaHWFreeHWRec")) - vgaHWFreeHWRec(xf86Screens[scrnIndex]); - GeodeFreeRec(xf86Screens[scrnIndex]); -} - -/*---------------------------------------------------------------------------- - * GeodeValidMode. - * - * Description :This function checks if a mode is suitable for selected - * chipset. - * Parameters. - * scrnIndex :Specfies the screen index value. - * pMode :Pointer to the screen mode structure.. - * verbose :not used for implementation. - * flags :not used for implementation - * - * Returns :MODE_OK if the specified mode is supported or - * MODE_NO_INTERLACE. - * Comments :none. -*---------------------------------------------------------------------------- -*/ -static int -GeodeValidMode(int scrnIndex, DisplayModePtr pMode, Bool Verbose, int flags) -{ - ScrnInfoPtr pScreenInfo = xf86Screens[scrnIndex]; - int ret = -1; - GeodePtr pGeode; - - pGeode = GeodeGetRec(pScreenInfo); - DEBUGMSG(0, (0, X_NONE, "GeodeValidateMode: %dx%d %d %d\n", - pMode->CrtcHDisplay, pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, GeodeGetRefreshRate(pMode))); - if (pGeode->TVSupport == TRUE) { - if ((pGeode->TvParam.wWidth == pMode->CrtcHDisplay) && - (pGeode->TvParam.wHeight == pMode->CrtcVDisplay)) { - DEBUGMSG(0, (0, X_NONE, "TV mode")); -#if defined(STB_X) - Gal_is_tv_mode_supported(0, &(pGeode->TvParam), &ret); -#else - ret = gfx_is_tv_display_mode_supported(pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pGeode->TvParam.wStandard); -#endif - } - } else { - DEBUGMSG(0, (0, X_NONE, "CRT mode")); - if (pMode->Flags & V_INTERLACE) - return MODE_NO_INTERLACE; -#if defined(STB_X) - Gal_is_display_mode_supported(pMode->CrtcHDisplay, pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, - GeodeGetRefreshRate(pMode), &ret); -#else - ret = gfx_is_display_mode_supported(pMode->CrtcHDisplay, - pMode->CrtcVDisplay, - pScreenInfo->bitsPerPixel, - GeodeGetRefreshRate(pMode)); -#endif /* STB_X */ - } - - DEBUGMSG(0, (0, X_NONE, "ret = %d\n", ret)); - if (ret == -1) { /* mode not supported */ - return MODE_NO_INTERLACE; - } - - return MODE_OK; -} - -/*---------------------------------------------------------------------------- - * GeodeLoadPalette. - * - * Description :This function sets the palette entry used for graphics data - * - * Parameters. - * pScreenInfo:Points the screeninfo structure. - * numColors:Specifies the no of colors it supported. - * indizes :This is used get index value . - * LOCO :to be added. - * pVisual :to be added. - * - * Returns :MODE_OK if the specified mode is supported or - * MODE_NO_INTERLACE. - * Comments :none. -*---------------------------------------------------------------------------- -*/ - -static void -GeodeLoadPalette(ScrnInfoPtr pScreenInfo, - int numColors, int *indizes, LOCO * colors, - VisualPtr pVisual) -{ - int i, index, color; - - for (i = 0; i < numColors; i++) { - index = indizes[i] & 0xFF; - color = (((unsigned long)(colors[index].red & 0xFF)) << 16) | - (((unsigned long)(colors[index].green & 0xFF)) << 8) | - ((unsigned long)(colors[index].blue & 0xFF)); - DEBUGMSG(0, (0, X_NONE, "GeodeLoadPalette: %d %d %X\n", - numColors, index, color)); - GFX(set_display_palette_entry(index, color)); - } -} - -static Bool -GeodeMapMem(ScrnInfoPtr pScreenInfo) -{ - GeodePtr pGeode = GEODEPTR(pScreenInfo); - -#if defined(STB_X) - pGeode->FBBase = (unsigned char *)xf86MapVidMem(pScreenInfo->scrnIndex, - VIDMEM_FRAMEBUFFER, - pGeode->FBLinearAddr, - pGeode->FBSize); - -#else - /* SET DURANGO REGISTER POINTERS - * * The method of mapping from a physical address to a linear address - * * is operating system independent. Set variables to linear address. - */ - gfx_virt_regptr = (unsigned char *)xf86MapVidMem(pScreenInfo->scrnIndex, - VIDMEM_MMIO, - (unsigned int) - gfx_get_cpu_register_base - (), 0x9000); - gfx_virt_spptr = gfx_virt_regptr; - gfx_virt_vidptr = (unsigned char *)xf86MapVidMem(pScreenInfo->scrnIndex, - VIDMEM_MMIO, - (unsigned int) - gfx_get_vid_register_base - (), 0x1000); - gfx_virt_fbptr = - (unsigned char *)xf86MapVidMem(pScreenInfo->scrnIndex, - VIDMEM_FRAMEBUFFER, - pGeode->FBLinearAddr, pGeode->FBSize); - - /* CHECK IF REGISTERS WERE MAPPED SUCCESSFULLY */ - if ((!gfx_virt_regptr) || - (!gfx_virt_spptr) || (!gfx_virt_vidptr) || (!gfx_virt_fbptr)) { - DEBUGMSG(1, (0, X_NONE, "Could not map hardware registers.\n")); - return (FALSE); - } - - /* Map the XpressROM ptr to read what platform are we on */ - XpressROMPtr = (unsigned char *)xf86MapVidMem(pScreenInfo->scrnIndex, - VIDMEM_FRAMEBUFFER, 0xF0000, - 0x10000); - - if (!XpressROMPtr) - return FALSE; - - pGeode->FBBase = gfx_virt_fbptr; -#endif - - return TRUE; -} - -/* - * Unmap the framebuffer and MMIO memory. - */ - -static Bool -GeodeUnmapMem(ScrnInfoPtr pScreenInfo) -{ - GeodePtr pGeode = GEODEPTR(pScreenInfo); - -#if !defined(STB_X) - /* unmap all the memory map's */ - xf86UnMapVidMem(pScreenInfo->scrnIndex, gfx_virt_regptr, 0x9000); - xf86UnMapVidMem(pScreenInfo->scrnIndex, gfx_virt_vidptr, 0x1000); - xf86UnMapVidMem(pScreenInfo->scrnIndex, gfx_virt_fbptr, pGeode->FBSize); - xf86UnMapVidMem(pScreenInfo->scrnIndex, XpressROMPtr, 0x10000); -#endif /* STB_X */ - - return TRUE; -} - -/* End of file */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_fourcc.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_fourcc.h deleted file mode 100644 index f4475dc0c..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_fourcc.h +++ /dev/null @@ -1,199 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_fourcc.h,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_fourcc.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file consists of main Xfree video macro definitions. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#define FOURCC_Y2YU 0x55593259 -#define XVIMAGE_Y2YU \ - { \ - FOURCC_Y2YU, \ - XvYUV, \ - LSBFirst, \ - {'Y','2','Y','U', \ - 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71}, \ - 16, \ - XvPacked, \ - 1, \ - 0, 0, 0, 0, \ - 8, 8, 8, \ - 1, 2, 2, \ - 1, 1, 1, \ - {'Y','V','Y','U', \ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, \ - XvTopToBottom \ - } - -#define FOURCC_YVYU 0x55595659 -#define XVIMAGE_YVYU \ - { \ - FOURCC_YVYU, \ - XvYUV, \ - LSBFirst, \ - {'Y','V','Y','U', \ - 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71}, \ - 16, \ - XvPacked, \ - 1, \ - 0, 0, 0, 0, \ - 8, 8, 8, \ - 1, 2, 2, \ - 1, 1, 1, \ - {'Y','V','Y','U', \ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, \ - XvTopToBottom \ - } - -#define FOURCC_Y800 0x30303859 -#define XVIMAGE_Y800 \ - { \ - FOURCC_Y800, \ - XvYUV, \ - LSBFirst, \ - {'Y','8','0','0', \ - 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71}, \ - 8, \ - XvPacked, \ - 1, \ - 0, 0, 0, 0, \ - 8, 0, 0, \ - 1, 0, 0, \ - 1, 0, 0, \ - {'Y','8','0','0', \ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, \ - XvTopToBottom \ - } diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_shadow.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_shadow.c deleted file mode 100644 index bf5398f9b..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_shadow.c +++ /dev/null @@ -1,454 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_shadow.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_shadow.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: Direct graphics display routines are implemented and - * graphics rendering are all done in memory. - * - * Project: Geode Xfree Frame buffer device driver. - * - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86Resources.h" -#include "xf86_ansic.h" -#include "xf86PciInfo.h" -#include "xf86Pci.h" -#include "geode.h" -#include "shadowfb.h" -#include "servermd.h" - -/*---------------------------------------------------------------------------- - * GeodeRefreshArea. - * - * Description :This function copies the memory to be displayed from the - * shadow pointer. - * Parameters. - * pScrn :Pointer to screen structure. - * num :Specifies the num of squarebox area to be displayed. - * pbox :Points to square of memory to be displayed. - * Returns :none - * - * Comments : none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - int width, height, Bpp, FBPitch; - unsigned char *src, *dst; - - Bpp = pScrn->bitsPerPixel >> 3; - FBPitch = BitmapBytePad(pScrn->displayWidth * pScrn->bitsPerPixel); - while (num--) { - width = (pbox->x2 - pbox->x1) * Bpp; - height = pbox->y2 - pbox->y1; - src = pGeode->ShadowPtr + (pbox->y1 * pGeode->ShadowPitch) + - (pbox->x1 * Bpp); - dst = pGeode->FBBase + (pbox->y1 * FBPitch) + (pbox->x1 * Bpp); - while (height--) { - memcpy(dst, src, width); - dst += FBPitch; - src += pGeode->ShadowPitch; - } - - pbox++; - } -} - -/*---------------------------------------------------------------------------- - * GeodePointerMoved. - * - * Description :This function moves one screen memory from one area to other. - * - * Parameters. - * index :Pointer to screen index. - * x :Specifies the new x co-ordinates of new area. - * y :Specifies the new y co-ordinates of new area. - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodePointerMoved(int index, int x, int y) -{ - ScrnInfoPtr pScrn = xf86Screens[index]; - GeodePtr pGeode = GEODEPTR(pScrn); - int newX, newY; - - if (pGeode->Rotate == 1) { - newX = pScrn->pScreen->height - y - 1; - newY = x; - } else { - newX = y; - newY = pScrn->pScreen->width - x - 1; - } - (*pGeode->PointerMoved) (index, newX, newY); -} - -/*---------------------------------------------------------------------------- - * GeodeRefreshArea8. - * - * Description :This function copies the memory to be displayed from the - * shadow pointer by 8bpp. - * Parameters. - * pScrn :Pointer to screen structure. - * num :Specifies the num of squarebox area to be displayed. - * pbox :Points to square of memory to be displayed. - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - int count, width, height, y1, y2, dstPitch, srcPitch; - CARD8 *dstPtr, *srcPtr, *src; - CARD32 *dst; - - dstPitch = pScrn->displayWidth; - srcPitch = -pGeode->Rotate * pGeode->ShadowPitch; - while (num--) { - width = pbox->x2 - pbox->x1; - y1 = pbox->y1 & ~3; - y2 = (pbox->y2 + 3) & ~3; - height = (y2 - y1) >> 2; /* in dwords */ - - if (pGeode->Rotate == 1) { - dstPtr = pGeode->FBBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - y2; - srcPtr = pGeode->ShadowPtr + ((1 - y2) * srcPitch) + pbox->x1; - } else { - dstPtr = pGeode->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; - srcPtr = pGeode->ShadowPtr + (y1 * srcPitch) + pbox->x2 - 1; - } - while (width--) { - src = srcPtr; - dst = (CARD32 *) dstPtr; - count = height; - while (count--) { - *(dst++) = src[0] | (src[srcPitch] << 8) | - (src[srcPitch * 2] << 16) | (src[srcPitch * 3] << 24); - src += srcPitch * 4; - } - srcPtr += pGeode->Rotate; - dstPtr += dstPitch; - } - pbox++; - } -} - -/*---------------------------------------------------------------------------- - * GeodeRefreshArea16. - * - * Description :This function copies the memory to be displayed from the - * shadow pointer by 16bpp. - * Parameters: - * pScrn :Pointer to screen structure. - * num :Specifies the num of squarebox area to be displayed. - * pbox :Points to square of memory to be displayed. - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - int count, width, height, y1, y2, dstPitch, srcPitch; - CARD16 *dstPtr, *srcPtr, *src; - CARD32 *dst; - - dstPitch = pScrn->displayWidth; - srcPitch = -pGeode->Rotate * pGeode->ShadowPitch >> 1; - while (num--) { - width = pbox->x2 - pbox->x1; - y1 = pbox->y1 & ~1; - y2 = (pbox->y2 + 1) & ~1; - height = (y2 - y1) >> 1; /* in dwords */ - if (pGeode->Rotate == 1) { - dstPtr = (CARD16 *) pGeode->FBBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - y2; - srcPtr = (CARD16 *) pGeode->ShadowPtr + - ((1 - y2) * srcPitch) + pbox->x1; - } else { - dstPtr = (CARD16 *) pGeode->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + y1; - srcPtr = (CARD16 *) pGeode->ShadowPtr + - (y1 * srcPitch) + pbox->x2 - 1; - } - - while (width--) { - src = srcPtr; - dst = (CARD32 *) dstPtr; - count = height; - while (count--) { - *(dst++) = src[0] | (src[srcPitch] << 16); - src += srcPitch * 2; - } - srcPtr += pGeode->Rotate; - dstPtr += dstPitch; - } - - pbox++; - } -} - -/*---------------------------------------------------------------------------- - * GeodeRefreshArea24. - * - * Description :This function copies the memory to be displayed from the - * shadow pointer by 24bpp. - * Parameters. - * pScrn :Pointer to screen structure. - * num :Specifies the num of squarebox area to be displayed. - * pbox :Points to square of memory to be displayed. - * Returns :none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - int count, width, height, y1, y2, dstPitch, srcPitch; - CARD8 *dstPtr, *srcPtr, *src; - CARD32 *dst; - - dstPitch = BitmapBytePad(pScrn->displayWidth * 24); - srcPitch = -pGeode->Rotate * pGeode->ShadowPitch; - while (num--) { - width = pbox->x2 - pbox->x1; - y1 = pbox->y1 & ~3; - y2 = (pbox->y2 + 3) & ~3; - height = (y2 - y1) >> 2; /* blocks of 3 dwords */ - if (pGeode->Rotate == 1) { - dstPtr = pGeode->FBBase + - (pbox->x1 * dstPitch) + ((pScrn->virtualX - y2) * 3); - srcPtr = pGeode->ShadowPtr + ((1 - y2) * srcPitch) + (pbox->x1 * 3); - } else { - dstPtr = pGeode->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + (y1 * 3); - srcPtr = pGeode->ShadowPtr + (y1 * srcPitch) + (pbox->x2 * 3) - 3; - } - while (width--) { - src = srcPtr; - dst = (CARD32 *) dstPtr; - count = height; - while (count--) { - dst[0] = src[0] | (src[1] << 8) | (src[2] << 16) | - (src[srcPitch] << 24); - dst[1] = src[srcPitch + 1] | (src[srcPitch + 2] << 8) | - (src[srcPitch * 2] << 16) | (src[(srcPitch * 2) + 1] << 24); - dst[2] = src[(srcPitch * 2) + 2] | (src[srcPitch * 3] << 8) | - (src[(srcPitch * 3) + 1] << 16) | - (src[(srcPitch * 3) + 2] << 24); - dst += 3; - src += srcPitch * 4; - } - srcPtr += pGeode->Rotate * 3; - dstPtr += dstPitch; - } - pbox++; - } -} - -/*---------------------------------------------------------------------------- - * GeodeRefreshArea32. - * - * Description :This function copies the memory to be displayed from the - * shadow pointer by 32bpp. - * Parameters: - * pScrn :Pointer to screen structure. - * num :Specifies the num of squarebox area to be displayed. - * pbox :Points to square of memory to be displayed. - * Returns : none - * - * Comments :none - * -*---------------------------------------------------------------------------- -*/ -void -GeodeRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - int count, width, height, dstPitch, srcPitch; - CARD32 *dstPtr, *srcPtr, *src, *dst; - - dstPitch = pScrn->displayWidth; - srcPitch = -pGeode->Rotate * pGeode->ShadowPitch >> 2; - while (num--) { - width = pbox->x2 - pbox->x1; - height = pbox->y2 - pbox->y1; - - if (pGeode->Rotate == 1) { - dstPtr = (CARD32 *) pGeode->FBBase + - (pbox->x1 * dstPitch) + pScrn->virtualX - pbox->y2; - srcPtr = (CARD32 *) pGeode->ShadowPtr + - ((1 - pbox->y2) * srcPitch) + pbox->x1; - } else { - dstPtr = (CARD32 *) pGeode->FBBase + - ((pScrn->virtualY - pbox->x2) * dstPitch) + pbox->y1; - srcPtr = (CARD32 *) pGeode->ShadowPtr + - (pbox->y1 * srcPitch) + pbox->x2 - 1; - } - while (width--) { - src = srcPtr; - dst = dstPtr; - count = height; - while (count--) { - *(dst++) = *src; - src += srcPitch; - } - srcPtr += pGeode->Rotate; - dstPtr += dstPitch; - } - pbox++; - } -} - -/* End of file */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_video.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_video.c deleted file mode 100644 index eb3121bf2..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/geode_video.c +++ /dev/null @@ -1,1220 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/geode_video.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: geode_video.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file consists of main Xfree video supported routines. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode Xfree frame buffer driver - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Geode Xfree frame buffer driver - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Geode Xfree frame buffer driver - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* - * Fixes & Extensions to support Y800 greyscale modes - * Alan Hourihane <alanh@fairlite.demon.co.uk> - */ - -#include "xf86.h" -#include "xf86_OSproc.h" -#include "xf86Resources.h" -#include "xf86_ansic.h" -#include "compiler.h" -#include "xf86PciInfo.h" -#include "xf86Pci.h" -#include "xf86fbman.h" -#include "regionstr.h" - -#include "geode.h" -#include "Xv.h" -#include "xaa.h" -#include "xaalocal.h" -#include "dixstruct.h" -#include "fourcc.h" -#include "geode_fourcc.h" - -#define OFF_DELAY 200 /* milliseconds */ -#define FREE_DELAY 60000 - -#define OFF_TIMER 0x01 -#define FREE_TIMER 0x02 -#define CLIENT_VIDEO_ON 0x04 - -#define TIMER_MASK (OFF_TIMER | FREE_TIMER) - -#ifndef XvExtension -void -GeodeInitVideo(ScreenPtr pScreen) -{ -} - -void -GeodeResetVideo(ScrnInfoPtr pScrn) -{ -} -#else - -void GeodeInitVideo(ScreenPtr pScreen); -void GeodeResetVideo(ScrnInfoPtr pScrn); -static XF86VideoAdaptorPtr GeodeSetupImageVideo(ScreenPtr); -static void GeodeInitOffscreenImages(ScreenPtr); -static void GeodeStopVideo(ScrnInfoPtr, pointer, Bool); -static int GeodeSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer); -static int GeodeGetPortAttribute(ScrnInfoPtr, Atom, INT32 *, pointer); -static void GeodeQueryBestSize(ScrnInfoPtr, Bool, - short, short, short, short, unsigned int *, - unsigned int *, pointer); -static int GeodePutImage(ScrnInfoPtr, short, short, short, short, short, - short, short, short, int, unsigned char *, short, - short, Bool, RegionPtr, pointer); -static int GeodeQueryImageAttributes(ScrnInfoPtr, int, unsigned short *, - unsigned short *, int *, int *); - -static void GeodeBlockHandler(int, pointer, pointer, pointer); - -extern void GeodeAccelSync(ScrnInfoPtr pScreenInfo); - -#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) - -#define DBUF 0 - -static Atom xvColorKey, xvColorKeyMode, xvFilter -#if DBUF - , xvDoubleBuffer -#endif - ; - -void -GeodeInitVideo(ScreenPtr pScreen) -{ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL; - XF86VideoAdaptorPtr newAdaptor = NULL; - GeodePtr pGeode = GEODEPTR(pScrn); - int num_adaptors; - - DEBUGMSG(0, (0, X_NONE, "InitVideo\n")); - - if (pGeode->HWVideo) { - newAdaptor = GeodeSetupImageVideo(pScreen); - GeodeInitOffscreenImages(pScreen); - } - - num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors); - - if (newAdaptor) { - if (!num_adaptors) { - num_adaptors = 1; - adaptors = &newAdaptor; - } else { - newAdaptors = /* need to free this someplace */ - xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr *)); - if (newAdaptors) { - memcpy(newAdaptors, adaptors, num_adaptors * - sizeof(XF86VideoAdaptorPtr)); - newAdaptors[num_adaptors] = newAdaptor; - adaptors = newAdaptors; - num_adaptors++; - } - } - } - - if (num_adaptors) - xf86XVScreenInit(pScreen, adaptors, num_adaptors); - - if (newAdaptors) - xfree(newAdaptors); -} - -/* client libraries expect an encoding */ -static XF86VideoEncodingRec DummyEncoding[1] = { - { - 0, - "XV_IMAGE", - 1024, 1024, - {1, 1} - } -}; - -#define NUM_FORMATS 4 - -static XF86VideoFormatRec Formats[NUM_FORMATS] = { - {8, PseudoColor}, {15, TrueColor}, {16, TrueColor}, {24, TrueColor} -}; - -#if DBUF -#define NUM_ATTRIBUTES 4 -#else -#define NUM_ATTRIBUTES 3 -#endif - -static XF86AttributeRec Attributes[NUM_ATTRIBUTES] = { -#if DBUF - {XvSettable | XvGettable, 0, 1, "XV_DOUBLE_BUFFER"}, -#endif - {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"}, - {XvSettable | XvGettable, 0, 1, "XV_FILTER"}, - {XvSettable | XvGettable, 0, 1, "XV_COLORKEYMODE"}, -}; - -#define NUM_IMAGES 7 - -static XF86ImageRec Images[NUM_IMAGES] = { - XVIMAGE_UYVY, - XVIMAGE_YUY2, - XVIMAGE_Y2YU, - XVIMAGE_YVYU, - XVIMAGE_Y800, - XVIMAGE_I420, - XVIMAGE_YV12 -}; - -typedef struct -{ - FBAreaPtr area; - FBLinearPtr linear; - RegionRec clip; - CARD32 colorKey; - CARD32 colorKeyMode; - CARD32 filter; - CARD32 videoStatus; - Time offTime; - Time freeTime; -#if DBUF - Bool doubleBuffer; - int currentBuffer; -#endif -} -GeodePortPrivRec, *GeodePortPrivPtr; - -#define GET_PORT_PRIVATE(pScrn) \ - (GeodePortPrivPtr)((GEODEPTR(pScrn))->adaptor->pPortPrivates[0].ptr) - -static INT32 -GeodeSetColorkey(ScrnInfoPtr pScrn, GeodePortPrivPtr pPriv) -{ - int red, green, blue; - unsigned long key; - - DEBUGMSG(0, (0, X_NONE, "ColorKey\n")); - switch (pScrn->depth) { - case 8: - GFX(get_display_palette_entry(pPriv->colorKey & 0xFF, &key)); - red = ((key >> 16) & 0xFF); - green = ((key >> 8) & 0xFF); - blue = (key & 0xFF); - break; - default: - red = (pPriv->colorKey & pScrn->mask.red) >> pScrn->offset.red << (8 - - pScrn-> - weight. - red); - green = - (pPriv->colorKey & pScrn->mask.green) >> pScrn->offset. - green << (8 - pScrn->weight.green); - blue = (pPriv->colorKey & pScrn->mask.blue) >> pScrn->offset. - blue << (8 - pScrn->weight.blue); - break; - } - GFX(set_video_color_key - ((blue | (green << 8) | (red << 16)), 0xFCFCFC, - (pPriv->colorKeyMode == 0))); - REGION_EMPTY(pScrn->pScreen, &pPriv->clip); - return 0; -} - -void -GeodeResetVideo(ScrnInfoPtr pScrn) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr; - - DEBUGMSG(0, (0, X_NONE, "ResetVideo\n")); - GeodeAccelSync(pScrn); - GFX(set_video_palette(NULL)); - GeodeSetColorkey(pScrn, pPriv); - GFX(set_video_filter(pPriv->filter, pPriv->filter)); -} - -static XF86VideoAdaptorPtr -GeodeSetupImageVideo(ScreenPtr pScreen) -{ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - GeodePtr pGeode = GEODEPTR(pScrn); - XF86VideoAdaptorPtr adapt; - GeodePortPrivPtr pPriv; - - DEBUGMSG(0, (0, X_NONE, "SetupImageVideo\n")); - if (!(adapt = xcalloc(1, sizeof(XF86VideoAdaptorRec) + - sizeof(GeodePortPrivRec) + sizeof(DevUnion)))) - return NULL; - - adapt->type = XvWindowMask | XvInputMask | XvImageMask; - adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - adapt->name = "National Semiconductor Corporation"; - adapt->nEncodings = 1; - adapt->pEncodings = DummyEncoding; - adapt->nFormats = NUM_FORMATS; - adapt->pFormats = Formats; - adapt->nPorts = 1; - adapt->pPortPrivates = (DevUnion *) (&adapt[1]); - pPriv = (GeodePortPrivPtr) (&adapt->pPortPrivates[1]); - adapt->pPortPrivates[0].ptr = (pointer) (pPriv); - adapt->pAttributes = Attributes; - adapt->nImages = NUM_IMAGES; - adapt->nAttributes = NUM_ATTRIBUTES; - adapt->pImages = Images; - adapt->PutVideo = NULL; - adapt->PutStill = NULL; - adapt->GetVideo = NULL; - adapt->GetStill = NULL; - adapt->StopVideo = GeodeStopVideo; - adapt->SetPortAttribute = GeodeSetPortAttribute; - adapt->GetPortAttribute = GeodeGetPortAttribute; - adapt->QueryBestSize = GeodeQueryBestSize; - adapt->PutImage = GeodePutImage; - adapt->QueryImageAttributes = GeodeQueryImageAttributes; - - pPriv->colorKey = pGeode->videoKey; - pPriv->colorKeyMode = 0; - pPriv->filter = 0; - pPriv->videoStatus = 0; -#if DBUF - pPriv->doubleBuffer = TRUE; - pPriv->currentBuffer = 0; /* init to first buffer */ -#endif - - /* gotta uninit this someplace */ - REGION_INIT(pScreen, &pPriv->clip, NullBox, 0); - - pGeode->adaptor = adapt; - - pGeode->BlockHandler = pScreen->BlockHandler; - pScreen->BlockHandler = GeodeBlockHandler; - - xvColorKey = MAKE_ATOM("XV_COLORKEY"); - xvColorKeyMode = MAKE_ATOM("XV_COLORKEYMODE"); - xvFilter = MAKE_ATOM("XV_FILTER"); -#if DBUF - xvDoubleBuffer = MAKE_ATOM("XV_DOUBLE_BUFFER"); -#endif - - GeodeResetVideo(pScrn); - - return adapt; -} - -static Bool -RegionsEqual(RegionPtr A, RegionPtr B) -{ - int *dataA, *dataB; - int num; - - num = REGION_NUM_RECTS(A); - if (num != REGION_NUM_RECTS(B)) - return FALSE; - - if ((A->extents.x1 != B->extents.x1) || - (A->extents.x2 != B->extents.x2) || - (A->extents.y1 != B->extents.y1) || (A->extents.y2 != B->extents.y2)) - return FALSE; - - dataA = (int *)REGION_RECTS(A); - dataB = (int *)REGION_RECTS(B); - - while (num--) { - if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1])) - return FALSE; - dataA += 2; - dataB += 2; - } - - return TRUE; -} - -static void -GeodeStopVideo(ScrnInfoPtr pScrn, pointer data, Bool exit) -{ - GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data; - - REGION_EMPTY(pScrn->pScreen, &pPriv->clip); - - GeodeAccelSync(pScrn); - if (exit) { - if (pPriv->videoStatus & CLIENT_VIDEO_ON) { - GFX(set_video_enable(0)); - } - if (pPriv->area) { - xf86FreeOffscreenArea(pPriv->area); - pPriv->area = NULL; - } - pPriv->videoStatus = 0; - } else { - if (pPriv->videoStatus & CLIENT_VIDEO_ON) { - pPriv->videoStatus |= OFF_TIMER; - pPriv->offTime = currentTime.milliseconds + OFF_DELAY; - } - } -} - -static int -GeodeSetPortAttribute(ScrnInfoPtr pScrn, - Atom attribute, INT32 value, pointer data) -{ - GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data; - - GeodeAccelSync(pScrn); - DEBUGMSG(0, (0, X_NONE, "SetPortAttribute\n")); - if (attribute == xvColorKey) { - pPriv->colorKey = value; - GeodeSetColorkey(pScrn, pPriv); -#if DBUF - } else if (attribute == xvDoubleBuffer) { - if ((value < 0) || (value > 1)) - return BadValue; - pPriv->doubleBuffer = value; -#endif - } else if (attribute == xvColorKeyMode) { - pPriv->colorKeyMode = value; - GeodeSetColorkey(pScrn, pPriv); - } else if (attribute == xvFilter) { - pPriv->filter = value; - GFX(set_video_filter(pPriv->filter, pPriv->filter)); - } else - return BadMatch; - - return Success; -} - -static int -GeodeGetPortAttribute(ScrnInfoPtr pScrn, - Atom attribute, INT32 * value, pointer data) -{ - GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data; - - if (attribute == xvColorKey) { - *value = pPriv->colorKey; -#if DBUF - } else if (attribute == xvDoubleBuffer) { - *value = pPriv->doubleBuffer ? 1 : 0; -#endif - } else if (attribute == xvColorKeyMode) { - *value = pPriv->colorKeyMode; - } else if (attribute == xvFilter) { - *value = pPriv->filter; - } else - return BadMatch; - - return Success; -} - -static void -GeodeQueryBestSize(ScrnInfoPtr pScrn, - Bool motion, - short vid_w, short vid_h, - short drw_w, short drw_h, - unsigned int *p_w, unsigned int *p_h, pointer data) -{ - DEBUGMSG(0, (0, X_NONE, "QueryBestSize\n")); - *p_w = drw_w; - *p_h = drw_h; - - if (*p_w > 16384) - *p_w = 16384; -} - -static void -GeodeCopyGreyscale(unsigned char *src, - unsigned char *dst, - int srcPitch, int dstPitch, int h, int w) -{ - int i; - unsigned char *src2 = src; - unsigned char *dst2 = dst; - unsigned char *dst3; - unsigned char *src3; - - dstPitch <<= 1; - - while (h--) { - dst3 = dst2; - src3 = src2; - for (i = 0; i < w; i++) { - *dst3++ = *src3++; /* Copy Y data */ - *dst3++ = 0x80; /* Fill UV with 0x80 - greyscale */ - } - src3 = src2; - for (i = 0; i < w; i++) { - *dst3++ = *src3++; /* Copy Y data */ - *dst3++ = 0x80; /* Fill UV with 0x80 - greyscale */ - } - dst2 += dstPitch; - src2 += srcPitch; - } -} - -#if 1 -static void -GeodeCopyData(unsigned char *src, - unsigned char *dst, int srcPitch, int dstPitch, int h, int w) -{ - w <<= 1; - while (h--) { - memcpy(dst, src, w); - src += srcPitch; - dst += dstPitch; - } -} -#else -static void -GeodeCopyData(unsigned char *src, unsigned char *dst, - int srcPitch, int dstPitch, int h, int w) -{ - /* calc the # of dwords to xfer */ - int d = w >> 1; - - srcPitch -= (w << 1); - dstPitch -= (w << 1); - /* Any left words, if dwords w will be even */ - w &= 1; - while (h--) { /* this is equivalent of memcpy */ - /* copy the dwords first */ - __asm__ __volatile__("rep\n\t" "movsl\n\t"::"S"(src), "D"(dst), "c"(d)); - - if (w) { /* any words left */ - __asm__ __volatile__("movsw (%esi), (%edi)\n\t"); - } - /* reint the counter in ecx */ - __asm__ __volatile__("movl %0, %%ecx\n\t"::"m"(d)); - - /* set the ptr's for the next xfer */ - src += srcPitch; - dst += dstPitch; - } -} -#endif - -static void -GeodeCopyMungedData(unsigned char *src1, - unsigned char *src2, - unsigned char *src3, - unsigned char *dst1, - int srcPitch, int srcPitch2, int dstPitch, int h, int w) -{ - CARD32 *dstCur = (CARD32 *) dst1; - CARD32 *dstNext = (CARD32 *) dst1; - int i, j, k, m, n; - CARD32 crcb; - -#if 0 - long oldtime, newtime; -#endif - - DEBUGMSG(0, (0, X_NONE, "CopyMungedData\n")); - /* dstPitch is in byte count, but we write longs. - * so divide dstpitch by 4 - */ - dstPitch >>= 2; - /* Width is in byte but video data is 16bit - */ - w >>= 1; - /* We render 2 scanlines at one shot, handle the odd count */ - m = h & 1; - /* decrement the height since we write 2 scans */ - h -= 1; - /* we traverse by 2 bytes in src Y */ - srcPitch <<= 1; -#if 0 - UpdateCurrentTime(); - oldtime = currentTime.milliseconds; -#endif - - for (j = 0; j < h; j += 2) { - /* calc the next dest scan start */ - dstNext = dstCur + dstPitch; - for (i = 0; i < w; i++) { - /* crcb is same for the x pixel for 2 scans */ - crcb = (src3[i] << 8) | (src2[i] << 24); - - n = i << 1; - - /* write the first scan pixel DWORD */ - dstCur[i] = src1[n] | (src1[n + 1] << 16) | crcb; - - /* calc the offset of next pixel */ - k = n + srcPitch; - - /* write the 2nd scan pixel DWORD */ - dstNext[i] = src1[k] | (src1[k + 1] << 16) | crcb; - } - /* increment the offsets */ - - /* Y */ - src1 += srcPitch; - /* crcb */ - src2 += srcPitch2; - src3 += srcPitch2; - /* processed dest */ - dstCur += (dstPitch << 1); - } - - /* if any scans remaining */ - if (m) { - for (i = 0, k = 0; i < w; i++, k += 2) - { - dstCur[i] = src1[k] | (src1[k + 1] << 16) | - (src3[i] << 8) | (src2[i] << 24); - } - } -#if 0 - UpdateCurrentTime(); - newtime = currentTime.milliseconds; - DEBUGMSG(1, (0, X_NONE, "CMD %d\n", newtime - oldtime)); -#endif -} - -static FBAreaPtr -GeodeAllocateMemory(ScrnInfoPtr pScrn, FBAreaPtr area, int numlines) -{ - ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex]; - FBAreaPtr new_area; - - DEBUGMSG(0, (0, X_NONE, "AllocateMemory\n")); - - if (area) { - if ((area->box.y2 - area->box.y1) >= numlines) - return area; - - if (xf86ResizeOffscreenArea(area, pScrn->displayWidth, numlines)) - return area; - - xf86FreeOffscreenArea(area); - } - - new_area = xf86AllocateOffscreenArea(pScreen, pScrn->displayWidth, - numlines, 0, NULL, NULL, NULL); - - if (!new_area) { - int max_w, max_h; - - xf86QueryLargestOffscreenArea(pScreen, &max_w, &max_h, 0, - FAVOR_WIDTH_THEN_AREA, PRIORITY_EXTREME); - - if ((max_w < pScrn->displayWidth) || (max_h < numlines)) - return NULL; - - xf86PurgeUnlockedOffscreenAreas(pScreen); - new_area = xf86AllocateOffscreenArea(pScreen, pScrn->displayWidth, - numlines, 0, NULL, NULL, NULL); - } - - return new_area; -} - -static void -GeodeDisplayVideo(ScrnInfoPtr pScrn, - int id, - int offset, - short width, short height, - int pitch, - int x1, int y1, int x2, int y2, - BoxPtr dstBox, - short src_w, short src_h, short drw_w, short drw_h) -{ - GeodePtr pGeode = GEODEPTR(pScrn); - -/* DisplayModePtr mode = pScrn->currentMode; */ - GeodeAccelSync(pScrn); - - DEBUGMSG(0, (0, X_NONE, "DisplayVideo %x, %d %d, %d %d\n", - id, width, height, drw_w, drw_h)); - GFX(set_video_enable(1)); - - switch (id) { - case FOURCC_UYVY: /* UYVY */ - GFX(set_video_format(VIDEO_FORMAT_UYVY)); - break; - case FOURCC_Y800: /* Y800 - greyscale - we munge it! */ - case FOURCC_YV12: - case FOURCC_I420: - case FOURCC_YUY2: /* YUY2 */ - GFX(set_video_format(VIDEO_FORMAT_YUYV)); - break; - case FOURCC_Y2YU: /* Y2YU */ - GFX(set_video_format(VIDEO_FORMAT_Y2YU)); - break; - case FOURCC_YVYU: /* YVYU */ - GFX(set_video_format(VIDEO_FORMAT_YVYU)); - break; - } - - if (pGeode->TV_Overscan_On) { - dstBox->x1 += pGeode->TVOx; - dstBox->y1 += pGeode->TVOy; - } - - GFX(set_video_size(width, height)); - GFX(set_video_offset(offset)); - GFX(set_video_window(dstBox->x1, dstBox->y1, drw_w, drw_h)); - GFX(set_video_scale(src_w, src_h, drw_w, drw_h)); - - /* enable color conversion from YUV to RGB */ -#if defined(STB_X) - Gal_set_video_color_space(0); -#else - gfx_set_color_space_YUV(0); -#endif /* STB_X */ -} - -#define DummyScreen screenInfo.screens[0] - -static int -GeodePutImage(ScrnInfoPtr pScrn, - short src_x, short src_y, - short drw_x, short drw_y, - short src_w, short src_h, - short drw_w, short drw_h, - int id, unsigned char *buf, - short width, short height, - Bool sync, RegionPtr clipBoxes, pointer data) -{ - GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data; - GeodePtr pGeode = GEODEPTR(pScrn); - BoxRec dstBox; - int srcPitch = 0, srcPitch2 = 0, dstPitch = 0; - INT32 x1, x2, y1, y2; - int top, left, npixels, nlines; - int offset, s1offset = 0, s2offset = 0, s3offset = 0; - unsigned char *dst_start; - int pitch, new_h; - - DEBUGMSG(0, (0, X_NONE, "PutImage %x\n", id)); - - if (drw_w > 16384) - drw_w = 16384; - - /* Clip */ - x1 = src_x; - x2 = src_x + src_w; - y1 = src_y; - y2 = src_y + src_h; - - if ((x1 >= x2) || (y1 >= y2)) - return Success; - - dstBox.x1 = drw_x; - dstBox.x2 = drw_x + drw_w; - dstBox.y1 = drw_y; - dstBox.y2 = drw_y + drw_h; - - dstBox.x1 -= pScrn->frameX0; - dstBox.x2 -= pScrn->frameX0; - dstBox.y1 -= pScrn->frameY0; - dstBox.y2 -= pScrn->frameY0; - - pitch = pScrn->bitsPerPixel * pScrn->displayWidth >> 3; - - dstPitch = ((width << 1) + 3) & ~3; - - switch (id) { - case FOURCC_YV12: - case FOURCC_I420: - srcPitch = (width + 3) & ~3; /* of luma */ - s2offset = srcPitch * height; - srcPitch2 = ((width >> 1) + 3) & ~3; - s3offset = (srcPitch2 * (height >> 1)) + s2offset; - break; - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_Y800: - default: - srcPitch = (width << 1); - break; - } - - /* Find how many pitch scanlines required to store the data */ - new_h = ((dstPitch * height) + pitch - 1) / pitch; - -#if DBUF - if (pPriv->doubleBuffer) - new_h <<= 1; -#endif - - if (!(pPriv->area = GeodeAllocateMemory(pScrn, pPriv->area, new_h))) - return BadAlloc; - - /* copy data */ - top = y1; - left = x1 & ~1; - npixels = ((x2 + 1) & ~1) - left; - - switch (id) { - case FOURCC_YV12: - case FOURCC_I420: - { - int tmp; - - top &= ~1; - offset = (pPriv->area->box.y1 * pitch) + (top * dstPitch); - -#if DBUF - if (pPriv->doubleBuffer && pPriv->currentBuffer) - offset += (new_h >> 1) * pitch; -#endif - - dst_start = pGeode->FBBase + offset + left; - tmp = ((top >> 1) * srcPitch2) + (left >> 1); - s2offset += tmp; - s3offset += tmp; - if (id == FOURCC_I420) { - tmp = s2offset; - s2offset = s3offset; - s3offset = tmp; - } - nlines = ((y2 + 1) & ~1) - top; - s1offset = (top * srcPitch) + left; - } - break; - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_Y800: - default: - left <<= 1; - buf += (top * srcPitch) + left; - nlines = y2 - top; - offset = (pPriv->area->box.y1 * pitch) + (top * dstPitch); - -#if DBUF - if (pPriv->doubleBuffer && pPriv->currentBuffer) - offset += (new_h >> 1) * pitch; -#endif - - dst_start = pGeode->FBBase + offset + left; - break; - } - - /* update cliplist */ - if (!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScreen, &pPriv->clip, clipBoxes); - if (pPriv->colorKeyMode == 0) { - /* draw these */ - xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); - } - } - - switch (id) { - case FOURCC_Y800: - GeodeCopyGreyscale(buf, dst_start, srcPitch, dstPitch, nlines, npixels); - break; - case FOURCC_YV12: - case FOURCC_I420: - GeodeCopyMungedData(buf + s1offset, buf + s2offset, - buf + s3offset, dst_start, srcPitch, srcPitch2, - dstPitch, nlines, npixels); - break; - case FOURCC_UYVY: - case FOURCC_YUY2: - default: - GeodeCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels); - break; - } - - GeodeDisplayVideo(pScrn, id, offset, width, height, dstPitch, - x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h); - -#if DBUF - pPriv->currentBuffer ^= 1; -#endif - - pPriv->videoStatus = CLIENT_VIDEO_ON; - - return Success; -} - -static int -GeodeQueryImageAttributes(ScrnInfoPtr pScrn, - int id, - unsigned short *w, unsigned short *h, - int *pitches, int *offsets) -{ - int size; - int tmp; - - DEBUGMSG(0, (0, X_NONE, "QueryImageAttributes %X\n", id)); - - if (*w > 1024) - *w = 1024; - if (*h > 1024) - *h = 1024; - - *w = (*w + 1) & ~1; - if (offsets) - offsets[0] = 0; - - switch (id) { - case FOURCC_YV12: - case FOURCC_I420: - *h = (*h + 1) & ~1; - size = (*w + 3) & ~3; - if (pitches) - pitches[0] = size; - size *= *h; - if (offsets) - offsets[1] = size; - tmp = ((*w >> 1) + 3) & ~3; - if (pitches) - pitches[1] = pitches[2] = tmp; - tmp *= (*h >> 1); - size += tmp; - if (offsets) - offsets[2] = size; - size += tmp; - break; - case FOURCC_UYVY: - case FOURCC_YUY2: - case FOURCC_Y800: - default: - size = *w << 1; - if (pitches) - pitches[0] = size; - size *= *h; - break; - } - return size; -} - -static void -GeodeBlockHandler(int i, - pointer blockData, pointer pTimeout, pointer pReadmask) -{ - ScreenPtr pScreen = screenInfo.screens[i]; - ScrnInfoPtr pScrn = xf86Screens[i]; - GeodePtr pGeode = GEODEPTR(pScrn); - GeodePortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn); - - pScreen->BlockHandler = pGeode->BlockHandler; - (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); - pScreen->BlockHandler = GeodeBlockHandler; - - if (pPriv->videoStatus & TIMER_MASK) { - UpdateCurrentTime(); - if (pPriv->videoStatus & OFF_TIMER) { - if (pPriv->offTime < currentTime.milliseconds) { - GFX(set_video_enable(0)); - pPriv->videoStatus = FREE_TIMER; - pPriv->freeTime = currentTime.milliseconds + FREE_DELAY; - } - } else { /* FREE_TIMER */ - if (pPriv->freeTime < currentTime.milliseconds) { - if (pPriv->area) { - xf86FreeOffscreenArea(pPriv->area); - pPriv->area = NULL; - } - pPriv->videoStatus = 0; - } - } - } -} - -/****************** Offscreen stuff ***************/ - -typedef struct -{ - FBAreaPtr area; - FBLinearPtr linear; - Bool isOn; -} -OffscreenPrivRec, *OffscreenPrivPtr; - -static int -GeodeAllocateSurface(ScrnInfoPtr pScrn, - int id, - unsigned short w, - unsigned short h, XF86SurfacePtr surface) -{ - FBAreaPtr area; - int pitch, fbpitch, numlines; - OffscreenPrivPtr pPriv; - - if ((w > 1024) || (h > 1024)) - return BadAlloc; - - w = (w + 1) & ~1; - pitch = ((w << 1) + 15) & ~15; - fbpitch = pScrn->bitsPerPixel * pScrn->displayWidth >> 3; - numlines = ((pitch * h) + fbpitch - 1) / fbpitch; - - if (!(area = GeodeAllocateMemory(pScrn, NULL, numlines))) - return BadAlloc; - - surface->width = w; - surface->height = h; - - if (!(surface->pitches = xalloc(sizeof(int)))) - return BadAlloc; - if (!(surface->offsets = xalloc(sizeof(int)))) { - xfree(surface->pitches); - return BadAlloc; - } - if (!(pPriv = xalloc(sizeof(OffscreenPrivRec)))) { - xfree(surface->pitches); - xfree(surface->offsets); - return BadAlloc; - } - - pPriv->area = area; - - pPriv->isOn = FALSE; - - surface->pScrn = pScrn; - surface->id = id; - surface->pitches[0] = pitch; - surface->offsets[0] = area->box.y1 * fbpitch; - surface->devPrivate.ptr = (pointer) pPriv; - - return Success; -} - -static int -GeodeStopSurface(XF86SurfacePtr surface) -{ - OffscreenPrivPtr pPriv = (OffscreenPrivPtr) surface->devPrivate.ptr; - - if (pPriv->isOn) { - pPriv->isOn = FALSE; - } - - return Success; -} - -static int -GeodeFreeSurface(XF86SurfacePtr surface) -{ - OffscreenPrivPtr pPriv = (OffscreenPrivPtr) surface->devPrivate.ptr; - - if (pPriv->isOn) - GeodeStopSurface(surface); - xf86FreeOffscreenArea(pPriv->area); - xfree(surface->pitches); - xfree(surface->offsets); - xfree(surface->devPrivate.ptr); - - return Success; -} - -static int -GeodeGetSurfaceAttribute(ScrnInfoPtr pScrn, Atom attribute, INT32 * value) -{ - return GeodeGetPortAttribute(pScrn, attribute, value, - (pointer) (GET_PORT_PRIVATE(pScrn))); -} - -static int -GeodeSetSurfaceAttribute(ScrnInfoPtr pScrn, Atom attribute, INT32 value) -{ - return GeodeSetPortAttribute(pScrn, attribute, value, - (pointer) (GET_PORT_PRIVATE(pScrn))); -} - -static int -GeodeDisplaySurface(XF86SurfacePtr surface, - short src_x, short src_y, - short drw_x, short drw_y, - short src_w, short src_h, - short drw_w, short drw_h, RegionPtr clipBoxes) -{ - OffscreenPrivPtr pPriv = (OffscreenPrivPtr) surface->devPrivate.ptr; - ScrnInfoPtr pScrn = surface->pScrn; - GeodePortPrivPtr portPriv = GET_PORT_PRIVATE(pScrn); - INT32 x1, y1, x2, y2; - BoxRec dstBox; - - x1 = src_x; - x2 = src_x + src_w; - y1 = src_y; - y2 = src_y + src_h; - - dstBox.x1 = drw_x; - dstBox.x2 = drw_x + drw_w; - dstBox.y1 = drw_y; - dstBox.y2 = drw_y + drw_h; - - if ((x1 >= x2) || (y1 >= y2)) - return Success; - - dstBox.x1 -= pScrn->frameX0; - dstBox.x2 -= pScrn->frameX0; - dstBox.y1 -= pScrn->frameY0; - dstBox.y2 -= pScrn->frameY0; - - xf86XVFillKeyHelper(pScrn->pScreen, portPriv->colorKey, clipBoxes); - - GeodeDisplayVideo(pScrn, surface->id, surface->offsets[0], - surface->width, surface->height, surface->pitches[0], - x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h); - - pPriv->isOn = TRUE; - if (portPriv->videoStatus & CLIENT_VIDEO_ON) { - REGION_EMPTY(pScrn->pScreen, &portPriv->clip); - UpdateCurrentTime(); - portPriv->videoStatus = FREE_TIMER; - portPriv->freeTime = currentTime.milliseconds + FREE_DELAY; - } - - return Success; -} - -static void -GeodeInitOffscreenImages(ScreenPtr pScreen) -{ - XF86OffscreenImagePtr offscreenImages; - - /* need to free this someplace */ - if (!(offscreenImages = xalloc(sizeof(XF86OffscreenImageRec)))) - return; - - offscreenImages[0].image = &Images[0]; - offscreenImages[0].flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; - offscreenImages[0].alloc_surface = GeodeAllocateSurface; - offscreenImages[0].free_surface = GeodeFreeSurface; - offscreenImages[0].display = GeodeDisplaySurface; - offscreenImages[0].stop = GeodeStopSurface; - offscreenImages[0].setAttribute = GeodeSetSurfaceAttribute; - offscreenImages[0].getAttribute = GeodeGetSurfaceAttribute; - offscreenImages[0].max_width = 1024; - offscreenImages[0].max_height = 1024; - offscreenImages[0].num_attributes = NUM_ATTRIBUTES; - offscreenImages[0].attributes = Attributes; - - xf86XVRegisterOffscreenImages(pScreen, offscreenImages, 1); -} - -#endif /* !XvExtension */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu1.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu1.c deleted file mode 100644 index 8fb952404..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu1.c +++ /dev/null @@ -1,2503 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu1.c,v 1.2 2002/10/18 20:02:39 tsi Exp $ */ -/* - * $Workfile: disp_gu1.c $ - * - * This file contains routines for the first generation display controller. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -void gu1_enable_compression(void); /* private routine definition */ -void gu1_disable_compression(void); /* private routine definition */ -void gfx_reset_video(void); /* private routine definition */ -int gfx_set_display_control(int sync_polarities); /* private routine definition */ - -/* VIDEO BUFFER SIZE */ - -unsigned long vid_buf_size = 0; -int vid_enabled = 0; - -/*----------------------------------------------------------------------------- - * GU1_DELAY_APPROXIMATE (PRIVATE ROUTINE - NOT PART OF DURANGO API) - * - * Delay the requested number of milliseconds by reading a register. This function - * generally takes longer than the requested time. - *-----------------------------------------------------------------------------*/ -void gu1_delay_approximate (unsigned long milliseconds) -{ - /* ASSUME 300 MHz, 5 CLOCKS PER READ */ - -# define READS_PER_MILLISECOND 60000L - - unsigned long loop; - loop = milliseconds * READS_PER_MILLISECOND; - while (loop-- > 0) - { - READ_REG32(DC_UNLOCK); - } -} - -/*----------------------------------------------------------------------------- - * GU1_DELAY_PRECISE (PRIVATE ROUTINE - NOT PART OF DURANGO API) - * - * Delay the number of milliseconds on a more precise level, varying only by - * 1/10 of a ms. This function should only be called if an SC1200 is present. - *-----------------------------------------------------------------------------*/ -void gu1_delay_precise (unsigned long milliseconds) -{ -#if GFX_VIDEO_SC1200 - -#define LOOP 1000 - unsigned long i, timer_start, timer_end, total_ticks, previous_ticks, temp_ticks; - - /* Get current time */ - timer_start = IND(SC1200_CB_BASE_ADDR + SC1200_CB_TMVALUE); - - /* Calculate expected end time */ - if (INB(SC1200_CB_BASE_ADDR + SC1200_CB_TMCNFG) & SC1200_TMCLKSEL_27MHZ) - total_ticks = 27000 * milliseconds; /* timer resolution is 27 MHz */ - else - total_ticks = 1000 * milliseconds; /* timer resolution is 1 MHz */ - - if (total_ticks > ((unsigned long)0xffffffff - timer_start)) /* wrap-around */ - timer_end = total_ticks - ((unsigned long)0xffffffff - timer_start); - else - timer_end = timer_start + total_ticks; - - /* in case of wrap around */ - if (timer_end < timer_start) - { - previous_ticks = timer_start; - while (1) - { - temp_ticks = IND(SC1200_CB_BASE_ADDR + SC1200_CB_TMVALUE); - if (temp_ticks < previous_ticks) - break; - else - previous_ticks = temp_ticks; - for (i = 0; i < LOOP; i++) - READ_REG32(DC_UNLOCK); - } - } - /* now the non-wrap around part */ - while (1) - { - for (i = 0; i < LOOP; i++) - READ_REG32(DC_UNLOCK); - if(IND(SC1200_CB_BASE_ADDR + SC1200_CB_TMVALUE) > timer_end) - break; - } - -#endif /* GFX_VIDEO_SC1200 */ -} - -/*----------------------------------------------------------------------------- - * WARNING!!!! INACCURATE DELAY MECHANISM - * - * In an effort to keep the code self contained and operating system - * independent, the delay loop just performs reads of a display controller - * register. This time will vary for faster processors. The delay can always - * be longer than intended, only effecting the time of the mode switch - * (obviously want it to still be under a second). Problems with the hardware - * only arise if the delay is not long enough. - * - * For the SC1200, the high resolution timer can be used as an accurate mechanism - * for keeping time. However, in order to avoid a busy loop of IO reads, the - * timer is polled in-between busy loops, and therefore the actual delay might - * be longer than the requested delay by the time of one busy loop - * (which on a 200 MHz system took 95 us) - * - * There are thus two delay functions which are called from the main API routine. - * One is meant to be more precise and should only called if an SC1200 is present. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_delay_milliseconds(unsigned long milliseconds) -#else -void gfx_delay_milliseconds(unsigned long milliseconds) -#endif -{ -#if GFX_VIDEO_SC1200 - -#if GFX_VIDEO_DYNAMIC - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - { -#endif - gu1_delay_precise(milliseconds); - return; -#if GFX_VIDEO_DYNAMIC - } -#endif - -#endif /* GFX_VIDEO_SC1200 */ - - gu1_delay_approximate(milliseconds); -} - -#if GFX_DISPLAY_DYNAMIC -void gu1_delay_microseconds(unsigned long microseconds) -#else -void gfx_delay_microseconds(unsigned long microseconds) -#endif -{ - /* ASSUME 300 MHz, 2 CLOCKS PER INCREMENT */ - - unsigned long loop_count = microseconds * 150; - - while (loop_count-- > 0) - { - ; - } -} -/*----------------------------------------------------------------------------- - * GFX_VIDEO_SHUTDOWN - * - * This routine disables the display controller output. - *----------------------------------------------------------------------------- - */ -void gu1_video_shutdown(void) -{ - unsigned long unlock; - unsigned long gcfg, tcfg; - - /* DISABLE COMPRESSION */ - - gu1_disable_compression(); - - /* ALSO DISABLE VIDEO */ - /* Use private "reset video" routine to do all that is needed. */ - /* SC1200, for example, also disables the alpha blending regions. */ - - gfx_reset_video(); - - /* UNLOCK THE DISPLAY CONTROLLER REGISTERS */ - - unlock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - - /* READ THE CURRENT GX VALUES */ - - gcfg = READ_REG32(DC_GENERAL_CFG); - tcfg = READ_REG32(DC_TIMING_CFG); - - /* BLANK THE GX DISPLAY AND DISABLE THE TIMING GENERATOR */ - - tcfg &= ~((unsigned long)DC_TCFG_BLKE | (unsigned long)DC_TCFG_TGEN); - WRITE_REG32(DC_TIMING_CFG, tcfg); - - /* DELAY: WAIT FOR PENDING MEMORY REQUESTS */ - /* This delay is used to make sure that all pending requests to the */ - /* memory controller have completed before disabling the FIFO load. */ - - gfx_delay_milliseconds(1); - - /* DISABLE DISPLAY FIFO LOAD AND DISABLE COMPRESSION */ - - gcfg &= ~(unsigned long)(DC_GCFG_DFLE | DC_GCFG_CMPE | DC_GCFG_DECE); - WRITE_REG32(DC_GENERAL_CFG, gcfg); - WRITE_REG32(DC_UNLOCK, unlock); - return; -} - -/*----------------------------------------------------------------------------- - * GFX_SET_DISPLAY_BPP - * - * This routine programs the bpp in the display controller. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_display_bpp(unsigned short bpp) -#else -int gfx_set_display_bpp(unsigned short bpp) -#endif -{ - unsigned long ocfg, lock; - - lock = READ_REG32 (DC_UNLOCK); - ocfg = READ_REG32 (DC_OUTPUT_CFG) & ~(DC_OCFG_8BPP | DC_OCFG_555); - - /* SET DC PIXEL FORMAT */ - - if (bpp == 8) ocfg |= DC_OCFG_8BPP; - else if (bpp == 15) ocfg |= DC_OCFG_555; - else if (bpp != 16) return GFX_STATUS_BAD_PARAMETER; - - WRITE_REG32 (DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32 (DC_OUTPUT_CFG, ocfg); - WRITE_REG32 (DC_UNLOCK, lock); - - /* SET BPP IN GRAPHICS PIPELINE */ - - gfx_set_bpp (bpp); - - return 0; -} - -/*----------------------------------------------------------------------------- - * GFX_SET_SPECIFIED_MODE - * This routine uses the parameters in the specified display mode structure - * to program the display controller hardware. - *----------------------------------------------------------------------------- - */ -int gu1_set_specified_mode(DISPLAYMODE *pMode, int bpp) -{ - unsigned long unlock, value; - unsigned long gcfg, tcfg, ocfg; - unsigned long size, pitch; - unsigned long vid_buf_size; - unsigned long hactive, vactive; - gbpp = bpp; - - /* CHECK WHETHER TIMING CHANGE IS ALLOWED */ - /* Flag used for locking also overrides timing change restriction */ - - if (gfx_timing_lock && !(pMode->flags & GFX_MODE_LOCK_TIMING)) - return GFX_STATUS_ERROR; - - /* SET GLOBAL FLAG */ - - if (pMode->flags & GFX_MODE_LOCK_TIMING) - gfx_timing_lock = 1; - - /* DISABLE COMPRESSION */ - - gu1_disable_compression(); - - /* ALSO DISABLE VIDEO */ - /* Use private "reset video" routine to do all that is needed. */ - /* SC1200, for example, also disables the alpha blending regions. */ - - gfx_reset_video(); - - /* UNLOCK THE DISPLAY CONTROLLER REGISTERS */ - - unlock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - - /* READ THE CURRENT GX VALUES */ - - gcfg = READ_REG32(DC_GENERAL_CFG); - tcfg = READ_REG32(DC_TIMING_CFG); - - /* BLANK THE GX DISPLAY AND DISABLE THE TIMING GENERATOR */ - - tcfg &= ~((unsigned long)DC_TCFG_BLKE | (unsigned long)DC_TCFG_TGEN); - WRITE_REG32(DC_TIMING_CFG, tcfg); - - /* DELAY: WAIT FOR PENDING MEMORY REQUESTS - * This delay is used to make sure that all pending requests to the - * memory controller have completed before disabling the FIFO load. - */ - - gfx_delay_milliseconds(1); - - /* DISABLE DISPLAY FIFO LOAD AND DISABLE COMPRESSION */ - - gcfg &= ~(unsigned long)(DC_GCFG_DFLE | DC_GCFG_CMPE | DC_GCFG_DECE); - WRITE_REG32(DC_GENERAL_CFG, gcfg); - - /* CLEAR THE "DCLK_MUL" FIELD */ - - gcfg &= ~(unsigned long)(DC_GCFG_DDCK | DC_GCFG_DPCK | DC_GCFG_DFCK); - gcfg &= ~(unsigned long)DC_GCFG_DCLK_MASK; - WRITE_REG32(DC_GENERAL_CFG, gcfg); - - /* SET THE DOT CLOCK FREQUENCY */ - /* Mask off the divide by two bit (bit 31) */ - - gfx_set_clock_frequency(pMode->frequency & 0x7FFFFFFF); - - /* DELAY: WAIT FOR THE PLL TO SETTLE */ - /* This allows the dot clock frequency that was just set to settle. */ - - gfx_delay_milliseconds(1); - - /* SET THE "DCLK_MUL" FIELD OF DC_GENERAL_CFG */ - /* The GX hardware divides the dot clock, so 2x really means that the */ - /* internal dot clock equals the external dot clock. */ - - if (pMode->frequency & 0x80000000) gcfg |= 0x0040; - else gcfg |= 0x0080; - WRITE_REG32(DC_GENERAL_CFG, gcfg); - - /* DELAY: WAIT FOR THE ADL TO LOCK */ - /* This allows the clock generatation within GX to settle. This is */ - /* needed since some of the register writes that follow require that */ - /* clock to be present. */ - - /* We do a few to ensure we're synced */ - gfx_delay_milliseconds(1); - gfx_delay_milliseconds(1); - gfx_delay_milliseconds(1); - gfx_delay_milliseconds(1); - gfx_delay_milliseconds(1); - gfx_delay_milliseconds(1); - - /* SET THE GX DISPLAY CONTROLLER PARAMETERS */ - - WRITE_REG32(DC_FB_ST_OFFSET, 0); - WRITE_REG32(DC_CB_ST_OFFSET, 0); - WRITE_REG32(DC_CURS_ST_OFFSET, 0); - - /* SET LINE SIZE AND PITCH */ - /* Flat panels use the current flat panel line size to */ - /* calculate the pitch, but load the true line size */ - /* for the mode into the "Frame Buffer Line Size" field */ - /* of DC_BUF_SIZE. */ - - if (PanelEnable) - size = ModeWidth; - else - size = pMode->hactive; - - if (bpp > 8) size <<= 1; - - /* ONLY PYRAMID SUPPORTS 4K LINE SIZE */ - - if (size <= 1024) - { - pitch = 1024; - - /* SPECIAL CASE */ - /* Graphics acceleration in 16-bit pixel line double modes */ - /* requires a pitch of 2048. */ - - if ((pMode->flags & GFX_MODE_LINE_DOUBLE) && bpp > 8) - pitch <<= 1; - } - else - { - if (gfx_cpu_version == GFX_CPU_PYRAMID) - pitch = (size <= 2048) ? 2048 : 4096; - else - pitch = 2048; - } - WRITE_REG32(DC_LINE_DELTA, pitch >> 2); - - if (PanelEnable) - { - size = pMode->hactive; - if (bpp > 8) - size <<= 1; - } - - /* SAVE PREVIOUSLY STORED VIDEO BUFFER SIZE */ - - vid_buf_size = READ_REG32(DC_BUF_SIZE) & 0x3FFF0000; - - /* ADD 2 TO SIZE FOR POSSIBLE START ADDRESS ALIGNMENTS */ - - WRITE_REG32(DC_BUF_SIZE, ((size >> 3) + 2) | vid_buf_size); - - /* ALWAYS ENABLE "PANEL" DATA FROM MEDIAGX */ - /* That is really just the 18 BPP data bus to the companion chip */ - - ocfg = DC_OCFG_PCKE | DC_OCFG_PDEL | DC_OCFG_PDEH; - - /* SET PIXEL FORMAT */ - - if (bpp == 8) ocfg |= DC_OCFG_8BPP; - else if (bpp == 15) ocfg |= DC_OCFG_555; - - /* ENABLE TIMING GENERATOR, SYNCS, AND FP DATA */ - - tcfg = DC_TCFG_FPPE | DC_TCFG_HSYE | DC_TCFG_VSYE | DC_TCFG_BLKE | - DC_TCFG_TGEN; - - /* SET FIFO PRIORITY, DCLK MULTIPLIER, AND FIFO ENABLE */ - /* Default 6/5 for FIFO, 2x for DCLK multiplier. */ - - gcfg = (6 << DC_GCFG_DFHPEL_POS) | (5 << DC_GCFG_DFHPSL_POS) | DC_GCFG_DFLE; - - /* INCREASE FIFO PRIORITY FOR LARGE MODES */ - - if (pMode->hactive==1280 && pMode->vactive==1024) - { - if ((bpp == 8) && (pMode->flags & GFX_MODE_85HZ)) - gcfg = (8l << DC_GCFG_DFHPEL_POS) | (7l << DC_GCFG_DFHPSL_POS) | DC_GCFG_DFLE; - if ((bpp > 8) && (pMode->flags & GFX_MODE_75HZ)) - gcfg = (7l << DC_GCFG_DFHPEL_POS) | (6l << DC_GCFG_DFHPSL_POS) | DC_GCFG_DFLE; - if ((bpp > 8) && (pMode->flags & GFX_MODE_85HZ)) - gcfg = (9l << DC_GCFG_DFHPEL_POS) | (8l << DC_GCFG_DFHPSL_POS) | DC_GCFG_DFLE; - } - - /* SET DOT CLOCK MULTIPLIER */ - /* Bit 31 of frequency indicates divide frequency by two */ - - if (pMode->frequency & 0x80000000) gcfg |= (1l << DC_GCFG_DCLK_POS); - else gcfg |= (2l << DC_GCFG_DCLK_POS); - - /* DIVIDE VIDEO CLOCK */ - /* CPU core frequencies above 266 MHz will divide the video */ - /* clock by 4 to ensure that we are running below 150 MHz. */ - - if(gfx_cpu_frequency > 266) - gcfg |= DC_GCFG_VCLK_DIV; - - /* SET THE PIXEL AND LINE DOUBLE BITS IF NECESSARY */ - - hactive = pMode->hactive; - vactive = pMode->vactive; - gfx_line_double = 0; - gfx_pixel_double = 0; - - if (pMode->flags & GFX_MODE_LINE_DOUBLE) - { - gcfg |= DC_GCFG_LDBL; - hactive <<= 1; - - /* SET GLOBAL FLAG */ - - gfx_line_double = 1; - } - - if (pMode->flags & GFX_MODE_PIXEL_DOUBLE) - { - tcfg |= DC_TCFG_PXDB; - vactive <<= 1; - - /* SET GLOBAL FLAG */ - - gfx_pixel_double = 1; - } - - /* COMBINE AND SET TIMING VALUES */ - - if (!gfx_dont_program) { - value = (unsigned long) (hactive - 1) | - (((unsigned long) (pMode->htotal - 1)) << 16); - WRITE_REG32(DC_H_TIMING_1, value); - value = (unsigned long) (pMode->hblankstart - 1) | - (((unsigned long) (pMode->hblankend - 1)) << 16); - WRITE_REG32(DC_H_TIMING_2, value); - value = (unsigned long) (pMode->hsyncstart - 1) | - (((unsigned long) (pMode->hsyncend - 1)) << 16); - WRITE_REG32(DC_H_TIMING_3, value); - WRITE_REG32(DC_FP_H_TIMING, value); - value = (unsigned long) (vactive - 1) | - (((unsigned long) (pMode->vtotal - 1)) << 16); - WRITE_REG32(DC_V_TIMING_1, value); - value = (unsigned long) (pMode->vblankstart - 1) | - (((unsigned long) (pMode->vblankend - 1)) << 16); - WRITE_REG32(DC_V_TIMING_2, value); - value = (unsigned long) (pMode->vsyncstart - 1) | - (((unsigned long) (pMode->vsyncend - 1)) << 16); - WRITE_REG32(DC_V_TIMING_3, value); - value = (unsigned long) (pMode->vsyncstart - 2) | - (((unsigned long) (pMode->vsyncend - 2)) << 16); - WRITE_REG32(DC_FP_V_TIMING, value); - } - - WRITE_REG32(DC_OUTPUT_CFG, ocfg); - WRITE_REG32(DC_TIMING_CFG, tcfg); - gfx_delay_milliseconds(1); /* delay after TIMING_CFG */ - WRITE_REG32(DC_GENERAL_CFG, gcfg); - - /* ENABLE FLAT PANEL CENTERING */ - /* For 640x480 modes displayed with the 9211 within a 800x600 */ - /* flat panel display, turn on flat panel centering. */ - - if (PanelEnable) - { - if (ModeWidth < PanelWidth) - { - tcfg = READ_REG32(DC_TIMING_CFG); - tcfg = tcfg | DC_TCFG_FCEN; - WRITE_REG32(DC_TIMING_CFG, tcfg); - gfx_delay_milliseconds(1); /* delay after TIMING_CFG */ - } - } - - /* CONFIGURE DISPLAY OUTPUT FROM VIDEO PROCESSOR */ - - gfx_set_display_control (((pMode->flags & GFX_MODE_NEG_HSYNC) ? 1 : 0) | - ((pMode->flags & GFX_MODE_NEG_VSYNC) ? 2 : 0)); - - /* RESTORE VALUE OF DC_UNLOCK */ - - WRITE_REG32(DC_UNLOCK, unlock); - - /* ALSO WRITE GP_BLIT_STATUS FOR PITCH AND 8/18 BPP */ - /* Remember, only Pyramid supports 4K line pitch */ - - value = 0; - if (bpp > 8) value |= BC_16BPP; - if( (gfx_cpu_version == GFX_CPU_PYRAMID) && ( pitch > 2048 )) - value |= BC_FB_WIDTH_4096; - else if (pitch > 1024) - value |= BC_FB_WIDTH_2048; - WRITE_REG16(GP_BLIT_STATUS, (unsigned short) value); - - return GFX_STATUS_OK; - -} /* end gfx_set_specified_mode() */ - -/*---------------------------------------------------------------------------- - * GFX_IS_DISPLAY_MODE_SUPPORTED - * - * This routine sets the specified display mode. - * - * Returns the index of the mode if successful and mode returned, -1 if the mode - * could not be found. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_is_display_mode_supported(int xres, int yres, int bpp, int hz) -#else -int gfx_is_display_mode_supported(int xres, int yres, int bpp, int hz) -#endif -{ - int mode=0; - unsigned long hz_flag = 0, bpp_flag = 0; - - /* SET FLAGS TO MATCH REFRESH RATE */ - - if (hz == 56) hz_flag = GFX_MODE_56HZ; - else if (hz == 60) hz_flag = GFX_MODE_60HZ; - else if (hz == 70) hz_flag = GFX_MODE_70HZ; - else if (hz == 72) hz_flag = GFX_MODE_72HZ; - else if (hz == 75) hz_flag = GFX_MODE_75HZ; - else if (hz == 85) hz_flag = GFX_MODE_85HZ; - else return -1; - - /* SET BPP FLAGS TO LIMIT MODE SELECTION */ - - if (bpp == 8) bpp_flag = GFX_MODE_8BPP; - else if (bpp == 15) bpp_flag = GFX_MODE_15BPP; - else if (bpp == 16) bpp_flag = GFX_MODE_16BPP; - else return -1; - - /* ONLY PYRAMID SUPPORTS 4K PITCH */ - - if (gfx_cpu_version != GFX_CPU_PYRAMID && xres > 1024) - { - if (bpp > 8) - return (-1); /* return with mode not found */ - } - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - - for (mode = 0; mode < NUM_GX_DISPLAY_MODES; mode++) { - if ((DisplayParams[mode].hactive == (unsigned short)xres) && - (DisplayParams[mode].vactive == (unsigned short)yres) && - (DisplayParams[mode].flags & hz_flag) && - (DisplayParams[mode].flags & bpp_flag)) { - - /* SET THE DISPLAY CONTROLLER FOR THE SELECTED MODE */ - - return(mode); - } - } - return(-1); -} - -/*---------------------------------------------------------------------------- - * GFX_SET_DISPLAY_MODE - * - * This routine sets the specified display mode. - * - * Returns 1 if successful, 0 if mode could not be set. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_display_mode(int xres, int yres, int bpp, int hz) -#else -int gfx_set_display_mode(int xres, int yres, int bpp, int hz) -#endif -{ - int mode; - - /* DISABLE FLAT PANEL */ - /* Flat Panel settings are enabled by the function gfx_set_fixed_timings */ - /* and disabled by gfx_set_display_mode. */ - - PanelEnable = 0; - - mode = gfx_is_display_mode_supported(xres, yres, bpp, hz); - if(mode >= 0) { - if (gu1_set_specified_mode(&DisplayParams[mode], bpp) == GFX_STATUS_OK) - return(1); - } - return(0); -} - -/*---------------------------------------------------------------------------- - * GFX_SET_DISPLAY_TIMINGS - * - * This routine sets the display controller mode using the specified timing - * values (as opposed to using the tables internal to Durango). - * - * Returns GFX_STATUS_OK on success, GFX_STATUS_ERROR otherwise. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblankstart, - unsigned short hsyncstart, unsigned short hsyncend, - unsigned short hblankend, unsigned short htotal, - unsigned short vactive, unsigned short vblankstart, - unsigned short vsyncstart, unsigned short vsyncend, - unsigned short vblankend, unsigned short vtotal, - unsigned long frequency) -#else -int gfx_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblankstart, - unsigned short hsyncstart, unsigned short hsyncend, - unsigned short hblankend, unsigned short htotal, - unsigned short vactive, unsigned short vblankstart, - unsigned short vsyncstart, unsigned short vsyncend, - unsigned short vblankend, unsigned short vtotal, - unsigned long frequency) -#endif -{ - /* SET MODE STRUCTURE WITH SPECIFIED VALUES */ - - gfx_display_mode.flags = 0; - if (flags & 1) gfx_display_mode.flags |= GFX_MODE_NEG_HSYNC; - if (flags & 2) gfx_display_mode.flags |= GFX_MODE_NEG_VSYNC; - if (flags & 0x1000) gfx_display_mode.flags |= GFX_MODE_LOCK_TIMING; - gfx_display_mode.hactive = hactive; - gfx_display_mode.hblankstart = hblankstart; - gfx_display_mode.hsyncstart = hsyncstart; - gfx_display_mode.hsyncend = hsyncend; - gfx_display_mode.hblankend = hblankend; - gfx_display_mode.htotal = htotal; - gfx_display_mode.vactive = vactive; - gfx_display_mode.vblankstart = vblankstart; - gfx_display_mode.vsyncstart = vsyncstart; - gfx_display_mode.vsyncend = vsyncend; - gfx_display_mode.vblankend = vblankend; - gfx_display_mode.vtotal = vtotal; - gfx_display_mode.frequency = frequency; - - /* CALL ROUTINE TO SET MODE */ - - return (gu1_set_specified_mode(&gfx_display_mode, bpp)); -} - -/*---------------------------------------------------------------------------- - * GFX_SET_VTOTAL - * - * This routine sets the display controller vertical total to - * "vtotal". As a side effect it also sets vertical blank end. - * It should be used when only this value needs to be changed, - * due to speed considerations. - * - * Note: it is the caller's responsibility to make sure that - * a legal vtotal is used, i.e. that "vtotal" is greater than or - * equal to vsync end. - * - * Always returns 0. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_vtotal(unsigned short vtotal) -#else -int gfx_set_vtotal(unsigned short vtotal) -#endif -{ - unsigned long unlock, tcfg, timing1, timing2; - - /* UNLOCK THE DISPLAY CONTROLLER REGISTERS */ - - unlock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - - /* READ THE CURRENT GX VALUES */ - - tcfg = READ_REG32(DC_TIMING_CFG); - timing1 = READ_REG32(DC_V_TIMING_1); - timing2 = READ_REG32(DC_V_TIMING_2); - - /* DISABLE THE TIMING GENERATOR */ - - WRITE_REG32(DC_TIMING_CFG, tcfg & ~(unsigned long)DC_TCFG_TGEN); - - /* WRITE NEW TIMING VALUES */ - - WRITE_REG32(DC_V_TIMING_1, (timing1 & 0xffff) | (unsigned long)(vtotal - 1) << 16); - WRITE_REG32(DC_V_TIMING_2, (timing2 & 0xffff) | (unsigned long)(vtotal - 1) << 16); - - /* RESTORE GX VALUES */ - - WRITE_REG32(DC_TIMING_CFG, tcfg); - WRITE_REG32(DC_UNLOCK, unlock); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_pitch - * - * This routine sets the pitch of the frame buffer to the specified value. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_pitch(unsigned short pitch) -#else -void gfx_set_display_pitch(unsigned short pitch) -#endif -{ - unsigned long value = 0; - unsigned long lock = READ_REG32(DC_UNLOCK); - - value = READ_REG32(DC_LINE_DELTA) & 0xFFFFF000; - value |= (pitch >> 2); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_LINE_DELTA, value); - WRITE_REG32(DC_UNLOCK, lock); - - /* ALSO UPDATE PITCH IN GRAPHICS ENGINE */ - /* Pyramid alone supports 4K line pitch */ - - value = (unsigned long) READ_REG16(GP_BLIT_STATUS); - value &= ~(BC_FB_WIDTH_2048 | BC_FB_WIDTH_4096); - - if((gfx_cpu_version == GFX_CPU_PYRAMID) && ( pitch > 2048 )) - value |= BC_FB_WIDTH_4096; - - else if( pitch > 1024 ) - value |= BC_FB_WIDTH_2048; - - WRITE_REG16(GP_BLIT_STATUS, (unsigned short) value); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_offset - * - * This routine sets the start address of the frame buffer. It is - * typically used to pan across a virtual desktop (frame buffer larger than - * the displayed screen) or to flip the display between multiple buffers. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_offset(unsigned long offset) -#else -void gfx_set_display_offset(unsigned long offset) -#endif -{ - /* UPDATE FRAME BUFFER OFFSET */ - - unsigned long lock; - lock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - - /* START ADDRESS EFFECTS DISPLAY COMPRESSION */ - /* Disable compression for non-zero start addresss values. */ - /* Enable compression if offset is zero and comression is intended to */ - /* be enabled from a previous call to "gfx_set_compression_enable". */ - /* Compression should be disabled BEFORE the offset is changed */ - /* and enabled AFTER the offset is changed. */ - - if (offset == 0) - { - WRITE_REG32(DC_FB_ST_OFFSET, offset); - if (gfx_compression_enabled) - { - /* WAIT FOR THE OFFSET TO BE LATCHED */ - gfx_wait_vertical_blank (); - gu1_enable_compression(); - } - } - else - { - /* ONLY DISABLE COMPRESSION ONCE */ - - if (gfx_compression_active) - gu1_disable_compression(); - - WRITE_REG32(DC_FB_ST_OFFSET, offset); - } - - WRITE_REG32(DC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette_entry - * - * This routine sets an palette entry in the display controller. - * A 32-bit X:R:G:B value. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_display_palette_entry(unsigned long index, unsigned long palette) -#else -int gfx_set_display_palette_entry(unsigned long index, unsigned long palette) -#endif -{ - unsigned long data; - - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_REG32(DC_PAL_ADDRESS, index); - data = ((palette >> 2) & 0x0003F) | - ((palette >> 4) & 0x00FC0) | - ((palette >> 6) & 0x3F000); - WRITE_REG32(DC_PAL_DATA, data); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette - * - * This routine sets the entire palette in the display controller. - * A pointer is provided to a 256 entry table of 32-bit X:R:G:B values. - * Restriction: - * Due to SC1200 Issue #748 (in Notes DB) this function should be called only - * when DCLK is active, i.e PLL is already powered up and genlock is not active. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_display_palette(unsigned long *palette) -#else -int gfx_set_display_palette(unsigned long *palette) -#endif -{ - unsigned long data, i; - WRITE_REG32(DC_PAL_ADDRESS, 0); - if (palette) - { - for (i = 0; i < 256; i++) - { - /* CONVERT 24 BPP COLOR DATA TO 18 BPP COLOR DATA */ - - data = ((palette[i] >> 2) & 0x0003F) | - ((palette[i] >> 4) & 0x00FC0) | - ((palette[i] >> 6) & 0x3F000); - WRITE_REG32(DC_PAL_DATA, data); - } - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_enable - * - * This routine enables or disables the hardware cursor. - * - * WARNING: The cusrsor start offset must be set by setting the cursor - * position before calling this routine to assure that memory reads do not - * go past the end of graphics memory (this can hang GXm). - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_cursor_enable(int enable) -#else -void gfx_set_cursor_enable(int enable) -#endif -{ - unsigned long unlock, gcfg; - - /* SET OR CLEAR CURSOR ENABLE BIT */ - - unlock = READ_REG32(DC_UNLOCK); - gcfg = READ_REG32(DC_GENERAL_CFG); - if (enable) gcfg |= DC_GCFG_CURE; - else gcfg &= ~(DC_GCFG_CURE); - - /* WRITE NEW REGISTER VALUE */ - - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_GENERAL_CFG, gcfg); - WRITE_REG32(DC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_colors - * - * This routine sets the colors of the hardware cursor. - * Restriction: - * Due to SC1200 Issue #748 (in Notes DB) this function should be called only - * when DCLK is active, i.e PLL is already powered up. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor) -#else -void gfx_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor) -#endif -{ - unsigned long value; - - /* If genlock is enabled DCLK might be disabled in vertical blank. */ - /* Due to SC1200 Issue #748 in Notes DB this would fail the cursor color settings */ - /* So Wait for vertical blank to end */ - -#if GFX_VIDEO_SC1200 - if (gfx_test_timing_active()) - while ((gfx_get_vline()) > gfx_get_vactive()); -#endif - - /* SET CURSOR COLORS */ - - WRITE_REG32(DC_PAL_ADDRESS, 0x100); - value = ((bkcolor & 0x000000FC) >> 2) | - ((bkcolor & 0x0000FC00) >> (2+8-6)) | - ((bkcolor & 0x00FC0000) >> (2+16-12)); - WRITE_REG32(DC_PAL_DATA, value); - value = ((fgcolor & 0x000000FC) >> 2) | - ((fgcolor & 0x0000FC00) >> (2+8-6)) | - ((fgcolor & 0x00FC0000) >> (2+16-12)); - WRITE_REG32(DC_PAL_DATA, value); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_position - * - * This routine sets the position of the hardware cusror. The starting - * offset of the cursor buffer must be specified so that the routine can - * properly clip scanlines if the cursor is off the top of the screen. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot) -#else -void gfx_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot) -#endif -{ - unsigned long unlock; - - short x, y; - short xoffset = 0; - short yoffset = 0; - - /* SUPPORT CURSOR IN EMULATED VGA MODES */ - /* Timings are for twice the resolution */ - - if (gfx_pixel_double) - xpos <<= 1; - if (gfx_line_double) - ypos <<= 1; - - x = (short) xpos - (short) xhotspot; - y = (short) ypos - (short) yhotspot; - if (x < -31) return; - if (y < -31) return; - if (x < 0) { xoffset = -x; x = 0; } - if (y < 0) { yoffset = -y; y = 0; } - memoffset += (unsigned long) yoffset << 3; - - if (PanelEnable) { - if (( ModeWidth > PanelWidth) || (ModeHeight > PanelHeight)) { - gfx_enable_panning (xpos, ypos); - x = x - (short)panelLeft; - y = y - (short)panelTop; - } - } - - /* SET CURSOR POSITION */ - - unlock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_CURS_ST_OFFSET, memoffset); - WRITE_REG32(DC_CURSOR_X, (unsigned long) x | - (((unsigned long) xoffset) << 11)); - WRITE_REG32(DC_CURSOR_Y, (unsigned long) y | - (((unsigned long) yoffset) << 11)); - WRITE_REG32(DC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_shape32 - * - * This routine loads 32x32 cursor data into the specified location in - * graphics memory. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#else -void gfx_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#endif -{ - int i; - unsigned long value; - for (i = 0; i < 32; i++) - { - /* CONVERT TO 16 BITS AND MASK, 16 BITS XOR MASK PER DWORD */ - - value = (andmask[i] & 0xFFFF0000) | (xormask[i] >> 16); - WRITE_FB32(memoffset, value); - memoffset += 4; - value = (andmask[i] << 16) | (xormask[i] & 0x0000FFFF); - WRITE_FB32(memoffset, value); - memoffset += 4; - } -} - -/*--------------------------------------------------------------------------- - * gu1_enable_compression - * - * This is a private routine to this module (not exposed in the Durango API). - * It enables display compression. - *--------------------------------------------------------------------------- - */ -void gu1_enable_compression(void) -{ - int i; - unsigned long unlock, gcfg, offset; - - /* DO NOT ENABLE IF START ADDRESS IS NOT ZERO */ - - offset = READ_REG32(DC_FB_ST_OFFSET) & 0x003FFFFF; - if (offset != 0) return; - - /* DO NOT ENABLE IF WE ARE WITHIN AN EMULATED VGA MODE */ - - if (gfx_line_double || gfx_pixel_double) - return; - - /* SET GLOBAL INDICATOR */ - - gfx_compression_active = 1; - - /* CLEAR DIRTY/VALID BITS IN MEMORY CONTROLLER */ - /* Software is required to do this before enabling compression. */ - /* Don't want controller to think that old lines are still valid. */ - - for (i = 0; i < 1024; i++) - { - WRITE_REG32(MC_DR_ADD, i); - WRITE_REG32(MC_DR_ACC, 0); - } - - /* TURN ON COMPRESSION CONTROL BITS */ - - unlock = READ_REG32(DC_UNLOCK); - gcfg = READ_REG32(DC_GENERAL_CFG); - gcfg |= DC_GCFG_CMPE | DC_GCFG_DECE; - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_GENERAL_CFG, gcfg); - WRITE_REG32(DC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gu1_disable_compression - * - * This is a private routine to this module (not exposed in the Durango API). - * It disables display compression. - *--------------------------------------------------------------------------- - */ -void gu1_disable_compression(void) -{ - unsigned long unlock, gcfg; - - /* SET GLOBAL INDICATOR */ - - gfx_compression_active = 0; - - /* TURN OFF COMPRESSION CONTROL BITS */ - - unlock = READ_REG32(DC_UNLOCK); - gcfg = READ_REG32(DC_GENERAL_CFG); - gcfg &= ~(DC_GCFG_CMPE | DC_GCFG_DECE); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_GENERAL_CFG, gcfg); - WRITE_REG32(DC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_enable - * - * This routine enables or disables display compression. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_compression_enable(int enable) -#else -int gfx_set_compression_enable(int enable) -#endif -{ - /* SET GLOBAL VARIABLE FOR INTENDED STATE */ - /* Compression can only be enabled for non-zero start address values. */ - /* Keep state to enable compression on start address changes. */ - - gfx_compression_enabled = enable; - if (enable) gu1_enable_compression(); - else gu1_disable_compression(); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_offset - * - * This routine sets the base offset for the compression buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_compression_offset(unsigned long offset) -#else -int gfx_set_compression_offset(unsigned long offset) -#endif -{ - unsigned long lock; - - /* MUST BE 16-BYTE ALIGNED FOR GXLV */ - - if (offset & 0x0F) return(1); - - /* SET REGISTER VALUE */ - - lock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_CB_ST_OFFSET, offset); - WRITE_REG32(DC_UNLOCK, lock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_pitch - * - * This routine sets the pitch, in bytes, of the compression buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_compression_pitch(unsigned short pitch) -#else -int gfx_set_compression_pitch(unsigned short pitch) -#endif -{ - unsigned long lock, line_delta; - - /* SET REGISTER VALUE */ - - lock = READ_REG32(DC_UNLOCK); - line_delta = READ_REG32(DC_LINE_DELTA) & 0xFF800FFF; - line_delta |= ((unsigned long)pitch << 10l) & 0x007FF000; - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_LINE_DELTA, line_delta); - WRITE_REG32(DC_UNLOCK, lock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_size - * - * This routine sets the line size of the compression buffer, which is the - * maximum number of bytes allowed to store a compressed line. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_compression_size(unsigned short size) -#else -int gfx_set_compression_size(unsigned short size) -#endif -{ - unsigned long lock, buf_size; - - /* SUBTRACT 16 FROM SIZE */ - /* The display controller will actually write */ - /* 2 extra QWords. So, if we assume that "size" */ - /* refers to the allocated size, we must subtract */ - /* 16 bytes. */ - - size -= 16; - - /* SET REGISTER VALUE */ - - lock = READ_REG32(DC_UNLOCK); - buf_size = READ_REG32(DC_BUF_SIZE) & 0xFFFF01FF; - buf_size |= (((size >> 2) + 1) & 0x7F) << 9; - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - WRITE_REG32(DC_BUF_SIZE, buf_size); - WRITE_REG32(DC_UNLOCK, lock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine enables/disables video on GX. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_video_enable(int enable) -#else -void gfx_set_display_video_enable(int enable) -#endif -{ - unsigned long lock, gcfg, buf_size; - lock = READ_REG32 (DC_UNLOCK); - gcfg = READ_REG32 (DC_GENERAL_CFG); - buf_size = READ_REG32 (DC_BUF_SIZE); - - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - - vid_enabled = enable; - - /* SET THE BUFFER SIZE TO A NON-ZERO VALUE ONLY WHEN */ - /* ENABLING VIDEO */ - - if (enable) - { - gcfg |= (DC_GCFG_VIDE | DC_GCFG_VRDY); - WRITE_REG32 (DC_GENERAL_CFG, gcfg); - - WRITE_REG32 (DC_BUF_SIZE, (buf_size & 0x0000FFFFl) | vid_buf_size); - } - - /* CLEAR THE VIDEO BUFFER SIZE WHEN DISABLING VIDEO */ - - else - { - gcfg &= ~(DC_GCFG_VIDE); - WRITE_REG32 (DC_GENERAL_CFG, gcfg); - - vid_buf_size = buf_size & 0xFFFF0000l; - WRITE_REG32 (DC_BUF_SIZE, buf_size & 0x0000FFFFl); - } - - WRITE_REG32(DC_UNLOCK, lock); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_size (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_size". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_video_size(unsigned short width, unsigned short height) -#else -void gfx_set_display_video_size(unsigned short width, unsigned short height) -#endif -{ - unsigned long lock, size, value; - size = (unsigned long) (width << 1) * (unsigned long) height; - - /* STORE THE VIDEO BUFFER SIZE AS A GLOBAL */ - - vid_buf_size = ((size + 63) >> 6) << 16; - - /* DO NOT SET THE VIDEO SIZE IF VIDEO IS DISABLED */ - - if (!vid_enabled) - return; - - lock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - value = READ_REG32(DC_BUF_SIZE) & 0x0000FFFF; - value |= vid_buf_size; - WRITE_REG32(DC_BUF_SIZE, value); - WRITE_REG32(DC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_offset (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_offset". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_video_offset(unsigned long offset) -#else -void gfx_set_display_video_offset(unsigned long offset) -#endif -{ - unsigned long lock; - lock = READ_REG32(DC_UNLOCK); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - offset &= 0x003FFFFF; - WRITE_REG32(DC_VID_ST_OFFSET, offset); - WRITE_REG32(DC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_priority_high - * - * This routine controls the x-bus round robin arbitration mechanism. - * When enable is TRUE, graphics pipeline requests and non-critical display - * controller requests are arbitrated at the same priority as processor - * requests. When FALSE processor requests are arbitrated at a higher priority. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_set_display_priority_high(int enable) -#else -void gfx_set_display_priority_high(int enable) -#endif -{ - unsigned long lock, control; - lock = READ_REG32(DC_UNLOCK); - control = READ_REG32(MC_MEM_CNTRL1); - WRITE_REG32(DC_UNLOCK, DC_UNLOCK_VALUE); - if (enable) - control |= MC_XBUSARB; - else control &= ~(MC_XBUSARB); - WRITE_REG32(MC_MEM_CNTRL1, control); - WRITE_REG32(DC_UNLOCK, lock); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_test_timing_active - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_test_timing_active(void) -#else -int gfx_test_timing_active(void) -#endif -{ - if (READ_REG32(DC_TIMING_CFG) & DC_TCFG_TGEN) - return(1); - else return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_test_vertical_active - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_test_vertical_active(void) -#else -int gfx_test_vertical_active(void) -#endif -{ - if (READ_REG32(DC_TIMING_CFG) & DC_TCFG_VNA) - return(0); - else return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_wait_vertical_blank - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_wait_vertical_blank(void) -#else -int gfx_wait_vertical_blank(void) -#endif -{ - if (gfx_test_timing_active()) - { - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_enable_panning - * - * This routine enables the panning when the Mode is bigger than the panel - * size. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_enable_panning(int x, int y) -#else -void gfx_enable_panning(int x, int y) -#endif -{ - unsigned long modeBytesPerPixel; - unsigned long modeBytesPerScanline = 0; - unsigned long startAddress = 0; - - modeBytesPerPixel = (gbpp + 7)/8; - modeBytesPerScanline = (((ModeWidth + 1023) / 1024) * 1024) * modeBytesPerPixel; - - /* TEST FOR NO-WORK */ - - if (x >= DeltaX && (unsigned short)x < (PanelWidth + DeltaX) && - y >= DeltaY && (unsigned short)y < (PanelHeight + DeltaY)) - return; - - - /* ADJUST PANNING VARIABLES WHEN CURSOR EXCEEDS BOUNDARY */ - /* Test the boundary conditions for each coordinate and update */ - /* all variables and the starting offset accordingly. */ - - if (x < DeltaX) - DeltaX = x; - - else if ((unsigned short)x >= (DeltaX + PanelWidth)) - DeltaX = x - PanelWidth + 1; - - if (y < DeltaY) - DeltaY = y; - - else if ((unsigned short)y >= (DeltaY + PanelHeight)) - DeltaY = y - PanelHeight + 1; - - - /* CALCULATE THE START OFFSET */ - - startAddress = (DeltaX * modeBytesPerPixel) + (DeltaY * modeBytesPerScanline); - - gfx_set_display_offset(startAddress); - - - /* SET PANEL COORDINATES */ - /* Panel's x position must be DWORD aligned */ - - panelTop = DeltaY; - panelLeft = DeltaX * modeBytesPerPixel; - - if (panelLeft & 3) - panelLeft = (panelLeft & 0xFFFFFFFC) + 4; - - panelLeft /= modeBytesPerPixel; - -} - -/*--------------------------------------------------------------------------- - * gfx_set_fixed_timings - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#else -int gfx_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#endif -{ - int mode; - - ModeWidth = width; - ModeHeight = height; - PanelWidth = (unsigned short)panelResX; - PanelHeight = (unsigned short)panelResY; - PanelEnable = 1; - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - for (mode = 0; mode < NUM_FIXED_TIMINGS_MODES; mode++) { - if ((FixedParams[mode].xres == width) && - (FixedParams[mode].yres == height) && - (FixedParams[mode].panelresx == panelResX) && - (FixedParams[mode].panelresy == panelResY)) { - - /* SET THE 92xx FOR THE SELECTED MODE */ - FIXEDTIMINGS *fmode = &FixedParams[mode]; - - gfx_set_display_timings(bpp, 3, fmode->hactive,fmode->hblankstart, fmode->hsyncstart, fmode->hsyncend, - fmode->hblankend, fmode->htotal, fmode->vactive, fmode->vblankstart, - fmode->vsyncstart, fmode->vsyncend, fmode->vblankend, fmode->vtotal, fmode->frequency); - - return(1); - } /* end if() */ - } /* end for() */ - - return(-1); -} - -/*--------------------------------------------------------------------------- - * gfx_set_panel_present - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#else -int gfx_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#endif -{ - /* SET VALID BPP */ - /* 16BPP is the default. */ - - if (bpp != 8 && bpp != 15 && bpp != 16) - bpp = 16; - - /* RECORD PANEL PARAMETERS */ - /* This routine does not touch any panel timings. It is used when custom panel */ - /* settings are set up in advance by the BIOS or an application, but the */ - /* application still requires access to other panel functionality provided by */ - /* Durango (i.e. panning). */ - - ModeWidth = width; - ModeHeight = height; - PanelWidth = (unsigned short)panelResX; - PanelHeight = (unsigned short)panelResY; - PanelEnable = 1; - gbpp = bpp; - - /* PROGRAM THE BPP IN THE DISPLAY CONTROLLER */ - - gfx_set_display_bpp (bpp); - - return(GFX_STATUS_OK); -} - -/*-----------------------------------------------------------------------* - * THE FOLLOWING READ ROUTINES ARE ALWAYS INCLUDED: * - * gfx_get_hsync_end, gfx_get_htotal, gfx_get_vsync_end, gfx_get_vtotal * - * are used by the video overlay routines. * - * * - * gfx_get_vline and gfx_vactive are used to prevent an issue for the * - * SC1200. * - * * - * The others are part of the Durango API. * - *-----------------------------------------------------------------------*/ - -/*--------------------------------------------------------------------------- - * gfx_get_display_pitch - * - * This routine returns the current pitch of the frame buffer, in bytes. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_display_pitch(void) -#else -unsigned short gfx_get_display_pitch(void) -#endif -{ - unsigned long value; - if (gfx_cpu_version == GFX_CPU_PYRAMID) {/* Pyramid update for 4KB line pitch */ - value = (READ_REG32(DC_LINE_DELTA) & 0x07FF) << 2; - } else { - value = (READ_REG32(DC_LINE_DELTA) & 0x03FF) << 2; - } - - return((unsigned short) value); -} - -/*---------------------------------------------------------------------------- - * GFX_GET_DISPLAY_DETAILS - * - * This routine gets the specified display mode. - * - * Returns 1 if successful, 0 if mode could not be get. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_display_details(unsigned int mode, int *xres, int *yres, int *hz) -#else -int gfx_get_display_details(unsigned int mode, int *xres, int *yres, int *hz) -#endif -{ - if(mode < NUM_GX_DISPLAY_MODES){ - if(DisplayParams[mode].flags & GFX_MODE_56HZ) - *hz = 56; - else if(DisplayParams[mode].flags & GFX_MODE_60HZ) - *hz = 60; - else if(DisplayParams[mode].flags & GFX_MODE_70HZ) - *hz = 70; - else if(DisplayParams[mode].flags & GFX_MODE_72HZ) - *hz = 72; - else if(DisplayParams[mode].flags & GFX_MODE_75HZ) - *hz = 75; - else if(DisplayParams[mode].flags & GFX_MODE_85HZ) - *hz = 85; - - *xres = DisplayParams[mode].hactive; - *yres = DisplayParams[mode].vactive; - - return(1); - } - return(0); -} - -/*---------------------------------------------------------------------------- - * GFX_GET_DISPLAY_MODE_COUNT - * - * Returns number of modes supported. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_display_mode_count(void) -#else -int gfx_get_display_mode_count(void) -#endif -{ - return(NUM_GX_DISPLAY_MODES); -} - -/*---------------------------------------------------------------------------- - * gfx_get_frame_buffer_line_size - * - * Returns the current frame buffer line size, in bytes - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_frame_buffer_line_size(void) -#else -unsigned long gfx_get_frame_buffer_line_size(void) -#endif -{ - return ((READ_REG32 (DC_BUF_SIZE) & 0x1FF) << 3); -} - -/*---------------------------------------------------------------------------- - * gfx_mode_frequency_supported - * - * This routine examines if the requested mode with pixel frequency is supported. - * - * Returns >0 if successful , <0 if freq. could not be found and matched. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency) -#else -int gfx_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency) -#endif -{ - int index; - unsigned long value; - unsigned long bpp_flag = 0; - - bpp_flag = GFX_MODE_8BPP; - if (bpp > 8) bpp_flag = GFX_MODE_16BPP; - - for (index = 0; index < NUM_GX_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned short)xres) && - (DisplayParams[index].vactive == (unsigned short)yres) && - (DisplayParams[index].flags & bpp_flag) && - (DisplayParams[index].frequency == frequency)) - { - int hz=0; - value = DisplayParams[index].flags; - - if (value & GFX_MODE_60HZ) hz = 60; - else if (value & GFX_MODE_70HZ) hz = 70; - else if (value & GFX_MODE_72HZ) hz = 72; - else if (value & GFX_MODE_75HZ) hz = 75; - else if (value & GFX_MODE_85HZ) hz = 85; - return(hz); - } - } - return(-1); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_frequency - * - * This routine maps the frequency to close match refresh rate - * - * Returns . - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#else -int gfx_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#endif -{ - int index, closematch=0; - unsigned long value; - unsigned long bpp_flag = 0; - long min, diff; - - *hz = 60; - - bpp_flag = GFX_MODE_8BPP; - if (bpp > 8) bpp_flag = GFX_MODE_16BPP; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - min = 0x7fffffff; - for (index = 0; index < NUM_GX_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].htotal == (unsigned short)xres) && - (DisplayParams[index].vtotal == (unsigned short)yres) && - (DisplayParams[index].flags & bpp_flag)) - { - diff = (long)frequency - (long)DisplayParams[index].frequency; - if(diff < 0) diff = -diff; - - if (diff < min) - { - min = diff; - closematch = index; - } - } - } - - value = DisplayParams[closematch].flags; - - if (value & GFX_MODE_60HZ) *hz = 60; - else if (value & GFX_MODE_70HZ) *hz = 70; - else if (value & GFX_MODE_72HZ) *hz = 72; - else if (value & GFX_MODE_75HZ) *hz = 75; - else if (value & GFX_MODE_85HZ) *hz = 85; - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_mode - * - * This routine is identical to the gfx_get_refreshrate_from_frequency, - * except that the active timing values are compared instead of the total - * values. Some modes (such as 70Hz and 72Hz) may be confused in this routine. - * - * Returns . - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#else -int gfx_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#endif -{ - int index, closematch=0; - unsigned long value; - unsigned long bpp_flag = 0; - long min, diff; - - *hz = 60; - - bpp_flag = GFX_MODE_8BPP; - if (bpp > 8) bpp_flag = GFX_MODE_16BPP; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - min = 0x7fffffff; - for (index = 0; index < NUM_GX_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned short)xres) && - (DisplayParams[index].vactive == (unsigned short)yres) && - (DisplayParams[index].flags & bpp_flag)) - { - diff = (long)frequency - (long)DisplayParams[index].frequency; - if(diff < 0) diff = -diff; - - if (diff < min) - { - min = diff; - closematch = index; - } - } - } - - value = DisplayParams[closematch].flags; - - if (value & GFX_MODE_60HZ) *hz = 60; - else if (value & GFX_MODE_70HZ) *hz = 70; - else if (value & GFX_MODE_72HZ) *hz = 72; - else if (value & GFX_MODE_75HZ) *hz = 75; - else if (value & GFX_MODE_85HZ) *hz = 85; - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_get_frequency_from_refreshrate - * - * This routine maps the refresh rate to the closest matching PLL frequency. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency) -#else -int gfx_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency) -#endif -{ - int index, retval = -1; - unsigned long hz_flag = 0; - unsigned long bpp_flag = 0; - - *frequency = 0; - - if (hz == 60) hz_flag = GFX_MODE_60HZ; - else if (hz == 70) hz_flag = GFX_MODE_70HZ; - else if (hz == 72) hz_flag = GFX_MODE_72HZ; - else if (hz == 75) hz_flag = GFX_MODE_75HZ; - else if (hz == 85) hz_flag = GFX_MODE_85HZ; - - bpp_flag = GFX_MODE_8BPP; - if (bpp > 8) bpp_flag = GFX_MODE_16BPP; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - - for (index = 0; index < NUM_GX_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned short)xres) && - (DisplayParams[index].vactive == (unsigned short)yres) && - (DisplayParams[index].flags & bpp_flag) && - (DisplayParams[index].flags & hz_flag)) - { - *frequency = DisplayParams[index].frequency; - retval = 1; - } - } - return retval; -} - -/*--------------------------------------------------------------------------- - * gfx_get_max_supported_pixel_clock - * - * This routine returns the maximum recommended speed for the pixel clock. The - * return value is an integer of the format xxxyyy, where xxx.yyy is the maximum - * floating point pixel clock speed. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_max_supported_pixel_clock (void) -#else -unsigned long gfx_get_max_supported_pixel_clock (void) -#endif - -{ - /* PYRAMID CAN HANDLE 157.5 MHz */ - - if (gfx_cpu_version == GFX_CPU_PYRAMID) - return 157500; - - /* EVERYTHING ELSE IS 135.0 MHz */ - - return 135000; -} - -/*---------------------------------------------------------------------------- - * gfx_get_display_mode - * - * This routine gets the specified display mode. - * - * Returns >0 if successful and mode returned, <0 if mode could not be found. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_display_mode(int *xres, int *yres, int *bpp, int *hz) -#else -int gfx_get_display_mode(int *xres, int *yres, int *bpp, int *hz) -#endif -{ - int mode=0; - unsigned long pll_freq = 0, bpp_flag = 0; - - *xres = gfx_get_hactive(); - *yres = gfx_get_vactive(); - *bpp = gfx_get_display_bpp(); - pll_freq = gfx_get_clock_frequency(); - - /* SUPPORT EMULATED VGA MODES */ - - if (gfx_pixel_double) - *xres >>= 1; - - if (gfx_line_double) - *yres >>= 1; - - /* SET BPP FLAGS TO LIMIT MODE SELECTION */ - - bpp_flag = GFX_MODE_8BPP; - if (*bpp > 8) bpp_flag = GFX_MODE_16BPP; - - for (mode = 0; mode < NUM_GX_DISPLAY_MODES; mode++) { - if ((DisplayParams[mode].hactive == (unsigned short)*xres) && - (DisplayParams[mode].vactive == (unsigned short)*yres) && - (DisplayParams[mode].frequency == pll_freq) && - (DisplayParams[mode].flags & bpp_flag)) { - - pll_freq = DisplayParams[mode].flags; - - if (pll_freq & GFX_MODE_56HZ) *hz = 56; - else if (pll_freq & GFX_MODE_60HZ) *hz = 60; - else if (pll_freq & GFX_MODE_70HZ) *hz = 70; - else if (pll_freq & GFX_MODE_72HZ) *hz = 72; - else if (pll_freq & GFX_MODE_75HZ) *hz = 75; - else if (pll_freq & GFX_MODE_85HZ) *hz = 85; - - return(1); - } - } - return(-1); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hactive - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_hactive(void) -#else -unsigned short gfx_get_hactive(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_H_TIMING_1) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_hsync_start(void) -#else -unsigned short gfx_get_hsync_start(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_H_TIMING_3) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_hsync_end(void) -#else -unsigned short gfx_get_hsync_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_H_TIMING_3) >> 16) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_htotal - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_htotal(void) -#else -unsigned short gfx_get_htotal(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_H_TIMING_1) >> 16) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vactive - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vactive(void) -#else -unsigned short gfx_get_vactive(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_V_TIMING_1) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vsync_end(void) -#else -unsigned short gfx_get_vsync_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_V_TIMING_3) >> 16) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vtotal - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vtotal(void) -#else -unsigned short gfx_get_vtotal(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_V_TIMING_1) >> 16) & 0x07FF) + 1)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_bpp - * - * This routine returns the current color depth of the active display. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_display_bpp(void) -#else -unsigned short gfx_get_display_bpp(void) -#endif -{ - switch(READ_REG32(DC_OUTPUT_CFG) & 3) - { - case 0: return(16); - case 2: return(15); - } - return(8); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vline - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vline(void) -#else -unsigned short gfx_get_vline(void) -#endif -{ - unsigned short current_scan_line; - - /* Read similar value twice to ensure that the value is not transitioning */ - - do current_scan_line = (unsigned short)READ_REG32(DC_V_LINE_CNT) & 0x07FF; - while(current_scan_line != (unsigned short)(READ_REG32(DC_V_LINE_CNT) & 0x07FF)); - - return(current_scan_line); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_display_offset(void) -#else -unsigned long gfx_get_display_offset(void) -#endif -{ - return(READ_REG32(DC_FB_ST_OFFSET) & 0x003FFFFF); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_cursor_offset(void) -#else -unsigned long gfx_get_cursor_offset(void) -#endif -{ - return(READ_REG32(DC_CURS_ST_OFFSET) & 0x003FFFFF); -} - - -#if GFX_READ_ROUTINES - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_hblank_start(void) -#else -unsigned short gfx_get_hblank_start(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_H_TIMING_2) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_hblank_end(void) -#else -unsigned short gfx_get_hblank_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_H_TIMING_2) >> 16) & 0x07F8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vblank_start(void) -#else -unsigned short gfx_get_vblank_start(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_V_TIMING_2) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vsync_start(void) -#else -unsigned short gfx_get_vsync_start(void) -#endif -{ - return((unsigned short)((READ_REG32(DC_V_TIMING_3) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_vblank_end(void) -#else -unsigned short gfx_get_vblank_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(DC_V_TIMING_2) >> 16) & 0x07FF) + 1)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_palette_entry - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_display_palette_entry(unsigned long index, unsigned long *palette) -#else -int gfx_get_display_palette_entry(unsigned long index, unsigned long *palette) -#endif -{ - unsigned long data; - - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_REG32(DC_PAL_ADDRESS, index); - data = READ_REG32(DC_PAL_DATA); - data = ((data << 2) & 0x000000FC) | - ((data << 4) & 0x0000FC00) | - ((data << 6) & 0x00FC0000); - - *palette = data; - - return 0; -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_palette - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu1_get_display_palette(unsigned long *palette) -#else -void gfx_get_display_palette(unsigned long *palette) -#endif -{ - unsigned long i, data; - WRITE_REG32(DC_PAL_ADDRESS, 0); - for (i = 0; i < 256; i++) - { - data = READ_REG32(DC_PAL_DATA); - data = ((data << 2) & 0x000000FC) | - ((data << 4) & 0x0000FC00) | - ((data << 6) & 0x00FC0000); - palette[i] = data; - } -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_enable - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_cursor_enable(void) -#else -unsigned long gfx_get_cursor_enable(void) -#endif -{ - return(READ_REG32(DC_GENERAL_CFG) & DC_GCFG_CURE); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_position - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_cursor_position(void) -#else -unsigned long gfx_get_cursor_position(void) -#endif -{ - return((READ_REG32(DC_CURSOR_X) & 0x07FF) | - ((READ_REG32(DC_CURSOR_Y) << 16) & 0x03FF0000)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_clip - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_cursor_clip(void) -#else -unsigned long gfx_get_cursor_clip(void) -#endif -{ - return(((READ_REG32(DC_CURSOR_X) >> 11) & 0x01F) | - ((READ_REG32(DC_CURSOR_Y) << 5) & 0x1F0000)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_color - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_cursor_color(int color) -#else -unsigned long gfx_get_cursor_color(int color) -#endif -{ - unsigned long data; - if (color) - { - WRITE_REG32(DC_PAL_ADDRESS, 0x101); - } - else - { - WRITE_REG32(DC_PAL_ADDRESS, 0x100); - } - data = READ_REG32(DC_PAL_DATA); - data = ((data << 6) & 0x00FC0000) | - ((data << 4) & 0x0000FC00) | - ((data << 2) & 0x000000FC); - return(data); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_enable - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_compression_enable(void) -#else -int gfx_get_compression_enable(void) -#endif -{ - unsigned long gcfg; - gcfg = READ_REG32(DC_GENERAL_CFG); - if (gcfg & DC_GCFG_CMPE) return(1); - else return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_compression_offset(void) -#else -unsigned long gfx_get_compression_offset(void) -#endif -{ - unsigned long offset; - offset = READ_REG32(DC_CB_ST_OFFSET) & 0x003FFFFF; - return(offset); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_pitch - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_compression_pitch(void) -#else -unsigned short gfx_get_compression_pitch(void) -#endif -{ - unsigned short pitch; - pitch = (unsigned short) (READ_REG32(DC_LINE_DELTA) >> 12) & 0x07FF; - return(pitch << 2); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_size - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu1_get_compression_size(void) -#else -unsigned short gfx_get_compression_size(void) -#endif -{ - unsigned short size; - size = (unsigned short) ((READ_REG32(DC_BUF_SIZE) >> 9) & 0x7F) - 1; - return((size << 2) + 16); -} - -/*----------------------------------------------------------------------------- - * gfx_get_valid_bit - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_valid_bit(int line) -#else -int gfx_get_valid_bit(int line) -#endif -{ - int valid; - WRITE_REG32(MC_DR_ADD, line); - valid = (int)READ_REG32(MC_DR_ACC) & 1; - return(valid); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_offset (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_offset". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_display_video_offset(void) -#else -unsigned long gfx_get_display_video_offset(void) -#endif -{ - return(READ_REG32(DC_VID_ST_OFFSET) & 0x003FFFFF); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_size (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_size". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu1_get_display_video_size(void) -#else -unsigned long gfx_get_display_video_size(void) -#endif -{ - /* RETURN TOTAL SIZE, IN BYTES */ - - return((READ_REG32(DC_BUF_SIZE) >> 10) & 0x000FFFC0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_priority_high - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu1_get_display_priority_high(void) -#else -int gfx_get_display_priority_high(void) -#endif -{ - if (READ_REG32(MC_MEM_CNTRL1) & MC_XBUSARB) return(1); - else return(0); -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu2.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu2.c deleted file mode 100644 index 2b423183c..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu2.c +++ /dev/null @@ -1,2694 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/disp_gu2.c,v 1.2 2002/10/18 20:02:39 tsi Exp $ */ -/* - * $Workfile: disp_gu2.c $ - * - * This file contains routines for the second generation display controller. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -void gu2_enable_compression(void); /* private routine definition */ -void gu2_disable_compression(void); /* private routine definition */ -int gfx_set_display_control(int sync_polarities); /* private routine definition */ -void gfx_reset_video (void); - - /*----------------------------------------------------------------------------- - * WARNING!!!! INACCURATE DELAY MECHANISM - * - * In an effort to keep the code self contained and operating system - * independent, the delay loop just performs reads of a display controller - * register. This time will vary for faster processors. The delay can always - * be longer than intended, only effecting the time of the mode switch - * (obviously want it to still be under a second). Problems with the hardware - * only arise if the delay is not long enough. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_delay_milliseconds(unsigned long milliseconds) -#else -void gfx_delay_milliseconds(unsigned long milliseconds) -#endif -{ - /* ASSUME 300 MHz, 2 CLOCKS PER INCREMENT */ - -# define RC_READS_PER_MILLISECOND 150000L - - unsigned long loop; - loop = milliseconds * RC_READS_PER_MILLISECOND; - while (loop-- > 0) - { - ; - } -} - -#if GFX_DISPLAY_DYNAMIC -void gu2_delay_microseconds(unsigned long microseconds) -#else -void gfx_delay_microseconds(unsigned long microseconds) -#endif -{ - /* ASSUME 400 MHz, 2 CLOCKS PER INCREMENT */ - - - unsigned long loop_count = microseconds * 200; - - while (loop_count-- > 0) - { - ; - } -} - -/*----------------------------------------------------------------------------- - * GFX_SET_DISPLAY_BPP - * - * This routine programs the bpp in the display controller. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_display_bpp(unsigned short bpp) -#else -int gfx_set_display_bpp(unsigned short bpp) -#endif -{ - unsigned long dcfg, lock; - - dcfg = READ_REG32 (MDC_DISPLAY_CFG) & ~(MDC_DCFG_DISP_MODE_MASK | MDC_DCFG_16BPP_MODE_MASK); - lock = READ_REG32 (MDC_UNLOCK); - - switch (bpp) - { - case 12: dcfg |= (MDC_DCFG_DISP_MODE_16BPP | MDC_DCFG_12BPP); break; - case 15: dcfg |= (MDC_DCFG_DISP_MODE_16BPP | MDC_DCFG_15BPP); break; - case 16: dcfg |= (MDC_DCFG_DISP_MODE_16BPP | MDC_DCFG_16BPP); break; - case 32: dcfg |= (MDC_DCFG_DISP_MODE_24BPP); break; - case 8: dcfg |= (MDC_DCFG_DISP_MODE_8BPP); break; - default: return GFX_STATUS_BAD_PARAMETER; - } - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_DISPLAY_CFG, dcfg); - WRITE_REG32 (MDC_UNLOCK, lock); - - /* SET BPP IN GRAPHICS PIPELINE */ - - gfx_set_bpp (bpp); - - return 0; -} - -/*----------------------------------------------------------------------------- - * gu2_set_specified_mode (private routine) - * This routine uses the parameters in the specified display mode structure - * to program the display controller hardware. - *----------------------------------------------------------------------------- - */ -int gu2_set_specified_mode(DISPLAYMODE *pMode, int bpp) -{ - unsigned long unlock, value; - unsigned long gcfg, dcfg; - unsigned long size, pitch; - unsigned long vid_buf_size; - unsigned long bpp_mask, temp, dv_size; - - /* CHECK WHETHER TIMING CHANGE IS ALLOWED */ - /* Flag used for locking also overrides timing change restriction */ - - if (gfx_timing_lock && !(pMode->flags & GFX_MODE_LOCK_TIMING)) - return GFX_STATUS_ERROR; - - /* CLEAR PANNING OFFSETS */ - - DeltaX = 0; - DeltaY = 0; - - /* SET GLOBAL FLAG */ - - if (pMode->flags & GFX_MODE_LOCK_TIMING) - gfx_timing_lock = 1; - - /* CHECK FOR VALID BPP */ - /* As this function can be called directly from */ - /* gfx_set_display_timings, we must correct any */ - /* invalid bpp settings. */ - - switch (bpp) - { - case 12: bpp_mask = 0x00000900; break; - case 15: bpp_mask = 0x00000500; break; - case 16: bpp_mask = 0x00000100; break; - case 32: bpp_mask = 0x00000200; break; - default: bpp_mask = 0x00000000; bpp = 8; break; - } - - gbpp = bpp; - - /* DISABLE COMPRESSION */ - - gu2_disable_compression(); - - /* ALSO DISABLE VIDEO */ - /* Use private "reset video" routine to do all that is needed. */ - /* SC1200, for example, also disables the alpha blending regions. */ - - gfx_reset_video(); - - /* UNLOCK THE DISPLAY CONTROLLER REGISTERS */ - - unlock = READ_REG32 (MDC_UNLOCK); - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - - /* READ THE CURRENT REGISTER VALUES */ - - gcfg = READ_REG32 (MDC_GENERAL_CFG); - dcfg = READ_REG32 (MDC_DISPLAY_CFG); - - /* BLANK THE DISPLAY IN THE DISPLAY FILTER */ - - gfx_set_crt_enable (0); - - /* DISABLE THE TIMING GENERATOR */ - - dcfg &= ~(unsigned long)MDC_DCFG_TGEN; - WRITE_REG32 (MDC_DISPLAY_CFG, dcfg); - - /* DELAY: WAIT FOR PENDING MEMORY REQUESTS */ - /* This delay is used to make sure that all pending requests to the */ - /* memory controller have completed before disabling the FIFO load. */ - - gfx_delay_milliseconds(5); - - /* DISABLE DISPLAY FIFO LOAD */ - - gcfg &= ~(unsigned long)MDC_GCFG_DFLE; - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - - /* PRESERVE VIDEO INFORMATION */ - - gcfg &= (unsigned long)(MDC_GCFG_YUVM | MDC_GCFG_VDSE); - dcfg = 0; - - /* SET THE DOT CLOCK FREQUENCY */ - /* Mask off the divide by two bit (bit 31) */ - - gfx_set_clock_frequency(pMode->frequency & 0x7FFFFFFF); - - /* DELAY: WAIT FOR THE PLL TO SETTLE */ - /* This allows the dot clock frequency that was just set to settle. */ - - gfx_delay_milliseconds(10); - - /* SET THE GX DISPLAY CONTROLLER PARAMETERS */ - - WRITE_REG32 (MDC_FB_ST_OFFSET, 0); - WRITE_REG32 (MDC_CB_ST_OFFSET, 0); - WRITE_REG32 (MDC_CURS_ST_OFFSET, 0); - WRITE_REG32 (MDC_ICON_ST_OFFSET, 0); - - /* SET LINE SIZE AND PITCH */ - /* 1. Flat Panels must use the mode width and not */ - /* the timing width to set the pitch. */ - /* 2. Mode sets will use a pitch that is aligned */ - /* on a 1K boundary to preserve legacy. The */ - /* pitch can be overridden by a subsequent call */ - /* to gfx_set_display_pitch. */ - - if (PanelEnable) - size = ModeWidth; - else - size = pMode->hactive; - - if (bpp > 8) size <<= 1; - if (bpp > 16) size <<= 1; - - pitch = 1024; - dv_size = MDC_DV_LINE_SIZE_1024; - - if (size > 1024) - { - pitch = 2048; - dv_size = MDC_DV_LINE_SIZE_2048; - } - if (size > 2048) - { - pitch = 4096; - dv_size = MDC_DV_LINE_SIZE_4096; - } - if (size > 4096) - { - pitch = 8192; - dv_size = MDC_DV_LINE_SIZE_8192; - } - WRITE_REG32(MDC_GFX_PITCH, pitch >> 3); - - /* WRITE DIRTY/VALID CONTROL WITH LINE LENGTH */ - - temp = READ_REG32 (MDC_DV_CTL); - WRITE_REG32 (MDC_DV_CTL, (temp & ~MDC_DV_LINE_SIZE_MASK) | dv_size); - - if (PanelEnable) - { - size = pMode->hactive; - if (bpp > 8) size <<= 1; - if (bpp > 16) size <<= 1; - } - - /* SAVE PREVIOUSLY STORED VIDEO LINE SIZE */ - - vid_buf_size = READ_REG32(MDC_LINE_SIZE) & 0xFF000000; - - /* ADD 2 TO SIZE FOR POSSIBLE START ADDRESS ALIGNMENTS */ - - WRITE_REG32 (MDC_LINE_SIZE, ((size >> 3) + 2) | vid_buf_size); - - - /* ALWAYS ENABLE VIDEO AND GRAPHICS DATA */ - /* These bits are relics from a previous design and */ - /* should always be enabled. */ - - dcfg |= (unsigned long)(MDC_DCFG_VDEN | MDC_DCFG_GDEN); - - /* SET PIXEL FORMAT */ - - dcfg |= bpp_mask; - - /* ENABLE TIMING GENERATOR, TIM. REG. UPDATES, PALETTE BYPASS */ - /* AND VERT. INT. SELECT */ - - dcfg |= (unsigned long)(MDC_DCFG_TGEN | MDC_DCFG_TRUP | MDC_DCFG_PALB | MDC_DCFG_VISL); - - /* DISABLE ADDRESS MASKS */ - - dcfg |= MDC_DCFG_A20M; - dcfg |= MDC_DCFG_A18M; - - /* SET FIFO PRIORITIES AND DISPLAY FIFO LOAD ENABLE */ - /* Set the priorities higher for high resolution modes. */ - - if (pMode->hactive > 1024 || bpp == 32) - gcfg |= 0x000A901; - else - gcfg |= 0x0006501; - - - /* ENABLE FLAT PANEL CENTERING */ - /* For panel modes having a resolution smaller than the */ - /* panel resolution, turn on data centering. */ - - if (PanelEnable && ModeWidth < PanelWidth) - dcfg |= MDC_DCFG_DCEN; - - /* COMBINE AND SET TIMING VALUES */ - - value = (unsigned long) (pMode->hactive - 1) | - (((unsigned long) (pMode->htotal - 1)) << 16); - WRITE_REG32(MDC_H_ACTIVE_TIMING, value); - value = (unsigned long) (pMode->hblankstart - 1) | - (((unsigned long) (pMode->hblankend - 1)) << 16); - WRITE_REG32(MDC_H_BLANK_TIMING, value); - value = (unsigned long) (pMode->hsyncstart - 1) | - (((unsigned long) (pMode->hsyncend - 1)) << 16); - WRITE_REG32(MDC_H_SYNC_TIMING, value); - value = (unsigned long) (pMode->vactive - 1) | - (((unsigned long) (pMode->vtotal - 1)) << 16); - WRITE_REG32(MDC_V_ACTIVE_TIMING, value); - value = (unsigned long) (pMode->vblankstart - 1) | - (((unsigned long) (pMode->vblankend - 1)) << 16); - WRITE_REG32(MDC_V_BLANK_TIMING, value); - value = (unsigned long) (pMode->vsyncstart - 1) | - (((unsigned long) (pMode->vsyncend - 1)) << 16); - WRITE_REG32(MDC_V_SYNC_TIMING, value); - - WRITE_REG32 (MDC_DISPLAY_CFG, dcfg); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - - /* CONFIGURE DISPLAY OUTPUT FROM VIDEO PROCESSOR */ - - gfx_set_display_control (((pMode->flags & GFX_MODE_NEG_HSYNC) ? 1 : 0) | - ((pMode->flags & GFX_MODE_NEG_VSYNC) ? 2 : 0)); - - /* RESTORE VALUE OF MDC_UNLOCK */ - - WRITE_REG32(MDC_UNLOCK, unlock); - - /* RESET THE PITCH VALUES IN THE GP */ - - gfx_reset_pitch ((unsigned short)pitch); - - gfx_set_bpp ((unsigned short)bpp); - - return GFX_STATUS_OK; -} - - /*---------------------------------------------------------------------------- - * GFX_IS_DISPLAY_MODE_SUPPORTED - * - * This routine sets the specified display mode. - * - * Returns 1 if successful, 0 if mode could not be set. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_is_display_mode_supported(int xres, int yres, int bpp, int hz) -#else -int gfx_is_display_mode_supported(int xres, int yres, int bpp, int hz) -#endif -{ - int mode; - unsigned long hz_flag = 0, bpp_flag = 0; - - /* SET FLAGS TO MATCH REFRESH RATE */ - - if (hz == 56) hz_flag = GFX_MODE_56HZ; - if (hz == 60) hz_flag = GFX_MODE_60HZ; - if (hz == 70) hz_flag = GFX_MODE_70HZ; - if (hz == 72) hz_flag = GFX_MODE_72HZ; - if (hz == 75) hz_flag = GFX_MODE_75HZ; - if (hz == 85) hz_flag = GFX_MODE_85HZ; - - /* SET BPP FLAGS TO LIMIT MODE SELECTION */ - - switch (bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: return (-1); - } - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - - for (mode = 0; mode < NUM_RC_DISPLAY_MODES; mode++) - { - if ((DisplayParams[mode].hactive == (unsigned short)xres) && - (DisplayParams[mode].vactive == (unsigned short)yres) && - (DisplayParams[mode].flags & hz_flag) && - (DisplayParams[mode].flags & bpp_flag)) - { - - /* REDCLOUD DOES NOT SUPPORT EMULATED VGA MODES */ - - if ((DisplayParams[mode].flags & GFX_MODE_PIXEL_DOUBLE) || - (DisplayParams[mode].flags & GFX_MODE_LINE_DOUBLE)) - continue; - - /* SET THE DISPLAY CONTROLLER FOR THE SELECTED MODE */ - - return(mode); - } - } - return(-1); -} - -/*---------------------------------------------------------------------------- - * gfx_set_display_mode - * - * This routine sets the specified display mode. - * - * Returns 1 if successful, 0 if mode could not be set. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_display_mode(int xres, int yres, int bpp, int hz) -#else -int gfx_set_display_mode(int xres, int yres, int bpp, int hz) -#endif -{ - int mode; - - /* DISABLE FLAT PANEL */ - /* Flat Panel settings are enabled by the function gfx_set_fixed_timings */ - /* and disabled by gfx_set_display_mode. */ - - PanelEnable = 0; - - mode = gfx_is_display_mode_supported(xres, yres, bpp, hz); - if(mode >= 0) - { - if (gu2_set_specified_mode(&DisplayParams[mode], bpp) == GFX_STATUS_OK) - return(1); - } - return(0); -} - -/*---------------------------------------------------------------------------- - * GFX_SET_DISPLAY_TIMINGS - * - * This routine sets the display controller mode using the specified timing - * values (as opposed to using the tables internal to Durango). - * - * Returns GFX_STATUS_OK ON SUCCESS, GFX_STATUS_ERROR otherwise. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblankstart, - unsigned short hsyncstart, unsigned short hsyncend, - unsigned short hblankend, unsigned short htotal, - unsigned short vactive, unsigned short vblankstart, - unsigned short vsyncstart, unsigned short vsyncend, - unsigned short vblankend, unsigned short vtotal, - unsigned long frequency) -#else -int gfx_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblankstart, - unsigned short hsyncstart, unsigned short hsyncend, - unsigned short hblankend, unsigned short htotal, - unsigned short vactive, unsigned short vblankstart, - unsigned short vsyncstart, unsigned short vsyncend, - unsigned short vblankend, unsigned short vtotal, - unsigned long frequency) -#endif -{ - /* SET MODE STRUCTURE WITH SPECIFIED VALUES */ - - gfx_display_mode.flags = 0; - if (flags & 1) gfx_display_mode.flags |= GFX_MODE_NEG_HSYNC; - if (flags & 2) gfx_display_mode.flags |= GFX_MODE_NEG_VSYNC; - if (flags & 0x1000) gfx_display_mode.flags |= GFX_MODE_LOCK_TIMING; - gfx_display_mode.hactive = hactive; - gfx_display_mode.hblankstart = hblankstart; - gfx_display_mode.hsyncstart = hsyncstart; - gfx_display_mode.hsyncend = hsyncend; - gfx_display_mode.hblankend = hblankend; - gfx_display_mode.htotal = htotal; - gfx_display_mode.vactive = vactive; - gfx_display_mode.vblankstart = vblankstart; - gfx_display_mode.vsyncstart = vsyncstart; - gfx_display_mode.vsyncend = vsyncend; - gfx_display_mode.vblankend = vblankend; - gfx_display_mode.vtotal = vtotal; - gfx_display_mode.frequency = frequency; - - /* CALL ROUTINE TO SET MODE */ - - return (gu2_set_specified_mode(&gfx_display_mode, bpp)); -} - -/*---------------------------------------------------------------------------- - * GFX_SET_VTOTAL - * - * This routine sets the display controller vertical total to - * "vtotal". As a side effect it also sets vertical blank end. - * It should be used when only this value needs to be changed, - * due to speed considerations. - * - * Note: it is the caller's responsibility to make sure that - * a legal vtotal is used, i.e. that "vtotal" is greater than or - * equal to vsync end. - * - * Always returns 0. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_vtotal(unsigned short vtotal) -#else -int gfx_set_vtotal(unsigned short vtotal) -#endif -{ - unsigned long unlock, dcfg, vactive, vblank; - - /* UNLOCK THE DISPLAY CONTROLLER REGISTERS */ - - unlock = READ_REG32(MDC_UNLOCK); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - - /* READ THE CURRENT RC VALUES */ - - dcfg = READ_REG32 (MDC_DISPLAY_CFG); - vactive = READ_REG32 (MDC_V_ACTIVE_TIMING); - vblank = READ_REG32 (MDC_V_BLANK_TIMING); - - /* DISABLE TIMING REGISTER UPDATES */ - - WRITE_REG32 (MDC_DISPLAY_CFG, dcfg & ~(unsigned long)MDC_DCFG_TRUP); - - /* WRITE NEW TIMING VALUES */ - - WRITE_REG32 (MDC_V_ACTIVE_TIMING, (vactive & MDC_VAT_VA_MASK) | (unsigned long)(vtotal - 1) << 16); - WRITE_REG32 (MDC_V_BLANK_TIMING, (vblank & MDC_VBT_VBS_MASK) | (unsigned long)(vtotal - 1) << 16); - - /* RESTORE OLD RC VALUES */ - - WRITE_REG32 (MDC_DISPLAY_CFG, dcfg); - WRITE_REG32 (MDC_UNLOCK, unlock); - - return (0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_pitch - * - * This routine sets the pitch of the frame buffer to the specified value. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_pitch(unsigned short pitch) -#else -void gfx_set_display_pitch(unsigned short pitch) -#endif -{ - unsigned long value = 0; - unsigned long lock = READ_REG32(MDC_UNLOCK); - - value = READ_REG32(MDC_GFX_PITCH) & 0xFFFF0000; - value |= (pitch >> 3); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_GFX_PITCH, value); - - /* SET RENDERING PITCHES TO MATCH */ - - gfx_reset_pitch(pitch); - - /* SET THE FRAME DIRTY MODE */ - /* Non-standard pitches, i.e. pitches that */ - /* are not 1K, 2K or 4K must mark the entire */ - /* frame as dirty when writing to the frame */ - /* buffer. */ - - value = READ_REG32 (MDC_GENERAL_CFG); - - if (pitch == 1024 || pitch == 2048 || pitch == 4096 || pitch == 8192) - value &= ~(unsigned long)(MDC_GCFG_FDTY); - else - value |= (unsigned long)(MDC_GCFG_FDTY); - - WRITE_REG32 (MDC_GENERAL_CFG, value); - WRITE_REG32(MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_offset - * - * This routine sets the start address of the frame buffer. It is - * typically used to pan across a virtual desktop (frame buffer larger than - * the displayed screen) or to flip the display between multiple buffers. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_offset(unsigned long offset) -#else -void gfx_set_display_offset(unsigned long offset) -#endif -{ - /* UPDATE FRAME BUFFER OFFSET */ - unsigned long lock; - lock = READ_REG32(MDC_UNLOCK); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - - - /* START ADDRESS EFFECTS DISPLAY COMPRESSION */ - /* Disable compression for non-zero start addresss values. */ - /* Enable compression if offset is zero and comression is intended to */ - /* be enabled from a previous call to "gfx_set_compression_enable". */ - /* Compression should be disabled BEFORE the offset is changed */ - /* and enabled AFTER the offset is changed. */ - - if (offset == 0) - { - WRITE_REG32(MDC_FB_ST_OFFSET, offset); - if (gfx_compression_enabled) - { - /* WAIT FOR THE OFFSET TO BE LATCHED */ - gfx_wait_vertical_blank (); - gu2_enable_compression(); - } - } - else - { - /* ONLY DISABLE COMPRESSION ONCE */ - - if (gfx_compression_active) - gu2_disable_compression(); - - WRITE_REG32(MDC_FB_ST_OFFSET, offset); - } - - WRITE_REG32(MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette_entry - * - * This routine sets an palette entry in the display controller. - * A 32-bit X:R:G:B value. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_display_palette_entry(unsigned long index, unsigned long palette) -#else -int gfx_set_display_palette_entry(unsigned long index, unsigned long palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_REG32(MDC_PAL_ADDRESS, index); - WRITE_REG32(MDC_PAL_DATA, palette); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette - * - * This routine sets the entire palette in the display controller. - * A pointer is provided to a 256 entry table of 32-bit X:R:G:B values. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_display_palette(unsigned long *palette) -#else -int gfx_set_display_palette(unsigned long *palette) -#endif -{ - unsigned long i; - WRITE_REG32(MDC_PAL_ADDRESS, 0); - - if (palette) - { - for (i = 0; i < 256; i++) - { - WRITE_REG32(MDC_PAL_DATA, palette[i]); - } - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_enable - * - * This routine enables or disables the hardware cursor. - * - * WARNING: The cursor start offset must be set by setting the cursor - * position before calling this routine to assure that memory reads do not - * go past the end of graphics memory (this can hang GXm). - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_cursor_enable(int enable) -#else -void gfx_set_cursor_enable(int enable) -#endif -{ - unsigned long unlock, gcfg; - - /* SET OR CLEAR CURSOR ENABLE BIT */ - - unlock = READ_REG32(MDC_UNLOCK); - gcfg = READ_REG32(MDC_GENERAL_CFG); - if (enable) gcfg |= MDC_GCFG_CURE; - else gcfg &= ~(MDC_GCFG_CURE); - - /* WRITE NEW REGISTER VALUE */ - - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_GENERAL_CFG, gcfg); - WRITE_REG32(MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_colors - * - * This routine sets the colors of the hardware cursor. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor) -#else -void gfx_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor) -#endif -{ - /* SET CURSOR COLORS */ - - WRITE_REG32(MDC_PAL_ADDRESS, 0x100); - WRITE_REG32(MDC_PAL_DATA, bkcolor); - WRITE_REG32(MDC_PAL_DATA, fgcolor); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_position - * - * This routine sets the position of the hardware cusror. The starting - * offset of the cursor buffer must be specified so that the routine can - * properly clip scanlines if the cursor is off the top of the screen. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot) -#else -void gfx_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot) -#endif -{ - unsigned long unlock; - - short x = (short) xpos - (short) xhotspot; - short y = (short) ypos - (short) yhotspot; - short xoffset = 0; - short yoffset = 0; - if (x < -63) return; - if (y < -63) return; - if (x < 0) { xoffset = -x; x = 0; } - if (y < 0) { yoffset = -y; y = 0; } - memoffset += (unsigned long) yoffset << 4; - - if (PanelEnable) - { - if (( ModeWidth > PanelWidth) || (ModeHeight > PanelHeight)) - { - gfx_enable_panning(xpos, ypos); - x = x - (unsigned short)panelLeft; - y = y - (unsigned short)panelTop; - } - } - - /* SET CURSOR POSITION */ - - unlock = READ_REG32(MDC_UNLOCK); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_CURS_ST_OFFSET, memoffset); - WRITE_REG32(MDC_CURSOR_X, (unsigned long) x | - (((unsigned long) xoffset) << 11)); - WRITE_REG32(MDC_CURSOR_Y, (unsigned long) y | - (((unsigned long) yoffset) << 11)); - WRITE_REG32(MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_shape32 - * - * This routine loads 32x32 cursor data into the cursor buffer in graphics memory. - * As the Redcloud cursor is actually 64x64, we must pad the outside of the - * cursor data with transparent pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#else -void gfx_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#endif -{ - int i; - - for (i = 0; i < 32; i++) - { - /* EVEN QWORDS CONTAIN THE AND MASK */ - - WRITE_FB32 (memoffset, 0xFFFFFFFF); - WRITE_FB32 (memoffset + 4, andmask[i]); - - /* ODD QWORDS CONTAIN THE XOR MASK */ - - WRITE_FB32 (memoffset + 8, 0x00000000); - WRITE_FB32 (memoffset + 12, xormask[i]); - - memoffset += 16; - } - - /* FILL THE LOWER HALF OF THE BUFFER WITH TRANSPARENT PIXELS */ - - for (i = 0; i < 32; i++) - { - WRITE_FB32 (memoffset, 0xFFFFFFFF); - WRITE_FB32 (memoffset + 4, 0xFFFFFFFF); - WRITE_FB32 (memoffset + 8, 0x00000000); - WRITE_FB32 (memoffset + 12, 0x00000000); - - memoffset += 16; - } -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_shape64 - * - * This routine loads 64x64 cursor data into the cursor buffer in graphics memory. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_cursor_shape64(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#else -void gfx_set_cursor_shape64(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -#endif -{ - int i; - - for (i = 0; i < 128; i += 2) - { - /* EVEN QWORDS CONTAIN THE AND MASK */ - /* We invert the dwords to prevent the calling */ - /* application from having to think in terms of Qwords. */ - /* The hardware data order is actually 63:0, or 31:0 of */ - /* the second dword followed by 31:0 of the first dword. */ - - WRITE_FB32 (memoffset, andmask[i + 1]); - WRITE_FB32 (memoffset + 4, andmask[i]); - - /* ODD QWORDS CONTAIN THE XOR MASK */ - - WRITE_FB32 (memoffset + 8, xormask[i + 1]); - WRITE_FB32 (memoffset + 12, xormask[i]); - - memoffset += 16; - } -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_enable - * - * This routine enables or disables the hardware icon. The icon position - * and colors should be programmed prior to calling this routine for the - * first time. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_icon_enable(int enable) -#else -void gfx_set_icon_enable(int enable) -#endif -{ - unsigned long unlock, gcfg; - - /* SET OR CLEAR ICON ENABLE BIT */ - - unlock = READ_REG32(MDC_UNLOCK); - gcfg = READ_REG32(MDC_GENERAL_CFG); - if (enable) gcfg |= MDC_GCFG_ICNE; - else gcfg &= ~(MDC_GCFG_ICNE); - - /* WRITE NEW REGISTER VALUE */ - - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_GENERAL_CFG, gcfg); - WRITE_REG32(MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_colors - * - * This routine sets the three icon colors. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_icon_colors(unsigned long color0, unsigned long color1, unsigned long color2) -#else -void gfx_set_icon_colors(unsigned long color0, unsigned long color1, unsigned long color2) -#endif -{ - /* ICON COLORS LOCATED AT PALETTE INDEXES 102-104h */ - - WRITE_REG32 (MDC_PAL_ADDRESS, 0x102); - - WRITE_REG32 (MDC_PAL_DATA, color0); - WRITE_REG32 (MDC_PAL_DATA, color1); - WRITE_REG32 (MDC_PAL_DATA, color2); -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_position - * - * This routine sets the starting X coordinate for the hardware icon and the - * memory offset for the icon buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_icon_position(unsigned long memoffset, unsigned short xpos) -#else -void gfx_set_icon_position(unsigned long memoffset, unsigned short xpos) -#endif -{ - unsigned long lock = READ_REG32 (MDC_UNLOCK); - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - - /* PROGRAM THE MEMORY OFFSET */ - - WRITE_REG32 (MDC_ICON_ST_OFFSET, memoffset & 0x0FFFFFFF); - - /* PROGRAM THE XCOORDINATE */ - - WRITE_REG32 (MDC_ICON_X, (unsigned long)(xpos & 0x07FF)); - - WRITE_REG32 (MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_shape64 - * - * This routine initializes the icon buffer according to the current mode. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_icon_shape64(unsigned long memoffset, unsigned long *andmask, unsigned long *xormask, unsigned int lines) -#else -void gfx_set_icon_shape64(unsigned long memoffset, unsigned long *andmask, unsigned long *xormask, unsigned int lines) -#endif -{ - unsigned short i, height; - - height = lines << 1; - - for (i = 0; i < height; i += 2) - { - /* EVEN QWORDS CONTAIN THE AND MASK */ - /* Swap dwords to hide qword constraint */ - - WRITE_FB32 (memoffset, andmask[i + 1]); - WRITE_FB32 (memoffset + 4, andmask[i]); - - /* ODD QWORDS CONTAIN THE XOR MASK */ - - WRITE_FB32 (memoffset + 8, xormask[i + 1]); - WRITE_FB32 (memoffset + 12, xormask[i]); - - memoffset += 16; - } -} - -/*--------------------------------------------------------------------------- - * gu2_enable_compression - * - * This is a private routine to this module (not exposed in the Durango API). - * It enables display compression. - *--------------------------------------------------------------------------- - */ -void gu2_enable_compression(void) -{ - unsigned long unlock, gcfg, temp; - - /* DO NOT ENABLE IF START ADDRESS IS NOT ZERO */ - - if (READ_REG32(MDC_FB_ST_OFFSET) & 0x0FFFFFFF) - return; - - /* SET GLOBAL INDICATOR */ - - gfx_compression_active = 1; - - /* CLEAR DIRTY/VALID BITS IN MEMORY CONTROLLER */ - /* Software is required to do this before enabling compression. */ - /* Don't want controller to think that old lines are still valid. */ - /* Writing a 1 to bit 0 of the DV Control register will force the */ - /* hardware to clear all the valid bits. */ - - temp = READ_REG32 (MDC_DV_CTL); - WRITE_REG32 (MDC_DV_CTL, temp | 0x00000001); - - /* TURN ON COMPRESSION CONTROL BITS */ - - unlock = READ_REG32 (MDC_UNLOCK); - gcfg = READ_REG32 (MDC_GENERAL_CFG); - gcfg |= MDC_GCFG_CMPE | MDC_GCFG_DECE; - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - WRITE_REG32 (MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gu2_disable_compression - * - * This is a private routine to this module (not exposed in the Durango API). - * It disables display compression. - *--------------------------------------------------------------------------- - */ -void gu2_disable_compression(void) -{ - unsigned long unlock, gcfg; - - /* SET GLOBAL INDICATOR */ - - gfx_compression_active = 0; - - /* TURN OFF COMPRESSION CONTROL BITS */ - - unlock = READ_REG32(MDC_UNLOCK); - gcfg = READ_REG32(MDC_GENERAL_CFG); - gcfg &= ~(MDC_GCFG_CMPE | MDC_GCFG_DECE); - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - WRITE_REG32 (MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_enable - * - * This routine enables or disables display compression. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_compression_enable(int enable) -#else -int gfx_set_compression_enable(int enable) -#endif -{ - /* SET GLOBAL VARIABLE FOR INDENDED STATE */ - /* Compression can only be enabled for non-zero start address values. */ - /* Keep state to enable compression on start address changes. */ - - gfx_compression_enabled = enable; - if (enable) gu2_enable_compression(); - else gu2_disable_compression(); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_offset - * - * This routine sets the base offset for the compression buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_compression_offset(unsigned long offset) -#else -int gfx_set_compression_offset(unsigned long offset) -#endif -{ - unsigned long lock; - - /* MUST BE 16-BYTE ALIGNED FOR REDCLOUD */ - - if (offset & 0x0F) return(1); - - /* SET REGISTER VALUE */ - - lock = READ_REG32(MDC_UNLOCK); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_CB_ST_OFFSET, offset & 0x0FFFFFFF); - WRITE_REG32(MDC_UNLOCK, lock); - - return (0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_pitch - * - * This routine sets the pitch, in bytes, of the compression buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_compression_pitch(unsigned short pitch) -#else -int gfx_set_compression_pitch(unsigned short pitch) -#endif -{ - unsigned long lock, line_delta; - - lock = READ_REG32(MDC_UNLOCK); - - /* SET REGISTER VALUE */ - - line_delta = READ_REG32(MDC_GFX_PITCH) & 0x0000FFFF; - line_delta |= (((unsigned long)pitch << 13) & 0xFFFF0000); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_GFX_PITCH, line_delta); - WRITE_REG32(MDC_UNLOCK, lock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_size - * - * This routine sets the line size of the compression buffer, which is the - * maximum number of bytes allowed to store a compressed line. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_compression_size(unsigned short size) -#else -int gfx_set_compression_size(unsigned short size) -#endif -{ - unsigned long lock, buf_size; - - /* SUBTRACT 32 FROM SIZE */ - /* The display controller will actually write */ - /* 4 extra QWords. So, if we assume that "size" */ - /* refers to the allocated size, we must subtract */ - /* 32 bytes. */ - - size -= 32; - - /* SET REGISTER VALUE */ - - lock = READ_REG32(MDC_UNLOCK); - buf_size = READ_REG32(MDC_LINE_SIZE) & 0xFF80FFFF; - buf_size |= ((((unsigned long)size >> 3) + 1) & 0x7F) << 16; - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_LINE_SIZE, buf_size); - WRITE_REG32(MDC_UNLOCK, lock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_format (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_format". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_format(unsigned long format) -#else -void gfx_set_display_video_format(unsigned long format) -#endif -{ - unsigned long gcfg, lock; - - lock = READ_REG32 (MDC_UNLOCK); - gcfg = READ_REG32 (MDC_GENERAL_CFG); - - switch (format) - { - case VIDEO_FORMAT_Y0Y1Y2Y3: - case VIDEO_FORMAT_Y3Y2Y1Y0: - case VIDEO_FORMAT_Y1Y0Y3Y2: - case VIDEO_FORMAT_Y1Y2Y3Y0: - - gcfg |= MDC_GCFG_YUVM; - break; - - default: - - gcfg &= ~MDC_GCFG_YUVM; - break; - } - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - WRITE_REG32 (MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_enable". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_enable(int enable) -#else -void gfx_set_display_video_enable(int enable) -#endif -{ - unsigned long lock, gcfg, dcfg; - - /* READ CURRENT VALUES */ - - lock = READ_REG32 (MDC_UNLOCK); - gcfg = READ_REG32 (MDC_GENERAL_CFG); - dcfg = READ_REG32 (MDC_DISPLAY_CFG); - - /* SET OR CLEAR VIDEO ENABLE IN GENERAL_CFG */ - - if (enable) gcfg |= MDC_GCFG_VIDE; - else gcfg &= ~MDC_GCFG_VIDE; - - /* WRITE REGISTER */ - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - WRITE_REG32 (MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_size (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_size". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_size(unsigned short width, unsigned short height) -#else -void gfx_set_display_video_size(unsigned short width, unsigned short height) -#endif -{ - unsigned long lock, value, yuv_420; - - /* READ CURRENT VALUES */ - - lock = READ_REG32 (MDC_UNLOCK); - value = READ_REG32 (MDC_LINE_SIZE) & 0x00FFFFFF; - yuv_420 = READ_REG32 (MDC_GENERAL_CFG) & MDC_GCFG_YUVM; - - /* LINE WIDTH IS 1/4 FOR 4:2:0 VIDEO */ - /* All data must be 32-byte aligned. */ - - if (yuv_420) - { - width >>= 1; - width = (width + 7) & 0xFFF8; - } - else - { - width <<= 1; - width = (width + 31) & 0xFFE0; - } - - /* ONLY THE LINE SIZE IS PROGRAMMED IN THE DISPLAY CONTROLLER */ - - value |= ((unsigned long)width << 21); - - /* WRITE THE REGISTER */ - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_LINE_SIZE, value); - WRITE_REG32 (MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_offset (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_offset". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_offset(unsigned long offset) -#else -void gfx_set_display_video_offset(unsigned long offset) -#endif -{ - unsigned long lock; - - lock = READ_REG32(MDC_UNLOCK); - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - offset &= 0x0FFFFFF0; - WRITE_REG32(MDC_VID_Y_ST_OFFSET, offset); - WRITE_REG32(MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_yuv_offsets (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by gfx_set_video_yuv_offsets. It abstracts the version - * of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, - unsigned long voffset) -#else -void gfx_set_display_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, - unsigned long voffset) -#endif -{ - unsigned long lock; - - lock = READ_REG32(MDC_UNLOCK); - - yoffset &= 0x0FFFFFF0; - uoffset &= 0x0FFFFFF8; - voffset &= 0x0FFFFFF8; - - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_VID_Y_ST_OFFSET, yoffset); - WRITE_REG32(MDC_VID_U_ST_OFFSET, uoffset); - WRITE_REG32(MDC_VID_V_ST_OFFSET, voffset); - WRITE_REG32(MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_yuv_pitch (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by gfx_set_video_yuv_pitch. It abstracts the version - * of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_yuv_pitch (unsigned long ypitch, unsigned long uvpitch) -#else -void gfx_set_display_video_yuv_pitch (unsigned long ypitch, unsigned long uvpitch) -#endif -{ - unsigned long lock, pitch; - - lock = READ_REG32(MDC_UNLOCK); - - pitch = ((uvpitch << 13) & 0xFFFF0000) | ((ypitch >> 3) & 0xFFFF); - - WRITE_REG32(MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32(MDC_VID_YUV_PITCH, pitch); - WRITE_REG32(MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_downscale (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by gfx_set_video_vertical_downscale. It abstracts the version - * of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_downscale (unsigned short srch, unsigned short dsth) -#else -void gfx_set_display_video_downscale (unsigned short srch, unsigned short dsth) -#endif -{ - unsigned long lock, delta; - - lock = READ_REG32 (MDC_UNLOCK); - - /* CLIP SCALING LIMITS */ - /* Upscaling is performed in a separate function. */ - /* Maximum scale ratio is 1/2. */ - - if (dsth > srch || dsth <= (srch >> 1)) - delta = 0; - else - delta = (((unsigned long)srch << 14) / (unsigned long)dsth) << 18; - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_VID_DS_DELTA, delta); - WRITE_REG32 (MDC_UNLOCK, lock); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_downscale_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_vertical_downscale_enable". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_set_display_video_vertical_downscale_enable(int enable) -#else -void gfx_set_display_video_vertical_downscale_enable(int enable) -#endif -{ - unsigned long gcfg, unlock; - - unlock = READ_REG32 (MDC_UNLOCK); - gcfg = READ_REG32 (MDC_GENERAL_CFG); - - if (enable) gcfg |= MDC_GCFG_VDSE; - else gcfg &= ~MDC_GCFG_VDSE; - - WRITE_REG32 (MDC_UNLOCK, MDC_UNLOCK_VALUE); - WRITE_REG32 (MDC_GENERAL_CFG, gcfg); - WRITE_REG32 (MDC_UNLOCK, unlock); -} - -/*--------------------------------------------------------------------------- - * gfx_test_timing_active - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_test_timing_active(void) -#else -int gfx_test_timing_active(void) -#endif -{ - if (READ_REG32 (MDC_DISPLAY_CFG) & MDC_DCFG_TGEN) - return(1); - else return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_test_vertical_active - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_test_vertical_active(void) -#else -int gfx_test_vertical_active(void) -#endif -{ - if (READ_REG32 (MDC_LINE_CNT_STATUS) & MDC_LNCNT_VNA) - return(0); - - return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_wait_vertical_blank - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_wait_vertical_blank(void) -#else -int gfx_wait_vertical_blank(void) -#endif -{ - if (gfx_test_timing_active()) - { - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_enable_panning - * - * This routine enables the panning when the Mode is bigger than the panel - * size. - *--------------------------------------------------------------------------- - */ - -#if GFX_DISPLAY_DYNAMIC -void gu2_enable_panning( int x, int y) -#else -void gfx_enable_panning(int x, int y) -#endif -{ - unsigned long modeBytesPerPixel; - unsigned long modeBytesPerScanline = 0; - unsigned long startAddress = 0; - - modeBytesPerPixel = (gbpp + 7)/8; - modeBytesPerScanline = (((ModeWidth + 1023) / 1024) * 1024) * modeBytesPerPixel; - - /* TEST FOR NO-WORK */ - - if (x >= DeltaX && x < ((int)PanelWidth + DeltaX) && - y >= DeltaY && y < ((int)PanelHeight + DeltaY)) - return; - - - /* ADJUST PANNING VARIABLES WHEN CURSOR EXCEEDS BOUNDARY */ - /* Test the boundary conditions for each coordinate and update */ - /* all variables and the starting offset accordingly. */ - - if (x < DeltaX) - DeltaX = x; - - else if (x >= (DeltaX + (int)PanelWidth)) - DeltaX = x - (int)PanelWidth + 1; - - if (y < DeltaY) - DeltaY = y; - - else if (y >= (DeltaY + (int)PanelHeight)) - DeltaY = y - (int)PanelHeight + 1; - - - /* CALCULATE THE START OFFSET */ - - startAddress = (DeltaX * modeBytesPerPixel) + (DeltaY * modeBytesPerScanline); - - gfx_set_display_offset(startAddress); - - /* SET PANEL COORDINATES */ - /* Panel's x position must be DWORD aligned */ - - panelTop = DeltaY; - panelLeft = DeltaX * modeBytesPerPixel; - - if (panelLeft & 3) - panelLeft = (panelLeft & 0xFFFFFFFC) + 4; - - panelLeft /= modeBytesPerPixel; -} - -/*--------------------------------------------------------------------------- - * gfx_set_fixed_timings - *--------------------------------------------------------------------------- - */ - -#if GFX_DISPLAY_DYNAMIC -int gu2_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#else -int gfx_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#endif -{ - int mode; - - ModeWidth = width; - ModeHeight = height; - PanelWidth = (unsigned short)panelResX; - PanelHeight = (unsigned short)panelResY; - PanelEnable = 1; - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - for (mode = 0; mode < NUM_FIXED_TIMINGS_MODES; mode++) { - if ((FixedParams[mode].xres == width) && - (FixedParams[mode].yres == height) && - (FixedParams[mode].panelresx == panelResX) && - (FixedParams[mode].panelresy == panelResY)) { - - /* SET THE 92xx FOR THE SELECTED MODE */ - FIXEDTIMINGS *fmode = &FixedParams[mode]; - - gfx_set_display_timings(bpp, 3, fmode->hactive,fmode->hblankstart, fmode->hsyncstart, fmode->hsyncend, - fmode->hblankend, fmode->htotal, fmode->vactive, fmode->vblankstart, - fmode->vsyncstart, fmode->vsyncend, fmode->vblankend, fmode->vtotal, fmode->frequency); - - return(1); - } /* end if() */ - } /* end for() */ - - return(-1); -} - -/*--------------------------------------------------------------------------- - * gfx_set_panel_present - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#else -int gfx_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -#endif -{ - /* SET VALID BPP */ - /* 16BPP is the default. */ - - if (bpp != 8 && bpp != 12 && bpp != 15 && bpp != 16 && bpp != 32) - bpp = 16; - - /* RECORD PANEL PARAMETERS */ - /* This routine does not touch any panel timings. It is used when custom panel */ - /* settings are set up in advance by the BIOS or an application, but the */ - /* application still requires access to other panel functionality provided by */ - /* Durango (i.e. panning). */ - - ModeWidth = width; - ModeHeight = height; - PanelWidth = (unsigned short)panelResX; - PanelHeight = (unsigned short)panelResY; - PanelEnable = 1; - gbpp = bpp; - - /* PROGRAM THE BPP IN THE DISPLAY CONTROLLER */ - - gfx_set_display_bpp (bpp); - - return(GFX_STATUS_OK); -} - -/* THE FOLLOWING READ ROUTINES ARE ALWAYS INCLUDED: */ - -/*--------------------------------------------------------------------------- - * gfx_get_display_pitch - * - * This routine returns the current pitch of the frame buffer, in bytes. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_display_pitch(void) -#else -unsigned short gfx_get_display_pitch(void) -#endif -{ - return ((unsigned short)(READ_REG32 (MDC_GFX_PITCH) & 0x0000FFFF) << 3); -} - -/*---------------------------------------------------------------------------- - * gfx_mode_frequency_supported - * - * This routine examines if the requested mode with pixel frequency is supported. - * - * Returns >0 if successful , <0 if freq. could not be found and matched. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency) -#else -int gfx_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency) -#endif -{ - int index; - unsigned long value; - unsigned long bpp_flag = 0; - - switch (bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: bpp_flag = GFX_MODE_8BPP; break; - } - - for (index = 0; index < NUM_RC_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned int)xres) && - (DisplayParams[index].vactive == (unsigned int)yres) && - (DisplayParams[index].flags & bpp_flag) && - (DisplayParams[index].frequency == frequency)) - { - int hz=0; - value = DisplayParams[index].flags; - - if (value & GFX_MODE_60HZ) hz = 60; - else if (value & GFX_MODE_70HZ) hz = 70; - else if (value & GFX_MODE_72HZ) hz = 72; - else if (value & GFX_MODE_75HZ) hz = 75; - else if (value & GFX_MODE_85HZ) hz = 85; - return(hz); - } - } - - return(-1); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_frequency - * - * This routine maps the frequency to close match refresh rate - * - * Returns . - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#else -int gfx_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#endif -{ - int index, closematch=0; - unsigned long value; - unsigned long bpp_flag = 0; - long min, diff; - - *hz = 60; - - switch (bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: bpp_flag = GFX_MODE_8BPP; break; - } - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - min = 0x7fffffff; - for (index = 0; index < NUM_RC_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].htotal == (unsigned int)xres) && - (DisplayParams[index].vtotal == (unsigned int)yres) && - (DisplayParams[index].flags & bpp_flag)) - { - diff = (long)frequency - (long)DisplayParams[index].frequency; - if(diff < 0) diff = -diff; - - if (diff < min) - { - min = diff; - closematch = index; - } - } - } - - value = DisplayParams[closematch].flags; - - if (value & GFX_MODE_56HZ) *hz = 56; - else if (value & GFX_MODE_60HZ) *hz = 60; - else if (value & GFX_MODE_70HZ) *hz = 70; - else if (value & GFX_MODE_72HZ) *hz = 72; - else if (value & GFX_MODE_75HZ) *hz = 75; - else if (value & GFX_MODE_85HZ) *hz = 85; - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_mode - * - * This routine is identical to the gfx_get_refreshrate_from_frequency, - * except that the active timing values are compared instead of the total - * values. Some modes (such as 70Hz and 72Hz) may be confused in this routine. - * - * Returns . - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#else -int gfx_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency) -#endif -{ - int index, closematch=0; - unsigned long value; - unsigned long bpp_flag = 0; - long min, diff; - - *hz = 60; - - switch (bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: bpp_flag = GFX_MODE_8BPP; break; - } - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - min = 0x7fffffff; - for (index = 0; index < NUM_RC_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned int)xres) && - (DisplayParams[index].vactive == (unsigned int)yres) && - (DisplayParams[index].flags & bpp_flag)) - { - diff = (long)frequency - (long)DisplayParams[index].frequency; - if(diff < 0) diff = -diff; - - if (diff < min) - { - min = diff; - closematch = index; - } - } - } - - value = DisplayParams[closematch].flags; - - if (value & GFX_MODE_56HZ) *hz = 56; - else if (value & GFX_MODE_60HZ) *hz = 60; - else if (value & GFX_MODE_70HZ) *hz = 70; - else if (value & GFX_MODE_72HZ) *hz = 72; - else if (value & GFX_MODE_75HZ) *hz = 75; - else if (value & GFX_MODE_85HZ) *hz = 85; - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_get_frequency_from_refreshrate - * - * This routine maps the refresh rate to the closest matching PLL frequency. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency) -#else -int gfx_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency) -#endif -{ - int index, retval = -1; - unsigned long hz_flag = 0; - unsigned long bpp_flag = 0; - - *frequency = 0; - - if (hz == 60) hz_flag = GFX_MODE_60HZ; - else if (hz == 70) hz_flag = GFX_MODE_70HZ; - else if (hz == 72) hz_flag = GFX_MODE_72HZ; - else if (hz == 75) hz_flag = GFX_MODE_75HZ; - else if (hz == 85) hz_flag = GFX_MODE_85HZ; - - switch (bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: bpp_flag = GFX_MODE_8BPP; break; - } - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - for (index = 0; index < NUM_RC_DISPLAY_MODES; index++) - { - if ((DisplayParams[index].hactive == (unsigned short)xres) && - (DisplayParams[index].vactive == (unsigned short)yres) && - (DisplayParams[index].flags & bpp_flag) && - (DisplayParams[index].flags & hz_flag)) - { - *frequency = DisplayParams[index].frequency; - retval = 1; - } - } - return retval; -} - - -/*--------------------------------------------------------------------------- - * gfx_get_max_supported_pixel_clock - * - * This routine returns the maximum recommended speed for the pixel clock. The - * return value is an integer of the format xxxyyy, where xxx.yyy is the maximum - * floating point pixel clock speed. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_max_supported_pixel_clock (void) -#else -unsigned long gfx_get_max_supported_pixel_clock (void) -#endif - -{ - return 229500; -} - -/*---------------------------------------------------------------------------- - * gfx_get_display_mode - * - * This routine gets the specified display mode. - * - * Returns >0 if successful and mode returned, <0 if mode could not be found. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_display_mode(int *xres, int *yres, int *bpp, int *hz) -#else -int gfx_get_display_mode(int *xres, int *yres, int *bpp, int *hz) -#endif -{ - int mode=0; - unsigned long pll_freq = 0, bpp_flag = 0; - - *xres = gfx_get_hactive(); - *yres = gfx_get_vactive(); - *bpp = gfx_get_display_bpp(); - pll_freq = gfx_get_clock_frequency(); - - /* SET BPP FLAGS TO LIMIT MODE SELECTION */ - - switch (*bpp) - { - case 8: bpp_flag = GFX_MODE_8BPP; break; - case 12: bpp_flag = GFX_MODE_12BPP; break; - case 15: bpp_flag = GFX_MODE_15BPP; break; - case 16: bpp_flag = GFX_MODE_16BPP; break; - case 32: bpp_flag = GFX_MODE_24BPP; break; - default: bpp_flag = GFX_MODE_8BPP; break; - } - - for (mode = 0; mode < NUM_RC_DISPLAY_MODES; mode++) { - if ((DisplayParams[mode].hactive == (unsigned int)*xres) && - (DisplayParams[mode].vactive == (unsigned int)*yres) && - (DisplayParams[mode].frequency == pll_freq) && - (DisplayParams[mode].flags & bpp_flag)) { - - pll_freq = DisplayParams[mode].flags; - - if (pll_freq & GFX_MODE_56HZ) *hz = 56; - else if (pll_freq & GFX_MODE_60HZ) *hz = 60; - else if (pll_freq & GFX_MODE_70HZ) *hz = 70; - else if (pll_freq & GFX_MODE_72HZ) *hz = 72; - else if (pll_freq & GFX_MODE_75HZ) *hz = 75; - else if (pll_freq & GFX_MODE_85HZ) *hz = 85; - - return(1); - } - } - return(-1); -} - -/*---------------------------------------------------------------------------- - * GFX_GET_DISPLAY_DETAILS - * - * This routine gets the specified display mode. - * - * Returns 1 if successful, 0 if mode could not be get. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_display_details(unsigned int mode, int *xres, int *yres, int *hz) -#else -int gfx_get_display_details(unsigned int mode, int *xres, int *yres, int *hz) -#endif -{ - if(mode < NUM_RC_DISPLAY_MODES) - { - if(DisplayParams[mode].flags & GFX_MODE_56HZ) - *hz = 56; - else if(DisplayParams[mode].flags & GFX_MODE_60HZ) - *hz = 60; - else if(DisplayParams[mode].flags & GFX_MODE_70HZ) - *hz = 70; - else if(DisplayParams[mode].flags & GFX_MODE_72HZ) - *hz = 72; - else if(DisplayParams[mode].flags & GFX_MODE_75HZ) - *hz = 75; - else if(DisplayParams[mode].flags & GFX_MODE_85HZ) - *hz = 85; - - *xres = DisplayParams[mode].hactive; - *yres = DisplayParams[mode].vactive; - - if (DisplayParams[mode].flags & GFX_MODE_PIXEL_DOUBLE) - *xres >>= 1; - if (DisplayParams[mode].flags & GFX_MODE_LINE_DOUBLE) - *yres >>= 1; - - return(1); - } - return(0); -} - -/*---------------------------------------------------------------------------- - * GFX_GET_DISPLAY_MODE_COUNT - * - * This routine gets the number of available display modes. - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_display_mode_count(void) -#else -int gfx_get_display_mode_count(void) -#endif -{ - return(NUM_RC_DISPLAY_MODES); -} - -/*---------------------------------------------------------------------------- - * gfx_get_frame_buffer_line_size - * - * Returns the current frame buffer line size, in bytes - *---------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_frame_buffer_line_size(void) -#else -unsigned long gfx_get_frame_buffer_line_size(void) -#endif -{ - return ((READ_REG32 (MDC_LINE_SIZE) & 0x7FF) << 3); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hactive - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_hactive(void) -#else -unsigned short gfx_get_hactive(void) -#endif -{ - return((unsigned short)((READ_REG32(MDC_H_ACTIVE_TIMING) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_hsync_start(void) -#else -unsigned short gfx_get_hsync_start(void) -#endif -{ - return ((unsigned short)((READ_REG32(MDC_H_SYNC_TIMING) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_hsync_end(void) -#else -unsigned short gfx_get_hsync_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(MDC_H_SYNC_TIMING) >> 16) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_htotal - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_htotal(void) -#else -unsigned short gfx_get_htotal(void) -#endif -{ - return((unsigned short)(((READ_REG32(MDC_H_ACTIVE_TIMING) >> 16) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vactive - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vactive(void) -#else -unsigned short gfx_get_vactive(void) -#endif -{ - return((unsigned short)((READ_REG32(MDC_V_ACTIVE_TIMING) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vsync_end(void) -#else -unsigned short gfx_get_vsync_end(void) -#endif -{ - return((unsigned short)(((READ_REG32(MDC_V_SYNC_TIMING) >> 16) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vtotal - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vtotal(void) -#else -unsigned short gfx_get_vtotal(void) -#endif -{ - return((unsigned short)(((READ_REG32(MDC_V_ACTIVE_TIMING) >> 16) & 0x07FF) + 1)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_bpp - * - * This routine returns the current color depth of the active display. - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_display_bpp(void) -#else -unsigned short gfx_get_display_bpp(void) -#endif -{ - unsigned long dcfg = READ_REG32 (MDC_DISPLAY_CFG); - - switch ((dcfg & MDC_DCFG_DISP_MODE_MASK) >> 8) - { - case 0: return (8); - case 2: return (32); - - case 1: - - switch ((dcfg & MDC_DCFG_16BPP_MODE_MASK) >> 10) - { - case 0: return (16); - case 1: return (15); - case 2: return (12); - default: return (0); - } - } - - /* INVALID SETTING */ - - return (0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vline - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vline(void) -#else -unsigned short gfx_get_vline(void) -#endif -{ - unsigned short current_scan_line; - - /* Read similar value twice to ensure that the value is not transitioning */ - - do current_scan_line = (unsigned short)(READ_REG32(MDC_LINE_CNT_STATUS) & MDC_LNCNT_V_LINE_CNT); - while(current_scan_line != (unsigned short)(READ_REG32(MDC_LINE_CNT_STATUS) & MDC_LNCNT_V_LINE_CNT)); - - return (current_scan_line >> 16); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_display_offset(void) -#else -unsigned long gfx_get_display_offset(void) -#endif -{ - return (READ_REG32(MDC_FB_ST_OFFSET) & 0x0FFFFFFF); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_cursor_offset(void) -#else -unsigned long gfx_get_cursor_offset(void) -#endif -{ - return (READ_REG32(MDC_CURS_ST_OFFSET) & 0x0FFFFFFF); -} - -#if GFX_READ_ROUTINES - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_hblank_start(void) -#else -unsigned short gfx_get_hblank_start(void) -#endif -{ - return ((unsigned short)((READ_REG32(MDC_H_BLANK_TIMING) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_hblank_end(void) -#else -unsigned short gfx_get_hblank_end(void) -#endif -{ - return ((unsigned short)(((READ_REG32(MDC_H_BLANK_TIMING) >> 16) & 0x0FF8) + 8)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vblank_start(void) -#else -unsigned short gfx_get_vblank_start(void) -#endif -{ - return ((unsigned short)((READ_REG32(MDC_V_BLANK_TIMING) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_start - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vsync_start(void) -#else -unsigned short gfx_get_vsync_start(void) -#endif -{ - return ((unsigned short)((READ_REG32(MDC_V_SYNC_TIMING) & 0x07FF) + 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_end - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_vblank_end(void) -#else -unsigned short gfx_get_vblank_end(void) -#endif -{ - return ((unsigned short)(((READ_REG32(MDC_V_BLANK_TIMING) >> 16) & 0x07FF) + 1)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_palette_entry - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_display_palette_entry(unsigned long index, unsigned long *palette) -#else -int gfx_get_display_palette_entry(unsigned long index, unsigned long *palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_REG32(MDC_PAL_ADDRESS, index); - *palette = READ_REG32(MDC_PAL_DATA); - - return 0; -} - -/*----------------------------------------------------------------------------- - * gfx_get_display_palette - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_get_display_palette(unsigned long *palette) -#else -void gfx_get_display_palette(unsigned long *palette) -#endif -{ - unsigned long i; - - WRITE_REG32(MDC_PAL_ADDRESS, 0); - for (i = 0; i < 256; i++) - { - palette[i] = READ_REG32(MDC_PAL_DATA); - } -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_enable - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_cursor_enable(void) -#else -unsigned long gfx_get_cursor_enable(void) -#endif -{ - return (READ_REG32(MDC_GENERAL_CFG) & MDC_GCFG_CURE); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_position - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_cursor_position(void) -#else -unsigned long gfx_get_cursor_position(void) -#endif -{ - return((READ_REG32(MDC_CURSOR_X) & 0x07FF) | - ((READ_REG32(MDC_CURSOR_Y) << 16) & 0x03FF0000)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_cursor_clip(void) -#else -unsigned long gfx_get_cursor_clip(void) -#endif -{ - return (((READ_REG32(MDC_CURSOR_X) >> 11) & 0x03F) | - ((READ_REG32(MDC_CURSOR_Y) << 5) & 0x3F0000)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cursor_color - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_cursor_color(int color) -#else -unsigned long gfx_get_cursor_color(int color) -#endif -{ - if (color) - { - WRITE_REG32(MDC_PAL_ADDRESS, 0x101); - } - else - { - WRITE_REG32(MDC_PAL_ADDRESS, 0x100); - } - return READ_REG32(MDC_PAL_DATA); -} - -/*----------------------------------------------------------------------------- - * gfx_get_icon_enable - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_icon_enable(void) -#else -unsigned long gfx_get_icon_enable(void) -#endif -{ - return (READ_REG32(MDC_GENERAL_CFG) & MDC_GCFG_ICNE); -} - -/*----------------------------------------------------------------------------- - * gfx_get_icon_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_icon_offset(void) -#else -unsigned long gfx_get_icon_offset(void) -#endif -{ - return (READ_REG32(MDC_ICON_ST_OFFSET) & 0x0FFFFFFF); -} - -/*----------------------------------------------------------------------------- - * gfx_get_icon_position - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_icon_position(void) -#else -unsigned long gfx_get_icon_position(void) -#endif -{ - return (READ_REG32(MDC_ICON_X) & 0x07FF); -} - -/*----------------------------------------------------------------------------- - * gfx_get_icon_color - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_icon_color(int color) -#else -unsigned long gfx_get_icon_color(int color) -#endif -{ - if (color >= 3) - return 0; - - WRITE_REG32(MDC_PAL_ADDRESS, 0x102 + color); - - return READ_REG32(MDC_PAL_DATA); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_enable - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_compression_enable(void) -#else -int gfx_get_compression_enable(void) -#endif -{ - if (READ_REG32 (MDC_GENERAL_CFG) & MDC_GCFG_CMPE) - return (1); - - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_offset - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_compression_offset(void) -#else -unsigned long gfx_get_compression_offset(void) -#endif -{ - return (READ_REG32(MDC_CB_ST_OFFSET) & 0x007FFFFF); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_pitch - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_compression_pitch(void) -#else -unsigned short gfx_get_compression_pitch(void) -#endif -{ - unsigned short pitch; - pitch = (unsigned short)(READ_REG32(MDC_GFX_PITCH) >> 16); - return (pitch << 3); -} - -/*----------------------------------------------------------------------------- - * gfx_get_compression_size - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned short gu2_get_compression_size(void) -#else -unsigned short gfx_get_compression_size(void) -#endif -{ - unsigned short size; - size = (unsigned short)((READ_REG32(MDC_LINE_SIZE) >> 16) & 0x7F) - 1; - return ((size << 3) + 32); -} - -/*----------------------------------------------------------------------------- - * gfx_get_valid_bit - *----------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_valid_bit(int line) -#else -int gfx_get_valid_bit(int line) -#endif -{ - unsigned long offset; - int valid; - - offset = READ_REG32 (MDC_PHY_MEM_OFFSET) & 0xFF000000; - offset |= line; - - WRITE_REG32(MDC_PHY_MEM_OFFSET, offset); - valid = (int)READ_REG32 (MDC_DV_ACC) & 2; - - if (valid) return 1; - return 0; -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_offset (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_offset". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_display_video_offset(void) -#else -unsigned long gfx_get_display_video_offset(void) -#endif -{ - return (READ_REG32(MDC_VID_Y_ST_OFFSET) & 0x0FFFFFFF); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_yuv_offsets (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_yuv_offsets". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_get_display_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -#else -void gfx_get_display_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -#endif -{ - *yoffset = (READ_REG32(MDC_VID_Y_ST_OFFSET) & 0x0FFFFFFF); - *uoffset = (READ_REG32(MDC_VID_U_ST_OFFSET) & 0x0FFFFFFF); - *voffset = (READ_REG32(MDC_VID_V_ST_OFFSET) & 0x0FFFFFFF); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_yuv_pitch (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_yuv_pitch". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -void gu2_get_display_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -#else -void gfx_get_display_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -#endif -{ - unsigned long pitch = READ_REG32 (MDC_VID_YUV_PITCH); - - *ypitch = ((pitch & 0xFFFF) << 3); - *uvpitch = (pitch >> 13) & 0x7FFF8; -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_downscale_delta (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_downscale_delta". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_display_video_downscale_delta(void) -#else -unsigned long gfx_get_display_video_downscale_delta(void) -#endif -{ - return (READ_REG32(MDC_VID_DS_DELTA) >> 18); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_downscale_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_vertical_downscale_enable". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -int gu2_get_display_video_downscale_enable(void) -#else -int gfx_get_display_video_downscale_enable(void) -#endif -{ - return ((int)((READ_REG32(MDC_GENERAL_CFG) >> 19) & 1)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_size (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_get_video_size". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -#if GFX_DISPLAY_DYNAMIC -unsigned long gu2_get_display_video_size(void) -#else -unsigned long gfx_get_display_video_size(void) -#endif -{ - /* RETURN THE LINE SIZE, AS THIS IS ALL THAT IS AVAILABLE */ - - return((READ_REG32(MDC_LINE_SIZE) >> 21) & 0x000007FF); -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/durango.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/durango.c deleted file mode 100644 index 630fd74cd..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/durango.c +++ /dev/null @@ -1,596 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/durango.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: durango.c $ - * - * This is the main file used to add Durango graphics support to a software - * project. The main reason to have a single file include the other files - * is that it centralizes the location of the compiler options. This file - * should be tuned for a specific implementation, and then modified as needed - * for new Durango releases. The releases.txt file indicates any updates to - * this main file, such as a new definition for a new hardware platform. - * - * In other words, this file should be copied from the Durango source files - * once when a software project starts, and then maintained as necessary. - * It should not be recopied with new versions of Durango unless the - * developer is willing to tune the file again for the specific project. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* COMPILER OPTIONS - * These compiler options specify how the Durango routines are compiled - * for the different hardware platforms. For best performance, a driver - * would build for a specific platform. The "dynamic" switches are set - * by diagnostic applications such as Darwin that will run on a variety - * of platforms and use the appropriate code at runtime. Each component - * may be separately dynamic, so that a driver has the option of being - * tuned for a specific 2D accelerator, but will still run with a variety - * of chipsets. - */ - -#define GFX_DISPLAY_DYNAMIC 1 /* runtime selection */ -#define GFX_DISPLAY_GU1 1 /* 1st generation display controller */ -#define GFX_DISPLAY_GU2 1 /* 2nd generation display controller */ - -#define GFX_INIT_DYNAMIC 1 /* runtime selection */ -#define GFX_INIT_GU1 1 /* Geode family */ -#define GFX_INIT_GU2 1 /* Redcloud */ - -#define GFX_MSR_DYNAMIC 1 /* runtime selection */ -#define GFX_MSR_REDCLOUD 1 /* Redcloud */ - -#define GFX_2DACCEL_DYNAMIC 1 /* runtime selection */ -#define GFX_2DACCEL_GU1 1 /* 1st generation 2D accelerator */ -#define GFX_2DACCEL_GU2 1 /* 2nd generation 2D accelerator */ - -#define GFX_VIDEO_DYNAMIC 1 /* runtime selection */ -#define GFX_VIDEO_CS5530 1 /* support for CS5530 */ -#define GFX_VIDEO_SC1200 1 /* support for SC1200 */ -#define GFX_VIDEO_REDCLOUD 1 /* support for Redcloud */ - -#define GFX_VIP_DYNAMIC 1 /* runtime selection */ -#define GFX_VIP_SC1200 1 /* support for SC1200 */ - -#define GFX_DECODER_DYNAMIC 1 /* runtime selection */ -#define GFX_DECODER_SAA7114 1 /* Philips SAA7114 decoder */ - -#define GFX_TV_DYNAMIC 1 /* runtime selection */ -#define GFX_TV_FS451 1 /* Focus Enhancements FS450 */ -#define GFX_TV_SC1200 1 /* SC1200 integrated TV encoder */ - -#define GFX_I2C_DYNAMIC 1 /* runtime selection */ -#define GFX_I2C_ACCESS 1 /* support for ACCESS.BUS */ -#define GFX_I2C_GPIO 1 /* support for CS5530 GPIOs */ - -#define GFX_VGA_DYNAMIC 1 /* runtime selection */ -#define GFX_VGA_GU1 1 /* 1st generation graphics unit */ - -#define FB4MB 1 /* Set to use 4Mb video ram for Pyramid */ - -#define GFX_NO_IO_IN_WAIT_MACROS 0 /* Set to remove I/O accesses in GP bit testing */ - -/* ROUTINES TO READ VALUES - * These are routines used by Darwin or other diagnostics to read the - * current state of the hardware. Display drivers or embedded applications can - * reduce the size of the Durango code by not including these routines. - */ -#define GFX_READ_ROUTINES 1 /* add routines to read values */ - -/* VARIABLES USED FOR RUNTIME SELECTION - * If part of the graphics subsystem is declared as dynamic, then the - * following variables are used to specify which platform has been detected. - * The variables are set in the "gfx_detect_cpu" routine. The values should - * be bit flags to allow masks to be used to check for multiple platforms. - */ - -#if GFX_DISPLAY_DYNAMIC -int gfx_display_type = 0; -#endif - -#if GFX_INIT_DYNAMIC -int gfx_init_type = 0; -#endif - -#if GFX_MSR_DYNAMIC -int gfx_msr_type = 0; -#endif - -#if GFX_2DACCEL_DYNAMIC -int gfx_2daccel_type = 0; -#endif - -#if GFX_VIDEO_DYNAMIC -int gfx_video_type = 0; -#endif - -#if GFX_VIP_DYNAMIC -int gfx_vip_type = 0; -#endif - -#if GFX_DECODER_DYNAMIC -int gfx_decoder_type = 0; -#endif - -#if GFX_TV_DYNAMIC -int gfx_tv_type = 0; -#endif - -#if GFX_I2C_DYNAMIC -int gfx_i2c_type = 0; -#endif - -#if GFX_VGA_DYNAMIC -int gfx_vga_type = 0; -#endif - -/* HEADER FILE FOR DURANGO ROUTINE DEFINITIONS - * Needed since some of the Durango routines call other Durango routines. - * Also defines the size of chipset array (GFX_CSPTR_SIZE). - */ -#include "gfx_rtns.h" /* routine definitions */ - -/* DEFINE POINTERS TO MEMORY MAPPED REGIONS - * These pointers are used by the Durango routines to access the hardware. - * The variables must be set by the project's initialization code after - * mapping the regions in the appropriate manner. - */ - -/* DEFINE VIRTUAL ADDRESSES */ -/* Note: These addresses define the starting base expected by all */ -/* Durango offsets. Under an OS that requires these pointers */ -/* to be mapped to linear addresses (i.e Windows), it may not */ -/* be possible to keep these base offsets. In these cases, */ -/* the addresses are modified to point to the beginning of the */ -/* relevant memory region and the access macros are adjusted */ -/* to subtract the offset from the default base. For example, */ -/* the register pointer could be moved to be 0x40008000, while */ -/* the WRITE_REG* macros are modified to subtract 0x8000 from */ -/* the offset. */ - -unsigned char *gfx_virt_regptr = (unsigned char *) 0x40000000; -unsigned char *gfx_virt_fbptr = (unsigned char *) 0x40800000; -unsigned char *gfx_virt_vidptr = (unsigned char *) 0x40010000; -unsigned char *gfx_virt_vipptr = (unsigned char *) 0x40015000; -unsigned char *gfx_virt_spptr = (unsigned char *) 0x40000000; -unsigned char *gfx_virt_gpptr = (unsigned char *) 0x40000000; - -/* DEFINE PHYSICAL ADDRESSES */ - -unsigned char *gfx_phys_regptr = (unsigned char *) 0x40000000; -unsigned char *gfx_phys_fbptr = (unsigned char *) 0x40800000; -unsigned char *gfx_phys_vidptr = (unsigned char *) 0x40010000; -unsigned char *gfx_phys_vipptr = (unsigned char *) 0x40015000; - -/* HEADER FILE FOR GRAPHICS REGISTER DEFINITIONS - * This contains only constant definitions, so it should be able to be - * included in any software project as is. - */ -#include "gfx_regs.h" /* graphics register definitions */ - -/* HEADER FILE FOR REGISTER ACCESS MACROS - * This file contains the definitions of the WRITE_REG32 and similar macros - * used by the Durango routines to access the hardware. The file assumes - * that the environment can handle 32-bit pointer access. If this is not - * the case, or if there are special requirements, then this header file - * should not be included and the project must define the macros itself. - * (A project may define WRITE_REG32 to call a routine, for example). - */ -#include "gfx_defs.h" /* register access macros */ - -/* IO MACROS AND ROUTINES - * These macros must be defined before the initialization or I2C - * routines will work properly. - */ - -#if defined(OS_WIN32) /* For Windows */ - -/* VSA II CALL */ - -void gfx_msr_asm_read (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long temp1, temp2; - - _asm { - mov dx, 0x0AC1C - mov eax, 0x0FC530007 - out dx, eax - - add dl, 2 - mov ecx, msrAddr - mov cx, msrReg - in ax, dx - - ; EDX:EAX will contain MSR contents. - - mov temp1, edx - mov temp2, eax - } - - *ptrHigh = temp1; - *ptrLow = temp2; -} - -void gfx_msr_asm_write (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long temp1 = *ptrHigh; - unsigned long temp2 = *ptrLow; - - _asm { - - mov dx, 0x0AC1C - mov eax, 0x0FC530007 - out dx, eax - - add dl, 2 - mov ecx, msrAddr ; ECX contains msrAddr | msrReg - mov cx, msrReg ; - mov ebx, temp1 ; <OR_mask_hi> - mov eax, temp2 ; <OR_mask_hi> - - mov esi, 0 ; <AND_mask_hi> - mov edi, 0 ; <AND_mask_lo> - out dx, ax - - ; MSR is written at this point - } -} - -unsigned char gfx_inb(unsigned short port) -{ - unsigned char data; - _asm { - pushf - mov dx, port - in al, dx - mov data, al - popf - } - return(data); -} - -unsigned short gfx_inw(unsigned short port) -{ - unsigned short data; - _asm { - pushf - mov dx, port - in ax, dx - mov data, ax - popf - } - return(data); -} - -unsigned long gfx_ind(unsigned short port) -{ - unsigned long data; - _asm { - pushf - mov dx, port - in eax, dx - mov data, eax - popf - } - return(data); -} - -void gfx_outb(unsigned short port, unsigned char data) -{ - _asm { - pushf - mov al, data - mov dx, port - out dx, al - popf - } -} - -void gfx_outw(unsigned short port, unsigned short data) -{ - _asm { - pushf - mov ax, data - mov dx, port - out dx, ax - popf - } -} - -void gfx_outd(unsigned short port, unsigned long data) -{ - _asm { - pushf - mov eax, data - mov dx, port - out dx, eax - popf - } -} - -#elif defined(OS_VXWORKS) || defined (OS_LINUX) /* VxWorks and Linux */ - -#if defined(OS_LINUX) -#include "asm/msr.h" -#endif - -void gfx_msr_asm_read (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long addr, val1, val2; - - addr = msrAddr | (unsigned long)msrReg; - rdmsr(addr, val1, val2); - - *ptrHigh = val2; - *ptrLow = val1; -} - -void gfx_msr_asm_write (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow) -{ - unsigned long addr, val1, val2; - - val2 = *ptrHigh; - val1 = *ptrLow; - - addr = (msrAddr & 0xFFFF0000) | (unsigned long)msrReg; - wrmsr(addr, val1, val2); -} - -unsigned char gfx_inb(unsigned short port) -{ - unsigned char value; - __asm__ volatile ("inb %1,%0" : "=a" (value) : "d" (port)); - return value; -} - -unsigned short gfx_inw(unsigned short port) -{ - unsigned short value; - __asm__ volatile ("in %1,%0" : "=a" (value) : "d" (port)); - return value; -} - -unsigned long gfx_ind(unsigned short port) -{ - unsigned long value; - __asm__ volatile ("inl %1,%0" : "=a" (value) : "d" (port)); - return value; -} - -void gfx_outb(unsigned short port, unsigned char data) -{ - __asm__ volatile ("outb %0,%1" : : "a" (data),"d" (port)); -} - -void gfx_outw(unsigned short port, unsigned short data) -{ - __asm__ volatile ("out %0,%1" : : "a" (data),"d" (port)); -} - -void gfx_outd(unsigned short port, unsigned long data) -{ - __asm__ volatile ("outl %0,%1" : : "a" (data),"d" (port)); -} - -#else /* else nothing */ - -unsigned char gfx_inb(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return(0); -} - -unsigned short gfx_inw(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return(0); -} - -unsigned long gfx_ind(unsigned short port) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ - return(0); -} - -void gfx_outb(unsigned short port, unsigned char data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} - -void gfx_outw(unsigned short port, unsigned short data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} - -void gfx_outd(unsigned short port, unsigned long data) -{ - /* ADD OS SPECIFIC IMPLEMENTATION */ -} -#endif - -#define INB(port) gfx_inb(port) -#define INW(port) gfx_inw(port) -#define IND(port) gfx_ind(port) -#define OUTB(port, data) gfx_outb(port, data) -#define OUTW(port, data) gfx_outw(port, data) -#define OUTD(port, data) gfx_outd(port, data) - -/* INITIALIZATION ROUTINES - * These routines are used during the initialization of the driver to - * perform such tasks as detecting the type of CPU and video hardware. - * The routines require the use of IO, so the above IO routines need - * to be implemented before the initialization routines will work - * properly. - */ - -#include "gfx_init.c" - -/* INCLUDE MSR ACCESS ROUTINES */ - -#include "gfx_msr.c" - -/* INCLUDE GRAPHICS ENGINE ROUTINES - * These routines are used to program the 2D graphics accelerator. If - * the project does not use graphics acceleration (direct frame buffer - * access only), then this file does not need to be included. - */ -#include "gfx_rndr.c" /* graphics engine routines */ - -/* INCLUDE DISPLAY CONTROLLER ROUTINES - * These routines are used if the display mode is set directly. If the - * project uses VGA registers to set a display mode, then these files - * do not need to be included. - */ -#include "gfx_mode.h" /* display mode tables */ -#include "gfx_disp.c" /* display controller routines */ - -/* INCLUDE VIDEO OVERLAY ROUTINES - * These routines control the video overlay hardware. - */ -#include "gfx_vid.c" /* video overlay routines */ - -/* VIDEO PORT AND VIDEO DECODER ROUTINES - * These routines rely on the I2C routines. - */ -#include "gfx_vip.c" /* video port routines */ -#include "gfx_dcdr.c" /* video decoder routines */ - -/* I2C BUS ACCESS ROUTINES - * These routines are used by the video decoder and possibly an - * external TV encoer. - */ -#include "gfx_i2c.c" /* I2C bus access routines */ - -/* TV ENCODER ROUTINES - * This file does not need to be included if the system does not - * support TV output. - */ -#include "gfx_tv.c" /* TV encoder routines */ - -/* VGA ROUTINES - * This file is used if setting display modes using VGA registers. - */ -#include "gfx_vga.c" /* VGA routines */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_dcdr.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_dcdr.c deleted file mode 100644 index 12754619d..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_dcdr.c +++ /dev/null @@ -1,549 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_dcdr.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_dcdr.c $ - * - * This file contains routines to control the video decoder. - * - * gfx_set_decoder_defaults - * gfx_set_decoder_analog_input - * gfx_set_decoder_brightness - * gfx_set_decoder_contrast - * gfx_set_decoder_luminance_filter - * gfx_set_decoder_hue - * gfx_set_decoder_saturation - * gfx_set_decoder_input_offset - * gfx_set_decoder_input_size - * gfx_set_decoder_output_size - * gfx_set_decoder_scale - * gfx_set_decoder_TV_standard - * gfx_set_decoder_vbi_enable - * gfx_set_decoder_vbi_format - * gfx_set_decoder_vbi_upscale - * gfx_decoder_software_reset - * gfx_decoder_detect_macrovision - * gfx_decoder_detect_video - * - * And the following routines if GFX_READ_ROUTINES is set: - * - * gfx_get_decoder_brightness - * gfx_get_decoder_contrast - * gfx_get_decoder_hue - * gfx_get_decoder_saturation - * gfx_get_decoder_input_offset - * gfx_get_decoder_input_size - * gfx_get_decoder_output_size - * gfx_get_decoder_vbi_format - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* INCLUDE SUPPORT FOR PHILIPS SAA7114 DECODER, IF SPECIFIED */ - -#if GFX_DECODER_SAA7114 -#include "saa7114.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call various decoders. Currently only the Pillips */ -/* decoder is supported, but still organized to easily expand later. */ - -#if GFX_DECODER_DYNAMIC - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_defaults - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_defaults(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_defaults(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_analog_input - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_analog_input(unsigned char input) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_analog_input(input); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_brightness - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_brightness(unsigned char brightness) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_brightness(brightness); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_contrast - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_contrast(unsigned char contrast) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_contrast(contrast); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_hue - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_hue(char hue) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_hue(hue); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_saturation - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_saturation(unsigned char saturation) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_saturation(saturation); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_input_offset - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_input_offset(unsigned short x, unsigned short y) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_input_offset(x, y); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_input_size - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_input_size(unsigned short width, unsigned short height) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_input_size(width, height); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_output_size - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_output_size(unsigned short width, unsigned short height) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_output_size(width, height); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_scale - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_scale(srcw, srch, dstw, dsth); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_format - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_vbi_format(int start, int end, int format) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_vbi_format(start, end, format); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_vbi_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_vbi_enable(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_upscale - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_vbi_upscale(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_vbi_upscale(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_TV_standard - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_TV_standard(TVStandardType TVStandard) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_TV_standard(TVStandard); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_luminance_filter - *----------------------------------------------------------------------------- - */ -int gfx_set_decoder_luminance_filter(unsigned char lufi) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_set_decoder_luminance_filter(lufi); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_software_reset - *----------------------------------------------------------------------------- - */ -int gfx_decoder_software_reset(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_decoder_software_reset(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_detect_macrovision - *----------------------------------------------------------------------------- - */ -int gfx_decoder_detect_macrovision(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_decoder_detect_macrovision(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_detect_video - *----------------------------------------------------------------------------- - */ -int gfx_decoder_detect_video(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - status = saa7114_decoder_detect_video(); -# endif - return(status); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_brightness - *----------------------------------------------------------------------------- - */ -unsigned char gfx_get_decoder_brightness(void) -{ - unsigned char brightness = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - brightness = saa7114_get_decoder_brightness(); -# endif - return(brightness); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_contrast - *----------------------------------------------------------------------------- - */ -unsigned char gfx_get_decoder_contrast(void) -{ - unsigned char contrast = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - contrast = saa7114_get_decoder_contrast(); -# endif - return(contrast); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_hue - *----------------------------------------------------------------------------- - */ -char gfx_get_decoder_hue(void) -{ - unsigned char hue = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - hue = saa7114_get_decoder_hue(); -# endif - return((char)hue); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_saturation - *----------------------------------------------------------------------------- - */ -unsigned char gfx_get_decoder_saturation(void) -{ - unsigned char saturation = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - saturation = saa7114_get_decoder_saturation(); -# endif - return(saturation); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_input_offset - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_decoder_input_offset() -{ - unsigned long offset = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - offset = saa7114_get_decoder_input_offset(); -# endif - return(offset); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_input_size - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_decoder_input_size() -{ - unsigned long size = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - size = saa7114_get_decoder_input_size(); -# endif - return(size); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_output_size - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_decoder_output_size() -{ - unsigned long size = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - size = saa7114_get_decoder_output_size(); -# endif - return(size); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_vbi_format - *----------------------------------------------------------------------------- - */ -int gfx_get_decoder_vbi_format(int line) -{ - int format = 0; -# if GFX_DECODER_SAA7114 - if (gfx_decoder_type == GFX_DECODER_SAA7114) - format = saa7114_get_decoder_vbi_format(line); -# endif - return(format); -} - -#endif /* GFX_READ_ROUTINES */ - -#endif /* GFX_DECODER_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_defs.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_defs.h deleted file mode 100644 index eef6e1e1a..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_defs.h +++ /dev/null @@ -1,432 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_defs.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_defs.h $ - * - * This header file contains the macros used to access the hardware. These - * macros assume that 32-bit access is possible, which is true for most - * applications. Projects using 16-bit compilers (the Windows98 display - * driver) and special purpose applications (such as Darwin) need to define - * their own versions of these macros, which typically call a subroutine. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* ACCESS TO THE CPU REGISTERS */ - -#define WRITE_REG8(offset, value) \ - (*(volatile unsigned char *)(gfx_virt_regptr + (offset))) = (value) - -#define WRITE_REG16(offset, value) \ - (*(volatile unsigned short *)(gfx_virt_regptr + (offset))) = (value) - -#define WRITE_REG32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_regptr + (offset))) = (value) - -#define READ_REG16(offset) \ - (*(volatile unsigned short *)(gfx_virt_regptr + (offset))) - -#define READ_REG32(offset) \ - (*(volatile unsigned long *)(gfx_virt_regptr + (offset))) - -/* ACCESS TO THE ACCELERATOR REGISTERS (REDCLOUD ONLY) */ - -#define WRITE_GP8(offset, value) \ - (*(volatile unsigned char *)(gfx_virt_gpptr + (offset))) = (value) - -#define WRITE_GP16(offset, value) \ - (*(volatile unsigned short *)(gfx_virt_gpptr + (offset))) = (value) - -#define WRITE_GP32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_gpptr + (offset))) = (value) - -#define READ_GP16(offset) \ - (*(volatile unsigned short *)(gfx_virt_gpptr + (offset))) - -#define READ_GP32(offset) \ - (*(volatile unsigned long *)(gfx_virt_gpptr + (offset))) - -/* ACCESS TO THE FRAME BUFFER */ - -#define WRITE_FB32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_fbptr + (offset))) = (value) - -#define WRITE_FB16(offset, value) \ - (*(volatile unsigned short *)(gfx_virt_fbptr + (offset))) = (value) - -#define WRITE_FB8(offset, value) \ - (*(volatile unsigned char *)(gfx_virt_fbptr + (offset))) = (value) - -/* ACCESS TO THE VIDEO HARDWARE */ - -#define READ_VID32(offset) \ - (*(volatile unsigned long *)(gfx_virt_vidptr + (offset))) - -#define WRITE_VID32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_vidptr + (offset))) = (value) - -/* ACCESS TO THE VIP HARDWARE */ - -#define READ_VIP32(offset) \ - (*(volatile unsigned long *)(gfx_virt_vipptr + (offset))) - -#define WRITE_VIP32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_vipptr + (offset))) = (value) - -/* ACCESS TO THE SCRATCHPAD RAM */ - -#define WRITE_SCRATCH32(offset, value) \ - (*(volatile unsigned long *)(gfx_virt_spptr + (offset))) = (value) - -#define WRITE_SCRATCH16(offset, value) \ - (*(volatile unsigned short *)(gfx_virt_spptr + (offset))) = (value) - -#define WRITE_SCRATCH8(offset, value) \ - (*(volatile unsigned char *)(gfx_virt_spptr + (offset))) = (value) - -#define READ_SCRATCH16(offset) \ - (*(volatile unsigned short *)(gfx_virt_spptr + (offset))) - -#define READ_SCRATCH32(offset) \ - (*(volatile unsigned long *)(gfx_virt_spptr + (offset))) - -/* ACCESS TO MSRS */ - -void gfx_msr_asm_write (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow); -void gfx_msr_asm_read (unsigned short msrReg, unsigned long msrAddr, unsigned long *ptrHigh, unsigned long *ptrLow); - -#define MSR_READ( MBD_MSR_CAP, address, valueHigh_ptr, valueLow_ptr ) \ - gfx_msr_asm_read( ((unsigned short)(MBD_MSR_CAP)), address, valueHigh_ptr, valueLow_ptr ) - -#define MSR_WRITE( MBD_MSR_CAP, address, valueHigh_ptr, valueLow_ptr ) \ - gfx_msr_asm_write( ((unsigned short)(MBD_MSR_CAP)), address, valueHigh_ptr, valueLow_ptr ) - -/* OPTIMIZATION MACROS */ -/* The following macros have been added to allow more complete optimization of the */ -/* bitmap-to-screen routines in Durango. These routines also allow Durango to run */ -/* properly within a 16-bit environment. */ - -/************************************************************************************ - * Macro: SET_SCRATCH_BASE - * Purpose: Record the base address of the BLT buffers. The WRITE_SCRATCH_STRINGxx - * macros assume that this address is used as the base for all writes. - * - * Arguments: - * scratch_base - offset into the GX base for the first BLT buffer byte. - ************************************************************************************/ - -#define SET_SCRATCH_BASE(scratch_base) \ - { gfx_gx1_scratch_base = (unsigned long)gfx_virt_spptr + scratch_base; } - -#ifdef GFX_OPTIMIZE_ASSEMBLY - -/************************************************************************************ - * Macro: WRITE_SCRATCH_STRING - * Purpose: Write multiple bytes to the scratchpad buffer - * - * Arguments: - * dword_bytes - number of bytes to transfer. This number will always. - * be a multiple of 4. It cannot be modified within the - * macro (ex. bytes -= 4) - * bytes_extra - number of non-DWORD aligned bytes - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - ************************************************************************************/ - -#define WRITE_SCRATCH_STRING(dwords, bytes, array, array_offset) \ -{ \ - _asm { mov edi, gfx_gx1_scratch_base } \ - _asm { mov esi, array } \ - _asm { add esi, array_offset } \ - _asm { mov ecx, dwords } \ - _asm { shr ecx, 2 } \ - _asm { rep movsd } \ - _asm { mov ecx, bytes } \ - _asm { rep movsb } \ -} - -/************************************************************************************ - * Macro: WRITE_FRAME_BUFFER_STRING32 - * Purpose: Write multiple dwords to the Frame buffer - * - * Arguments: - * fboffset - offset to the beginning frame buffer location. - * bytes - number of bytes to transfer. This number will always. - * be a multiple of 4. It cannot be modified within the - * macro (ex. bytes -= 4) - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - ************************************************************************************/ - -#define WRITE_FRAME_BUFFER_STRING32(fboffset, bytes, array, array_offset) \ -{ \ - _asm { mov ecx, bytes } \ - _asm { shr ecx, 2 } \ - _asm { cld } \ - _asm { mov edi, gfx_virt_fbptr } \ - _asm { add edi, fboffset } \ - _asm { mov esi, array } \ - _asm { add esi, array_offset } \ - _asm { rep movsd } \ -} - -#else - -/************************************************************************************ - * Macro: WRITE_SCRATCH_STRING - * Purpose: Write multiple bytes to the scratchpad buffer - * - * Arguments: - * dword_bytes - number of bytes to transfer. This number will always. - * be a multiple of 4. It cannot be modified within the - * macro (ex. bytes -= 4) - * bytes_extra - number of non-DWORD aligned bytes - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - ************************************************************************************/ - -#define WRITE_SCRATCH_STRING(dword_bytes, bytes_extra, array, array_offset) \ -{ \ - unsigned long i, j; \ - unsigned long aroffset = (unsigned long)array + (array_offset); \ - \ - /* WRITE DWORDS */ \ - \ - for (i = 0; i < dword_bytes; i += 4) \ - *((volatile unsigned long *)(gfx_gx1_scratch_base + i)) = *((unsigned long *)(aroffset + i)); \ - \ - /* WRITE BYTES */ \ - \ - j = i + bytes_extra; \ - while (i < j) \ - { \ - *((volatile unsigned char *)(gfx_gx1_scratch_base + i)) = *((unsigned char *)(aroffset + i)); \ - i++; \ - } \ -} - -/************************************************************************************ - * Macro: WRITE_FRAME_BUFFER_STRING32 - * Purpose: Write multiple dwords to the Frame buffer - * - * Arguments: - * fboffset - offset to the beginning frame buffer location. - * bytes - number of bytes to transfer. This number will always. - * be a multiple of 4. It cannot be modified within the - * macro (ex. bytes -= 4) - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - ************************************************************************************/ - -#define WRITE_FRAME_BUFFER_STRING32(fboffset, bytes, array, array_offset) \ -{ \ - unsigned long i; \ - unsigned long aroffset = (unsigned long)array + (array_offset); \ - for (i = 0; i < bytes; i += 4) \ - WRITE_FB32 ((fboffset) + i, *((unsigned long *)(aroffset + i))); \ -} - -#endif - -/************************************************************************************ - * Macro: WRITE_FRAME_BUFFER_STRING8 - * Purpose: Write multiple bytes to the frame buffer - * - * Arguments: - * spoffset - offset to the beginning frame buffer location. - * bytes - number of bytes to transfer. This number cannot be modified within the - * macro (ex. bytes -= 4) - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - ************************************************************************************/ - -#define WRITE_FRAME_BUFFER_STRING8(fboffset, bytes, array, array_offset) \ -{ \ - unsigned long i; \ - unsigned long aroffset = (unsigned long)array + (array_offset); \ - for (i = 0; i < bytes; i++) \ - WRITE_FB8 ((fboffset) + i, *((unsigned char *)(aroffset + i))); \ -} - -/************************************************************************************ - * Macro: WRITE_GPREG_STRING32 - * Purpose: Write multiple dwords to one GP register. - * - * Arguments: - * regoffset - Offset of the GP register to be written. - * dwords - number of dwords to transfer. It cannot be modified within the - * macro (ex. dwords--) - * counter - name of a counter variable that can be used in a loop. This - * is used to optimize macros written in C. - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - * temp - name of a temporary variable that can be used for calculations. - * This argument is also used for C-only macros. - ************************************************************************************/ - -#define WRITE_GPREG_STRING32(regoffset, dwords, counter, array, array_offset, temp) \ -{ \ - temp = (unsigned long)array + (array_offset); \ - for (counter = 0; counter < dwords; counter++) \ - WRITE_GP32 (regoffset, *((unsigned long *)temp + counter)); \ -} - -/************************************************************************************ - * Macro: WRITE_GPREG_STRING8 - * Purpose: Write 4 or less bytes to one GP register. - * - * Arguments: - * regoffset - Offset of the GP register to be written. - * bytes - number of bytes to transfer. This number will always. - * be less than 4. It cannot be modified within the - * macro (ex. bytes--) - * shift - name of a shift variable that can be used as a shift count. - * This variable holds the initial shift value into the GP register. - * counter - name of a counter variable that can be used in a loop. This - * is used to optimize macros written in C. - * array - pointer to an array of unsigned characters. - * array_offset - offset into the array from which to pull the first character. - * temp1 - name of a temporary variable that can be used for calculations. - * This argument is also used for C-only macros. - * temp2 - name of a temporary variable that can be used for calculations. - * This argument is also used for C-only macros. - ************************************************************************************/ -#define WRITE_GPREG_STRING8(regoffset, bytes, shift, counter, array, array_offset, temp1, temp2) \ -{ \ - if (bytes) \ - { \ - temp1 = (unsigned long)array + (array_offset); \ - temp2 = 0; \ - for (counter = 0; counter < bytes; counter++) \ - { \ - temp2 |= ((unsigned long)(*((unsigned char *)(temp1 + counter)))) << shift; \ - shift += 8; \ - } \ - WRITE_GP32 (regoffset, temp2); \ - } \ -} - - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_disp.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_disp.c deleted file mode 100644 index c11900b6b..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_disp.c +++ /dev/null @@ -1,2153 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_disp.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_disp.c $ - * - * This file contains routines to program the display controller. - * - * The "disp_gu1.c" and "disp_gu2.c" files implement the following routines: - * - * gfx_get_display_mode_count - * gfx_get_display_mode - * gfx_is_display_mode_supported - * gfx_get_display_details - * gfx_set_display_mode - * gfx_set_display_bpp - * gfx_set_display_timings - * gfx_set_vtotal - * gfx_get_display_pitch - * gfx_set_display_pitch - * gfx_set_display_offset - * gfx_set_display_palette - * gfx_set_display_palette_entry - * gfx_set_cursor_enable - * gfx_set_cursor_colors - * gfx_set_cursor_position - * gfx_set_cursor_shape32 - * gfx_set_cursor_shape64 - * gfx_set_icon_enable - * gfx_set_icon_colors - * gfx_set_icon_position - * gfx_set_icon_shape64 - * gfx_set_compression_enable - * gfx_set_compression_offset - * gfx_set_compression_pitch - * gfx_set_compression_size - * gfx_set_display_priority_high - * gfx_test_timing_active - * gfx_test_vertical_active - * gfx_wait_vertical_blank - * gfx_reset_timing_lock - * - * And the following routines if GFX_READ_ROUTINES is set: - * - * gfx_get_hactive - * gfx_get_hblank_start - * gfx_get_hsync_start - * gfx_get_hsync_end - * gfx_get_hblank_end - * gfx_get_htotal - * gfx_get_vactive - * gfx_get_vblank_start - * gfx_get_vsync_start - * gfx_get_vsync_end - * gfx_get_vblank_end - * gfx_get_vtotal - * gfx_get_vline - * gfx_get_display_bpp - * gfx_get_display_offset - * gfx_get_display_palette - * gfx_get_cursor_enable - * gfx_get_cursor_base - * gfx_get_cursor_position - * gfx_get_cursor_offset - * gfx_get_cursor_color - * gfx_get_icon_enable - * gfx_get_icon_color - * gfx_get_icon_offset - * gfx_get_icon_position - * gfx_get_compression_enable - * gfx_get_compression_offset - * gfx_get_compression_pitch - * gfx_get_compression_size - * gfx_get_display_priority_high - * gfx_get_valid_bit - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -unsigned short PanelWidth=0; -unsigned short PanelHeight=0; -unsigned short PanelEnable=0; -unsigned short ModeWidth; -unsigned short ModeHeight; - -int DeltaX=0; -int DeltaY=0; -unsigned long prevstartAddr =0; -unsigned long panelTop =0; -unsigned long panelLeft =0; - -int gbpp=8; - -int gfx_compression_enabled = 0; -int gfx_compression_active = 0; -int gfx_line_double = 0; -int gfx_pixel_double = 0; -int gfx_timing_lock = 0; -int gfx_dont_program = 0; -DISPLAYMODE gfx_display_mode; - -/* DISPLAY MODE TIMINGS */ - -DISPLAYMODE DisplayParams[] = { - -/* 320 x 200 */ - -{ GFX_MODE_70HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_16BPP | /* 8 and 16 BPP valid */ - GFX_MODE_NEG_HSYNC | /* negative HSYNC */ - GFX_MODE_PIXEL_DOUBLE | /* Double width */ - GFX_MODE_LINE_DOUBLE, /* Double height */ - 0x140, 0x288, 0x290, 0x2F0, 0x318, 0x320, /* horizontal timings */ - 0x0C8, 0x197, 0x19C, 0x19E, 0x1BA, 0x1C1, /* vertical timings */ - 0x00192CCC, /* freq = 25.175 MHz */ -}, - -/* 320 x 240 */ - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_16BPP | /* 8 and 16 BPP valid */ - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC | /* negative syncs */ - GFX_MODE_PIXEL_DOUBLE | /* Double width */ - GFX_MODE_LINE_DOUBLE, /* Double height */ - 0x0140, 0x0280, 0x0290, 0x02D0, 0x0348, 0x0348, /* horizontal timings */ - 0x00F0, 0x01E0, 0x01E1, 0x01E4, 0x01F4, 0x01F4, /* vertical timings */ - 0x001F8000, /* freq = 31.5 MHz */ -}, - -/* 400 x 300 */ - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_16BPP | /* 8 and 16 BPP valid */ - GFX_MODE_PIXEL_DOUBLE | /* Double width */ - GFX_MODE_LINE_DOUBLE, /* Double height */ - 0x0190, 0x0320, 0x0330, 0x0380, 0x0420, 0x0420, /* horizontal timings */ - 0x012C, 0x0258, 0x0259, 0x025C, 0x0271, 0x0271, /* vertical timings */ - 0x00318000, /* freq = 49.5 MHz */ -}, - -/* 512 x 384 */ - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_16BPP | /* 8 and 16 BPP valid */ - GFX_MODE_PIXEL_DOUBLE | /* Double width */ - GFX_MODE_LINE_DOUBLE, /* Double height */ - 0x0200, 0x0400, 0x0410, 0x0470, 0x0520, 0x0520, /* horizontal timings */ - 0x0180, 0x0300, 0x0301, 0x0304, 0x0320, 0x0320, /* vertical timings */ - 0x004EC000, /* freq = 78.75 MHz */ -}, - -/* 640 x 400 */ - -{ GFX_MODE_70HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC, /* negative HSYNC */ - 0x280, 0x288, 0x290, 0x2F0, 0x318, 0x320, /* horizontal timings */ - 0x190, 0x197, 0x19C, 0x19E, 0x1BA, 0x1C1, /* vertical timings */ - 0x00192CCC, /* freq = 25.175 MHz */ -}, - -/* 640x480 */ - -{ GFX_MODE_60HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0280, 0x0288, 0x0290, 0x02E8, 0x0318, 0x0320, /* horizontal timings */ - 0x01E0, 0x01E8, 0x01EA, 0x01EC, 0x0205, 0x020D, /* vertical timings */ - 0x00192CCC, /* freq = 25.175 MHz */ -}, - -{ GFX_MODE_72HZ | /* refresh rate = 72 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0280, 0x0288, 0x0298, 0x02c0, 0x0338, 0x0340, /* horizontal timings */ - 0x01e0, 0x01e8, 0x01e9, 0x01ec, 0x0200, 0x0208, /* vertical timings */ - 0x001F8000, /* freq = 31.5 MHz */ -}, - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0280, 0x0280, 0x0290, 0x02D0, 0x0348, 0x0348, /* horizontal timings */ - 0x01E0, 0x01E0, 0x01E1, 0x01E4, 0x01F4, 0x01F4, /* vertical timings */ - 0x001F8000, /* freq = 31.5 MHz */ -}, - -{ GFX_MODE_85HZ | /* refresh rate = 85 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0280, 0x0280, 0x02B8, 0x02F0, 0x0340, 0x0340, /* horizontal timings */ - 0x01E0, 0x01E0, 0x01E1, 0x01E4, 0x01FD, 0x01FD, /* vertical timings */ - 0x00240000, /* freq = 36.0 MHz */ -}, - -/* 800x600 */ - -{ GFX_MODE_56HZ | /* refresh rate = 56 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0320, 0x0328, 0x0348, 0x03D0, 0x0418, 0x0420, /* horizontal timings */ - 0x0258, 0x0258, 0x0259, 0x025D, 0x0274, 0x0274, /* vertical timings */ - 0x00240000, /* freq = 36.00 MHz */ -}, - -{ GFX_MODE_60HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0320, 0x0328, 0x0348, 0x03D0, 0x0418, 0x0420, /* horizontal timings */ - 0x0258, 0x0258, 0x0259, 0x025D, 0x0274, 0x0274, /* vertical timings */ - 0x00280000, /* freq = 40.00 MHz */ -}, - -{ GFX_MODE_72HZ | /* refresh rate = 72 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0320, 0x0320, 0x0358, 0x03D0, 0x0410, 0x0410, /* horizontal timings */ - 0x0258, 0x0258, 0x027D, 0x0283, 0x029A, 0x029A, /* vertical timings */ - 0x00320000, /* freq = 49.5 MHz */ -}, - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0320, 0x0320, 0x0330, 0x0380, 0x0420, 0x0420, /* horizontal timings */ - 0x0258, 0x0258, 0x0259, 0x025C, 0x0271, 0x0271, /* vertical timings */ - 0x00318000, /* freq = 49.5 MHz */ -}, - -{ GFX_MODE_85HZ | /* refresh rate = 85 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0320, 0x0320, 0x0340, 0x0380, 0x0418, 0x0418, /* horizontal timings */ - 0x0258, 0x0258, 0x0259, 0x025C, 0x0277, 0x0277, /* vertical timings */ - 0x00384000, /* freq = 56.25 MHz */ -}, - -/* 1024x768 */ - -{ GFX_MODE_60HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0400, 0x0400, 0x0418, 0x04A0, 0x0540, 0x0540, /* horizontal timings */ - 0x0300, 0x0300, 0x0303, 0x0309, 0x0326, 0x0326, /* vertical timings */ - 0x00410000, /* freq = 65.00 MHz */ -}, - -{ GFX_MODE_70HZ | /* refresh rate = 70 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP | - GFX_MODE_NEG_HSYNC | GFX_MODE_NEG_VSYNC, /* negative syncs */ - 0x0400, 0x0400, 0x0418, 0x04A0, 0x0530, 0x0530, /* horizontal timings */ - 0x0300, 0x0300, 0x0303, 0x0309, 0x0326, 0x0326, /* vertical timings */ - 0x004B0000, /* freq = 78.75 MHz */ -}, - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0400, 0x0400, 0x0410, 0x0470, 0x0520, 0x0520, /* horizontal timings */ - 0x0300, 0x0300, 0x0301, 0x0304, 0x0320, 0x0320, /* vertical timings */ - 0x004EC000, /* freq = 78.75 MHz */ -}, - -{ GFX_MODE_85HZ | /* refresh rate = 85 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0400, 0x0400, 0x0430, 0x0490, 0x0560, 0x0560, /* horizontal timings */ - 0x0300, 0x0300, 0x0301, 0x0304, 0x0328, 0x0328, /* vertical timings */ - 0x005E8000, /* freq = 94.50 MHz */ -}, - -/* 1152x864 */ - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* all BPP valid */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0480, 0x0480, 0x04C0, 0x0540, 0x0640, 0x0640, /* horizontal timings */ - 0x0360, 0x0360, 0x0361, 0x0364, 0x0384, 0x0384, /* vertical timings */ - 0x006C0000, /* freq = 108.00 MHz */ -}, - -/* 1280x1024 */ - -{ GFX_MODE_60HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 16 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0500, 0x0500, 0x0530, 0x05A0, 0x0698, 0x0698, /* horizontal timings */ - 0x0400, 0x0400, 0x0401, 0x0404, 0x042A, 0x042A, /* vertical timings */ - 0x006C0000, /* freq = 108.0 MHz */ -}, - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 16 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0500, 0x0500, 0x0510, 0x05A0, 0x0698, 0x0698, /* horizontal timings */ - 0x0400, 0x0400, 0x0401, 0x0404, 0x042A, 0x042A, /* vertical timings */ - 0x00870000, /* freq = 135.0 MHz */ -}, - -{ GFX_MODE_85HZ | /* refresh rate = 85 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 16 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0500, 0x0500, 0x0540, 0x05E0, 0x06C0, 0x06C0, /* horizontal timings */ - 0x0400, 0x0400, 0x0401, 0x0404, 0x0430, 0x0430, /* vertical timings */ - 0x009D8000, /* freq = 157.5 MHz */ -}, - -/*********************************/ -/* BEGIN REDCLOUD-SPECIFIC MODES */ -/*-------------------------------*/ - -/* 1600 x 1200 */ - -{ GFX_MODE_60HZ | /* refresh rate = 60 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 32 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0640, 0x0640, 0x0680, 0x0740, 0x0870, 0x0870, /* horizontal timings */ - 0x04B0, 0x04B0, 0x04B1, 0x04B4, 0x04E2, 0x04E2, /* vertical timings */ - 0x00A20000, /* freq = 162.0 MHz */ -}, - -{ GFX_MODE_70HZ | /* refresh rate = 70 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 32 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0640, 0x0640, 0x0680, 0x0740, 0x0870, 0x0870, /* horizontal timings */ - 0x04B0, 0x04B0, 0x04B1, 0x04B4, 0x04E2, 0x04E2, /* vertical timings */ - 0x00BD0000, /* freq = 189.0 MHz */ -}, - -{ GFX_MODE_75HZ | /* refresh rate = 75 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 32 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0640, 0x0640, 0x0680, 0x0740, 0x0870, 0x0870, /* horizontal timings */ - 0x04B0, 0x04B0, 0x04B1, 0x04B4, 0x04E2, 0x04E2, /* vertical timings */ - 0x00CA8000, /* freq = 202.5 MHz */ -}, - -{ GFX_MODE_85HZ | /* refresh rate = 85 */ - GFX_MODE_8BPP | GFX_MODE_12BPP | GFX_MODE_15BPP | /* Up to 32 bpp */ - GFX_MODE_16BPP | GFX_MODE_24BPP, - 0x0640, 0x0640, 0x0680, 0x0740, 0x0870, 0x0870, /* horizontal timings */ - 0x04B0, 0x04B0, 0x04B1, 0x04B4, 0x04E2, 0x04E2, /* vertical timings */ - 0x00E58000, /* freq = 229.5 MHz */ -}, -}; - -/* UPDATE THIS VARIABLE WHENEVER NEW REDCLOUD-SPECIFIC MODES ARE ADDED */ - -#define REDCLOUD_SPECIFIC_MODES 4 - -#define NUM_RC_DISPLAY_MODES sizeof(DisplayParams) / sizeof(DISPLAYMODE) -#define NUM_GX_DISPLAY_MODES (NUM_RC_DISPLAY_MODES - REDCLOUD_SPECIFIC_MODES) - - -FIXEDTIMINGS FixedParams[] = { -/* 640x480 Panel */ -{ 640 , 480, 640, 480, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - -{ 640 , 480, 800, 600, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - -{ 640 , 480, 1024 , 768, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - -{ 640 , 480, 1152 , 864, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - -{ 640 , 480, 1280, 1024, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - -{ 640 , 480, 1600, 1200, - 0x0280, 0x280, 0x2a8, 0x328, 0x380, 0x380, - 0x1e0, 0x1e0, 0x1e1, 0x1e5, 0x1fc, 0x1fc, - 0x00192CCC, -}, - - -/* 800x600 Panel */ -{ 800 , 600, 640, 480, - 0x0280, 0x2d0, 0x2f8, 0x378, 0x3d0, 0x420, - 0x1e0, 0x21c, 0x21d, 0x221, 0x238, 0x274, - 0x00280000, -}, - -{ 800 , 600, 800, 600, - 0x320, 0x320, 0x348, 0x3c8, 0x420, 0x420, - 0x258, 0x258, 0x259, 0x25d, 0x274, 0x274, - 0x00280000, -}, - -{ 800 , 600, 1024, 768, - 0x320, 0x320, 0x348, 0x3c8, 0x420, 0x420, - 0x258, 0x258, 0x259, 0x25d, 0x274, 0x274, - 0x00280000, -}, - -{ 800 , 600, 1152, 864, - 0x320, 0x320, 0x348, 0x3c8, 0x420, 0x420, - 0x258, 0x258, 0x259, 0x25d, 0x274, 0x274, - 0x00280000, -}, - -{ 800 , 600, 1280, 1024, - 0x320, 0x320, 0x348, 0x3c8, 0x420, 0x420, - 0x258, 0x258, 0x259, 0x25d, 0x274, 0x274, - 0x00280000, -}, - -{ 800 , 600, 1600, 1200, - 0x320, 0x320, 0x348, 0x3c8, 0x420, 0x420, - 0x258, 0x258, 0x259, 0x25d, 0x274, 0x274, - 0x00280000, -}, - -/* 1024x768 panel */ -{ 1024 , 768, 640, 480, - 0x0280, 0x340, 0x368, 0x3e8, 0x440, 0x500, - 0x1e0, 0x270, 0x271, 0x275, 0x28c, 0x31c, - 0x00410000, -}, - -{ 1024 , 768, 800, 600, - 0x0320, 0x390, 0x3b8, 0x438, 0x490, 0x500, - 0x258, 0x2ac, 0x2ad, 0x2b1, 0x2c8, 0x31c, - 0x00410000, -}, - -{ 1024 , 768, 1024, 768, - 0x0400, 0x400, 0x428, 0x4a8, 0x500, 0x500, - 0x300, 0x300, 0x301, 0x305, 0x31c, 0x31c, - 0x00410000, -}, - -{ 1024 , 768, 1152, 864, - 0x0400, 0x400, 0x428, 0x4a8, 0x500, 0x500, - 0x300, 0x300, 0x301, 0x305, 0x31c, 0x31c, - 0x00410000, -}, - -{ 1024 , 768, 1280, 1024, - 0x0400, 0x400, 0x428, 0x4a8, 0x500, 0x500, - 0x300, 0x300, 0x301, 0x305, 0x31c, 0x31c, - 0x00410000, -}, - -{ 1024 , 768, 1600, 1200, - 0x0400, 0x400, 0x428, 0x4a8, 0x500, 0x500, - 0x300, 0x300, 0x301, 0x305, 0x31c, 0x31c, - 0x00410000, -}, - -}; - - -#define NUM_FIXED_TIMINGS_MODES sizeof(FixedParams)/sizeof(FIXEDTIMINGS) - - -/* INCLUDE SUPPORT FOR FIRST GENERATION, IF SPECIFIED. */ - -#if GFX_DISPLAY_GU1 -#include "disp_gu1.c" -#endif - -/* INCLUDE SUPPORT FOR SECOND GENERATION, IF SPECIFIED. */ - -#if GFX_DISPLAY_GU2 -#include "disp_gu2.c" -#endif - -/*--------------------------------------------------------------------------- - * gfx_reset_timing_lock - * - * This routine resets the timing change lock. The lock can only be set by - * setting a flag when calling mode set. - *--------------------------------------------------------------------------- - */ -void gfx_reset_timing_lock(void) -{ - gfx_timing_lock = 0; -} - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either first or second generation routines. */ - -#if GFX_DISPLAY_DYNAMIC - -/*--------------------------------------------------------------------------- - * gfx_set_display_bpp - *--------------------------------------------------------------------------- - */ -int gfx_set_display_bpp(unsigned short bpp) -{ - int retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_set_display_bpp(bpp); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_set_display_bpp(bpp); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_is_display_mode_supported - * check if given mode supported, - * return the supported mode on success, -1 on fail - *--------------------------------------------------------------------------- - */ -int gfx_is_display_mode_supported(int xres, int yres, int bpp, int hz) -{ - int retval = -1; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_is_display_mode_supported(xres, yres, bpp, hz); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_is_display_mode_supported(xres, yres, bpp, hz); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_mode - *--------------------------------------------------------------------------- - */ -int gfx_set_display_mode(int xres, int yres, int bpp, int hz) -{ - int retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_set_display_mode(xres, yres, bpp, hz); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_set_display_mode(xres, yres, bpp, hz); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_timings - *--------------------------------------------------------------------------- - */ -int gfx_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblankstart, - unsigned short hsyncstart, unsigned short hsyncend, - unsigned short hblankend, unsigned short htotal, - unsigned short vactive, unsigned short vblankstart, - unsigned short vsyncstart, unsigned short vsyncend, - unsigned short vblankend, unsigned short vtotal, - unsigned long frequency) -{ - int retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_set_display_timings(bpp, flags, - hactive, hblankstart, hsyncstart, hsyncend, hblankend, htotal, - vactive, vblankstart, vsyncstart, vsyncend, vblankend, vtotal, - frequency); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_set_display_timings(bpp, flags, - hactive, hblankstart, hsyncstart, hsyncend, hblankend, htotal, - vactive, vblankstart, vsyncstart, vsyncend, vblankend, vtotal, - frequency); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_pitch - *--------------------------------------------------------------------------- - */ -void gfx_set_display_pitch(unsigned short pitch) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_pitch(pitch); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_pitch(pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_offset - *--------------------------------------------------------------------------- - */ -void gfx_set_display_offset(unsigned long offset) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_offset(offset); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_offset(offset); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette_entry - *--------------------------------------------------------------------------- - */ -int gfx_set_display_palette_entry(unsigned long index, unsigned long palette) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_display_palette_entry(index, palette); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_display_palette_entry(index, palette); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_palette - *--------------------------------------------------------------------------- - */ -int gfx_set_display_palette(unsigned long *palette) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_display_palette(palette); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_display_palette(palette); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_enable - *--------------------------------------------------------------------------- - */ -void gfx_set_cursor_enable(int enable) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_cursor_enable(enable); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_cursor_enable(enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_colors - *--------------------------------------------------------------------------- - */ -void gfx_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_cursor_colors(bkcolor, fgcolor); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_cursor_colors(bkcolor, fgcolor); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_position - *--------------------------------------------------------------------------- - */ -void gfx_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_cursor_position(memoffset, xpos, ypos, xhotspot, yhotspot); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_cursor_position(memoffset, xpos, ypos, xhotspot, yhotspot); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_shape32 - *--------------------------------------------------------------------------- - */ -void gfx_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_cursor_shape32(memoffset, andmask, xormask); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_cursor_shape32(memoffset, andmask, xormask); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_cursor_shape64 - *--------------------------------------------------------------------------- - */ -void gfx_set_cursor_shape64(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_cursor_shape64(memoffset, andmask, xormask); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_enable - *--------------------------------------------------------------------------- - */ -void gfx_set_icon_enable(int enable) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_icon_enable(enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_colors - *--------------------------------------------------------------------------- - */ -void gfx_set_icon_colors (unsigned long color0, unsigned long color1, unsigned long color2) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_icon_colors (color0, color1, color2); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_position - *--------------------------------------------------------------------------- - */ -void gfx_set_icon_position(unsigned long memoffset, unsigned short xpos) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_icon_position(memoffset, xpos); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_icon_shape64 - *--------------------------------------------------------------------------- - */ -void gfx_set_icon_shape64(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask, unsigned int lines) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_icon_shape64(memoffset, andmask, xormask, lines); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_compression_enable(int enable) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_compression_enable(enable); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_compression_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_offset - *--------------------------------------------------------------------------- - */ -int gfx_set_compression_offset(unsigned long offset) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_compression_offset(offset); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_compression_offset(offset); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_pitch - *--------------------------------------------------------------------------- - */ -int gfx_set_compression_pitch(unsigned short pitch) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_compression_pitch(pitch); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_compression_pitch(pitch); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_compression_size - *--------------------------------------------------------------------------- - */ -int gfx_set_compression_size(unsigned short size) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_compression_size(size); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_compression_size(size); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_priority_high - *--------------------------------------------------------------------------- - */ -void gfx_set_display_priority_high(int enable) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_priority_high(enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_format (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_format". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_format(unsigned long format) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_format(format); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_enable". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_enable(int enable) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_video_enable(enable); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_enable(enable); -# endif - return; -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_size (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_size". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_size(unsigned short width, unsigned short height) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_video_size(width, height); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_size(width, height); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_offset (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_offset". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_offset(unsigned long offset) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_set_display_video_offset(offset); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_offset(offset); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_yuv_offsets (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_yuv_offsets". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, - unsigned long voffset) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_yuv_offsets(yoffset, uoffset, voffset); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_yuv_pitch (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_yuv_pitch". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_yuv_pitch (unsigned long ypitch, unsigned long uvpitch) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_yuv_pitch (ypitch, uvpitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_downscale (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_vertical_downscale". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_downscale (unsigned short srch, unsigned short dsth) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_downscale (srch, dsth); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_video_vertical_downscale_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine is called by "gfx_set_video_vertical_downscale_enable". It abstracts the - * version of the display controller from the video overlay routines. - *--------------------------------------------------------------------------- - */ -void gfx_set_display_video_vertical_downscale_enable (int enable) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_set_display_video_vertical_downscale_enable (enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_test_timing_active - *--------------------------------------------------------------------------- - */ -int gfx_test_timing_active(void) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_test_timing_active(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_test_timing_active(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_test_vertical_active - *--------------------------------------------------------------------------- - */ -int gfx_test_vertical_active(void) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_test_vertical_active(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_test_vertical_active(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_wait_vertical_blank - *--------------------------------------------------------------------------- - */ -int gfx_wait_vertical_blank(void) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_wait_vertical_blank(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_wait_vertical_blank(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_delay_milliseconds - *--------------------------------------------------------------------------- - */ -void gfx_delay_milliseconds(unsigned long milliseconds) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_delay_milliseconds(milliseconds); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_delay_milliseconds(milliseconds); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_delay_microseconds - *--------------------------------------------------------------------------- - */ -void gfx_delay_microseconds(unsigned long microseconds) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_delay_microseconds(microseconds); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_delay_microseconds(microseconds); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_enable_panning - * - * This routine enables the panning when the Mode is bigger than the panel - * size. - *--------------------------------------------------------------------------- - */ -void gfx_enable_panning(int x, int y) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_enable_panning( x, y); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_enable_panning( x, y); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_fixed_timings - *--------------------------------------------------------------------------- - */ -int gfx_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_fixed_timings( panelResX, panelResY, width, height, bpp); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_fixed_timings( panelResX, panelResY, width, height, bpp); -# endif - return (status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_panel_present - *--------------------------------------------------------------------------- - */ -int gfx_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp) -{ - int status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_set_panel_present( panelResX, panelResY, width, height, bpp); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_set_panel_present( panelResX, panelResY, width, height, bpp); -# endif - return (status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vtotal - *--------------------------------------------------------------------------- - */ -int gfx_set_vtotal(unsigned short vtotal) -{ - int retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_set_vtotal(vtotal); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_set_vtotal(vtotal); -# endif - return(retval); -} - -/*-----------------------------------------------------------------------* - * THE FOLLOWING READ ROUTINES ARE ALWAYS INCLUDED: * - * gfx_get_hsync_end, gfx_get_htotal, gfx_get_vsync_end, gfx_get_vtotal * - * are used by the video overlay routines. * - * * - * gfx_get_vline and gfx_vactive are used to prevent an issue for the * - * SC1200. * - * * - * The others are part of the Durango API. * - *-----------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - * gfx_mode_frequency_supported - *---------------------------------------------------------------------------- - */ -int gfx_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency) -{ - int freq = 0; - -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - freq = gu1_mode_frequency_supported(xres, yres, bpp, frequency); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - freq = gu2_mode_frequency_supported(xres, yres, bpp, frequency); -# endif - return(freq); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_frequency - *---------------------------------------------------------------------------- - */ -int gfx_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_get_refreshrate_from_frequency(xres, yres, bpp, hz, frequency); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_get_refreshrate_from_frequency(xres, yres, bpp, hz, frequency); -# endif - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_refreshrate_from_mode - *---------------------------------------------------------------------------- - */ -int gfx_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_get_refreshrate_from_mode(xres, yres, bpp, hz, frequency); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_get_refreshrate_from_mode(xres, yres, bpp, hz, frequency); -# endif - - return(1); -} - -/*---------------------------------------------------------------------------- - * gfx_get_frequency_from_refreshrate - *---------------------------------------------------------------------------- - */ -int gfx_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency) -{ - int retval = -1; - -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_get_frequency_from_refreshrate(xres, yres, bpp, hz, frequency); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_get_frequency_from_refreshrate(xres, yres, bpp, hz, frequency); -# endif - - return retval; -} - -/*--------------------------------------------------------------------------- - * gfx_get_max_supported_pixel_clock - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_max_supported_pixel_clock (void) -{ - unsigned long status = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_get_max_supported_pixel_clock(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_get_max_supported_pixel_clock(); -# endif - return (status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_pitch - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_display_pitch(void) -{ - unsigned short pitch = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - pitch = gu1_get_display_pitch(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - pitch = gu2_get_display_pitch(); -# endif - return(pitch); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_mode_count - * return # of modes supported. - *--------------------------------------------------------------------------- - */ -int gfx_get_display_mode_count(void) -{ - int retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_get_display_mode_count(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_get_display_mode_count(); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_frame_buffer_line_size - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_frame_buffer_line_size(void) -{ - unsigned long retval = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_get_frame_buffer_line_size(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_get_frame_buffer_line_size(); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_mode - * get the curent mode set, - * return the supported mode on success, -1 on fail - *--------------------------------------------------------------------------- - */ -int gfx_get_display_mode(int *xres, int *yres, int *bpp, int *hz) -{ - int retval = -1; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_get_display_mode(xres, yres, bpp, hz); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_get_display_mode(xres, yres, bpp, hz); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_details - * given the mode get's the resoultion details, width, height, freq - *--------------------------------------------------------------------------- - */ -int gfx_get_display_details(unsigned int mode, int *xres, int *yres, int *hz) -{ - int retval = -1; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - retval = gu1_get_display_details(mode, xres, yres, hz); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - retval = gu2_get_display_details(mode, xres, yres, hz); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hactive - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_hactive(void) -{ - unsigned short hactive = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - hactive = gu1_get_hactive(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - hactive = gu2_get_hactive(); -# endif - return(hactive); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_start - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_hsync_start(void) -{ - unsigned short hsync_start = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - hsync_start = gu1_get_hsync_start(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - hsync_start = gu2_get_hsync_start(); -# endif - return(hsync_start); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hsync_end - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_hsync_end(void) -{ - unsigned short hsync_end = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - hsync_end = gu1_get_hsync_end(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - hsync_end = gu2_get_hsync_end(); -# endif - return(hsync_end); -} - -/*--------------------------------------------------------------------------- - * gfx_get_htotal - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_htotal(void) -{ - unsigned short htotal = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - htotal = gu1_get_htotal(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - htotal = gu2_get_htotal(); -# endif - return(htotal); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vactive - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vactive(void) -{ - unsigned short vactive = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vactive = gu1_get_vactive(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vactive = gu2_get_vactive(); -# endif - return(vactive); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_end - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vsync_end(void) -{ - unsigned short vsync_end = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vsync_end = gu1_get_vsync_end(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vsync_end = gu2_get_vsync_end(); -# endif - return(vsync_end); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vtotal - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vtotal(void) -{ - unsigned short vtotal = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vtotal = gu1_get_vtotal(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vtotal = gu2_get_vtotal(); -# endif - return(vtotal); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_bpp - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_display_bpp(void) -{ - unsigned short bpp = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - bpp = gu1_get_display_bpp(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - bpp = gu2_get_display_bpp(); -# endif - return(bpp); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vline - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vline(void) -{ - unsigned short vline = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vline = gu1_get_vline(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vline = gu2_get_vline(); -# endif - return(vline); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_offset - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_display_offset(void) -{ - unsigned long offset = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - offset = gu1_get_display_offset(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - offset = gu2_get_display_offset(); -# endif - return(offset); -} - -/*--------------------------------------------------------------------------- - * gfx_get_cursor_offset - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_cursor_offset(void) -{ - unsigned long base = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - base = gu1_get_cursor_offset(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - base = gu2_get_cursor_offset(); -# endif - return(base); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_start - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_hblank_start(void) -{ - unsigned short hblank_start = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - hblank_start = gu1_get_hblank_start(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - hblank_start = gu2_get_hblank_start(); -# endif - return(hblank_start); -} - -/*--------------------------------------------------------------------------- - * gfx_get_hblank_end - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_hblank_end(void) -{ - unsigned short hblank_end = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - hblank_end = gu1_get_hblank_end(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - hblank_end = gu2_get_hblank_end(); -# endif - return(hblank_end); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_start - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vblank_start(void) -{ - unsigned short vblank_start = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vblank_start = gu1_get_vblank_start(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vblank_start = gu2_get_vblank_start(); -# endif - return(vblank_start); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vsync_start - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vsync_start(void) -{ - unsigned short vsync_start = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vsync_start = gu1_get_vsync_start(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vsync_start = gu2_get_vsync_start(); -# endif - return(vsync_start); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vblank_end - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_vblank_end(void) -{ - unsigned short vblank_end = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - vblank_end = gu1_get_vblank_end(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - vblank_end = gu2_get_vblank_end(); -# endif - return(vblank_end); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_palette_entry - *--------------------------------------------------------------------------- - */ -int gfx_get_display_palette_entry(unsigned long index, unsigned long *palette) -{ - int status = 0; - -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - status = gu1_get_display_palette_entry(index, palette); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - status = gu2_get_display_palette_entry(index, palette); -# endif - - return status; -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_palette - *--------------------------------------------------------------------------- - */ -void gfx_get_display_palette(unsigned long *palette) -{ -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - gu1_get_display_palette(palette); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_get_display_palette(palette); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_cursor_enable - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_cursor_enable(void) -{ - unsigned long enable = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - enable = gu1_get_cursor_enable(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - enable = gu2_get_cursor_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_cursor_position - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_cursor_position(void) -{ - unsigned long position = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - position = gu1_get_cursor_position(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - position = gu2_get_cursor_position(); -# endif - return(position); -} - -/*--------------------------------------------------------------------------- - * gfx_get_cursor_clip - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_cursor_clip(void) -{ - unsigned long offset = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - offset = gu1_get_cursor_clip(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - offset = gu2_get_cursor_clip(); -# endif - return(offset); -} - -/*--------------------------------------------------------------------------- - * gfx_get_cursor_color - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_cursor_color(int index) -{ - unsigned long color = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - color = gu1_get_cursor_color(index); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - color = gu2_get_cursor_color(index); -# endif - return(color); -} - -/*--------------------------------------------------------------------------- - * gfx_get_icon_enable - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_icon_enable(void) -{ - unsigned long enable = 0; -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - enable = gu2_get_icon_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_icon_offset - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_icon_offset(void) -{ - unsigned long base = 0; - -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - base = gu2_get_icon_offset(); -# endif - - return(base); -} - -/*--------------------------------------------------------------------------- - * gfx_get_icon_position - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_icon_position(void) -{ - unsigned long position = 0; - -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - position = gu2_get_icon_position(); -# endif - - return(position); -} - -/*--------------------------------------------------------------------------- - * gfx_get_icon_color - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_icon_color(int index) -{ - unsigned long color = 0; - -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - color = gu2_get_icon_color(index); -# endif - - return(color); -} - -/*--------------------------------------------------------------------------- - * gfx_get_compression_enable - *--------------------------------------------------------------------------- - */ -int gfx_get_compression_enable(void) -{ - int enable = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - enable = gu1_get_compression_enable(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - enable = gu2_get_compression_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_compression_offset - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_compression_offset(void) -{ - unsigned long offset = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - offset = gu1_get_compression_offset(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - offset = gu2_get_compression_offset(); -# endif - return(offset); -} - -/*--------------------------------------------------------------------------- - * gfx_get_compression_pitch - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_compression_pitch(void) -{ - unsigned short pitch = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - pitch = gu1_get_compression_pitch(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - pitch = gu2_get_compression_pitch(); -# endif - return(pitch); -} - -/*--------------------------------------------------------------------------- - * gfx_get_compression_size - *--------------------------------------------------------------------------- - */ -unsigned short gfx_get_compression_size(void) -{ - unsigned short size = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - size = gu1_get_compression_size(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - size = gu2_get_compression_size(); -# endif - return(size); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_priority_high - *--------------------------------------------------------------------------- - */ -int gfx_get_display_priority_high(void) -{ - int high = GFX_STATUS_UNSUPPORTED; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - high = gu1_get_display_priority_high(); -# endif - return(high); -} - -/*--------------------------------------------------------------------------- - * gfx_get_valid_bit - *--------------------------------------------------------------------------- - */ -int gfx_get_valid_bit(int line) -{ - int valid = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - valid = gu1_get_valid_bit(line); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - valid = gu2_get_valid_bit(line); -# endif - return(valid); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_offset - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_display_video_offset(void) -{ - unsigned long offset = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - offset = gu1_get_display_video_offset(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - offset = gu2_get_display_video_offset(); -# endif - return(offset); -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_yuv_offsets - *--------------------------------------------------------------------------- - */ -void gfx_get_display_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_get_display_video_yuv_offsets(yoffset, uoffset, voffset); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_yuv_offsets - *--------------------------------------------------------------------------- - */ -void gfx_get_display_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -{ -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - gu2_get_display_video_yuv_pitch(ypitch, uvpitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_downscale_delta - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_display_video_downscale_delta(void) -{ - unsigned long ret_value = 0; - -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - ret_value = gu2_get_display_video_downscale_delta(); -# endif - - return ret_value; -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_downscale_delta - *--------------------------------------------------------------------------- - */ -int gfx_get_display_video_downscale_enable(void) -{ - int ret_value = 0; - -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - ret_value = gu2_get_display_video_downscale_enable(); -# endif - - return ret_value; -} - -/*--------------------------------------------------------------------------- - * gfx_get_display_video_size - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_display_video_size(void) -{ - unsigned long size = 0; -# if GFX_DISPLAY_GU1 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU1) - size = gu1_get_display_video_size(); -# endif -# if GFX_DISPLAY_GU2 - if (gfx_display_type & GFX_DISPLAY_TYPE_GU2) - size = gu2_get_display_video_size(); -# endif - return(size); -} - -#endif /* GFX_READ_ROUTINES */ - -#endif /* GFX_DISPLAY_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_i2c.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_i2c.c deleted file mode 100644 index cbcb737d6..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_i2c.c +++ /dev/null @@ -1,260 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_i2c.c,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_i2c.c $ - * - * This file contains routines to write to and read from the I2C bus. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* INCLUDE ROUTINES FOR ACCESS.BUS, IF SPECIFIED */ -/* This is for SC1200 systems. */ - -#if GFX_I2C_ACCESS -#include "i2c_acc.c" -#endif - -/* INCLUDE ROUTINES FOR CS5530 GPIOs, IF SPECIFIED */ -/* This is for GXLV systems that use GPIOs on the CS5530 for I2C. */ - -#if GFX_I2C_GPIO -#include "i2c_gpio.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either ACCESS.bus or GPIO routines. */ - -#if GFX_I2C_DYNAMIC - -/*--------------------------------------------------------------------------- - * gfx_i2c_reset - *--------------------------------------------------------------------------- - */ -int gfx_i2c_reset(unsigned char busnum, short adr, char freq) -{ - int status = GFX_STATUS_UNSUPPORTED; -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - status = acc_i2c_reset(busnum, adr, freq); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - status = gpio_i2c_reset(busnum, adr, freq); -#endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_select_gpio - *--------------------------------------------------------------------------- - */ -int gfx_i2c_select_gpio(int clock, int data) -{ -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - acc_i2c_select_gpio(clock, data); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - gpio_i2c_select_gpio(clock, data); -#endif - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_write - *--------------------------------------------------------------------------- - */ -int gfx_i2c_write(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -{ - int status = -1; -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - status = acc_i2c_write(busnum, chipadr, subadr, bytes, data); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - status = gpio_i2c_write(busnum, chipadr, subadr, bytes, data); -#endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_read - *--------------------------------------------------------------------------- - */ -int gfx_i2c_read(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -{ - int status = -1; -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - status = acc_i2c_read(busnum, chipadr, subadr, bytes, data); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - status = gpio_i2c_read(busnum, chipadr, subadr, bytes, data); -#endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_init - *--------------------------------------------------------------------------- - */ -int gfx_i2c_init(void) -{ - int status = -1; -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - status = acc_i2c_init(); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - status = gpio_i2c_init(); -#endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_cleanup - *--------------------------------------------------------------------------- - */ -void gfx_i2c_cleanup(void) -{ -#if GFX_I2C_ACCESS - if (gfx_i2c_type & GFX_I2C_TYPE_ACCESS) - acc_i2c_cleanup(); -#endif -#if GFX_I2C_GPIO - if (gfx_i2c_type & GFX_I2C_TYPE_GPIO) - gpio_i2c_cleanup(); -#endif -} - -#endif /* GFX_I2C_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_init.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_init.c deleted file mode 100644 index 93b0102b5..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_init.c +++ /dev/null @@ -1,699 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_init.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_init.c $ - * - * This file contains routines typically used in driver initialization. - * - * Routines: - * - * gfx_pci_config_read - * gfx_cpu_config_read - * gfx_detect_cpu - * gfx_detect_video - * gfx_get_cpu_register_base - * gfx_get_frame_buffer_base - * gfx_get_frame_buffer_size - * gfx_get_vid_register_base - * gfx_get_vip_register_base - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* CONSTANTS USED BY THE INITIALIZATION CODE */ - -#define PCI_CONFIG_ADDR 0x0CF8 -#define PCI_CONFIG_DATA 0x0CFC -#define PCI_VENDOR_DEVICE_GXM 0x00011078 -#define PCI_VENDOR_DEVICE_REDCLOUD 0x0028100B -#define REDCLOUD_VIDEO_PCI_VENDOR_DEVICE 0x0030100B - -#define GXM_CONFIG_GCR 0xB8 -#define GXM_CONFIG_CCR3 0xC3 -#define GXM_CONFIG_DIR0 0xFE -#define GXM_CONFIG_DIR1 0xFF - -/* STATIC VARIABLES FOR THIS FILE */ - -unsigned long gfx_cpu_version = 0; -unsigned long gfx_cpu_frequency = 0; -unsigned long gfx_vid_version = 0; -unsigned long gfx_gx1_scratch_base = 0; -unsigned long gfx_gx2_scratch_base = 0x7FC000; -ChipType gfx_chip_revision = CHIP_NOT_DETECTED; - -/* INCLUDE SUPPORT FOR FIRST GENERATION, IF SPECIFIED. */ - -#if GFX_INIT_GU1 -#include "init_gu1.c" -#endif - -/* INCLUDE SUPPORT FOR SECOND GENERATION, IF SPECIFIED. */ - -#if GFX_INIT_GU2 -#include "init_gu2.c" -#endif - -/* THE FOLLOWING ROUTINES ARE NEVER DYNAMIC */ -/* They are used to set the variables for future dynamic */ -/* function calls. */ - -/*----------------------------------------------------------------------------- - * gfx_detect_chip - * - * This routine returns the name and revision of the chip. This function is only - * relevant to the SC1200. - *----------------------------------------------------------------------------- - */ -ChipType gfx_detect_chip(void) -{ - unsigned char pid = INB(SC1200_CB_BASE_ADDR + SC1200_CB_PID); - unsigned char rev = INB(SC1200_CB_BASE_ADDR + SC1200_CB_REV); - - gfx_chip_revision = CHIP_NOT_DETECTED; - - if (pid == 0x4) - { - switch (rev) - { - case 0: - gfx_chip_revision = SC1200_REV_A; - break; - case 1: - gfx_chip_revision = SC1200_REV_B1_B2; - break; - case 2: - gfx_chip_revision = SC1200_REV_B3; - break; - case 3: - gfx_chip_revision = SC1200_REV_C1; - break; - case 4: - gfx_chip_revision = SC1200_REV_D1; - break; - case 5: - gfx_chip_revision = SC1200_REV_D1_1; - break; - case 6: - gfx_chip_revision = SC1200_REV_D2_MVD; - break; - } - if (rev > 0x6) - gfx_chip_revision = SC1200_FUTURE_REV; - } - else if (pid == 0x5) - { - if (rev == 0x6) - gfx_chip_revision = SC1200_REV_D2_MVE; - else if (rev > 0x6) - gfx_chip_revision = SC1200_FUTURE_REV; - } - return(gfx_chip_revision); -} - -/*----------------------------------------------------------------------------- - * gfx_detect_cpu - * - * This routine returns the type and revison of the CPU. If a Geode - * processor is not present, the routine returns zero. - * - * The return value is as follows: - * bits[24:16] = minor version - * bits[15:8] = major version - * bits[7:0] = type (1 = GXm, 2 = SC1200, 3 = Redcloud) - * - * A return value of 0x00020501, for example, indicates GXm version 5.2. - *----------------------------------------------------------------------------- - */ -unsigned long gfx_detect_cpu(void) -{ - - unsigned long value = 0; - unsigned long version = 0; - - /* initialize core freq. to 0 */ - gfx_cpu_frequency = 0; - -#if GFX_INIT_GU1 - - value = gfx_pci_config_read(0x80000000); - - if (value == PCI_VENDOR_DEVICE_GXM) - { - unsigned char dir0 = gfx_gxm_config_read(GXM_CONFIG_DIR0) & 0xF0; - unsigned char dir1 = gfx_gxm_config_read(GXM_CONFIG_DIR1); - - if (dir0 == 0x40) - { - /* CHECK FOR GXLV (and GXm) (DIR1 = 0x30 THROUGH 0x82) */ - - if ((dir1 >= 0x30) && (dir1 <= 0x82)) - { - /* Major version is one less than what appears in DIR1 */ - if( (dir1&0xF0)<0x70){ - - version = GFX_CPU_GXLV | - - ((( ( (unsigned long) dir1 >> 4)-1 ) << 8) ) | /* major - 1 */ - - ((((unsigned long) dir1 & 0x0F)) << 16); /* minor */ - } - else{ - version = GFX_CPU_GXLV | - ((((unsigned long) dir1 >> 4) ) << 8) | /* major */ - ((((unsigned long) dir1 & 0x0F)) << 16); /* minor */ - - } - /* Currently always CS5530 for video overlay. */ - -# if GFX_VIDEO_DYNAMIC - gfx_video_type = GFX_VIDEO_TYPE_CS5530; -# endif - - /* Currently always CS5530 GPIOs for I2C access. */ - -# if GFX_I2C_DYNAMIC - gfx_i2c_type = GFX_I2C_TYPE_GPIO; -# endif - -# if GFX_TV_DYNAMIC - gfx_tv_type = GFX_TV_TYPE_FS451; -# endif - } - } - else if (dir0 == 0xB0) - { - /* CHECK FOR SC1200 */ - - if ((dir1 == 0x70) || (dir1 == 0x81)) - { - version = GFX_CPU_SC1200 | - ((((unsigned long) dir1 >> 4) ) << 8) | /* major */ - ((((unsigned long) dir1 & 0x0F)) << 16); /* minor */ - - /* Detect SC1200 revision */ - - gfx_detect_chip(); - - /* SC1200 for video overlay and VIP. */ - -# if GFX_VIDEO_DYNAMIC - gfx_video_type = GFX_VIDEO_TYPE_SC1200; -# endif - -# if GFX_VIP_DYNAMIC - gfx_vip_type = GFX_VIP_TYPE_SC1200; -# endif - - /* Currently always SAA7114 decoder. */ - -# if GFX_DECODER_DYNAMIC - gfx_decoder_type = GFX_DECODER_TYPE_SAA7114; -# endif - - /* SC1200 for TV encoder */ - -# if GFX_TV_DYNAMIC - gfx_tv_type = GFX_TV_TYPE_SC1200; -# endif - - /* Currently always ACCESS.bus for I2C access. */ - -# if GFX_I2C_DYNAMIC - gfx_i2c_type = GFX_I2C_TYPE_ACCESS; -# endif - } - } - - if (version ) - { - /* ALWAYS FIRST GENERATION GRAPHICS UNIT */ - -# if GFX_DISPLAY_DYNAMIC - gfx_display_type = GFX_DISPLAY_TYPE_GU1; -# endif -# if GFX_2DACCEL_DYNAMIC - gfx_2daccel_type = GFX_2DACCEL_TYPE_GU1; -# endif -# if GFX_INIT_DYNAMIC - gfx_init_type = GFX_INIT_TYPE_GU1; -# endif - - /* READ THE CORE FREQUENCY */ - - gfx_cpu_frequency = gfx_get_core_freq(); - } - } - -#endif - -#if GFX_INIT_GU2 - - value = gfx_pci_config_read(0x80000800); - - if (value == PCI_VENDOR_DEVICE_REDCLOUD) - { - Q_WORD msr_value; - int valid, i; - - /* CHECK FOR SOFT VG */ - /* If SoftVG is not present, the base addresses for all devices */ - /* will not be allocated. Essentially, it is as if no Redcloud */ - /* video hardware is present. */ - - value = gfx_pci_config_read (0x80000900); - - if (value == REDCLOUD_VIDEO_PCI_VENDOR_DEVICE) - { - valid = 1; - - /* BAR0 - BAR3 HOLD THE PERIPHERAL BASE ADDRESSES */ - - for (i = 0; i < 4; i++) - { - value = gfx_pci_config_read (0x80000910 + (i << 2)); - if (value == 0x00000000 || value == 0xFFFFFFFF) - { - valid = 0; - break; - } - } - - if (valid) - { - /* REDCLOUD INTEGRATED VIDEO */ - -# if GFX_VIDEO_DYNAMIC - gfx_video_type = GFX_VIDEO_TYPE_REDCLOUD; -# endif - - /* CURRENTLY, ALWAYS GPIO FOR I2C ACCESS */ - -# if GFX_I2C_DYNAMIC - gfx_i2c_type = GFX_I2C_TYPE_GPIO; -# endif - - /* SECOND-GENERATION DISPLAY CONTROLLER */ - -# if GFX_DISPLAY_DYNAMIC - gfx_display_type = GFX_DISPLAY_TYPE_GU2; -# endif - - /* SECOND-GENERATION GRAPHICS UNIT */ - -# if GFX_2DACCEL_DYNAMIC - gfx_2daccel_type = GFX_2DACCEL_TYPE_GU2; -# endif - - /* SECOND-GENERATION INITIALIZATION */ - -# if GFX_INIT_DYNAMIC - gfx_init_type = GFX_INIT_TYPE_GU2; -# endif - - /* MBUS MSR ACCESSES */ - -# if GFX_MSR_DYNAMIC - gfx_msr_type = GFX_MSR_TYPE_REDCLOUD; -# endif - - /* CS5530 GPIO I2C */ - -# if GFX_I2C_DYNAMIC - gfx_i2c_type = GFX_I2C_TYPE_GPIO; -# endif - - /* READ VERSION */ - - gfx_msr_init(); - - gfx_msr_read (RC_ID_MCP, MCP_RC_REVID, &msr_value); - - /* SUBTRACT 1 FROM REV ID */ - /* REDCLOUD 1.X rev id is 1 less than the reported value */ - - if ((msr_value.low & 0xF0) == 0x10) - msr_value.low--; - - version = GFX_CPU_REDCLOUD | - ((msr_value.low & 0xF0) << 4) | /* MAJOR */ - ((msr_value.low & 0x0F) << 16); /* MINOR */ - - /* READ THE CORE FREQUENCY */ - - gfx_cpu_frequency = gfx_get_core_freq(); - - /* SET THE GP SCRATCH AREA */ - /* Color bitmap BLTs use the last 16K of frame buffer space */ - - gfx_gx2_scratch_base = gfx_get_frame_buffer_size() - 0x4000; - } - } - } - -#endif - - if (!version) - { - /* ALWAYS SECOND GENERATION IF SIMULATING */ - /* For now, that is. This could change. */ - -# if GFX_DISPLAY_DYNAMIC - gfx_display_type = GFX_DISPLAY_TYPE_GU2; -# endif -# if GFX_2DACCEL_DYNAMIC - gfx_2daccel_type = GFX_2DACCEL_TYPE_GU2; -# endif -# if GFX_INIT_DYNAMIC - gfx_init_type = GFX_INIT_TYPE_GU2; -# endif -# if GFX_MSR_DYNAMIC - gfx_msr_type = GFX_MSR_TYPE_REDCLOUD; -# endif -# if GFX_VIDEO_DYNAMIC - gfx_video_type = GFX_VIDEO_TYPE_REDCLOUD; -# endif -# if GFX_I2C_DYNAMIC - gfx_i2c_type = GFX_I2C_TYPE_GPIO; -# endif - } - gfx_cpu_version = version; - - return(version); -} - -/*----------------------------------------------------------------------------- - * gfx_detect_video - * - * This routine returns the type of the video hardware. - * - * The return value is as follows: - * bits[7:0] = type (1 = CS5530, 2 = SC1200, 3 = Redcloud) - * - * Currently this routine does not actually detect any hardware, and bases - * the video hardware entirely on the detected CPU. - *----------------------------------------------------------------------------- - */ -unsigned long gfx_detect_video(void) -{ - unsigned long version = 0; - if ((gfx_cpu_version & 0xFF) == GFX_CPU_GXLV) - version = GFX_VID_CS5530; - else if ((gfx_cpu_version & 0xFF) == GFX_CPU_SC1200) - version = GFX_VID_SC1200; - else if ((gfx_cpu_version & 0xFF) == GFX_CPU_REDCLOUD) - version = GFX_VID_REDCLOUD; - gfx_vid_version = version; - return(version); -} - -/*----------------------------------------------------------------------------- - * gfx_pci_config_read - * - * This routine reads a 32-bit value from the specified location in PCI - * configuration space. - *----------------------------------------------------------------------------- - */ -unsigned long gfx_pci_config_read(unsigned long address) -{ - unsigned long value = 0xFFFFFFFF; - OUTD(PCI_CONFIG_ADDR, address); - value = IND(PCI_CONFIG_DATA); - return(value); -} - -/*----------------------------------------------------------------------------- - * gfx_pci_config_write - * - * This routine writes a 32-bit value to the specified location in PCI - * configuration space. - *----------------------------------------------------------------------------- - */ -void gfx_pci_config_write(unsigned long address, unsigned long data) -{ - OUTD(PCI_CONFIG_ADDR, address); - OUTD(PCI_CONFIG_DATA, data); - return; -} - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either first or second generation routines. */ - -#if GFX_INIT_DYNAMIC - -/*----------------------------------------------------------------------------- - * gfx_get_core_freq - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_core_freq(void) -{ - unsigned long freq = 0; -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - freq = gu1_get_core_freq(); -# endif -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - freq = gu2_get_core_freq(); -# endif - return freq; -} - -/*----------------------------------------------------------------------------- - * gfx_get_cpu_register_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_cpu_register_base(void) -{ - unsigned long base = 0; - -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - base = gu1_get_cpu_register_base (); -# endif -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - base = gu2_get_cpu_register_base (); -# endif - - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_graphics_register_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_graphics_register_base(void) -{ - unsigned long base = 0; - -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - base = gu2_get_graphics_register_base (); -# endif - - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_frame_buffer_base(void) -{ - unsigned long base = 0; - -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - base = gu1_get_frame_buffer_base (); -# endif -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - base = gu2_get_frame_buffer_base (); -# endif - - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_size - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_frame_buffer_size(void) -{ - unsigned long size = 0; - -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - size = gu1_get_frame_buffer_size(); -# endif -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - size = gu2_get_frame_buffer_size(); -# endif - - return size; -} - -/*----------------------------------------------------------------------------- - * gfx_get_vid_register_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vid_register_base(void) -{ - unsigned long base = 0; - -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - base = gu1_get_vid_register_base (); -# endif -# if GFX_INIT_GU2 - if (gfx_init_type & GFX_INIT_TYPE_GU2) - base = gu2_get_vid_register_base (); -# endif - - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_register_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vip_register_base(void) -{ - unsigned long base = 0; - -# if GFX_INIT_GU1 - if (gfx_init_type & GFX_INIT_TYPE_GU1) - base = gu1_get_vip_register_base (); -# endif - - return(base); -} - -#endif - -/* END OF FILE */ - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_mode.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_mode.h deleted file mode 100644 index f7293e6b4..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_mode.h +++ /dev/null @@ -1,227 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_mode.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_mode.h $ - * - * This header file contains the mode tables. It is used by the "gfx_disp.c" - * file to set a display mode. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#ifndef _gfx_mode_h -#define _gfx_mode_h - -/* MODE FLAGS (BITWISE-OR) */ - -#define GFX_MODE_8BPP 0x00000001 -#define GFX_MODE_12BPP 0x00000002 -#define GFX_MODE_15BPP 0x00000004 -#define GFX_MODE_16BPP 0x00000008 -#define GFX_MODE_24BPP 0x00000010 -#define GFX_MODE_56HZ 0x00000020 -#define GFX_MODE_60HZ 0x00000040 -#define GFX_MODE_70HZ 0x00000080 -#define GFX_MODE_72HZ 0x00000100 -#define GFX_MODE_75HZ 0x00000200 -#define GFX_MODE_85HZ 0x00000400 -#define GFX_MODE_NEG_HSYNC 0x00000800 -#define GFX_MODE_NEG_VSYNC 0x00001000 -#define GFX_MODE_PIXEL_DOUBLE 0x00002000 -#define GFX_MODE_LINE_DOUBLE 0x00004000 -#define GFX_MODE_TV_NTSC 0x00008000 -#define GFX_MODE_TV_PAL 0x00010000 - -#define GFX_MODE_LOCK_TIMING 0x10000000 - - -/* STRUCTURE DEFINITION */ - -typedef struct tagDISPLAYMODE -{ - /* DISPLAY MODE FLAGS */ - /* Specify valid color depths and the refresh rate. */ - - unsigned long flags; - - /* TIMINGS */ - - unsigned short hactive; - unsigned short hblankstart; - unsigned short hsyncstart; - unsigned short hsyncend; - unsigned short hblankend; - unsigned short htotal; - - unsigned short vactive; - unsigned short vblankstart; - unsigned short vsyncstart; - unsigned short vsyncend; - unsigned short vblankend; - unsigned short vtotal; - - /* CLOCK FREQUENCY */ - - unsigned long frequency; - -} DISPLAYMODE; - - -/* For Fixed timings */ -typedef struct tagFIXEDTIMINGS -{ - /* DISPLAY MODE FLAGS */ - /* Specify valid color depths and the refresh rate. */ - - int panelresx; - int panelresy; - unsigned short xres; - unsigned short yres; - - /* TIMINGS */ - - unsigned short hactive; - unsigned short hblankstart; - unsigned short hsyncstart; - unsigned short hsyncend; - unsigned short hblankend; - unsigned short htotal; - - unsigned short vactive; - unsigned short vblankstart; - unsigned short vsyncstart; - unsigned short vsyncend; - unsigned short vblankend; - unsigned short vtotal; - - /* CLOCK FREQUENCY */ - - unsigned long frequency; - -} FIXEDTIMINGS; - -#endif /* !_gfx_mode_h */ - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_msr.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_msr.c deleted file mode 100644 index 92c632ba5..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_msr.c +++ /dev/null @@ -1,247 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_msr.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_msr.c $ - * - * This file contains routines to read machine-specific registers (MSRs) - * - * Routines: - * - * gfx_msr_init - * gfx_id_msr_device - * gfx_get_msr_dev_address - * gfx_get_glink_id_at_address - * gfx_msr_read - * gfx_msr_write - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* INCLUDE SUPPORT FOR REDCLOUD, IF SPECIFIED */ - -#if GFX_MSR_REDCLOUD -#include "msr_rdcl.c" -#endif - -/* EXTRA WRAPPERS FOR DYNAMIC SELECTION */ - -#if GFX_MSR_DYNAMIC - -/*----------------------------------------------------------------------------- - * gfx_msr_init - *----------------------------------------------------------------------------- - */ -int gfx_msr_init () -{ - int ret_value = 0; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_msr_init(); -# endif - - return ret_value; -} - -/*----------------------------------------------------------------------------- - * gfx_id_msr_device - *----------------------------------------------------------------------------- - */ -DEV_STATUS gfx_id_msr_device (MSR *pDev, unsigned long address) -{ - DEV_STATUS ret_value = NOT_KNOWN; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_id_msr_device(pDev, address); -# endif - - return ret_value; -} - -/*----------------------------------------------------------------------------- - * gfx_get_msr_dev_address - *----------------------------------------------------------------------------- - */ -DEV_STATUS gfx_get_msr_dev_address (unsigned int device, unsigned long *address) -{ - DEV_STATUS ret_value = NOT_KNOWN; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_get_msr_dev_address (device, address); -# endif - - return ret_value; -} - -/*----------------------------------------------------------------------------- - * gfx_get_glink_id_at_address - *----------------------------------------------------------------------------- - */ -DEV_STATUS gfx_get_glink_id_at_address(unsigned int *device, unsigned long address) -{ - DEV_STATUS ret_value = NOT_KNOWN; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_get_glink_id_at_address (device, address); -# endif - - return ret_value; -} - -/*----------------------------------------------------------------------------- - * gfx_msr_read - *----------------------------------------------------------------------------- - */ -DEV_STATUS gfx_msr_read (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -{ - DEV_STATUS ret_value = NOT_KNOWN; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_msr_read (device, msrRegister, msrValue); -# endif - - return ret_value; -} - -/*----------------------------------------------------------------------------- - * gfx_msr_write - *----------------------------------------------------------------------------- - */ -DEV_STATUS gfx_msr_write (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -{ - DEV_STATUS ret_value = NOT_KNOWN; - -# if GFX_MSR_REDCLOUD - if (gfx_msr_type & GFX_MSR_TYPE_REDCLOUD) - ret_value = redcloud_msr_write(device, msrRegister, msrValue); -# endif - - return ret_value; -} - -#endif diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_regs.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_regs.h deleted file mode 100644 index 9aac33475..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_regs.h +++ /dev/null @@ -1,1363 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_regs.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_regs.h $ - * - * This header file contains the graphics register definitions. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*----------------------------------*/ -/* FIRST GENERATION GRAPHICS UNIT */ -/*----------------------------------*/ - -#define GP_DST_XCOOR 0x8100 /* x destination origin */ -#define GP_DST_YCOOR 0x8102 /* y destination origin */ -#define GP_WIDTH 0x8104 /* pixel width */ -#define GP_HEIGHT 0x8106 /* pixel height */ -#define GP_SRC_XCOOR 0x8108 /* x source origin */ -#define GP_SRC_YCOOR 0x810A /* y source origin */ - -#define GP_VECTOR_LENGTH 0x8104 /* vector length */ -#define GP_INIT_ERROR 0x8106 /* vector initial error */ -#define GP_AXIAL_ERROR 0x8108 /* axial error increment */ -#define GP_DIAG_ERROR 0x810A /* diagonal error increment */ - -#define GP_SRC_COLOR_0 0x810C /* source color 0 */ -#define GP_SRC_COLOR_1 0x810E /* source color 1 */ -#define GP_PAT_COLOR_0 0x8110 /* pattern color 0 */ -#define GP_PAT_COLOR_1 0x8112 /* pattern color 1 */ -#define GP_PAT_COLOR_2 0x8114 /* pattern color 2 */ -#define GP_PAT_COLOR_3 0x8116 /* pattern color 3 */ -#define GP_PAT_DATA_0 0x8120 /* bits 31:0 of pattern */ -#define GP_PAT_DATA_1 0x8124 /* bits 63:32 of pattern */ -#define GP_PAT_DATA_2 0x8128 /* bits 95:64 of pattern */ -#define GP_PAT_DATA_3 0x812C /* bits 127:96 of pattern */ - -#define GP_VGA_WRITE 0x8140 /* VGA write path control */ -#define GP_VGA_READ 0x8144 /* VGA read path control */ - -#define GP_RASTER_MODE 0x8200 /* raster operation */ -#define GP_VECTOR_MODE 0x8204 /* vector mode register */ -#define GP_BLIT_MODE 0x8208 /* blit mode register */ -#define GP_BLIT_STATUS 0x820C /* blit status register */ - -#define GP_VGA_BASE 0x8210 /* VGA memory offset (x64K) */ -#define GP_VGA_LATCH 0x8214 /* VGA display latch */ - -/* "GP_VECTOR_MODE" BIT DEFINITIONS */ - -#define VM_X_MAJOR 0x0000 /* X major vector */ -#define VM_Y_MAJOR 0x0001 /* Y major vector */ -#define VM_MAJOR_INC 0x0002 /* positive major axis step */ -#define VM_MINOR_INC 0x0004 /* positive minor axis step */ -#define VM_READ_DST_FB 0x0008 /* read destination data */ - -/* "GP_RASTER_MODE" BIT DEFINITIONS */ - -#define RM_PAT_DISABLE 0x0000 /* pattern is disabled */ -#define RM_PAT_MONO 0x0100 /* 1BPP pattern expansion */ -#define RM_PAT_DITHER 0x0200 /* 2BPP pattern expansion */ -#define RM_PAT_COLOR 0x0300 /* 8BPP or 16BPP pattern */ -#define RM_PAT_MASK 0x0300 /* mask for pattern mode */ -#define RM_PAT_TRANSPARENT 0x0400 /* transparent 1BPP pattern */ -#define RM_SRC_TRANSPARENT 0x0800 /* transparent 1BPP source */ - -/* "GP_BLIT_STATUS" BIT DEFINITIONS */ - -#define BS_BLIT_BUSY 0x0001 /* blit engine is busy */ -#define BS_PIPELINE_BUSY 0x0002 /* graphics pipeline is busy*/ -#define BS_BLIT_PENDING 0x0004 /* blit pending */ -#define BC_FLUSH 0x0080 /* flush pipeline requests */ -#define BC_8BPP 0x0000 /* 8BPP mode */ -#define BC_16BPP 0x0100 /* 16BPP mode */ -#define BC_FB_WIDTH_1024 0x0000 /* framebuffer width = 1024 */ -#define BC_FB_WIDTH_2048 0x0200 /* framebuffer width = 2048 */ -#define BC_FB_WIDTH_4096 0x0400 /* framebuffer width = 4096 */ - -/* "GP_BLIT_MODE" BIT DEFINITIONS */ - -#define BM_READ_SRC_NONE 0x0000 /* source foreground color */ -#define BM_READ_SRC_FB 0x0001 /* read source from FB */ -#define BM_READ_SRC_BB0 0x0002 /* read source from BB0 */ -#define BM_READ_SRC_BB1 0x0003 /* read source from BB1 */ -#define BM_READ_SRC_MASK 0x0003 /* read source mask */ - -#define BM_READ_DST_NONE 0x0000 /* no destination data */ -#define BM_READ_DST_BB0 0x0008 /* destination from BB0 */ -#define BM_READ_DST_BB1 0x000C /* destination from BB1 */ -#define BM_READ_DST_FB0 0x0010 /* dest from FB (store BB0) */ -#define BM_READ_DST_FB1 0x0014 /* dest from FB (store BB1) */ -#define BM_READ_DST_MASK 0x001C /* read destination mask */ - -#define BM_WRITE_FB 0x0000 /* write to framebuffer */ -#define BM_WRITE_MEM 0x0020 /* write to memory */ -#define BM_WRITE_MASK 0x0020 /* write mask */ - -#define BM_SOURCE_COLOR 0x0000 /* source is 8BPP or 16BPP */ -#define BM_SOURCE_EXPAND 0x0040 /* source is 1BPP */ -#define BM_SOURCE_TEXT 0x00C0 /* source is 1BPP text */ -#define BM_SOURCE_MASK 0x00C0 /* source mask */ - -#define BM_REVERSE_Y 0x0100 /* reverse Y direction */ - -/*---------------------------------------*/ -/* FIRST GENERATION DISPLAY CONTROLLER */ -/*---------------------------------------*/ - -#define DC_UNLOCK 0x8300 /* lock register */ -#define DC_GENERAL_CFG 0x8304 /* config registers... */ -#define DC_TIMING_CFG 0x8308 -#define DC_OUTPUT_CFG 0x830C - -#define DC_FB_ST_OFFSET 0x8310 /* framebuffer start offset */ -#define DC_CB_ST_OFFSET 0x8314 /* compression start offset */ -#define DC_CURS_ST_OFFSET 0x8318 /* cursor start offset */ -#define DC_ICON_ST_OFFSET 0x831C /* icon start offset */ -#define DC_VID_ST_OFFSET 0x8320 /* video start offset */ -#define DC_LINE_DELTA 0x8324 /* fb and cb skip counts */ -#define DC_BUF_SIZE 0x8328 /* fb and cb line size */ - -#define DC_H_TIMING_1 0x8330 /* horizontal timing... */ -#define DC_H_TIMING_2 0x8334 -#define DC_H_TIMING_3 0x8338 -#define DC_FP_H_TIMING 0x833C - -#define DC_V_TIMING_1 0x8340 /* vertical timing... */ -#define DC_V_TIMING_2 0x8344 -#define DC_V_TIMING_3 0x8348 -#define DC_FP_V_TIMING 0x834C - -#define DC_CURSOR_X 0x8350 /* cursor x position */ -#define DC_ICON_X 0x8354 /* HACK - 1.3 definition */ -#define DC_V_LINE_CNT 0x8354 /* vertical line counter */ -#define DC_CURSOR_Y 0x8358 /* cursor y position */ -#define DC_ICON_Y 0x835C /* HACK - 1.3 definition */ -#define DC_SS_LINE_CMP 0x835C /* line compare value */ -#define DC_CURSOR_COLOR 0x8360 /* cursor colors */ -#define DC_ICON_COLOR 0x8364 /* icon colors */ -#define DC_BORDER_COLOR 0x8368 /* border color */ -#define DC_PAL_ADDRESS 0x8370 /* palette address */ -#define DC_PAL_DATA 0x8374 /* palette data */ -#define DC_DFIFO_DIAG 0x8378 /* display FIFO diagnostic */ -#define DC_CFIFO_DIAG 0x837C /* compression FIF0 diagnostic */ - -/* PALETTE LOCATIONS */ - -#define PAL_CURSOR_COLOR_0 0x100 -#define PAL_CURSOR_COLOR_1 0x101 -#define PAL_ICON_COLOR_0 0x102 -#define PAL_ICON_COLOR_1 0x103 -#define PAL_OVERSCAN_COLOR 0x104 - -/* UNLOCK VALUE */ - -#define DC_UNLOCK_VALUE 0x00004758 /* used to unlock DC regs */ - -/* "DC_GENERAL_CFG" BIT DEFINITIONS */ - -#define DC_GCFG_DFLE 0x00000001 /* display FIFO load enable */ -#define DC_GCFG_CURE 0x00000002 /* cursor enable */ -#define DC_GCFG_VCLK_DIV 0x00000004 /* vid clock divisor */ -#define DC_GCFG_PLNO 0x00000004 /* planar offset LSB */ -#define DC_GCFG_PPC 0x00000008 /* pixel pan compatibility */ -#define DC_GCFG_CMPE 0x00000010 /* compression enable */ -#define DC_GCFG_DECE 0x00000020 /* decompression enable */ -#define DC_GCFG_DCLK_MASK 0x000000C0 /* dotclock multiplier */ -#define DC_GCFG_DCLK_POS 6 /* dotclock multiplier */ -#define DC_GCFG_DFHPSL_MASK 0x00000F00 /* FIFO high-priority start */ -#define DC_GCFG_DFHPSL_POS 8 /* FIFO high-priority start */ -#define DC_GCFG_DFHPEL_MASK 0x0000F000 /* FIFO high-priority end */ -#define DC_GCFG_DFHPEL_POS 12 /* FIFO high-priority end */ -#define DC_GCFG_CIM_MASK 0x00030000 /* compressor insert mode */ -#define DC_GCFG_CIM_POS 16 /* compressor insert mode */ -#define DC_GCFG_FDTY 0x00040000 /* frame dirty mode */ -#define DC_GCFG_RTPM 0x00080000 /* real-time perf. monitor */ -#define DC_GCFG_DAC_RS_MASK 0x00700000 /* DAC register selects */ -#define DC_GCFG_DAC_RS_POS 20 /* DAC register selects */ -#define DC_GCFG_CKWR 0x00800000 /* clock write */ -#define DC_GCFG_LDBL 0x01000000 /* line double */ -#define DC_GCFG_DIAG 0x02000000 /* FIFO diagnostic mode */ -#define DC_GCFG_CH4S 0x04000000 /* sparse refresh mode */ -#define DC_GCFG_SSLC 0x08000000 /* enable line compare */ -#define DC_GCFG_VIDE 0x10000000 /* video enable */ -#define DC_GCFG_DFCK 0x20000000 /* divide flat-panel clock - rev 2.3 down */ -#define DC_GCFG_VRDY 0x20000000 /* video port speed - rev 2.4 up */ -#define DC_GCFG_DPCK 0x40000000 /* divide pixel clock */ -#define DC_GCFG_DDCK 0x80000000 /* divide dot clock */ - -/* "DC_TIMING_CFG" BIT DEFINITIONS */ - -#define DC_TCFG_FPPE 0x00000001 /* flat-panel power enable */ -#define DC_TCFG_HSYE 0x00000002 /* horizontal sync enable */ -#define DC_TCFG_VSYE 0x00000004 /* vertical sync enable */ -#define DC_TCFG_BLKE 0x00000008 /* blank enable */ -#define DC_TCFG_DDCK 0x00000010 /* DDC clock */ -#define DC_TCFG_TGEN 0x00000020 /* timing generator enable */ -#define DC_TCFG_VIEN 0x00000040 /* vertical interrupt enable*/ -#define DC_TCFG_BLNK 0x00000080 /* blink enable */ -#define DC_TCFG_CHSP 0x00000100 /* horizontal sync polarity */ -#define DC_TCFG_CVSP 0x00000200 /* vertical sync polarity */ -#define DC_TCFG_FHSP 0x00000400 /* panel horz sync polarity */ -#define DC_TCFG_FVSP 0x00000800 /* panel vert sync polarity */ -#define DC_TCFG_FCEN 0x00001000 /* flat-panel centering */ -#define DC_TCFG_CDCE 0x00002000 /* HACK - 1.3 definition */ -#define DC_TCFG_PLNR 0x00002000 /* planar mode enable */ -#define DC_TCFG_INTL 0x00004000 /* interlace scan */ -#define DC_TCFG_PXDB 0x00008000 /* pixel double */ -#define DC_TCFG_BKRT 0x00010000 /* blink rate */ -#define DC_TCFG_PSD_MASK 0x000E0000 /* power sequence delay */ -#define DC_TCFG_PSD_POS 17 /* power sequence delay */ -#define DC_TCFG_DDCI 0x08000000 /* DDC input (RO) */ -#define DC_TCFG_SENS 0x10000000 /* monitor sense (RO) */ -#define DC_TCFG_DNA 0x20000000 /* display not active (RO) */ -#define DC_TCFG_VNA 0x40000000 /* vertical not active (RO) */ -#define DC_TCFG_VINT 0x80000000 /* vertical interrupt (RO) */ - -/* "DC_OUTPUT_CFG" BIT DEFINITIONS */ - -#define DC_OCFG_8BPP 0x00000001 /* 8/16 bpp select */ -#define DC_OCFG_555 0x00000002 /* 16 bpp format */ -#define DC_OCFG_PCKE 0x00000004 /* PCLK enable */ -#define DC_OCFG_FRME 0x00000008 /* frame rate mod enable */ -#define DC_OCFG_DITE 0x00000010 /* dither enable */ -#define DC_OCFG_2PXE 0x00000020 /* 2 pixel enable */ -#define DC_OCFG_2XCK 0x00000040 /* 2 x pixel clock */ -#define DC_OCFG_2IND 0x00000080 /* 2 index enable */ -#define DC_OCFG_34ADD 0x00000100 /* 3- or 4-bit add */ -#define DC_OCFG_FRMS 0x00000200 /* frame rate mod select */ -#define DC_OCFG_CKSL 0x00000400 /* clock select */ -#define DC_OCFG_PRMP 0x00000800 /* palette re-map */ -#define DC_OCFG_PDEL 0x00001000 /* panel data enable low */ -#define DC_OCFG_PDEH 0x00002000 /* panel data enable high */ -#define DC_OCFG_CFRW 0x00004000 /* comp line buffer r/w sel */ -#define DC_OCFG_DIAG 0x00008000 /* comp line buffer diag */ - -#define MC_MEM_CNTRL1 0x00008400 -#define MC_DR_ADD 0x00008418 -#define MC_DR_ACC 0x0000841C - -/* MC_MEM_CNTRL1 BIT DEFINITIONS */ - -#define MC_XBUSARB 0x00000008 /* 0 = GP priority < CPU priority */ - /* 1 = GP priority = CPU priority */ - /* GXm databook V2.0 is wrong ! */ -/*----------*/ -/* CS5530 */ -/*----------*/ - -/* CS5530 REGISTER DEFINITIONS */ - -#define CS5530_VIDEO_CONFIG 0x0000 -#define CS5530_DISPLAY_CONFIG 0x0004 -#define CS5530_VIDEO_X_POS 0x0008 -#define CS5530_VIDEO_Y_POS 0x000C -#define CS5530_VIDEO_SCALE 0x0010 -#define CS5530_VIDEO_COLOR_KEY 0x0014 -#define CS5530_VIDEO_COLOR_MASK 0x0018 -#define CS5530_PALETTE_ADDRESS 0x001C -#define CS5530_PALETTE_DATA 0x0020 -#define CS5530_DOT_CLK_CONFIG 0x0024 -#define CS5530_CRCSIG_TFT_TV 0x0028 - -/* "CS5530_VIDEO_CONFIG" BIT DEFINITIONS */ - -#define CS5530_VCFG_VID_EN 0x00000001 -#define CS5530_VCFG_VID_REG_UPDATE 0x00000002 -#define CS5530_VCFG_VID_INP_FORMAT 0x0000000C -#define CS5530_VCFG_8_BIT_4_2_0 0x00000004 -#define CS5530_VCFG_16_BIT_4_2_0 0x00000008 -#define CS5530_VCFG_GV_SEL 0x00000010 -#define CS5530_VCFG_CSC_BYPASS 0x00000020 -#define CS5530_VCFG_X_FILTER_EN 0x00000040 -#define CS5530_VCFG_Y_FILTER_EN 0x00000080 -#define CS5530_VCFG_LINE_SIZE_LOWER_MASK 0x0000FF00 -#define CS5530_VCFG_INIT_READ_MASK 0x01FF0000 -#define CS5530_VCFG_EARLY_VID_RDY 0x02000000 -#define CS5530_VCFG_LINE_SIZE_UPPER 0x08000000 -#define CS5530_VCFG_4_2_0_MODE 0x10000000 -#define CS5530_VCFG_16_BIT_EN 0x20000000 -#define CS5530_VCFG_HIGH_SPD_INT 0x40000000 - -/* "CS5530_DISPLAY_CONFIG" BIT DEFINITIONS */ - -#define CS5530_DCFG_DIS_EN 0x00000001 -#define CS5530_DCFG_HSYNC_EN 0x00000002 -#define CS5530_DCFG_VSYNC_EN 0x00000004 -#define CS5530_DCFG_DAC_BL_EN 0x00000008 -#define CS5530_DCFG_DAC_PWDNX 0x00000020 -#define CS5530_DCFG_FP_PWR_EN 0x00000040 -#define CS5530_DCFG_FP_DATA_EN 0x00000080 -#define CS5530_DCFG_CRT_HSYNC_POL 0x00000100 -#define CS5530_DCFG_CRT_VSYNC_POL 0x00000200 -#define CS5530_DCFG_FP_HSYNC_POL 0x00000400 -#define CS5530_DCFG_FP_VSYNC_POL 0x00000800 -#define CS5530_DCFG_XGA_FP 0x00001000 -#define CS5530_DCFG_FP_DITH_EN 0x00002000 -#define CS5530_DCFG_CRT_SYNC_SKW_MASK 0x0001C000 -#define CS5530_DCFG_CRT_SYNC_SKW_INIT 0x00010000 -#define CS5530_DCFG_PWR_SEQ_DLY_MASK 0x000E0000 -#define CS5530_DCFG_PWR_SEQ_DLY_INIT 0x00080000 -#define CS5530_DCFG_VG_CK 0x00100000 -#define CS5530_DCFG_GV_PAL_BYP 0x00200000 -#define CS5530_DCFG_DDC_SCL 0x00400000 -#define CS5530_DCFG_DDC_SDA 0x00800000 -#define CS5530_DCFG_DDC_OE 0x01000000 -#define CS5530_DCFG_16_BIT_EN 0x02000000 - - -/*----------*/ -/* SC1200 */ -/*----------*/ - -/* SC1200 VIDEO REGISTER DEFINITIONS */ - -#define SC1200_VIDEO_CONFIG 0x000 -#define SC1200_DISPLAY_CONFIG 0x004 -#define SC1200_VIDEO_X_POS 0x008 -#define SC1200_VIDEO_Y_POS 0x00C -#define SC1200_VIDEO_UPSCALE 0x010 -#define SC1200_VIDEO_COLOR_KEY 0x014 -#define SC1200_VIDEO_COLOR_MASK 0x018 -#define SC1200_PALETTE_ADDRESS 0x01C -#define SC1200_PALETTE_DATA 0x020 -#define SC1200_VID_MISC 0x028 -#define SC1200_VID_CLOCK_SELECT 0x02C -#define SC1200_VIDEO_DOWNSCALER_CONTROL 0x03C -#define SC1200_VIDEO_DOWNSCALER_COEFFICIENTS 0x40 -#define SC1200_VID_CRC 0x044 -#define SC1200_DEVICE_ID 0x048 -#define SC1200_VID_ALPHA_CONTROL 0x04C -#define SC1200_CURSOR_COLOR_KEY 0x050 -#define SC1200_CURSOR_COLOR_MASK 0x054 -#define SC1200_CURSOR_COLOR_1 0x058 -#define SC1200_CURSOR_COLOR_2 0x05C -#define SC1200_ALPHA_XPOS_1 0x060 -#define SC1200_ALPHA_YPOS_1 0x064 -#define SC1200_ALPHA_COLOR_1 0x068 -#define SC1200_ALPHA_CONTROL_1 0x06C -#define SC1200_ALPHA_XPOS_2 0x070 -#define SC1200_ALPHA_YPOS_2 0x074 -#define SC1200_ALPHA_COLOR_2 0x078 -#define SC1200_ALPHA_CONTROL_2 0x07C -#define SC1200_ALPHA_XPOS_3 0x080 -#define SC1200_ALPHA_YPOS_3 0x084 -#define SC1200_ALPHA_COLOR_3 0x088 -#define SC1200_ALPHA_CONTROL_3 0x08C -#define SC1200_VIDEO_REQUEST 0x090 -#define SC1200_ALPHA_WATCH 0x094 -#define SC1200_VIDEO_DISPLAY_MODE 0x400 -#define SC1200_VIDEO_ODD_VBI_LINE_ENABLE 0x40C -#define SC1200_VIDEO_EVEN_VBI_LINE_ENABLE 0x410 -#define SC1200_VIDEO_VBI_HORIZ_CONTROL 0x414 -#define SC1200_VIDEO_ODD_VBI_TOTAL_COUNT 0x418 -#define SC1200_VIDEO_EVEN_VBI_TOTAL_COUNT 0x41C -#define SC1200_GENLOCK 0x420 -#define SC1200_GENLOCK_DELAY 0x424 -#define SC1200_TVOUT_HORZ_TIM 0x800 -#define SC1200_TVOUT_HORZ_SYNC 0x804 -#define SC1200_TVOUT_VERT_SYNC 0x808 -#define SC1200_TVOUT_LINE_END 0x80C -#define SC1200_TVOUT_VERT_DOWNSCALE 0x810 /* REV. A & B */ -#define SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE 0x810 /* REV. C */ -#define SC1200_TVOUT_HORZ_SCALING 0x814 -#define SC1200_TVOUT_DEBUG 0x818 -#define SC1200_TVENC_TIM_CTRL_1 0xC00 -#define SC1200_TVENC_TIM_CTRL_2 0xC04 -#define SC1200_TVENC_TIM_CTRL_3 0xC08 -#define SC1200_TVENC_SUB_FREQ 0xC0C -#define SC1200_TVENC_DISP_POS 0xC10 -#define SC1200_TVENC_DISP_SIZE 0xC14 -#define SC1200_TVENC_CC_DATA 0xC18 -#define SC1200_TVENC_EDS_DATA 0xC1C -#define SC1200_TVENC_CGMS_DATA 0xC20 -#define SC1200_TVENC_WSS_DATA 0xC24 -#define SC1200_TVENC_CC_CONTROL 0xC28 -#define SC1200_TVENC_DAC_CONTROL 0xC2C -#define SC1200_TVENC_MV_CONTROL 0xC30 - -/* "SC1200_VIDEO_CONFIG" BIT DEFINITIONS */ - -#define SC1200_VCFG_VID_EN 0x00000001 -#define SC1200_VCFG_VID_INP_FORMAT 0x0000000C -#define SC1200_VCFG_UYVY_FORMAT 0x00000000 -#define SC1200_VCFG_Y2YU_FORMAT 0x00000004 -#define SC1200_VCFG_YUYV_FORMAT 0x00000008 -#define SC1200_VCFG_YVYU_FORMAT 0x0000000C -#define SC1200_VCFG_X_FILTER_EN 0x00000040 -#define SC1200_VCFG_Y_FILTER_EN 0x00000080 -#define SC1200_VCFG_LINE_SIZE_LOWER_MASK 0x0000FF00 -#define SC1200_VCFG_INIT_READ_MASK 0x01FF0000 -#define SC1200_VCFG_LINE_SIZE_UPPER 0x08000000 -#define SC1200_VCFG_4_2_0_MODE 0x10000000 - -/* "SC1200_DISPLAY_CONFIG" BIT DEFINITIONS */ - -#define SC1200_DCFG_DIS_EN 0x00000001 -#define SC1200_DCFG_HSYNC_EN 0x00000002 -#define SC1200_DCFG_VSYNC_EN 0x00000004 -#define SC1200_DCFG_DAC_BL_EN 0x00000008 -#define SC1200_DCFG_FP_PWR_EN 0x00000040 -#define SC1200_DCFG_FP_DATA_EN 0x00000080 -#define SC1200_DCFG_CRT_HSYNC_POL 0x00000100 -#define SC1200_DCFG_CRT_VSYNC_POL 0x00000200 -#define SC1200_DCFG_CRT_SYNC_SKW_MASK 0x0001C000 -#define SC1200_DCFG_CRT_SYNC_SKW_INIT 0x00010000 -#define SC1200_DCFG_PWR_SEQ_DLY_MASK 0x000E0000 -#define SC1200_DCFG_PWR_SEQ_DLY_INIT 0x00080000 -#define SC1200_DCFG_VG_CK 0x00100000 -#define SC1200_DCFG_GV_PAL_BYP 0x00200000 -#define SC1200_DCFG_DDC_SCL 0x00400000 -#define SC1200_DCFG_DDC_SDA 0x00800000 -#define SC1200_DCFG_DDC_OE 0x01000000 - -/* "SC1200_VID_MISC" BIT DEFINITIONS */ - -#define SC1200_GAMMA_BYPASS_BOTH 0x00000001 -#define SC1200_DAC_POWER_DOWN 0x00000400 -#define SC1200_ANALOG_POWER_DOWN 0x00000800 -#define SC1200_PLL_POWER_NORMAL 0x00001000 - -/* "SC1200_VIDEO_DOWNSCALER_CONTROL" BIT DEFINITIONS */ - -#define SC1200_VIDEO_DOWNSCALE_ENABLE 0x00000001 -#define SC1200_VIDEO_DOWNSCALE_FACTOR_POS 1 -#define SC1200_VIDEO_DOWNSCALE_FACTOR_MASK 0x0000001E -#define SC1200_VIDEO_DOWNSCALE_TYPE_A 0x00000000 -#define SC1200_VIDEO_DOWNSCALE_TYPE_B 0x00000040 -#define SC1200_VIDEO_DOWNSCALE_TYPE_MASK 0x00000040 - -/* "SC1200_VIDEO_DOWNSCALER_COEFFICIENTS" BIT DEFINITIONS */ - -#define SC1200_VIDEO_DOWNSCALER_COEF1_POS 0 -#define SC1200_VIDEO_DOWNSCALER_COEF2_POS 8 -#define SC1200_VIDEO_DOWNSCALER_COEF3_POS 16 -#define SC1200_VIDEO_DOWNSCALER_COEF4_POS 24 -#define SC1200_VIDEO_DOWNSCALER_COEF_MASK 0xF - -/* VIDEO DE-INTERLACING AND ALPHA CONTROL (REGISTER 0x4C) */ - -#define SC1200_VERTICAL_SCALER_SHIFT_MASK 0x00000007 -#define SC1200_VERTICAL_SCALER_SHIFT_INIT 0x00000004 -#define SC1200_VERTICAL_SCALER_SHIFT_EN 0x00000010 -#define SC1200_TOP_LINE_IN_ODD 0x00000040 -#define SC1200_NO_CK_OUTSIDE_ALPHA 0x00000100 -#define SC1200_VIDEO_IS_INTERLACED 0x00000200 -#define SC1200_CSC_VIDEO_YUV_TO_RGB 0x00000400 -#define SC1200_CSC_GFX_RGB_TO_YUV 0x00000800 -#define SC1200_VIDEO_INPUT_IS_RGB 0x00002000 -#define SC1200_VIDEO_LINE_OFFSET_ODD 0x00001000 -#define SC1200_ALPHA1_PRIORITY_POS 16 -#define SC1200_ALPHA1_PRIORITY_MASK 0x00030000 -#define SC1200_ALPHA2_PRIORITY_POS 18 -#define SC1200_ALPHA2_PRIORITY_MASK 0x000C0000 -#define SC1200_ALPHA3_PRIORITY_POS 20 -#define SC1200_ALPHA3_PRIORITY_MASK 0x00300000 - -/* VIDEO CURSOR COLOR KEY DEFINITIONS (REGISTER 0x50) */ - -#define SC1200_CURSOR_COLOR_KEY_OFFSET_POS 24 -#define SC1200_CURSOR_COLOR_BITS 23 -#define SC1200_COLOR_MASK 0x00FFFFFF /* 24 significant bits */ - -/* ALPHA COLOR BIT DEFINITION (REGISTERS 0x68, 0x78, AND 0x88) */ - -#define SC1200_ALPHA_COLOR_ENABLE 0x01000000 - -/* ALPHA CONTROL BIT DEFINITIONS (REGISTERS 0x6C, 0x7C, AND 0x8C) */ - -#define SC1200_ACTRL_WIN_ENABLE 0x00010000 -#define SC1200_ACTRL_LOAD_ALPHA 0x00020000 - -/* VIDEO REQUEST DEFINITIONS (REGISTER 0x90) */ - -#define SC1200_VIDEO_Y_REQUEST_POS 0 -#define SC1200_VIDEO_X_REQUEST_POS 16 -#define SC1200_VIDEO_REQUEST_MASK 0x00000FFF - -/* VIDEO DISPLAY MODE (REGISTER 0x400) */ - -#define SC1200_VIDEO_SOURCE_MASK 0x00000003 -#define SC1200_VIDEO_SOURCE_GX1 0x00000000 -#define SC1200_VIDEO_SOURCE_DVIP 0x00000002 -#define SC1200_VBI_SOURCE_MASK 0x00000004 -#define SC1200_VBI_SOURCE_DVIP 0x00000000 -#define SC1200_VBI_SOURCE_GX1 0x00000004 - -/* ODD/EVEN VBI LINE ENABLE (REGISTERS 0x40C, 0x410) */ - -#define SC1200_VIDEO_VBI_LINE_ENABLE_MASK 0x00FFFFFC -#define SC1200_VIDEO_ALL_ACTIVE_IS_VBI 0x01000000 -#define SC1200_VIDEO_VBI_LINE_OFFSET_POS 25 -#define SC1200_VIDEO_VBI_LINE_OFFSET_MASK 0x3E000000 - -/* ODD/EVEN VBI TOTAL COUNT (REGISTERS 0x418, 0x41C) */ - -#define SC1200_VIDEO_VBI_TOTAL_COUNT_MASK 0x000FFFFF - -/* GENLOCK BIT DEFINITIONS */ - -#define SC1200_GENLOCK_SINGLE_ENABLE 0x00000001 -#define SC1200_GENLOCK_FIELD_SYNC_ENABLE 0x00000001 -#define SC1200_GENLOCK_CONTINUOUS_ENABLE 0x00000002 -#define SC1200_GENLOCK_GX_VSYNC_FALLING_EDGE 0x00000004 -#define SC1200_GENLOCK_VIP_VSYNC_FALLING_EDGE 0x00000008 -#define SC1200_GENLOCK_TIMEOUT_ENABLE 0x00000010 -#define SC1200_GENLOCK_TVENC_RESET_EVEN_FIELD 0x00000020 -#define SC1200_GENLOCK_TVENC_RESET_BEFORE_DELAY 0x00000040 -#define SC1200_GENLOCK_TVENC_RESET_ENABLE 0x00000080 -#define SC1200_GENLOCK_SYNC_TO_TVENC 0x00000100 -#define SC1200_GENLOCK_DELAY_MASK 0x001FFFFF - -/* TVOUT HORIZONTAL PRE ENCODER SCALE BIT DEFINITIONS */ - -#define SC1200_TVOUT_YC_DELAY_MASK 0x00C00000 -#define SC1200_TVOUT_YC_DELAY_NONE 0x00000000 -#define SC1200_TVOUT_Y_DELAY_ONE_PIXEL 0x00400000 -#define SC1200_TVOUT_C_DELAY_ONE_PIXEL 0x00800000 -#define SC1200_TVOUT_C_DELAY_TWO_PIXELS 0x00C00000 - -/* TVOUT HORIZONTAL SCALING/CONTROL BIT DEFINITIONS */ - -#define SC1200_TVOUT_FLICKER_FILTER_MASK 0x60000000 -#define SC1200_TVOUT_FLICKER_FILTER_FOURTH_HALF_FOURTH 0x00000000 -#define SC1200_TVOUT_FLICKER_FILTER_HALF_ONE_HALF 0x20000000 -#define SC1200_TVOUT_FLICKER_FILTER_DISABLED 0x40000000 -#define SC1200_TVENC_EXTERNAL_RESET_INTERVAL_MASK 0x0F000000 -#define SC1200_TVENC_EXTERNAL_RESET_EVERY_ODD_FIELD 0x00000000 -#define SC1200_TVENC_EXTERNAL_RESET_EVERY_EVEN_FIELD 0x02000000 -#define SC1200_TVENC_EXTERNAL_RESET_NEXT_ODD_FIELD 0x05000000 -#define SC1200_TVENC_EXTERNAL_RESET_NEXT_EVEN_FIELD 0x07000000 -#define SC1200_TVENC_EXTERNAL_RESET_EVERY_FIELD 0x0E000000 -#define SC1200_TVENC_EXTERNAL_RESET_EVERY_X_ODD_FIELDS 0x08000000 -#define SC1200_TVENC_EXTERNAL_RESET_EVERY_X_EVEN_FIELDS 0x0A000000 - -/* TVOUT DEBUG BIT DEFINITIONS */ - -#define SC1200_TVOUT_FIELD_STATUS_EVEN 0x00000040 -#define SC1200_TVOUT_FIELD_STATUS_TV 0x00000080 -#define SC1200_TVOUT_CRT_VSYNC_STATUS_TRAILING 0x00000100 -#define SC1200_TVOUT_FIELD_STATUS_INVERT 0x00000200 -#define SC1200_TVOUT_CONVERTER_INTERPOLATION 0x00000400 - -/* TVENC TIMING/CONTROL 1 BIT DEFINITIONS (REGISTER 0xC00) */ - -#define SC1200_TVENC_VPHASE_MASK 0x001FF800 -#define SC1200_TVENC_VPHASE_POS 11 -#define SC1200_TVENC_SUB_CARRIER_RESET_MASK 0x30000000 -#define SC1200_TVENC_SUB_CARRIER_RESET_NEVER 0x00000000 -#define SC1200_TVENC_SUB_CARRIER_RESET_EVERY_TWO_LINES 0x10000000 -#define SC1200_TVENC_SUB_CARRIER_RESET_EVERY_TWO_FRAMES 0x20000000 -#define SC1200_TVENC_SUB_CARRIER_RESET_EVERY_FOUR_FRAMES 0x30000000 -#define SC1200_TVENC_VIDEO_TIMING_ENABLE 0x80000000 - -/* TVENC TIMING/CONTROL 2 BIT DEFINITIONS (REGISTER 0xC04) */ - -#define SC1200_TVENC_OUTPUT_YCBCR 0x40000000 -#define SC1200_TVENC_CFS_MASK 0x00030000 -#define SC1200_TVENC_CFS_BYPASS 0x00000000 -#define SC1200_TVENC_CFS_CVBS 0x00020000 -#define SC1200_TVENC_CFS_SVIDEO 0x00030000 - -/* TVENC TIMING/CONTROL 3 BIT DEFINITIONS (REGISTER 0xC08) */ - -#define SC1200_TVENC_CS 0x00000001 -#define SC1200_TVENC_SYNCMODE_MASK 0x00000006 -#define SC1200_TVENC_SYNC_ON_GREEN 0x00000002 -#define SC1200_TVENC_SYNC_ON_CVBS 0x00000004 -#define SC1200_TVENC_CM 0x00000008 - -/* TVENC DAC CONTROL BIT DEFINITIONS (REGISTER 0xC2C) */ -#define SC1200_TVENC_TRIM_MASK 0x00000007 -#define SC1200_TVENC_POWER_DOWN 0x00000020 - -/* TVENC MV CONTROL BIT DEFINITIONS (REGISTER 0xC30) */ -#define SC1200_TVENC_MV_ENABLE 0xBE - -/* SC1200 VIP REGISTER DEFINITIONS */ - -#define SC1200_VIP_CONFIG 0x00000000 -#define SC1200_VIP_CONTROL 0x00000004 -#define SC1200_VIP_STATUS 0x00000008 -#define SC1200_VIP_CURRENT_LINE 0x00000010 -#define SC1200_VIP_LINE_TARGET 0x00000014 -#define SC1200_ODD_DIRECT_VBI_LINE_ENABLE 0x00000018 -#define SC1200_EVEN_DIRECT_VBI_LINE_ENABLE 0x0000001C -#define SC1200_VIP_ODD_BASE 0x00000020 -#define SC1200_VIP_EVEN_BASE 0x00000024 -#define SC1200_VIP_PITCH 0x00000028 -#define SC1200_VBI_ODD_BASE 0x00000040 -#define SC1200_VBI_EVEN_BASE 0x00000044 -#define SC1200_VBI_PITCH 0x00000048 - -/* "SC1200_VIP_CONFIG" BIT DEFINITIONS */ - -#define SC1200_VIP_MODE_MASK 0x00000003 -#define SC1200_VIP_MODE_C 0x00000002 -#define SC1200_VBI_ANCILLARY_TO_MEMORY 0x000C0000 -#define SC1200_VBI_TASK_A_TO_MEMORY 0x00140000 -#define SC1200_VBI_TASK_B_TO_MEMORY 0x00240000 -#define SC1200_VIP_BUS_REQUEST_THRESHOLD 0x00400000 - -/* "SC1200_VIP_CONTROL" BIT DEFINITIONS */ - -#define SC1200_CAPTURE_RUN_MODE_MASK 0x00000003 -#define SC1200_CAPTURE_RUN_MODE_STOP_LINE 0x00000000 -#define SC1200_CAPTURE_RUN_MODE_STOP_FIELD 0x00000001 -#define SC1200_CAPTURE_RUN_MODE_START 0x00000003 -#define SC1200_VIP_DATA_CAPTURE_EN 0x00000100 -#define SC1200_VIP_VBI_CAPTURE_EN 0x00000200 -#define SC1200_VIP_VBI_FIELD_INTERRUPT_EN 0x00010000 - -/* "SC1200_VIP_STATUS" BIT DEFINITIONS */ - -#define SC1200_VIP_CURRENT_FIELD_ODD 0x01000000 -#define SC1200_VIP_BASE_NOT_UPDATED 0x00200000 -#define SC1200_VIP_FIFO_OVERFLOW 0x00100000 -#define SC1200_VIP_CLEAR_LINE_INT 0x00020000 -#define SC1200_VIP_CLEAR_FIELD_INT 0x00010000 -#define SC1200_VBI_DATA_CAPTURE_ACTIVE 0x00000200 -#define SC1200_VIDEO_DATA_CAPTURE_ACTIVE 0x00000100 - -/* "SC1200_VIP_CURRENT_LINE" BIT DEFINITIONS */ - -#define SC1200_VIP_CURRENT_LINE_MASK 0x000003FF - -/* "SC1200_VIP_LINE_TARGET" BIT DEFINITIONS */ - -#define SC1200_VIP_LAST_LINE_MASK 0x03FF0000 - -/* "SC1200_VIP_PITCH" BIT DEFINITION */ - -#define SC1200_VIP_PITCH_MASK 0x0000FFFC - -/* "SC1200_VBI_PITCH" BIT DEFINITION */ - -#define SC1200_VBI_PITCH_MASK 0x0000FFFC - -/* SC1200 DIRECT VBI LINE ENABLE BIT DEFINITION */ - -#define SC1200_DIRECT_VBI_LINE_ENABLE_MASK 0x00FFFFFF - -/* SC1200 CONFIGURATION BLOCK */ - -#define SC1200_CB_BASE_ADDR 0x9000 -#define SC1200_CB_WDTO 0x0000 -#define SC1200_CB_WDCNFG 0x0002 -#define SC1200_CB_WDSTS 0x0004 -#define SC1200_CB_TMVALUE 0x0008 -#define SC1200_CB_TMCNFG 0x000D -#define SC1200_CB_PMR 0x0030 -#define SC1200_CB_MCR 0x0034 -#define SC1200_CB_INTSEL 0x0038 -#define SC1200_CB_PID 0x003C -#define SC1200_CB_REV 0x003D - -/* SC1200 HIGH RESOLUTION TIMER CONFIGURATION REGISTER BITS */ - -#define SC1200_TMCLKSEL_27MHZ 0x2 - -/*---------------------------------*/ -/* PHILIPS SAA7114 VIDEO DECODER */ -/*---------------------------------*/ - -#define SAA7114_CHIPADDR 0x42 - -/* VIDEO DECODER REGISTER DEFINITIONS */ - -#define SAA7114_ANALOG_INPUT_CTRL1 0x02 -#define SAA7114_LUMINANCE_CONTROL 0x09 -#define SAA7114_BRIGHTNESS 0x0A -#define SAA7114_CONTRAST 0x0B -#define SAA7114_SATURATION 0x0C -#define SAA7114_HUE 0x0D -#define SAA7114_STATUS 0x1F -#define SAA7114_IPORT_CONTROL 0x86 - -/* TASK A REGISTER DEFINITIONS */ - -#define SAA7114_TASK_A_HORZ_OUTPUT_LO 0x9C -#define SAA7114_TASK_A_HORZ_OUTPUT_HI 0x9D -#define SAA7114_TASK_A_HSCALE_LUMA_LO 0xA8 -#define SAA7114_TASK_A_HSCALE_LUMA_HI 0xA9 -#define SAA7114_TASK_A_HSCALE_CHROMA_LO 0xAC -#define SAA7114_TASK_A_HSCALE_CHROMA_HI 0xAD - -/* TASK B REGISTER DEFINITIONS */ - -#define SAA7114_HORZ_OFFSET_LO 0xC4 -#define SAA7114_HORZ_OFFSET_HI 0xC5 -#define SAA7114_HORZ_INPUT_LO 0xC6 -#define SAA7114_HORZ_INPUT_HI 0xC7 -#define SAA7114_VERT_OFFSET_LO 0xC8 -#define SAA7114_VERT_OFFSET_HI 0xC9 -#define SAA7114_VERT_INPUT_LO 0xCA -#define SAA7114_VERT_INPUT_HI 0xCB -#define SAA7114_HORZ_OUTPUT_LO 0xCC -#define SAA7114_HORZ_OUTPUT_HI 0xCD -#define SAA7114_VERT_OUTPUT_LO 0xCE -#define SAA7114_VERT_OUTPUT_HI 0xCF -#define SAA7114_HORZ_PRESCALER 0xD0 -#define SAA7114_HORZ_ACL 0xD1 -#define SAA7114_HORZ_FIR_PREFILTER 0xD2 -#define SAA7114_FILTER_CONTRAST 0xD5 -#define SAA7114_FILTER_SATURATION 0xD6 -#define SAA7114_HSCALE_LUMA_LO 0xD8 -#define SAA7114_HSCALE_LUMA_HI 0xD9 -#define SAA7114_HSCALE_CHROMA_LO 0xDC -#define SAA7114_HSCALE_CHROMA_HI 0xDD -#define SAA7114_VSCALE_LUMA_LO 0xE0 -#define SAA7114_VSCALE_LUMA_HI 0xE1 -#define SAA7114_VSCALE_CHROMA_LO 0xE2 -#define SAA7114_VSCALE_CHROMA_HI 0xE3 -#define SAA7114_VSCALE_CONTROL 0xE4 -#define SAA7114_VSCALE_CHROMA_OFFS0 0xE8 -#define SAA7114_VSCALE_CHROMA_OFFS1 0xE9 -#define SAA7114_VSCALE_CHROMA_OFFS2 0xEA -#define SAA7114_VSCALE_CHROMA_OFFS3 0xEB -#define SAA7114_VSCALE_LUMINA_OFFS0 0xEC -#define SAA7114_VSCALE_LUMINA_OFFS1 0xED -#define SAA7114_VSCALE_LUMINA_OFFS2 0xEE -#define SAA7114_VSCALE_LUMINA_OFFS3 0xEF - - -/* Still need to determine PHO value (common phase offset) */ -#define SAA7114_VSCALE_PHO 0x00 - - -/*----------------------------------------------*/ -/* SECOND GENERATION GRAPHICS UNIT (REDCLOUD) */ -/*----------------------------------------------*/ - -#define MGP_DST_OFFSET 0x0000 /* dst address */ -#define MGP_SRC_OFFSET 0x0004 /* src address */ -#define MGP_VEC_ERR 0x0004 /* vector diag/axial errors */ -#define MGP_STRIDE 0x0008 /* src and dst strides */ -#define MGP_WID_HEIGHT 0x000C /* width and height of BLT */ -#define MGP_VEC_LEN 0x000C /* vector length/init error */ -#define MGP_SRC_COLOR_FG 0x0010 /* src mono data fgcolor */ -#define MGP_SRC_COLOR_BG 0x0014 /* src mono data bkcolor */ -#define MGP_PAT_COLOR_0 0x0018 /* pattern color 0 */ -#define MGP_PAT_COLOR_1 0x001C /* pattern color 1 */ -#define MGP_PAT_COLOR_2 0x0020 /* pattern color 2 */ -#define MGP_PAT_COLOR_3 0x0024 /* pattern color 3 */ -#define MGP_PAT_COLOR_4 0x0028 /* pattern color 4 */ -#define MGP_PAT_COLOR_5 0x002C /* pattern color 5 */ -#define MGP_PAT_DATA_0 0x0030 /* pattern data 0 */ -#define MGP_PAT_DATA_1 0x0034 /* pattern data 1 */ -#define MGP_RASTER_MODE 0x0038 /* raster operation */ -#define MGP_VECTOR_MODE 0x003C /* render vector */ -#define MGP_BLT_MODE 0x0040 /* render BLT */ -#define MGP_BLT_STATUS 0x0044 /* BLT status register */ -#define MGP_RESET 0x0044 /* reset register (write) */ -#define MGP_HST_SOURCE 0x0048 /* host src data (bitmap) */ -#define MGP_BASE_OFFSET 0x004C /* base render offset */ - -/* MGP_RASTER_MODE DEFINITIONS */ - -#define MGP_RM_BPPFMT_332 0x00000000 /* 8 BPP, 3:3:2 */ -#define MGP_RM_BPPFMT_4444 0x40000000 /* 16 BPP, 4:4:4:4 */ -#define MGP_RM_BPPFMT_1555 0x50000000 /* 16 BPP, 1:5:5:5 */ -#define MGP_RM_BPPFMT_565 0x60000000 /* 16 BPP, 5:6:5 */ -#define MGP_RM_BPPFMT_8888 0x80000000 /* 32 BPP, 8:8:8:8 */ -#define MGP_RM_ALPHA_EN_MASK 0x00C00000 /* Alpha enable */ -#define MGP_RM_ALPHA_TO_RGB 0x00400000 /* Alpha applies to RGB */ -#define MGP_RM_ALPHA_TO_ALPHA 0x00800000 /* Alpha applies to alpha */ -#define MGP_RM_ALPHA_OP_MASK 0x00300000 /* Alpha operation */ -#define MGP_RM_ALPHA_TIMES_A 0x00000000 /* Alpha * A */ -#define MGP_RM_BETA_TIMES_B 0x00100000 /* (1-alpha) * B */ -#define MGP_RM_A_PLUS_BETA_B 0x00200000 /* A + (1-alpha) * B */ -#define MGP_RM_ALPHA_A_PLUS_BETA_B 0x00300000 /* alpha * A + (1 - alpha)B */ -#define MGP_RM_ALPHA_SELECT 0x000E0000 /* Alpha Select */ -#define MGP_RM_SELECT_ALPHA_A 0x00000000 /* Alpha from channel A */ -#define MGP_RM_SELECT_ALPHA_B 0x00020000 /* Alpha from channel B */ -#define MGP_RM_SELECT_ALPHA_R 0x00040000 /* Registered alpha */ -#define MGP_RM_SELECT_ALPHA_1 0x00060000 /* Constant 1 */ -#define MGP_RM_SELECT_ALPHA_CHAN_A 0x00080000 /* RGB Values from A */ -#define MGP_RM_SELECT_ALPHA_CHAN_B 0x000A0000 /* RGB Values from B */ -#define MGP_RM_DEST_FROM_CHAN_A 0x00010000 /* Alpha channel select */ -#define MGP_RM_PAT_FLAGS 0x00000700 /* pattern related bits */ -#define MGP_RM_PAT_MONO 0x00000100 /* monochrome pattern */ -#define MGP_RM_PAT_COLOR 0x00000200 /* color pattern */ -#define MGP_RM_PAT_TRANS 0x00000400 /* pattern transparency */ -#define MGP_RM_SRC_TRANS 0x00000800 /* source transparency */ - -/* MGP_VECTOR_MODE DEFINITIONS */ - -#define MGP_VM_DST_REQ 0x00000008 /* dst data required */ -#define MGP_VM_THROTTLE 0x00000010 /* sync to VBLANK */ - -/* MGP_BLT_MODE DEFINITIONS */ - -#define MGP_BM_SRC_FB 0x00000001 /* src = frame buffer */ -#define MGP_BM_SRC_HOST 0x00000002 /* src = host register */ -#define MGP_BM_DST_REQ 0x00000004 /* dst data required */ -#define MGP_BM_SRC_MONO 0x00000040 /* monochrome source data */ -#define MGP_BM_SRC_BP_MONO 0x00000080 /* Byte-packed monochrome */ -#define MGP_BM_NEG_YDIR 0x00000100 /* negative Y direction */ -#define MGP_BM_NEG_XDIR 0x00000200 /* negative X direction */ -#define MGP_BM_THROTTLE 0x00000400 /* sync to VBLANK */ - -/* MGP_BLT_STATUS DEFINITIONS */ - -#define MGP_BS_BLT_BUSY 0x00000001 /* GP is not idle */ -#define MGP_BS_BLT_PENDING 0x00000004 /* second BLT is pending */ -#define MGP_BS_HALF_EMPTY 0x00000008 /* src FIFO half empty */ - -/* ALPHA BLENDING MODES */ - -#define ALPHA_MODE_BLEND 0x00000000 - -/*---------------------------------------------------*/ -/* SECOND GENERATION DISPLAY CONTROLLER (REDCLOUD) */ -/*---------------------------------------------------*/ - -#define MDC_UNLOCK 0x00000000 /* Unlock register */ -#define MDC_GENERAL_CFG 0x00000004 /* Config registers */ -#define MDC_DISPLAY_CFG 0x00000008 -#define MDC_GFX_SCL 0x0000000C /* Graphics scaling */ - -#define MDC_FB_ST_OFFSET 0x00000010 /* Frame buffer start offset */ -#define MDC_CB_ST_OFFSET 0x00000014 /* Compression start offset */ -#define MDC_CURS_ST_OFFSET 0x00000018 /* Cursor buffer start offset */ -#define MDC_ICON_ST_OFFSET 0x0000001C /* Icon buffer start offset */ -#define MDC_VID_Y_ST_OFFSET 0x00000020 /* Video Y Buffer start offset */ -#define MDC_VID_U_ST_OFFSET 0x00000024 /* Video U Buffer start offset */ -#define MDC_VID_V_ST_OFFSET 0x00000028 /* Video V Buffer start offset */ -#define MDC_LINE_SIZE 0x00000030 /* Video, CB, and FB line sizes */ -#define MDC_GFX_PITCH 0x00000034 /* FB and DB skip counts */ -#define MDC_VID_YUV_PITCH 0x00000038 /* Y, U and V buffer skip counts */ - -#define MDC_H_ACTIVE_TIMING 0x00000040 /* Horizontal timings */ -#define MDC_H_BLANK_TIMING 0x00000044 -#define MDC_H_SYNC_TIMING 0x00000048 -#define MDC_V_ACTIVE_TIMING 0x00000050 /* Vertical Timings */ -#define MDC_V_BLANK_TIMING 0x00000054 -#define MDC_V_SYNC_TIMING 0x00000058 - -#define MDC_CURSOR_X 0x00000060 /* Cursor X position */ -#define MDC_CURSOR_Y 0x00000064 /* Cursor Y Position */ -#define MDC_ICON_X 0x00000068 /* Icon X Position */ -#define MDC_LINE_CNT_STATUS 0x0000006C /* Icon Y Position */ - -#define MDC_PAL_ADDRESS 0x00000070 /* Palette Address */ -#define MDC_PAL_DATA 0x00000074 /* Palette Data */ -#define MDC_DFIFO_DIAG 0x00000078 /* Display FIFO diagnostic */ -#define MDC_CFIFO_DIAG 0x0000007C /* Compression FIFO diagnostic */ - -#define MDC_VID_DS_DELTA 0x00000080 /* Vertical Downscaling fraction */ - -#define MDC_PHY_MEM_OFFSET 0x00000084 /* VG Base Address Register */ -#define MDC_DV_CTL 0x00000088 /* Dirty-Valid Control Register */ -#define MDC_DV_ACC 0x0000008C /* Dirty-Valid RAM Access */ - -/* UNLOCK VALUE */ - -#define MDC_UNLOCK_VALUE 0x00004758 /* used to unlock DC regs */ - -/* VG MBUS DEVICE SMI MSR FIELDS */ - -#define MDC_VG_BL_MASK 0x00000001 -#define MDC_MISC_MASK 0x00000002 -#define MDC_ISR0_MASK 0x00000004 -#define MDC_VGA_BL_MASK 0x00000008 -#define MDC_CRTCIO_MSK 0x00000010 -#define MDC_VG_BLANK_SMI 0x00000001 -#define MDC_MISC_SMI 0x00000002 -#define MDC_ISR0_SMI 0x00000004 -#define MDC_VGA_BLANK_SMI 0x00000008 -#define MDC_CRTCIO_SMI 0x00000010 - -/* MDC_GENERAL_CFG BIT FIELDS */ - -#define MDC_GCFG_DBUG 0x80000000 -#define MDC_GCFG_DBSL 0x40000000 -#define MDC_GCFG_CFRW 0x20000000 -#define MDC_GCFG_DIAG 0x10000000 -#define MDC_GCFG_GXRFS4 0x08000000 -#define MDC_GCFG_SGFR 0x04000000 -#define MDC_GCFG_SGRE 0x02000000 -#define MDC_GCFG_SIGE 0x01000000 -#define MDC_GCFG_YUVM 0x00100000 -#define MDC_GCFG_VDSE 0x00080000 -#define MDC_GCFG_VGAFT 0x00040000 -#define MDC_GCFG_FDTY 0x00020000 -#define MDC_GCFG_STFM 0x00010000 -#define MDC_GCFG_DFHPEL_MASK 0x0000F000 -#define MDC_GCFG_DFHPSL_MASK 0x00000F00 -#define MDC_GCFG_VGAE 0x00000080 -#define MDC_GCFG_DECE 0x00000040 -#define MDC_GCFG_CMPE 0x00000020 -#define MDC_GCFG_VIDE 0x00000008 -#define MDC_GCFG_ICNE 0x00000004 -#define MDC_GCFG_CURE 0x00000002 -#define MDC_GCFG_DFLE 0x00000001 - -/* MDC_DISPLAY_CFG BIT FIELDS */ - -#define MDC_DCFG_A20M 0x80000000 -#define MDC_DCFG_A18M 0x40000000 -#define MDC_DCFG_VISL 0x08000000 -#define MDC_DCFG_FRLK 0x04000000 -#define MDC_DCFG_PALB 0x02000000 -#define MDC_DCFG_PIX_PAN_MASK 0x00F00000 -#define MDC_DCFG_DCEN 0x00080000 -#define MDC_DCFG_16BPP_MODE_MASK 0x00000C00 -#define MDC_DCFG_16BPP 0x00000000 -#define MDC_DCFG_15BPP 0x00000400 -#define MDC_DCFG_12BPP 0x00000800 -#define MDC_DCFG_DISP_MODE_MASK 0x00000300 -#define MDC_DCFG_DISP_MODE_8BPP 0x00000000 -#define MDC_DCFG_DISP_MODE_16BPP 0x00000100 -#define MDC_DCFG_DISP_MODE_24BPP 0x00000200 -#define MDC_DCFG_SCLE 0x00000080 -#define MDC_DCFG_TRUP 0x00000040 -#define MDC_DCFG_VIEN 0x00000020 -#define MDC_DCFG_VDEN 0x00000010 -#define MDC_DCFG_GDEN 0x00000008 -#define MDC_DCFG_VCKE 0x00000004 -#define MDC_DCFG_PCKE 0x00000002 -#define MDC_DCFG_TGEN 0x00000001 - -/* MDC_LINE_CNT BIT FIELDS */ - -#define MDC_LNCNT_DNA 0x80000000 -#define MDC_LNCNT_VNA 0x40000000 -#define MDC_LNCNT_VSA 0x20000000 -#define MDC_LNCNT_VINT 0x10000000 -#define MDC_LNCNT_FLIP 0x08000000 -#define MDC_LNCNT_V_LINE_CNT 0x07FF0000 -#define MDC_LNCNT_VFLIP 0x00008000 -#define MDC_LNCNT_SIGC 0x00004000 -#define MDC_LNCNT_SS_LINE_CMP 0x000007FF - -/* MDC_FB_ST_OFFSET BIT FIELDS */ - -#define MDC_FB_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_CB_ST_OFFSET BIT FIELDS */ - -#define MDC_CB_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_CURS_ST_OFFSET BIT FIELDS */ - -#define MDC_CURS_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_ICON_ST_OFFSET BIT FIELDS */ - -#define MDC_ICON_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_VID_Y_ST_OFFSET BIT FIELDS */ - -#define MDC_VID_Y_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_VID_U_ST_OFFSET BIT FIELDS */ - -#define MDC_VID_U_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_VID_V_ST_OFFSET BIT FIELDS */ - -#define MDC_VID_V_ST_OFFSET_MASK 0x0FFFFFFF - -/* MDC_LINE_SIZE BIT FIELDS */ - -#define MDC_LINE_SIZE_VLS_MASK 0xFF000000 -#define MDC_LINE_SIZE_CBLS_MASK 0x007F0000 -#define MDC_LINE_SIZE_FBLS_MASK 0x000007FF - -/* MDC_GFX_PITCH BIT FIELDS */ - -#define MDC_GFX_PITCH_CBP_MASK 0xFFFF0000 -#define MDC_GFX_PITCH_FBP_MASK 0x0000FFFF - -/* MDC_VID_YUV_PITCH BIT FIELDS */ - -#define MDC_YUV_PITCH_UVP_MASK 0xFFFF0000 -#define MDC_YUV_PITCH_YBP_MASK 0x0000FFFF - -/* MDC_H_ACTIVE_TIMING BIT FIELDS */ - -#define MDC_HAT_HT_MASK 0x0FF80000 -#define MDC_HAT_HA_MASK 0x00000FF8 - -/* MDC_H_BLANK_TIMING BIT FIELDS */ - -#define MDC_HBT_HBE_MASK 0x0FF80000 -#define MDC_HBT_HBS_MASK 0x00000FF8 - -/* MDC_H_SYNC_TIMING BIT FIELDS */ - -#define MDC_HST_HSE_MASK 0x0FF80000 -#define MDC_HST_HSS_MASK 0x00000FF8 - -/* MDC_V_ACTIVE_TIMING BIT FIELDS */ - -#define MDC_VAT_VT_MASK 0x07FF0000 -#define MDC_VAT_VA_MASK 0x000007FF - -/* MDC_V_BLANK_TIMING BIT FIELDS */ - -#define MDC_VBT_VBE_MASK 0x07FF0000 -#define MDC_VBT_VBS_MASK 0x000007FF - -/* MDC_V_SYNC_TIMING BIT FIELDS */ - -#define MDC_VST_VSE_MASK 0x07FF0000 -#define MDC_VST_VSS_MASK 0x000007FF - -/* MDC_DV_CTL BIT DEFINITIONS */ - -#define MDC_DV_LINE_SIZE_MASK 0x00000C00 -#define MDC_DV_LINE_SIZE_1024 0x00000000 -#define MDC_DV_LINE_SIZE_2048 0x00000400 -#define MDC_DV_LINE_SIZE_4096 0x00000800 -#define MDC_DV_LINE_SIZE_8192 0x00000C00 - -/* VGA DEFINITIONS */ - -#define MDC_SEQUENCER_INDEX 0x03C4 -#define MDC_SEQUENCER_DATA 0x03C5 -#define MDC_SEQUENCER_RESET 0x00 -#define MDC_SEQUENCER_CLK_MODE 0x01 - -#define MDC_RESET_VGA_DISP_ENABLE 0x03 -#define MDC_CLK_MODE_SCREEN_OFF 0x20 - - -/*---------------------------------------------------*/ -/* REDCLOUD DISPLAY FILTER */ -/*---------------------------------------------------*/ - -/* RCDF VIDEO REGISTER DEFINITIONS */ - -#define RCDF_VIDEO_CONFIG 0x000 -#define RCDF_DISPLAY_CONFIG 0x008 -#define RCDF_VIDEO_X_POS 0x010 -#define RCDF_VIDEO_Y_POS 0x018 -#define RCDF_VIDEO_SCALE 0x020 -#define RCDF_VIDEO_COLOR_KEY 0x028 -#define RCDF_VIDEO_COLOR_MASK 0x030 -#define RCDF_PALETTE_ADDRESS 0x038 -#define RCDF_PALETTE_DATA 0x040 -#define RCDF_VID_MISC 0x050 -#define RCDF_VID_CLOCK_SELECT 0x058 -#define RCDF_VIDEO_DOWNSCALER_CONTROL 0x078 -#define RCDF_VIDEO_DOWNSCALER_COEFFICIENTS 0x080 -#define RCDF_VID_CRC 0x088 -#define RCDF_VID_CRC32 0x090 -#define RCDF_VID_ALPHA_CONTROL 0x098 -#define RCDF_CURSOR_COLOR_KEY 0x0A0 -#define RCDF_CURSOR_COLOR_MASK 0x0A8 -#define RCDF_CURSOR_COLOR_1 0x0B0 -#define RCDF_CURSOR_COLOR_2 0x0B8 -#define RCDF_ALPHA_XPOS_1 0x0C0 -#define RCDF_ALPHA_YPOS_1 0x0C8 -#define RCDF_ALPHA_COLOR_1 0x0D0 -#define RCDF_ALPHA_CONTROL_1 0x0D8 -#define RCDF_ALPHA_XPOS_2 0x0E0 -#define RCDF_ALPHA_YPOS_2 0x0E8 -#define RCDF_ALPHA_COLOR_2 0x0F0 -#define RCDF_ALPHA_CONTROL_2 0x0F8 -#define RCDF_ALPHA_XPOS_3 0x100 -#define RCDF_ALPHA_YPOS_3 0x108 -#define RCDF_ALPHA_COLOR_3 0x110 -#define RCDF_ALPHA_CONTROL_3 0x118 -#define RCDF_VIDEO_REQUEST 0x120 -#define RCDF_ALPHA_WATCH 0x128 -#define RCDF_VIDEO_TEST_MODE 0x210 -#define RCDF_POWER_MANAGEMENT 0x410 - -/* DISPLAY FILTER POWER MANAGEMENT DEFINITIONS */ - -#define RCDF_PM_PANEL_POWER_ON 0x01000000 - -/* DISPLAY FILTER MSRS */ - -#define RCDF_MBD_MSR_DIAG_DF 0x2010 -#define RCDF_DIAG_32BIT_CRC 0x80000000 - -/* "RCDF_VIDEO_CONFIG" BIT DEFINITIONS */ - -#define RCDF_VCFG_VID_EN 0x00000001 -#define RCDF_VCFG_VID_INP_FORMAT 0x0000000C -#define RCDF_VCFG_X_FILTER_EN 0x00000040 -#define RCDF_VCFG_Y_FILTER_EN 0x00000080 -#define RCDF_VCFG_LINE_SIZE_LOWER_MASK 0x0000FF00 -#define RCDF_VCFG_INIT_READ_MASK 0x01FF0000 -#define RCDF_VCFG_LINE_SIZE_UPPER 0x08000000 -#define RCDF_VCFG_4_2_0_MODE 0x10000000 -#define RCDF_VCFG_UYVY_FORMAT 0x00000000 -#define RCDF_VCFG_Y2YU_FORMAT 0x00000004 -#define RCDF_VCFG_YUYV_FORMAT 0x00000008 -#define RCDF_VCFG_YVYU_FORMAT 0x0000000C - -/* "RCDF_DISPLAY_CONFIG" BIT DEFINITIONS */ - -#define RCDF_DCFG_DIS_EN 0x00000001 -#define RCDF_DCFG_HSYNC_EN 0x00000002 -#define RCDF_DCFG_VSYNC_EN 0x00000004 -#define RCDF_DCFG_DAC_BL_EN 0x00000008 -#define RCDF_DCFG_FP_PWR_EN 0x00000040 -#define RCDF_DCFG_FP_DATA_EN 0x00000080 -#define RCDF_DCFG_CRT_HSYNC_POL 0x00000100 -#define RCDF_DCFG_CRT_VSYNC_POL 0x00000200 -#define RCDF_DCFG_CRT_SYNC_SKW_MASK 0x0001C000 -#define RCDF_DCFG_CRT_SYNC_SKW_INIT 0x00010000 -#define RCDF_DCFG_PWR_SEQ_DLY_MASK 0x000E0000 -#define RCDF_DCFG_PWR_SEQ_DLY_INIT 0x00080000 -#define RCDF_DCFG_VG_CK 0x00100000 -#define RCDF_DCFG_GV_PAL_BYP 0x00200000 -#define RCDF_DAC_VREF 0x04000000 -#define RCDF_FP_ON_STATUS 0x08000000 - -/* "RCDF_VID_MISC" BIT DEFINITIONS */ - -#define RCDF_GAMMA_BYPASS_BOTH 0x00000001 -#define RCDF_DAC_POWER_DOWN 0x00000400 -#define RCDF_ANALOG_POWER_DOWN 0x00000800 - -/* "RCDF_VIDEO_DOWNSCALER_CONTROL" BIT DEFINITIONS */ - -#define RCDF_VIDEO_DOWNSCALE_ENABLE 0x00000001 -#define RCDF_VIDEO_DOWNSCALE_FACTOR_POS 1 -#define RCDF_VIDEO_DOWNSCALE_FACTOR_MASK 0x0000001E -#define RCDF_VIDEO_DOWNSCALE_TYPE_A 0x00000000 -#define RCDF_VIDEO_DOWNSCALE_TYPE_B 0x00000040 -#define RCDF_VIDEO_DOWNSCALE_TYPE_MASK 0x00000040 - -/* "RCDF_VIDEO_DOWNSCALER_COEFFICIENTS" BIT DEFINITIONS */ - -#define RCDF_VIDEO_DOWNSCALER_COEF1_POS 0 -#define RCDF_VIDEO_DOWNSCALER_COEF2_POS 8 -#define RCDF_VIDEO_DOWNSCALER_COEF3_POS 16 -#define RCDF_VIDEO_DOWNSCALER_COEF4_POS 24 -#define RCDF_VIDEO_DOWNSCALER_COEF_MASK 0xF - -/* VIDEO DE-INTERLACING AND ALPHA CONTROL */ - -#define RCDF_NO_CK_OUTSIDE_ALPHA 0x00000100 -#define RCDF_CSC_VIDEO_YUV_TO_RGB 0x00000400 -#define RCDF_VIDEO_INPUT_IS_RGB 0x00002000 -#define RCDF_ALPHA1_PRIORITY_POS 16 -#define RCDF_ALPHA1_PRIORITY_MASK 0x00030000 -#define RCDF_ALPHA2_PRIORITY_POS 18 -#define RCDF_ALPHA2_PRIORITY_MASK 0x000C0000 -#define RCDF_ALPHA3_PRIORITY_POS 20 -#define RCDF_ALPHA3_PRIORITY_MASK 0x00300000 - -/* VIDEO CURSOR COLOR KEY DEFINITIONS */ - -#define RCDF_CURSOR_COLOR_KEY_ENABLE 0x20000000 -#define RCDF_CURSOR_COLOR_KEY_OFFSET_POS 24 -#define RCDF_CURSOR_COLOR_BITS 23 -#define RCDF_COLOR_MASK 0x00FFFFFF /* 24 significant bits */ - -/* ALPHA COLOR BIT DEFINITION (REGISTERS 0x68, 0x78, AND 0x88) */ - -#define RCDF_ALPHA_COLOR_ENABLE 0x01000000 - -/* ALPHA CONTROL BIT DEFINITIONS (REGISTERS 0x6C, 0x7C, AND 0x8C) */ - -#define RCDF_ACTRL_WIN_ENABLE 0x00010000 -#define RCDF_ACTRL_LOAD_ALPHA 0x00020000 - -/* VIDEO REQUEST DEFINITIONS (REGISTER 0x90) */ - -#define RCDF_VIDEO_Y_REQUEST_POS 0 -#define RCDF_VIDEO_X_REQUEST_POS 16 -#define RCDF_VIDEO_REQUEST_MASK 0x000007FF - -/* GEODELINK DEVICE MSR REGISTER SUMMARY */ - -#define MBD_MSR_CAP 0x2000 /* Device Capabilities */ -#define MBD_MSR_CONFIG 0x2001 /* Device Master Configuration Register */ -#define MBD_MSR_SMI 0x2002 /* MBus Device SMI Register */ -#define MBD_MSR_ERROR 0x2003 /* MBus Device Error */ -#define MBD_MSR_PM 0x2004 /* MBus Device Power Management Register */ -#define MBD_MSR_DIAG 0x2005 /* Mbus Device Diagnostic Register */ - -/* DISPLAY FILTER MBD_MSR_DIAG DEFINITIONS */ - -#define RCDF_MBD_DIAG_SEL0 0x00007FFF /* Lower 32-bits of Diag Bus Select */ -#define RCDF_MBD_DIAG_EN0 0x00008000 /* Enable for lower 32-bits of diag bus */ -#define RCDF_MBD_DIAG_SEL1 0x7FFF0000 /* Upper 32-bits of Diag Bus Select */ -#define RCDF_MBD_DIAG_EN1 0x80000000 /* Enable for upper 32-bits of diag bus */ - -/* DISPLAY FILTER MBD_MSR_CONFIG DEFINITIONS */ - -#define RCDF_CONFIG_FMT_MASK 0x00000038 /* Output Format */ -#define RCDF_CONFIG_FMT_CRT 0x00000000 -#define RCDF_CONFIG_FMT_FP 0x00000008 - -/* MCP MSR DEFINITIONS */ - -#define MCP_CLKOFF 0x0010 -#define MCP_CLKACTIVE 0x0011 -#define MCP_CLKDISABLE 0x0012 -#define MCP_CLK4ACK 0x0013 -#define MCP_SYS_RSTPLL 0x0014 -#define MCP_DOTPLL 0x0015 -#define MCP_DBGCLKCTL 0x0016 -#define MCP_RC_REVID 0x0017 -#define MCP_SETM0CTL 0x0040 -#define MCP_SETN0CTL 0x0048 -#define MCP_CMPVAL0 0x0050 -#define MCP_CMPMASK0 0x0051 -#define MCP_REGA 0x0058 -#define MCP_REGB 0x0059 -#define MCP_REGAMASK 0x005A -#define MCP_REGAVAL 0x005B -#define MCP_REGBMASK 0x005C -#define MCP_REGBVAL 0x005D -#define MCP_FIFOCTL 0x005E -#define MCP_DIAGCTL 0x005F -#define MCP_H0CTL 0x0060 -#define MCP_XSTATE 0x0066 -#define MCP_YSTATE 0x0067 -#define MCP_ACTION0 0x0068 - -/* MCP_SYS_RSTPLL DEFINITIONS */ - -#define MCP_DOTPOSTDIV3 0x00000008 -#define MCP_DOTPREMULT2 0x00000004 -#define MCP_DOTPREDIV2 0x00000002 - -/* MCP MBD_MSR_DIAG DEFINITIONS */ - -#define MCP_MBD_DIAG_SEL0 0x00000007 -#define MCP_MBD_DIAG_EN0 0x00008000 -#define MCP_MBD_DIAG_SEL1 0x00070000 -#define MCP_MBD_DIAG_EN1 0x80000000 - -/* MCP_DOTPLL DEFINITIONS */ - -#define MCP_DOTPLL_P 0x00000003 -#define MCP_DOTPLL_N 0x000001FC -#define MCP_DOTPLL_M 0x00001E00 -#define MCP_DOTPLL_LOCK 0x02000000 - - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rndr.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rndr.c deleted file mode 100644 index 5003537c0..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rndr.c +++ /dev/null @@ -1,732 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rndr.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_rndr.c $ - * - * This file contains routines to program the 2D acceleration hardware: - * - * gfx_set_bpp - * gfx_set_solid_pattern - * gfx_set_mono_pattern - * gfx_set_color_pattern - * gfx_load_color_pattern_line - * gfx_set_solid_source - * gfx_set_mono_source - * gfx_set_raster_operation - * gfx_pattern_fill - * gfx_color_pattern_fill - * gfx_screen_to_screen_blt - * gfx_screen_to_screen_xblt - * gfx_color_bitmap_to_screen_blt - * gfx_color_bitmap_to_screen_xblt - * gfx_mono_bitmap_to_screen_blt - * gfx_bresenham_line - * gfx_wait_until_idle - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* STATIC VARIABLES */ - -unsigned short GFXbpp = 16; -unsigned short GFXbb0Base = 0x400; -unsigned short GFXbb1Base = 0x930; -unsigned short GFXbufferWidthPixels = 400; - -unsigned short GFXpatternFlags = 0; -unsigned short GFXsourceFlags = 0; -unsigned long GFXsavedColor = 0; -unsigned short GFXsavedRop = 0; -unsigned short GFXusesDstData = 0; - -/* INCLUDE SUPPORT FOR FIRST GENERATION, IF SPECIFIED. */ - -#if GFX_2DACCEL_GU1 -#include "rndr_gu1.c" -#endif - -/* INCLUDE SUPPORT FOR SECOND GENERATION, IF SPECIFIED. */ - -#if GFX_2DACCEL_GU2 -#include "rndr_gu2.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either first or second generation routines. */ - -#if GFX_2DACCEL_DYNAMIC - -/*--------------------------------------------------------------------------- - * gfx_reset_pitch (PRIVATE ROUTINE - NOT PART OF API) - *--------------------------------------------------------------------------- - */ -void gfx_reset_pitch(unsigned short pitch) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_reset_pitch(pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_bpp - *--------------------------------------------------------------------------- - */ -void gfx_set_bpp(unsigned short bpp) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_bpp(bpp); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_bpp(bpp); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_solid_source - *--------------------------------------------------------------------------- - */ -void gfx_set_solid_source(unsigned long color) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_solid_source(color); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_solid_source(color); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_mono_source - *--------------------------------------------------------------------------- - */ -void gfx_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_mono_source(bgcolor, fgcolor, transparent); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_mono_source(bgcolor, fgcolor, transparent); -# endif -} - -void gfx_set_pattern_flags(unsigned short flags) -{ - GFXpatternFlags |= flags; -} - -/*--------------------------------------------------------------------------- - * gfx_set_solid_pattern - *--------------------------------------------------------------------------- - */ -void gfx_set_solid_pattern(unsigned long color) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_solid_pattern(color); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_solid_pattern(color); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_mono_pattern - *--------------------------------------------------------------------------- - */ -void gfx_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparent) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_mono_pattern(bgcolor, fgcolor, data0, data1, transparent); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_mono_pattern(bgcolor, fgcolor, data0, data1, transparent); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_color_pattern - *--------------------------------------------------------------------------- - */ -void gfx_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, - unsigned long data2, unsigned long data3, unsigned char transparent) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_color_pattern(bgcolor, fgcolor, data0, data1, data2, data3, transparent); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_color_pattern(bgcolor, fgcolor, data0, data1, data2, data3, transparent); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_load_color_pattern_line - *--------------------------------------------------------------------------- - */ -void gfx_load_color_pattern_line(short y, unsigned long *pattern_8x8) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_load_color_pattern_line(y, pattern_8x8); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_load_color_pattern_line(y, pattern_8x8); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_raster_operation - *--------------------------------------------------------------------------- - */ -void gfx_set_raster_operation(unsigned char rop) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_set_raster_operation(rop); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_set_raster_operation(rop); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_pattern_fill - *--------------------------------------------------------------------------- - */ -void gfx_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_pattern_fill(x, y, width, height); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_pattern_fill(x, y, width, height); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_color_pattern_fill - *--------------------------------------------------------------------------- - */ -void gfx_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_color_pattern_fill(x, y, width, height, pattern); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_color_pattern_fill(x, y, width, height, pattern); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_screen_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_screen_to_screen_blt(srcx, srcy, dstx, dsty, width, height); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_screen_to_screen_blt(srcx, srcy, dstx, dsty, width, height); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_screen_to_screen_xblt - *--------------------------------------------------------------------------- - */ -void gfx_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_screen_to_screen_xblt(srcx, srcy, dstx, dsty, width, height, color); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_screen_to_screen_xblt(srcx, srcy, dstx, dsty, width, height, color); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_color_bitmap_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_color_bitmap_to_screen_blt(srcx, srcy, dstx, dsty, width, height, - data, pitch); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_color_bitmap_to_screen_blt(srcx, srcy, dstx, dsty, width, height, - data, pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_color_bitmap_to_screen_xblt - *--------------------------------------------------------------------------- - */ -void gfx_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_color_bitmap_to_screen_xblt(srcx, srcy, dstx, dsty, width, height, - data, pitch, color); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_color_bitmap_to_screen_xblt(srcx, srcy, dstx, dsty, width, height, - data, pitch, color); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_mono_bitmap_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_mono_bitmap_to_screen_blt(srcx, srcy, dstx, dsty, width, height, - data, pitch); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_mono_bitmap_to_screen_blt(srcx, srcy, dstx, dsty, width, height, - data, pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_text_blt - *--------------------------------------------------------------------------- - */ -void gfx_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data) - -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_text_blt (dstx, dsty, width, height, data); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_text_blt (dstx, dsty, width, height, data); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_bresenham_line - *--------------------------------------------------------------------------- - */ -void gfx_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_bresenham_line(x, y, length, initerr, axialerr, diagerr, flags); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_bresenham_line(x, y, length, initerr, axialerr, diagerr, flags); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_wait_until_idle - *--------------------------------------------------------------------------- - */ -void gfx_wait_until_idle(void) -{ -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - gu1_wait_until_idle(); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu2_wait_until_idle(); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_test_blt_pending - *--------------------------------------------------------------------------- - */ -int gfx_test_blt_pending(void) -{ - int retval = 0; -# if GFX_2DACCEL_GU1 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU1) - retval = gu1_test_blt_pending(); -# endif -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - retval = gu2_test_blt_pending(); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * NEW ROUTINES FOR REDCLOUD - *--------------------------------------------------------------------------- - */ - -/*--------------------------------------------------------------------------- - * gfx2_set_source_stride - *--------------------------------------------------------------------------- - */ -void gfx2_set_source_stride(unsigned short stride) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_source_stride (stride); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_set_destination_stride - *--------------------------------------------------------------------------- - */ -void gfx2_set_destination_stride(unsigned short stride) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_destination_stride (stride); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_set_pattern_origin - *--------------------------------------------------------------------------- - */ -void gfx2_set_pattern_origin(int x, int y) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_pattern_origin (x, y); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_set_source_transparency - *--------------------------------------------------------------------------- - */ -void gfx2_set_source_transparency(unsigned long color, unsigned long mask) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_source_transparency (color, mask); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_set_alpha_mode - *--------------------------------------------------------------------------- - */ -void gfx2_set_alpha_mode(int mode) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_alpha_mode (mode); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_set_alpha_value - *--------------------------------------------------------------------------- - */ -void gfx2_set_alpha_value(unsigned char value) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_set_alpha_value (value); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_pattern_fill - *--------------------------------------------------------------------------- - */ -void gfx2_pattern_fill(unsigned long dstoffset, unsigned short width, - unsigned short height) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_pattern_fill (dstoffset, width, height); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_color_pattern_fill - *--------------------------------------------------------------------------- - */ -void gfx2_color_pattern_fill(unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned long *pattern) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_color_pattern_fill (dstoffset, width, height, pattern); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_screen_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx2_screen_to_screen_blt(unsigned long srcoffset, unsigned long dstoffset, - unsigned short width, unsigned short height, int flags) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_screen_to_screen_blt (srcoffset, dstoffset, width, height, flags); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_mono_expand_blt - *--------------------------------------------------------------------------- - */ -void gfx2_mono_expand_blt(unsigned long srcbase, unsigned short srcx, - unsigned short srcy, unsigned long dstoffset, unsigned short width, - unsigned short height, int byte_packed) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_mono_expand_blt (srcbase, srcx, srcy, dstoffset, width, height, byte_packed); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_color_bitmap_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx2_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data, unsigned short pitch) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_color_bitmap_to_screen_blt (srcx, srcy, dstoffset, width, height, data, pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_text_blt - *--------------------------------------------------------------------------- - */ -void gfx2_text_blt (unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_text_blt (dstoffset, width, height, data); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_mono_bitmap_to_screen_blt - *--------------------------------------------------------------------------- - */ -void gfx2_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data, unsigned short pitch) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_mono_bitmap_to_screen_blt (srcx, srcy, dstoffset, width, height, data, pitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_bresenham_line - *--------------------------------------------------------------------------- - */ -void gfx2_bresenham_line(unsigned long dstoffset, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_bresenham_line (dstoffset, length, initerr, axialerr, diagerr, flags); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx2_sync_to_vblank - *--------------------------------------------------------------------------- - */ -void gfx2_sync_to_vblank(void) -{ -# if GFX_2DACCEL_GU2 - if (gfx_2daccel_type & GFX_2DACCEL_TYPE_GU2) - gu22_sync_to_vblank(); -# endif -} - -#endif /* GFX_2DACCEL_DYNAMIC */ - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rtns.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rtns.h deleted file mode 100644 index 388c9dbed..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rtns.h +++ /dev/null @@ -1,666 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_rtns.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_rtns.h $ - * - * This header file defines the Durango routines and variables used - * to access the memory mapped regions. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#ifndef _gfx_rtns_h -#define _gfx_rtns_h - -/* INCLUDE DURANGO DEFINITIONS */ -/* These definitions are placed in another file to allow their inclusion */ -/* in a user application. Such applications generally work through driver */ -/* shell routines that simply pass their parameters to Durango routines. */ -/* An external file provides an easy way to provide the definitions for these */ -/* parameters without the applications gaining any Durango visisbility. */ - -#include "gfx_type.h" - -/* COMPILER OPTION FOR C++ PROGRAMS */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* DURANGO MEMORY POINTERS */ - -extern unsigned char *gfx_virt_regptr; -extern unsigned char *gfx_virt_fbptr; -extern unsigned char *gfx_virt_vidptr; -extern unsigned char *gfx_virt_vipptr; -extern unsigned char *gfx_virt_spptr; -extern unsigned char *gfx_virt_gpptr; - -extern unsigned char *gfx_phys_regptr; -extern unsigned char *gfx_phys_fbptr; -extern unsigned char *gfx_phys_vidptr; -extern unsigned char *gfx_phys_vipptr; -extern unsigned char *gfx_phys_spptr; -extern unsigned char *gfx_phys_gpptr; - -/* DURANGO VARIBLES FOR RUNTIME SELECTION AND POSSIBLE VALUES */ - -extern int gfx_display_type; -#define GFX_DISPLAY_TYPE_GU1 0x0001 -#define GFX_DISPLAY_TYPE_GU2 0x0002 - -extern int gfx_init_type; -#define GFX_INIT_TYPE_GU1 0x0001 -#define GFX_INIT_TYPE_GU2 0x0002 - -extern int gfx_msr_type; -#define GFX_MSR_TYPE_REDCLOUD 0x0001 - -extern int gfx_2daccel_type; -#define GFX_2DACCEL_TYPE_GU1 0x0001 -#define GFX_2DACCEL_TYPE_GU2 0x0002 - -extern int gfx_video_type; -#define GFX_VIDEO_TYPE_CS5530 0x0001 -#define GFX_VIDEO_TYPE_SC1200 0x0002 -#define GFX_VIDEO_TYPE_REDCLOUD 0x0004 - -extern int gfx_vip_type; -#define GFX_VIP_TYPE_SC1200 0x0001 - -extern int gfx_decoder_type; -#define GFX_DECODER_TYPE_SAA7114 0x0001 - -extern int gfx_tv_type; -#define GFX_TV_TYPE_SC1200 0x0001 -#define GFX_TV_TYPE_FS451 0x0002 - -extern int gfx_i2c_type; -#define GFX_I2C_TYPE_ACCESS 0x0001 -#define GFX_I2C_TYPE_GPIO 0x0002 - -/* GLOBAL CPU INFORMATION */ - -extern unsigned long gfx_cpu_version; -extern unsigned long gfx_cpu_frequency; -extern unsigned long gfx_vid_version; -extern ChipType gfx_chip_revision; - -/* ROUTINES IN GFX_INIT.C */ - -unsigned long gfx_pci_config_read(unsigned long address); -void gfx_pci_config_write(unsigned long address, unsigned long data); -unsigned long gfx_get_core_freq(void); -unsigned long gfx_detect_cpu(void); -unsigned long gfx_detect_video(void); -unsigned long gfx_get_cpu_register_base(void); -unsigned long gfx_get_graphics_register_base(void); -unsigned long gfx_get_frame_buffer_base(void); -unsigned long gfx_get_frame_buffer_size(void); -unsigned long gfx_get_vid_register_base(void); -unsigned long gfx_get_vip_register_base(void); - -/* ROUTINES IN GFX_MSR.C */ - -int gfx_msr_init (void); -DEV_STATUS gfx_id_msr_device (MSR *pDev, unsigned long address); -DEV_STATUS gfx_get_msr_dev_address (unsigned int device, unsigned long *address); -DEV_STATUS gfx_get_glink_id_at_address(unsigned int *device, unsigned long address); -DEV_STATUS gfx_msr_read (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue); -DEV_STATUS gfx_msr_write (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue); - -/* ROUTINES IN GFX_DISP.C */ - -int gfx_set_display_bpp (unsigned short bpp); -int gfx_is_display_mode_supported(int xres, int yres, int bpp, int hz); -int gfx_set_display_mode(int xres, int yres, int bpp, int hz); -int gfx_set_display_timings(unsigned short bpp, unsigned short flags, - unsigned short hactive, unsigned short hblank_start, - unsigned short hsync_start, unsigned short hsync_end, - unsigned short hblank_end, unsigned short htotal, - unsigned short vactive, unsigned short vblank_start, - unsigned short vsync_start, unsigned short vsync_end, - unsigned short vblank_end, unsigned short vtotal, - unsigned long frequency); -int gfx_set_vtotal(unsigned short vtotal); -void gfx_set_display_pitch(unsigned short pitch); -void gfx_set_display_offset(unsigned long offset); -int gfx_set_display_palette_entry(unsigned long index, unsigned long palette); -int gfx_set_display_palette(unsigned long *palette); -void gfx_video_shutdown(void); -void gfx_set_clock_frequency(unsigned long frequency); -int gfx_set_crt_enable(int enable); -void gfx_set_cursor_enable(int enable); -void gfx_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor); -void gfx_set_cursor_position(unsigned long memoffset, - unsigned short xpos, unsigned short ypos, - unsigned short xhotspot, unsigned short yhotspot); -void gfx_set_cursor_shape32(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask); -void gfx_set_cursor_shape64(unsigned long memoffset, - unsigned long *andmask, unsigned long *xormask); -void gfx_set_icon_enable (int enable); -void gfx_set_icon_colors (unsigned long color0, unsigned long color1, unsigned long color2); -void gfx_set_icon_position (unsigned long memoffset, unsigned short xpos); -void gfx_set_icon_shape64 (unsigned long memoffset, unsigned long *andmask, - unsigned long *xormask, unsigned int lines); - -int gfx_set_compression_enable(int enable); -int gfx_set_compression_offset(unsigned long offset); -int gfx_set_compression_pitch(unsigned short pitch); -int gfx_set_compression_size(unsigned short size); -void gfx_set_display_priority_high(int enable); -int gfx_test_timing_active(void); -int gfx_test_vertical_active(void); -int gfx_wait_vertical_blank(void); -void gfx_delay_milliseconds(unsigned long milliseconds); -void gfx_delay_microseconds(unsigned long microseconds); -void gfx_enable_panning(int x, int y); -int gfx_set_fixed_timings(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp); -int gfx_set_panel_present(int panelResX, int panelResY, unsigned short width, unsigned short height, unsigned short bpp); -void gfx_reset_timing_lock(void); - -/* "READ" ROUTINES IN GFX_DISP.C */ - -int gfx_get_display_details(unsigned int mode, int *xres, int *yres, int *hz); -unsigned short gfx_get_display_pitch(void); -int gfx_get_vsa2_softvga_enable(void); -int gfx_get_sync_polarities(void); -unsigned long gfx_get_clock_frequency(void); -unsigned long gfx_get_max_supported_pixel_clock (void); -int gfx_mode_frequency_supported(int xres, int yres, int bpp, unsigned long frequency); -int gfx_get_refreshrate_from_frequency(int xres, int yres, int bpp, int *hz, unsigned long frequency); -int gfx_get_refreshrate_from_mode(int xres, int yres, int bpp, int *hz, unsigned long frequency); -int gfx_get_frequency_from_refreshrate(int xres, int yres, int bpp, int hz, int *frequency); -int gfx_get_display_mode_count(void); -int gfx_get_display_mode(int *xres, int *yres, int *bpp, int *hz); -unsigned long gfx_get_frame_buffer_line_size (void); -unsigned short gfx_get_hactive(void); -unsigned short gfx_get_hblank_start(void); -unsigned short gfx_get_hsync_start(void); -unsigned short gfx_get_hsync_end(void); -unsigned short gfx_get_hblank_end(void); -unsigned short gfx_get_htotal(void); -unsigned short gfx_get_vactive(void); -unsigned short gfx_get_vline(void); -unsigned short gfx_get_vblank_start(void); -unsigned short gfx_get_vsync_start(void); -unsigned short gfx_get_vsync_end(void); -unsigned short gfx_get_vblank_end(void); -unsigned short gfx_get_vtotal(void); -unsigned short gfx_get_display_bpp(void); -unsigned long gfx_get_display_offset(void); -int gfx_get_display_palette_entry(unsigned long index, unsigned long *palette); -void gfx_get_display_palette(unsigned long *palette); -unsigned long gfx_get_cursor_enable(void); -unsigned long gfx_get_cursor_offset(void); -unsigned long gfx_get_cursor_position(void); -unsigned long gfx_get_cursor_clip(void); -unsigned long gfx_get_cursor_color(int color); -unsigned long gfx_get_icon_enable(void); -unsigned long gfx_get_icon_offset (void); -unsigned long gfx_get_icon_position (void); -unsigned long gfx_get_icon_color (int color); -int gfx_get_compression_enable(void); -unsigned long gfx_get_compression_offset(void); -unsigned short gfx_get_compression_pitch(void); -unsigned short gfx_get_compression_size(void); -int gfx_get_display_priority_high(void); -int gfx_get_valid_bit(int line); - -/* ROUTINES IN GFX_RNDR.C */ - -void gfx_set_bpp(unsigned short bpp); -void gfx_set_solid_pattern(unsigned long color); -void gfx_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparency); -void gfx_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1,unsigned long data2,unsigned long data3, unsigned char transparency); -void gfx_load_color_pattern_line (short y, unsigned long *pattern_8x8); -void gfx_set_solid_source(unsigned long color); -void gfx_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent); -void gfx_set_pattern_flags(unsigned short flags); -void gfx_set_raster_operation(unsigned char rop); -void gfx_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height); -void gfx_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern); -void gfx_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height); -void gfx_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color); -void gfx_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch); -void gfx_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color); -void gfx_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch); -void gfx_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data); -void gfx_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags); -void gfx_wait_until_idle(void); -int gfx_test_blt_pending(void); - -/* SECOND GENERATION RENDERING ROUTINES */ - -void gfx2_set_source_stride(unsigned short stride); -void gfx2_set_destination_stride(unsigned short stride); -void gfx2_set_pattern_origin(int x, int y); -void gfx2_set_source_transparency(unsigned long color, unsigned long mask); -void gfx2_set_alpha_mode(int mode); -void gfx2_set_alpha_value(unsigned char value); -void gfx2_pattern_fill(unsigned long dstoffset, unsigned short width, - unsigned short height); -void gfx2_color_pattern_fill(unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned long *pattern); -void gfx2_screen_to_screen_blt(unsigned long srcoffset, unsigned long dstoffset, - unsigned short width, unsigned short height, int flags); -void gfx2_mono_expand_blt(unsigned long srcbase, unsigned short srcx, - unsigned short srcy, unsigned long dstoffset, unsigned short width, - unsigned short height, int byte_packed); -void gfx2_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data, unsigned short pitch); -void gfx2_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data, unsigned short pitch); -void gfx2_text_blt (unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data); -void gfx2_bresenham_line(unsigned long dstoffset, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags); -void gfx2_sync_to_vblank(void); - -/* ROUTINES IN GFX_VID.C */ - -int gfx_set_video_enable(int enable); -int gfx_set_video_format(unsigned long format); -int gfx_set_video_size(unsigned short width, unsigned short height); -int gfx_set_video_yuv_pitch (unsigned long ypitch, unsigned long uvpitch); -int gfx_set_video_offset(unsigned long offset); -int gfx_set_video_yuv_offsets (unsigned long yoffset, unsigned long uoffset, - unsigned long voffset); -int gfx_set_video_window(short x, short y, unsigned short w, unsigned short h); -int gfx_set_video_left_crop(unsigned short x); -int gfx_set_video_upscale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth); -int gfx_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth); -int gfx_set_video_vertical_downscale(unsigned short srch, unsigned short dsth); -void gfx_set_video_vertical_downscale_enable (int enable); -int gfx_set_video_downscale_config(unsigned short type, unsigned short m); -int gfx_set_video_color_key(unsigned long key, unsigned long mask, - int bluescreen); -int gfx_set_video_filter(int xfilter, int yfilter); -int gfx_set_video_palette(unsigned long *palette); -int gfx_set_video_palette_entry (unsigned long index, unsigned long color); -int gfx_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) ; -int gfx_set_video_downscale_enable(int enable); -int gfx_set_video_source(VideoSourceType source); -int gfx_set_vbi_source(VbiSourceType source); -int gfx_set_vbi_lines(unsigned long even, unsigned long odd); -int gfx_set_vbi_total(unsigned long even, unsigned long odd); -int gfx_set_video_interlaced(int enable); -int gfx_set_color_space_YUV(int enable); -int gfx_set_vertical_scaler_offset(char offset); -int gfx_set_top_line_in_odd(int enable); -int gfx_set_genlock_delay(unsigned long delay); -int gfx_set_genlock_enable(int flags); -int gfx_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2); -int gfx_set_video_cursor_enable (int enable); -int gfx_set_video_request(short x, short y); - -int gfx_select_alpha_region(int region); -int gfx_set_alpha_enable(int enable); -int gfx_set_alpha_window(short x, short y, - unsigned short width, unsigned short height); -int gfx_set_alpha_value(unsigned char alpha, char delta); -int gfx_set_alpha_priority(int priority); -int gfx_set_alpha_color(unsigned long color); -int gfx_set_alpha_color_enable(int enable); -int gfx_set_no_ck_outside_alpha(int enable); -int gfx_disable_softvga(void); -int gfx_enable_softvga(void); -int gfx_set_macrovision_enable(int enable); - -/* READ ROUTINES IN GFX_VID.C */ - -int gfx_get_video_enable(void); -int gfx_get_video_format(void); -unsigned long gfx_get_video_src_size(void); -unsigned long gfx_get_video_line_size(void); -unsigned long gfx_get_video_xclip(void); -unsigned long gfx_get_video_offset(void); -void gfx_get_video_yuv_offsets (unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset); -void gfx_get_video_yuv_pitch (unsigned long *ypitch, unsigned long *uvpitch); -unsigned long gfx_get_video_upscale(void); -unsigned long gfx_get_video_scale(void); -unsigned long gfx_get_video_downscale_delta(void); -int gfx_get_video_vertical_downscale_enable (void); -int gfx_get_video_downscale_config(unsigned short *type, unsigned short *m); -void gfx_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4); -void gfx_get_video_downscale_enable(int *enable); -unsigned long gfx_get_video_dst_size(void); -unsigned long gfx_get_video_position(void); -unsigned long gfx_get_video_color_key(void); -unsigned long gfx_get_video_color_key_mask(void); -int gfx_get_video_palette_entry(unsigned long index, unsigned long *palette); -int gfx_get_video_color_key_src(void); -int gfx_get_video_filter(void); -int gfx_get_video_request(short *x, short *y); -int gfx_get_video_source(VideoSourceType *source); -int gfx_get_vbi_source(VbiSourceType *source); -unsigned long gfx_get_vbi_lines(int odd); -unsigned long gfx_get_vbi_total(int odd); -int gfx_get_video_interlaced(void); -int gfx_get_color_space_YUV(void); -int gfx_get_vertical_scaler_offset(char *offset); -unsigned long gfx_get_genlock_delay(void); -int gfx_get_genlock_enable(void); -int gfx_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2); -unsigned long gfx_read_crc(void); -unsigned long gfx_read_crc32(void); -unsigned long gfx_read_window_crc(int source, unsigned short x, unsigned short y, - unsigned short width, unsigned short height, int crc32); -int gfx_get_macrovision_enable(void); - -void gfx_get_alpha_enable(int *enable); -void gfx_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height); -void gfx_get_alpha_value(unsigned char *alpha, char *delta); -void gfx_get_alpha_priority(int *priority); -void gfx_get_alpha_color(unsigned long *color); - -/* ROUTINES IN GFX_VIP.C */ - -int gfx_set_vip_enable(int enable); -int gfx_set_vip_capture_run_mode(int mode); -int gfx_set_vip_base(unsigned long even, unsigned long odd); -int gfx_set_vip_pitch(unsigned long pitch); -int gfx_set_vip_mode(int mode); -int gfx_set_vbi_enable(int enable); -int gfx_set_vbi_mode(int mode); -int gfx_set_vbi_base(unsigned long even, unsigned long odd); -int gfx_set_vbi_pitch(unsigned long pitch); -int gfx_set_vbi_direct(unsigned long even_lines, unsigned long odd_lines); -int gfx_set_vbi_interrupt(int enable); -int gfx_set_vip_bus_request_threshold_high(int enable); -int gfx_set_vip_last_line(int last_line); -int gfx_test_vip_odd_field(void); -int gfx_test_vip_bases_updated(void); -int gfx_test_vip_fifo_overflow(void); -int gfx_get_vip_line(void); - -/* READ ROUTINES IN GFX_VIP.C */ - -int gfx_get_vip_enable(void); -unsigned long gfx_get_vip_base(int odd); -unsigned long gfx_get_vip_pitch(void); -int gfx_get_vip_mode(void); -int gfx_get_vbi_enable(void); -int gfx_get_vbi_mode(void); -unsigned long gfx_get_vbi_base(int odd); -unsigned long gfx_get_vbi_pitch(void); -unsigned long gfx_get_vbi_direct(int odd); -int gfx_get_vbi_interrupt(void); -int gfx_get_vip_bus_request_threshold_high(void); - -/* ROUTINES IN GFX_DCDR.C */ - -int gfx_set_decoder_defaults(void); -int gfx_set_decoder_analog_input(unsigned char input); -int gfx_set_decoder_brightness(unsigned char brightness); -int gfx_set_decoder_contrast(unsigned char contrast); -int gfx_set_decoder_hue(char hue); -int gfx_set_decoder_saturation(unsigned char saturation); -int gfx_set_decoder_input_offset(unsigned short x, unsigned short y); -int gfx_set_decoder_input_size(unsigned short width, unsigned short height); -int gfx_set_decoder_output_size(unsigned short width, unsigned short height); -int gfx_set_decoder_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth); -int gfx_set_decoder_vbi_format(int start, int end, int format); -int gfx_set_decoder_vbi_enable(int enable); -int gfx_set_decoder_vbi_upscale(void); -int gfx_set_decoder_TV_standard(TVStandardType TVStandard); -int gfx_set_decoder_luminance_filter(unsigned char lufi); -int gfx_decoder_software_reset(void); -int gfx_decoder_detect_macrovision(void); -int gfx_decoder_detect_video(void); - -/* READ ROUTINES IN GFX_DCDR.C */ - -unsigned char gfx_get_decoder_brightness(void); -unsigned char gfx_get_decoder_contrast(void); -char gfx_get_decoder_hue(void); -unsigned char gfx_get_decoder_saturation(void); -unsigned long gfx_get_decoder_input_offset(void); -unsigned long gfx_get_decoder_input_size(void); -unsigned long gfx_get_decoder_output_size(void); -int gfx_get_decoder_vbi_format(int line); - -/* ROUTINES IN GFX_I2C.C */ - -int gfx_i2c_reset(unsigned char busnum, short adr, char freq); -int gfx_i2c_write(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data); -int gfx_i2c_read(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data); -int gfx_i2c_select_gpio(int clock, int data); -int gfx_i2c_init(void); -void gfx_i2c_cleanup(void); - -/* ROUTINES IN GFX_TV.C */ - -int gfx_set_tv_format(TVStandardType format, GfxOnTVType resolution); -int gfx_set_tv_output(int output); -int gfx_set_tv_enable(int enable); -int gfx_set_tv_flicker_filter(int ff); -int gfx_set_tv_sub_carrier_reset(int screset); -int gfx_set_tv_vphase(int vphase); -int gfx_set_tv_YC_delay(int delay); -int gfx_set_tvenc_reset_interval(int interval); -int gfx_set_tv_cc_enable(int enable); -int gfx_set_tv_cc_data(unsigned char data1, unsigned char data2); -int gfx_set_tv_display(int width, int height); -int gfx_test_tvout_odd_field(void); -int gfx_test_tvenc_odd_field(void); -int gfx_set_tv_field_status_invert(int enable); -int gfx_get_tv_vphase(void); -int gfx_get_tv_enable(unsigned int *p_on); -int gfx_get_tv_output(void); -int gfx_get_tv_mode_count(TVStandardType format); -int gfx_get_tv_display_mode (int *width, int *height, int *bpp, int *hz); -int gfx_get_tv_display_mode_frequency (unsigned short width, unsigned short height, TVStandardType format, int *frequency); -int gfx_is_tv_display_mode_supported (unsigned short width, unsigned short height, TVStandardType format); - -int gfx_get_tv_standard(unsigned long *p_standard); -int gfx_get_available_tv_standards(unsigned long *p_standards); -int gfx_set_tv_standard(unsigned long standard); -int gfx_get_tv_vga_mode(unsigned long *p_vga_mode); -int gfx_get_available_tv_vga_modes(unsigned long *p_vga_modes); -int gfx_set_tv_vga_mode(unsigned long vga_mode); -int gfx_get_tvout_mode(unsigned long *p_tvout_mode); -int gfx_set_tvout_mode(unsigned long tvout_mode); -int gfx_get_sharpness(int *p_sharpness); -int gfx_set_sharpness(int sharpness); -int gfx_get_flicker_filter(int *p_flicker); -int gfx_set_flicker_filter(int flicker); -int gfx_get_overscan(int *p_x, int *p_y); -int gfx_set_overscan(int x, int y); -int gfx_get_position(int *p_x, int *p_y); -int gfx_set_position(int x, int y); -int gfx_get_color(int *p_color); -int gfx_set_color(int color); -int gfx_get_brightness(int *p_brightness); -int gfx_set_brightness(int brightness); -int gfx_get_contrast(int *p_contrast); -int gfx_set_contrast(int constrast); -int gfx_get_yc_filter(unsigned int *p_yc_filter); -int gfx_set_yc_filter(unsigned int yc_filter); -int gfx_get_aps_trigger_bits(unsigned int *p_trigger_bits); -int gfx_set_aps_trigger_bits(unsigned int trigger_bits); - -/* ROUTINES IN GFX_VGA.C */ - -int gfx_get_softvga_active(void); -int gfx_vga_test_pci(void); -unsigned char gfx_vga_get_pci_command(void); -int gfx_vga_set_pci_command(unsigned char command); -int gfx_vga_seq_reset(int reset); -int gfx_vga_set_graphics_bits(void); -int gfx_vga_mode(gfx_vga_struct *vga, int xres, int yres, int bpp, int hz); -int gfx_vga_pitch(gfx_vga_struct *vga, unsigned short pitch); -int gfx_vga_save(gfx_vga_struct *vga, int flags); -int gfx_vga_restore(gfx_vga_struct *vga, int flags); -int gfx_vga_mode_switch(int active); -void gfx_vga_clear_extended(void); - -/* CLOSE BRACKET FOR C++ COMPLILATION */ - -#ifdef __cplusplus -} -#endif - -#endif /* !_gfx_rtns_h */ - -/* END OF FILE */ - - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_tv.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_tv.c deleted file mode 100644 index 905f442db..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_tv.c +++ /dev/null @@ -1,850 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_tv.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_tv.c $ - * - * This file contains routines to program TVOUT and TV encoder. - * - * Routines: - * - * gfx_set_tv_format - * gfx_set_tv_output - * gfx_set_tv_enable - * gfx_set_tv_flicker_filter - * gfx_set_tv_sub_carrier_reset - * gfx_set_tv_vphase - * gfx_set_tv_YC_delay - * gfx_set_tvenc_reset_interval - * gfx_set_tv_cc_enable - * gfx_set_tv_cc_data - * gfx_test_tvout_odd_field - * gfx_test_tvenc_odd_field - * gfx_set_tv_field_status_invert - * gfx_get_tv_vphase - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* TV TIMINGS */ - -DISPLAYMODE TVTimings[] = { - -/* NTSC resolution */ - -{ 0x3 | /* negative syncs */ - GFX_MODE_TV_NTSC, /* NTSC format */ - 640, 640, 656, 744, 792, 792, /* horizontal timings */ - 480, 480, 490, 492, 517, 525, /* vertical timings */ - 0x0018EC4D, /* freq = 24.923052 MHz */ -}, - -/* PAL resolution */ - -{ 0x3 | /* negative syncs */ - GFX_MODE_TV_PAL, /* PAL format */ - 768, 768, 800, 848, 864, 864, /* horizontal timings */ - 576, 576, 586, 588, 625, 625, /* vertical timings */ - 0x001B0000, /* freq = 27.00 MHz */ -}, - -/* NTSC resolution non-square pixels */ - -{ 0x3 | /* negative syncs */ - GFX_MODE_TV_NTSC, /* NTSC format */ - 720, 720, 736, 752, 792, 792, /* horizontal timings */ - 480, 480, 490, 492, 517, 525, /* vertical timings */ - 0x0018EC4D, /* freq = 24.923052 MHz */ -}, - -/* PAL resolution non-square pixels */ - -{ 0x3 | /* negative syncs */ - GFX_MODE_TV_PAL, /* PAL format */ - 720, 720, 752, 816, 864, 864, /* horizontal timings */ - 576, 576, 586, 588, 625, 625, /* vertical timings */ - 0x001B0000, /* freq = 27.00 MHz */ -}}; - -#define NUM_TV_MODES sizeof(TVTimings)/sizeof(DISPLAYMODE) - -/* INCLUDE SUPPORT FOR SC1200 TV ENCODER, IF SPECIFIED */ - -#if GFX_TV_SC1200 -#include "tv_1200.c" -#endif - -/* INCLUDE SUPPORT FOR FS450 TV ENCODER, IF SPECIFIED */ - -#if GFX_TV_FS451 -#include "tv_fs450.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either SC1200 or FS450 TV encoder routines. */ - -#if GFX_TV_DYNAMIC - -/*----------------------------------------------------------------------------- - * gfx_set_tv_format - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_format(TVStandardType format, GfxOnTVType resolution) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_format(format, resolution); -#endif -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tv_format(format, resolution); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_output - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_output(int output) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_output(output); -#endif -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tv_output(output); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_enable(int enable) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_enable(enable); -#endif -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tv_enable(enable); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_flicker_filter - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_flicker_filter(int ff) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_flicker_filter(ff); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_sub_carrier_reset - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_sub_carrier_reset(int screset) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_sub_carrier_reset(screset); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_vphase - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_vphase(int vphase) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_vphase(vphase); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_YC_delay - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_YC_delay(int delay) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_YC_delay(delay); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tvenc_reset_interval - *----------------------------------------------------------------------------- - */ -int gfx_set_tvenc_reset_interval(int interval) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tvenc_reset_interval(interval); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_cc_enable(int enable) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_cc_enable(enable); -#endif - return(retval); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_data - * - * This routine writes the two specified characters to the CC data register - * of the TV encoder. - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_cc_data(unsigned char data1, unsigned char data2) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_cc_data(data1, data2); -#endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_set_tv_display - * - * Set the timings in the display controller to support a TV resolution. - *--------------------------------------------------------------------------- - */ -int gfx_set_tv_display(int width, int height) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - status = sc1200_set_tv_display(width, height); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_test_tvout_odd_field - *--------------------------------------------------------------------------- - */ -int gfx_test_tvout_odd_field(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - status = sc1200_test_tvout_odd_field(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_test_tvenc_odd_field - *--------------------------------------------------------------------------- - */ -int gfx_test_tvenc_odd_field(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - status = sc1200_test_tvenc_odd_field(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_field_status_invert - *----------------------------------------------------------------------------- - */ -int gfx_set_tv_field_status_invert(int enable) -{ - int retval = GFX_STATUS_UNSUPPORTED; -#if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_set_tv_field_status_invert(enable); -#endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_vphase - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_vphase(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - status = sc1200_get_tv_vphase(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_enable - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_enable(unsigned int *p_on) -{ - int retval = -1; -# if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_tv_enable( p_on); -# endif -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_get_tv_enable(p_on); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_output - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_output() -{ - int retval = -1; - -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_get_tv_output(); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_mode_count - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_mode_count(TVStandardType format) -{ - int retval = -1; - -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_get_tv_mode_count (format); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_display_mode - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_display_mode (int *width, int *height, int *bpp, int *hz) -{ - int retval = -1; - -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_get_tv_display_mode (width, height, bpp, hz); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_display_mode_frequency - *--------------------------------------------------------------------------- - */ -int gfx_get_tv_display_mode_frequency (unsigned short width, unsigned short height, - TVStandardType format, int *frequency) -{ - int retval = -1; - -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_get_tv_display_mode_frequency (width, height, format, frequency); -# endif - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_is_tv_display_mode_supported - *--------------------------------------------------------------------------- - */ -int gfx_is_tv_display_mode_supported (unsigned short width, unsigned short height, TVStandardType format) -{ - int retval = -1; - -# if GFX_TV_SC1200 - if (gfx_tv_type & GFX_TV_TYPE_SC1200) - retval = sc1200_is_tv_display_mode_supported (width, height, format); -# endif - return(retval); -} - -/*------------------------------------------ - * The following functions were added to support - * the FS450 and will eventually be removed. There - * is no equivalent support in the SC1200. - *----------------------------------------------*/ - - -/* -// ========================================================================== -// -// TV standard -*/ - -int gfx_get_tv_standard(unsigned long *p_standard) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_tv_standard( p_standard); -#endif - return(retval); -} - -int gfx_get_available_tv_standards(unsigned long *p_standards) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_available_tv_standards( p_standards); -#endif - return(retval); -} - -int gfx_set_tv_standard(unsigned long standard) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tv_standard(standard); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// vga mode as known by the driver -*/ - -int gfx_get_tv_vga_mode(unsigned long *p_vga_mode) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_tv_vga_mode(p_vga_mode); -#endif - return(retval); -} - -int gfx_get_available_tv_vga_modes(unsigned long *p_vga_modes) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_available_tv_vga_modes(p_vga_modes); -#endif - return(retval); -} - -int gfx_set_tv_vga_mode(unsigned long vga_mode) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tv_vga_mode(vga_mode); -#endif - return(retval); -} - - -/* -// ========================================================================== -// -// tvout mode -*/ - -int gfx_get_tvout_mode(unsigned long *p_tvout_mode) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_tvout_mode(p_tvout_mode); -#endif - return(retval); -} - -int gfx_set_tvout_mode(unsigned long tvout_mode) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_tvout_mode(tvout_mode); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// Sharpness -*/ -int gfx_get_sharpness(int *p_sharpness) - -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_sharpness(p_sharpness); -#endif - return(retval); -} - -int gfx_set_sharpness(int sharpness) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_sharpness(sharpness); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// flicker filter control. -*/ - -int gfx_get_flicker_filter(int *p_flicker) - -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_flicker_filter(p_flicker); -#endif - return(retval); -} - -int gfx_set_flicker_filter(int flicker) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_flicker_filter(flicker); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// Overscan and Position -*/ - -int gfx_get_overscan(int *p_x, int *p_y) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_overscan(p_x, p_y); -#endif - return(retval); - -} - -int gfx_set_overscan(int x, int y) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_overscan(x, y); -#endif - return(retval); -} - -int gfx_get_position(int *p_x, int *p_y) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_position(p_x, p_y); -#endif - return(retval); -} - -int gfx_set_position(int x, int y) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_position(x, y); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// Color, Brightness, and Contrast -*/ - -int gfx_get_color(int *p_color) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_color(p_color); -#endif - return(retval); -} - -int gfx_set_color(int color) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_color(color); -#endif - return(retval); -} - -int gfx_get_brightness(int *p_brightness) - -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_brightness(p_brightness); -#endif - return(retval); -} - -int gfx_set_brightness(int brightness) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_brightness(brightness); -#endif - return(retval); -} - -int gfx_get_contrast(int *p_contrast) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_contrast(p_contrast); -#endif - return(retval); -} - -int gfx_set_contrast(int contrast) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_contrast(contrast); -#endif - return(retval); -} - -/* -// ========================================================================== -// -// YC filters -*/ - -int gfx_get_yc_filter(unsigned int *p_yc_filter) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_yc_filter(p_yc_filter); -#endif - return(retval); -} - -int gfx_set_yc_filter(unsigned int yc_filter) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_yc_filter(yc_filter); -#endif - return(retval); -} - -int gfx_get_aps_trigger_bits(unsigned int *p_trigger_bits) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_get_aps_trigger_bits(p_trigger_bits); -#endif - return(retval); -} - -int gfx_set_aps_trigger_bits(unsigned int trigger_bits) -{ - int retval = -1; -#if GFX_TV_FS451 - if (gfx_tv_type & GFX_TV_TYPE_FS451) - retval = fs450_set_aps_trigger_bits(trigger_bits); -#endif - return(retval); -} - -#endif /* GFX_TV_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_type.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_type.h deleted file mode 100644 index 73094ee3f..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_type.h +++ /dev/null @@ -1,422 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_type.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_type.h $ - * - * This header file defines the pneumonics used when calling Durango routines. - * This file is automatically included by gfx_rtns.h - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#ifndef _gfx_type_h -#define _gfx_type_h - -/* MSR DEFINITIONS */ - -typedef enum DevStatus { FOUND, NOT_KNOWN, REQ_NOT_FOUND, REQ_NOT_INSTALLED } DEV_STATUS; - -typedef struct msr { - DEV_STATUS Present; /* Node enumeration status */ - unsigned char Id; /* Device ID (from MSR specs) */ - unsigned long Address; /* Address - 32-bit MBus address at which 'Id' is found */ -} MSR; - -typedef struct mValue { - unsigned long high; - unsigned long low; -} Q_WORD; - -typedef struct mbusNode { - unsigned long address; - unsigned int deviceId; - unsigned int claimed; -} MBUS_NODE; - -/* MSR ARRAY INDEXES */ -/* These are indexes into the array of MBus devices. These */ -/* should not be confused with the class codes at MSR register */ -/* 0x2000. */ - -#define RC_ID_MBIU0 0x00 -#define RC_ID_MBIU1 0x01 -#define RC_ID_MCP 0x02 -#define RC_ID_MPCI 0x03 -#define RC_ID_MC 0x04 -#define RC_ID_GP 0x05 -#define RC_ID_VG 0x06 -#define RC_ID_DF 0x07 -#define RC_ID_FG 0x08 -#define RC_ID_VA 0x09 -#define CP_ID_MBIU 0x0A -#define CP_ID_MPCI 0x0B -#define CP_ID_USB2 0x0C -#define CP_ID_ATAC 0x0D -#define CP_ID_MDD 0x0E -#define CP_ID_ACC 0x0F -#define CP_ID_USB1 0x10 -#define CP_ID_MCP 0x11 - -/* MBUS DEVICE CLASS CODES */ -/* These are the device ids for the known Redcloud MBus devices. */ - -#define RC_CC_MBIU 0x01 -#define RC_CC_MCP 0x02 -#define RC_CC_MPCI 0x05 -#define RC_CC_MC 0x20 -#define RC_CC_GP 0x3D -#define RC_CC_VG 0x3E -#define RC_CC_DF 0x3F -#define RC_CC_FG 0xF0 -#define RC_CC_VA 0x86 -#define CP_CC_MBIU 0x01 -#define CP_CC_MPCI 0x05 -#define CP_CC_USB2 0x42 -#define CP_CC_ATAC 0x47 -#define CP_CC_MDD 0xDF -#define CP_CC_ACC 0x33 -#define CP_CC_USB1 0x42 -#define CP_CC_MCP 0x02 - -/* VAIL AND MBIUS ARE AT KNOWN ADDRESSES */ -/* We can initialize the addresses of these devices in advance, */ -/* as their location should never change. */ - -#define RC_MB0_MBIU0 0x10000000 -#define RC_MB0_MBIU1 0x40000000 -#define CP_MB0_MBIU0 0x51010000 -#define RC_MB0_CPU 0x00000000 -#define FAKE_ADDRESS 0xFFFFFFFF - -/* MSR PORT DESCRIPTORS */ - -#define NOT_POPULATED 0 -#define NOT_INSTALLED 0xFFFE -#define REFLECTIVE 0xFFFF - -/* CRC DATA SOURCES */ - -#define CRC_SOURCE_GFX_DATA 0x00 -#define CRC_SOURCE_CRT_RGB 0x01 -#define CRC_SOURCE_FP_DATA 0x02 - - -/* TV DEFINITIONS */ - -typedef enum TVStandardType { - TV_STANDARD_NTSC = 1, - TV_STANDARD_PAL -} TVStandardType; - -typedef enum GfxOnTVType { - GFX_ON_TV_SQUARE_PIXELS = 1, - GFX_ON_TV_NO_SCALING -} GfxOnTVType; - -#define CRT_DISABLE 0x00 -#define CRT_ENABLE 0x01 -#define CRT_STANDBY 0x02 -#define CRT_SUSPEND 0x03 - -#define TV_OUTPUT_COMPOSITE 0x01 -#define TV_OUTPUT_S_VIDEO 0x02 -#define TV_OUTPUT_YUV 0x03 -#define TV_OUTPUT_SCART 0x04 - -#define TV_FLICKER_FILTER_NONE 0x01 -#define TV_FLICKER_FILTER_NORMAL 0x02 -#define TV_FLICKER_FILTER_INTERLACED 0x03 - -#define TV_YC_DELAY_NONE 0x01 -#define TV_Y_DELAY_ONE_PIXEL 0x02 -#define TV_C_DELAY_ONE_PIXEL 0x03 -#define TV_C_DELAY_TWO_PIXELS 0x04 - -#define TV_SUB_CARRIER_RESET_NEVER 0x01 -#define TV_SUB_CARRIER_RESET_EVERY_TWO_LINES 0x02 -#define TV_SUB_CARRIER_RESET_EVERY_TWO_FRAMES 0x03 -#define TV_SUB_CARRIER_RESET_EVERY_FOUR_FRAMES 0x04 - -#define TVENC_RESET_EVERY_ODD_FIELD 0x01 -#define TVENC_RESET_EVERY_EVEN_FIELD 0x02 -#define TVENC_RESET_NEXT_ODD_FIELD 0x03 -#define TVENC_RESET_NEXT_EVEN_FIELD 0x04 -#define TVENC_RESET_EVERY_FIELD 0x05 -#define TVENC_RESET_EVERY_X_ODD_FIELDS 0x06 -#define TVENC_RESET_EVERY_X_EVEN_FIELDS 0x07 - -/* VBI FORMATS */ - -#define VBI_FORMAT_VIDEO 0x1 -#define VBI_FORMAT_RAW 0x2 -#define VBI_FORMAT_CC 0x4 -#define VBI_FORMAT_NABTS 0x8 - -/* VIDEO DEFINITIONS */ - -#define VIDEO_FORMAT_UYVY 0x0 -#define VIDEO_FORMAT_Y2YU 0x1 -#define VIDEO_FORMAT_YUYV 0x2 -#define VIDEO_FORMAT_YVYU 0x3 -#define VIDEO_FORMAT_Y0Y1Y2Y3 0x4 -#define VIDEO_FORMAT_Y3Y2Y1Y0 0x5 -#define VIDEO_FORMAT_Y1Y0Y3Y2 0x6 -#define VIDEO_FORMAT_Y1Y2Y3Y0 0x7 -#define VIDEO_FORMAT_RGB 0x8 -#define VIDEO_FORMAT_P2M_P2L_P1M_P1L 0x9 -#define VIDEO_FORMAT_P1M_P1L_P2M_P2L 0xA -#define VIDEO_FORMAT_P1M_P2L_P2M_P1L 0xB - -#define VIDEO_DOWNSCALE_KEEP_1_OF 0x1 -#define VIDEO_DOWNSCALE_DROP_1_OF 0x2 - -typedef enum VideoSourceType { /* The source from which the video processor shows full screen video */ - VIDEO_SOURCE_MEMORY = 1, - VIDEO_SOURCE_DVIP -} VideoSourceType; - -typedef enum VbiSourceType { /* The source from which the video processor takes VBI */ - VBI_SOURCE_MEMORY = 1, - VBI_SOURCE_DVIP -} VbiSourceType; - -/* GENLOCK DEFINITIONS */ - -#define GENLOCK_SINGLE 0x001 -#define GENLOCK_FIELD_SYNC 0x001 -#define GENLOCK_CONTINUOUS 0x002 -#define GENLOCK_SYNCED_EDGE_FALLING 0x004 -#define GENLOCK_SYNCING_EDGE_FALLING 0x008 -#define GENLOCK_TIMEOUT 0x010 -#define GENLOCK_TVENC_RESET_EVEN_FIELD 0x020 -#define GENLOCK_TVENC_RESET_BEFORE_DELAY 0x040 -#define GENLOCK_TVENC_RESET 0x080 -#define GENLOCK_SYNC_TO_TVENC 0x100 - -/* VIP DEFINITIONS */ - -#define VIP_MODE_C 0x1 - -#define VIP_CAPTURE_STOP_LINE 0x1 -#define VIP_CAPTURE_STOP_FIELD 0x2 -#define VIP_CAPTURE_START_FIELD 0x4 - -#define VBI_ANCILLARY 0x1 -#define VBI_TASK_A 0x2 -#define VBI_TASK_B 0x4 - -/* VGA STRUCTURE */ - -#define GFX_STD_CRTC_REGS 25 -#define GFX_EXT_CRTC_REGS 16 - -#define GFX_VGA_FLAG_MISC_OUTPUT 0x00000001 -#define GFX_VGA_FLAG_STD_CRTC 0x00000002 -#define GFX_VGA_FLAG_EXT_CRTC 0x00000004 - -/* FS450 TV Standard flags */ - -#define GFX_TV_STANDARD_NTSC_M 0x0001 -#define GFX_TV_STANDARD_NTSC_M_J 0x0002 -#define GFX_TV_STANDARD_PAL_B 0x0004 -#define GFX_TV_STANDARD_PAL_D 0x0008 -#define GFX_TV_STANDARD_PAL_H 0x0010 -#define GFX_TV_STANDARD_PAL_I 0x0020 -#define GFX_TV_STANDARD_PAL_M 0x0040 -#define GFX_TV_STANDARD_PAL_N 0x0080 -#define GFX_TV_STANDARD_PAL_G 0x0100 - -/* FS450 VGA Mode flags */ - -#define GFX_VGA_MODE_UNKNOWN 0 -#define GFX_VGA_MODE_640X480 0x0001 -#define GFX_VGA_MODE_720X487 0x0002 -#define GFX_VGA_MODE_720X576 0x0004 -#define GFX_VGA_MODE_800X600 0x0008 -#define GFX_VGA_MODE_1024X768 0x0010 - -/* FS450 TVout mode flags */ - -#define GFX_TVOUT_MODE_CVBS 0x0001 -#define GFX_TVOUT_MODE_YC 0x0002 -#define GFX_TVOUT_MODE_RGB 0x0004 -#define GFX_TVOUT_MODE_CVBS_YC (GFX_TVOUT_MODE_CVBS | GFX_TVOUT_MODE_YC) - -/* FS450 Luma and Chroma Filters */ - -#define GFX_LUMA_FILTER 0x0001 -#define GFX_CHROMA_FILTER 0x0002 - -/* APS Trigger Bits */ - -#define GFX_APS_TRIGGER_OFF 0 -#define GFX_APS_TRIGGER_AGC_ONLY 1 -#define GFX_APS_TRIGGER_AGC_2_LINE 2 -#define GFX_APS_TRIGGER_AGC_4_LINE 3 - -typedef struct { - int xsize; - int ysize; - int hz; - int clock; - unsigned char miscOutput; - unsigned char stdCRTCregs[GFX_STD_CRTC_REGS]; - unsigned char extCRTCregs[GFX_EXT_CRTC_REGS]; -} gfx_vga_struct; - -/* POSSIBLE STATUS VALUES */ - -#define GFX_STATUS_UNSUPPORTED (-3) -#define GFX_STATUS_BAD_PARAMETER (-2) -#define GFX_STATUS_ERROR (-1) -#define GFX_STATUS_OK 0 - -/* CPU AND VIDEO TYPES */ - -#define GFX_CPU_GXLV 1 -#define GFX_CPU_SC1200 2 -#define GFX_CPU_REDCLOUD 3 -#define GFX_CPU_PYRAMID 0x20801 - - -#define GFX_VID_CS5530 1 -#define GFX_VID_SC1200 2 -#define GFX_VID_REDCLOUD 3 - -/* CHIP NAME AND REVISION */ - -typedef enum ChipType { - CHIP_NOT_DETECTED, - SC1200_REV_A, - SC1200_REV_B1_B2, - SC1200_REV_B3, - SC1200_REV_C1, - SC1200_REV_D1, - SC1200_REV_D1_1, - SC1200_REV_D2_MVD, /* Macrovision disabled */ - SC1200_REV_D2_MVE, /* Macrovision enabled */ - SC1200_FUTURE_REV -} ChipType; - -#endif /* !_gfx_type_h */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vga.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vga.c deleted file mode 100644 index b5b5e3fef..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vga.c +++ /dev/null @@ -1,147 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vga.c,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: gfx_vga.c $ - * - * This file contains routines to interface to the VGA registers. Some - * operating systems require mode sets be done through VGA, rather than - * directly using the "gfx_set_display_mode" routine. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* INCLUDE SUPPORT FOR FIRST GENERATION, IF SPECIFIED. */ - -#if GFX_VGA_GU1 -#include "vga_gu1.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either first or second generation routines. */ - -#if GFX_VGA_DYNAMIC - -#endif /* GFX_DISPLAY_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vid.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vid.c deleted file mode 100644 index ea7aa829c..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vid.c +++ /dev/null @@ -1,1934 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vid.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_vid.c $ - * - * This file contains routines to control the video overlay window. - * - * Video overlay routines: - * - * gfx_set_clock_frequency - * gfx_set_crt_enable - * gfx_set_video_enable - * gfx_set_video_format - * gfx_set_video_size - * gfx_set_video_offset - * gfx_set_video_yuv_offsets - * gfx_set_video_yuv_pitch - * gfx_set_video_scale - * gfx_set_video_upscale - * gfx_set_video_downscale_config - * gfx_set_video_downscale_coefficients - * gfx_set_video_downscale_enable - * gfx_set_video_vertical_downscale - * gfx_set_video_vertical_downscale_enable - * gfx_set_video_window - * gfx_set_video_left_crop - * gfx_set_video_color_key - * gfx_set_video_filter - * gfx_set_video_palette - * gfx_set_video_request - * gfx_set_video_source - * gfx_set_vbi_source - * gfx_set_vbi_lines - * gfx_set_vbi_total - * gfx_set_video_interlaced - * gfx_set_color_space_YUV - * gfx_set_vertical_scaler_offset - * gfx_set_top_line_in_odd - * gfx_set_genlock_delay - * gfx_set_genlock_enable - * gfx_set_video_cursor - * gfx_set_video_cursor_enable - * - * Alpha blending routines (SC1200 ONLY): - * - * gfx_select_alpha_region - * gfx_set_alpha_enable - * gfx_set_alpha_window - * gfx_set_alpha_value - * gfx_set_alpha_priority - * gfx_set_alpha_color - * gfx_set_alpha_color_enable - * gfx_set_no_ck_outside_alpha - * gfx_test_tvout_odd_field - * - * And the following routines if GFX_READ_ROUTINES is set: - * - * gfx_get_sync_polarities - * gfx_get_video_enable - * gfx_get_video_format - * gfx_get_video_src_size - * gfx_get_video_line_size - * gfx_get_video_xclip - * gfx_get_video_offset - * gfx_get_video_yuv_offsets - * gfx_get_video_yuv_pitch - * gfx_get_video_scale - * gfx_get_video_upscale - * gfx_get_video_downscale_config - * gfx_get_video_downscale_coefficients - * gfx_get_video_downscale_enable - * gfx_get_video_downscale_delta - * gfx_get_video_vertical_downscale_enable - * gfx_get_video_dst_size - * gfx_get_video_position - * gfx_get_video_color_key - * gfx_get_video_color_key_mask - * gfx_get_video_color_key_src - * gfx_get_video_filter - * gfx_get_video_request - * gfx_get_video_source - * gfx_get_vbi_source - * gfx_get_vbi_lines - * gfx_get_vbi_total - * gfx_get_video_interlaced - * gfx_get_color_space_YUV - * gfx_get_vertical_scaler_offset - * gfx_get_genlock_delay - * gfx_get_genlock_enable - * gfx_get_video_cursor - * gfx_get_clock_frequency - * gfx_read_crc - * - * Alpha blending read routines (SC1200 ONLY): - * - * gfx_get_alpha_enable - * gfx_get_alpha_size - * gfx_get_alpha_value - * gfx_get_alpha_priority - * gfx_get_alpha_color - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* STATIC VARIABLES FOR VIDEO OVERLAY CONTROL */ -/* These are saved to allow these routines to do clipping. */ - -unsigned long gfx_vid_offset = 0; /* copy from last gfx_set_video_offset */ -unsigned long gfx_vid_uoffset = 0; /* copy from last gfx_set_video_yuv_offsets */ -unsigned long gfx_vid_voffset = 0; /* copy from last gfx_set_video_yuv_offsets */ -unsigned long gfx_vid_srcw = 300; /* copy from last gfx_set_video_scale */ -unsigned long gfx_vid_srch = 300; /* copy from last gfx_set_video_scale */ -unsigned long gfx_vid_dstw = 300; /* copy from last gfx_set_video_scale */ -unsigned long gfx_vid_dsth = 300; /* copy from last gfx_set_video_scale */ -short gfx_vid_xpos = 0; /* copy from last gfx_set_video_window */ -short gfx_vid_ypos = 0; /* copy from last gfx_set_video_window */ -unsigned short gfx_vid_width = 0; /* copy from last gfx_set_video_window */ -unsigned short gfx_vid_height = 0; /* copy from last gfx_set_video_window */ - -int gfx_alpha_select = 0; /* currently selected alpha region */ - -int gfx_set_screen_enable(int enable); /* forward declaration */ - -/* INCLUDE SUPPORT FOR CS5530, IF SPECIFIED. */ - -#if GFX_VIDEO_CS5530 -#include "vid_5530.c" -#endif - -/* INCLUDE SUPPORT FOR SC1200, IF SPECIFIED. */ - -#if GFX_VIDEO_SC1200 -#include "vid_1200.c" -#endif - -/* INLUDE SUPPORT FOR REDCLOUD, IF SPECIFIED. */ - -#if GFX_VIDEO_REDCLOUD -#include "vid_rdcl.c" -#endif - -/*--------------------------------------------------------------------------- - * gfx_select_alpha_region - * - * This routine selects which alpha region should be used for future - * updates. The SC1200, for example, has 3 alpha windows available, - * so valid parameter values are 0..2. - *--------------------------------------------------------------------------- - */ -int gfx_select_alpha_region(int region) -{ - if (region > 2) return(GFX_STATUS_BAD_PARAMETER); - - gfx_alpha_select = region; - return(GFX_STATUS_OK); -} - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either CS5530 or SC1200 routines. */ - -#if GFX_VIDEO_DYNAMIC - -/*--------------------------------------------------------------------------- - * gfx_reset_video (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine is used to disable all components of video overlay before - * performing a mode switch. - *--------------------------------------------------------------------------- - */ -void gfx_reset_video(void) -{ -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - cs5530_reset_video(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_reset_video(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_reset_video(); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_display_control (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine is used to configure the display output during a modeset - *--------------------------------------------------------------------------- - */ -int gfx_set_display_control(int sync_polarities) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_display_control(sync_polarities); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_display_control(sync_polarities); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_display_control(sync_polarities); -# endif - return (status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_clock_frequency - *----------------------------------------------------------------------------- - */ -void gfx_set_clock_frequency(unsigned long frequency) -{ -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - cs5530_set_clock_frequency(frequency); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_set_clock_frequency(frequency); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_set_clock_frequency(frequency); -# endif -} - -/*----------------------------------------------------------------------------- - * gfx_set_crt_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_crt_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_crt_enable(enable); -# endif -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_crt_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_crt_enable(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_video_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_enable(enable); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_screen_enable (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine enables or disables the graphics display logic of the video processor. - *--------------------------------------------------------------------------- - */ -int gfx_set_screen_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_screen_enable(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_format - *----------------------------------------------------------------------------- - */ -int gfx_set_video_format(unsigned long format) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_format(format); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_format(format); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_format(format); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_size - *----------------------------------------------------------------------------- - */ -int gfx_set_video_size(unsigned short width, unsigned short height) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_size(width, height); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_size(width, height); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_size(width, height); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_yuv_pitch - *----------------------------------------------------------------------------- - */ -int gfx_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_yuv_pitch (ypitch, uvpitch); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_offset - *----------------------------------------------------------------------------- - */ -int gfx_set_video_offset(unsigned long offset) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_offset(offset); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_offset(offset); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_offset(offset); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_yuv_offsets - *----------------------------------------------------------------------------- - */ -int gfx_set_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, - unsigned long voffset) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_yuv_offsets (yoffset, uoffset, voffset); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_scale - *--------------------------------------------------------------------------- - */ -int gfx_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_scale(srcw, srch, dstw, dsth); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_scale(srcw, srch, dstw, dsth); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_scale(srcw, srch, dstw, dsth); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_upscale - *--------------------------------------------------------------------------- - */ -int gfx_set_video_upscale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_upscale(srcw, srch, dstw, dsth); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_vertical_downscale - *--------------------------------------------------------------------------- - */ -int gfx_set_video_vertical_downscale(unsigned short srch, unsigned short dsth) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_vertical_downscale(srch, dsth); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_vertical_downscale_enable - *--------------------------------------------------------------------------- - */ -void gfx_set_video_vertical_downscale_enable(int enable) -{ -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_set_video_vertical_downscale_enable(enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_config - *--------------------------------------------------------------------------- - */ -int gfx_set_video_downscale_config(unsigned short type, unsigned short m) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_downscale_config(type, m); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_downscale_config(type, m); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_coefficients - *--------------------------------------------------------------------------- - */ -int gfx_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_downscale_coefficients(coef1, coef2, coef3, coef4); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_downscale_coefficients(coef1, coef2, coef3, coef4); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_video_downscale_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_downscale_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_downscale_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_window - *--------------------------------------------------------------------------- - */ -int gfx_set_video_window(short x, short y, unsigned short w, unsigned short h) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_window(x, y, w, h); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_window(x, y, w, h); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_window(x, y, w, h); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_left_crop - *--------------------------------------------------------------------------- - */ -int gfx_set_video_left_crop(unsigned short x) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_left_crop(x); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_left_crop(x); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_color_key - *--------------------------------------------------------------------------- - */ -int gfx_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_color_key(key, mask, graphics); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_color_key(key, mask, graphics); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_color_key(key, mask, graphics); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_filter - *--------------------------------------------------------------------------- - */ -int gfx_set_video_filter(int xfilter, int yfilter) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_filter(xfilter, yfilter); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_filter(xfilter, yfilter); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_filter(xfilter, yfilter); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette - *--------------------------------------------------------------------------- - */ -int gfx_set_video_palette(unsigned long *palette) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_palette(palette); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_palette(palette); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_palette(palette); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette_entry - *--------------------------------------------------------------------------- - */ -int gfx_set_video_palette_entry(unsigned long index, unsigned long palette) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_set_video_palette_entry(index, palette); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_palette_entry(index, palette); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_palette_entry(index, palette); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_request - *--------------------------------------------------------------------------- - */ -int gfx_set_video_request(short x, short y) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_request(x, y); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_request(x, y); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_source - *--------------------------------------------------------------------------- - */ -int gfx_set_video_source(VideoSourceType source) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_source(source); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_source - *--------------------------------------------------------------------------- - */ -int gfx_set_vbi_source(VbiSourceType source) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_vbi_source(source); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_lines - *--------------------------------------------------------------------------- - */ -int gfx_set_vbi_lines(unsigned long even, unsigned long odd) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_vbi_lines(even, odd); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_total - *--------------------------------------------------------------------------- - */ -int gfx_set_vbi_total(unsigned long even, unsigned long odd) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_vbi_total(even, odd); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_interlaced - *--------------------------------------------------------------------------- - */ -int gfx_set_video_interlaced(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_interlaced(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_color_space_YUV - *--------------------------------------------------------------------------- - */ -int gfx_set_color_space_YUV(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_color_space_YUV(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vertical_scaler_offset - *--------------------------------------------------------------------------- - */ -int gfx_set_vertical_scaler_offset(char offset) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_vertical_scaler_offset(offset); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_top_line_in_odd - *--------------------------------------------------------------------------- - */ -int gfx_set_top_line_in_odd(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_top_line_in_odd(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_genlock_delay - *--------------------------------------------------------------------------- - */ -int gfx_set_genlock_delay(unsigned long delay) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_genlock_delay(delay); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_genlock_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_genlock_enable(int flags) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_genlock_enable(flags); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_cursor - *--------------------------------------------------------------------------- - */ -int gfx_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_video_cursor(key, mask, select_color2, color1, color2); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_cursor(key, mask, select_color2, color1, color2); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_cursor_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_video_cursor_enable (int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; - -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_video_cursor_enable (enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_window - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_window(short x, short y, - unsigned short width, unsigned short height) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_window(x, y, width, height); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_window(x, y, width, height); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_value - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_value(unsigned char alpha, char delta) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_value(alpha, delta); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_value(alpha, delta); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_priority - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_priority(int priority) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_priority(priority); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_priority(priority); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_color(unsigned long color) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_color(color); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_color(color); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_alpha_color_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_alpha_color_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_alpha_color_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_no_ck_outside_alpha - *--------------------------------------------------------------------------- - */ -int gfx_set_no_ck_outside_alpha(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_no_ck_outside_alpha(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_set_no_ck_outside_alpha(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_set_macrovision_enable - *--------------------------------------------------------------------------- - */ -int gfx_set_macrovision_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_set_macrovision_enable(enable); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_disable_softvga - *--------------------------------------------------------------------------- - */ -int gfx_disable_softvga(void) -{ - int status = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_disable_softvga(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_disable_softvga(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_enable_softvga - *--------------------------------------------------------------------------- - */ -int gfx_enable_softvga(void) -{ - int status = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_enable_softvga(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_enable_softvga(); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_clock_frequency - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_clock_frequency(void) -{ - unsigned long frequency = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - frequency = cs5530_get_clock_frequency(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - frequency = sc1200_get_clock_frequency(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - frequency = redcloud_get_clock_frequency(); -# endif - return(frequency); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*--------------------------------------------------------------------------- - * gfx_get_vsa2_softvga_enable - *--------------------------------------------------------------------------- - */ -int gfx_get_vsa2_softvga_enable(void) -{ - int enable = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - enable = cs5530_get_vsa2_softvga_enable(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - enable = sc1200_get_vsa2_softvga_enable(); -# endif - return enable; - -} - -/*--------------------------------------------------------------------------- - * gfx_get_sync_polarities - *--------------------------------------------------------------------------- - */ -int gfx_get_sync_polarities(void) -{ - int polarities = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - polarities = cs5530_get_sync_polarities(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - polarities = sc1200_get_sync_polarities(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - polarities = redcloud_get_sync_polarities(); -# endif - return(polarities); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_palette_entry - *--------------------------------------------------------------------------- - */ -int gfx_get_video_palette_entry(unsigned long index, unsigned long *palette) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - status = cs5530_get_video_palette_entry (index, palette); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_video_palette_entry (index, palette); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_get_video_palette_entry (index, palette); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_enable - *----------------------------------------------------------------------------- - */ -int gfx_get_video_enable(void) -{ - int enable = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - enable = cs5530_get_video_enable(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - enable = sc1200_get_video_enable(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - enable = redcloud_get_video_enable(); -# endif - return(enable); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_format - *----------------------------------------------------------------------------- - */ -int gfx_get_video_format(void) -{ - int format = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - format = cs5530_get_video_format(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - format = sc1200_get_video_format(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - format = redcloud_get_video_format(); -# endif - return(format); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_src_size - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_src_size(void) -{ - unsigned long size = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - size = cs5530_get_video_src_size(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - size = sc1200_get_video_src_size(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - size = redcloud_get_video_src_size(); -# endif - return(size); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_line_size - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_line_size(void) -{ - unsigned long size = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - size = cs5530_get_video_line_size(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - size = sc1200_get_video_line_size(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - size = redcloud_get_video_line_size(); -# endif - return(size); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_xclip - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_xclip(void) -{ - unsigned long size = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - size = cs5530_get_video_xclip(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - size = sc1200_get_video_xclip(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - size = redcloud_get_video_xclip(); -# endif - return(size); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_offset - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_offset(void) -{ - unsigned long offset = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - offset = cs5530_get_video_offset(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - offset = sc1200_get_video_offset(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - offset = redcloud_get_video_offset(); -# endif - return(offset); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_yuv_offsets - *----------------------------------------------------------------------------- - */ -void gfx_get_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -{ -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_video_yuv_offsets(yoffset, uoffset, voffset); -# endif -} -/*----------------------------------------------------------------------------- - * gfx_get_video_yuv_pitch - *----------------------------------------------------------------------------- - */ -void gfx_get_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -{ -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_video_yuv_pitch (ypitch, uvpitch); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_upscale - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_upscale(void) -{ - unsigned long scale = 0; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - scale = sc1200_get_video_upscale(); -# endif - return(scale); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_scale - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_scale(void) -{ - unsigned long scale = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - scale = cs5530_get_video_scale(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - scale = sc1200_get_video_scale(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - scale = redcloud_get_video_scale(); -# endif - return(scale); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_delta - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_downscale_delta(void) -{ - unsigned long delta = 0; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - delta = redcloud_get_video_downscale_delta(); -# endif - return(delta); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_vertical_downscale_enable - *--------------------------------------------------------------------------- - */ -int gfx_get_video_vertical_downscale_enable(void) -{ - int enable = 0; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - enable = redcloud_get_video_vertical_downscale_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_config - *--------------------------------------------------------------------------- - */ -int gfx_get_video_downscale_config(unsigned short *type, unsigned short *m) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_video_downscale_config(type, m); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_get_video_downscale_config(type, m); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_coefficients - *--------------------------------------------------------------------------- - */ -void gfx_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_video_downscale_coefficients(coef1, coef2, coef3, coef4); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_video_downscale_coefficients(coef1, coef2, coef3, coef4); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_enable - *--------------------------------------------------------------------------- - */ -void gfx_get_video_downscale_enable(int *enable) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_video_downscale_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_video_downscale_enable(enable); -# endif -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_dst_size - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_dst_size(void) -{ - unsigned long size = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - size = cs5530_get_video_dst_size(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - size = sc1200_get_video_dst_size(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - size = redcloud_get_video_dst_size(); -# endif - return(size); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_position - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_position(void) -{ - unsigned long position = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - position = cs5530_get_video_position(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - position = sc1200_get_video_position(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - position = redcloud_get_video_position(); -# endif - return(position); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_color_key(void) -{ - unsigned long key = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - key = cs5530_get_video_color_key(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - key = sc1200_get_video_color_key(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - key = redcloud_get_video_color_key(); -# endif - return(key); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_mask - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_video_color_key_mask(void) -{ - unsigned long mask = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - mask = cs5530_get_video_color_key_mask(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - mask = sc1200_get_video_color_key_mask(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - mask = redcloud_get_video_color_key_mask(); -# endif - return(mask); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_src - *--------------------------------------------------------------------------- - */ -int gfx_get_video_color_key_src(void) -{ - int src = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - src = cs5530_get_video_color_key_src(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - src = sc1200_get_video_color_key_src(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - src = redcloud_get_video_color_key_src(); -# endif - return(src); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_filter - *--------------------------------------------------------------------------- - */ -int gfx_get_video_filter(void) -{ - int filter = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - filter = cs5530_get_video_filter(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - filter = sc1200_get_video_filter(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - filter = redcloud_get_video_filter(); -# endif - return(filter); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_request - *--------------------------------------------------------------------------- - */ -int gfx_get_video_request(short *x, short *y) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_video_request(x, y); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - status = redcloud_get_video_request(x, y); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_source - *--------------------------------------------------------------------------- - */ -int gfx_get_video_source(VideoSourceType *source) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_video_source(source); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_source - *--------------------------------------------------------------------------- - */ -int gfx_get_vbi_source(VbiSourceType *source) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_vbi_source(source); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_lines - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_vbi_lines(int odd) -{ - unsigned long lines = (unsigned long)GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - lines = sc1200_get_vbi_lines(odd); -# endif - return(lines); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_total - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_vbi_total(int odd) -{ - unsigned long total = (unsigned long)GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - total = sc1200_get_vbi_total(odd); -# endif - return(total); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_interlaced - *--------------------------------------------------------------------------- - */ -int gfx_get_video_interlaced(void) -{ - int interlaced = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - interlaced = sc1200_get_video_interlaced(); -# endif - return(interlaced); -} - -/*--------------------------------------------------------------------------- - * gfx_get_color_space_YUV - *--------------------------------------------------------------------------- - */ -int gfx_get_color_space_YUV(void) -{ - int color_space = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - color_space = sc1200_get_color_space_YUV(); -# endif - return(color_space); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vertical_scaler_offset - *--------------------------------------------------------------------------- - */ -int gfx_get_vertical_scaler_offset(char *offset) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - status = sc1200_get_vertical_scaler_offset(offset); -# endif - return(status); -} - -/*--------------------------------------------------------------------------- - * gfx_get_genlock_delay - *--------------------------------------------------------------------------- - */ -unsigned long gfx_get_genlock_delay(void) -{ - unsigned long delay = (unsigned long)GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - delay = sc1200_get_genlock_delay(); -# endif - return(delay); -} - -/*--------------------------------------------------------------------------- - * gfx_get_genlock_enable - *--------------------------------------------------------------------------- - */ -int gfx_get_genlock_enable(void) -{ - int enable = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - enable = sc1200_get_genlock_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_cursor - *--------------------------------------------------------------------------- - */ -int gfx_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2) -{ - int enable = GFX_STATUS_UNSUPPORTED; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - enable = sc1200_get_video_cursor(key, mask, select_color2, color1, color2); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - enable = redcloud_get_video_cursor(key, mask, select_color2, color1, color2); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc - *--------------------------------------------------------------------------- - */ -unsigned long gfx_read_crc(void) -{ - unsigned long crc = 0; -# if GFX_VIDEO_CS5530 - if (gfx_video_type == GFX_VIDEO_TYPE_CS5530) - crc = cs5530_read_crc(); -# endif -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - crc = sc1200_read_crc(); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - crc = redcloud_read_crc(); -# endif - return(crc); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc32 - *--------------------------------------------------------------------------- - */ -unsigned long gfx_read_crc32(void) -{ - unsigned long crc = 0; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - crc = redcloud_read_crc32(); -# endif - return(crc); -} - -/*--------------------------------------------------------------------------- - * gfx_read_window_crc - *--------------------------------------------------------------------------- - */ -unsigned long gfx_read_window_crc(int source, unsigned short x, unsigned short y, - unsigned short width, unsigned short height, int crc32) -{ - unsigned long crc = 0; -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - crc = redcloud_read_window_crc(source, x, y, width, height, crc32); -# endif - return(crc); -} - -/*----------------------------------------------------------------------------- - * gfx_get_macrovision_enable - *----------------------------------------------------------------------------- - */ -int gfx_get_macrovision_enable(void) -{ - int enable = 0; -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - enable = sc1200_get_video_enable(); -# endif - return(enable); -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_enable - *--------------------------------------------------------------------------- - */ -void gfx_get_alpha_enable(int *enable) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_alpha_enable(enable); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_alpha_enable(enable); -# endif - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_size - *--------------------------------------------------------------------------- - */ -void gfx_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_alpha_size(x, y, width, height); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_alpha_size(x, y, width, height); -# endif - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_value - *--------------------------------------------------------------------------- - */ -void gfx_get_alpha_value(unsigned char *alpha, char *delta) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_alpha_value(alpha, delta); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_alpha_value(alpha, delta); -# endif - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_priority - *--------------------------------------------------------------------------- - */ -void gfx_get_alpha_priority(int *priority) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_alpha_priority(priority); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_alpha_priority(priority); -# endif - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_color - *--------------------------------------------------------------------------- - */ -void gfx_get_alpha_color(unsigned long *color) -{ -# if GFX_VIDEO_SC1200 - if (gfx_video_type == GFX_VIDEO_TYPE_SC1200) - sc1200_get_alpha_color(color); -# endif -# if GFX_VIDEO_REDCLOUD - if (gfx_video_type == GFX_VIDEO_TYPE_REDCLOUD) - redcloud_get_alpha_color(color); -# endif - return; -} - -#endif /* GFX_READ_ROUTINES */ - -#endif /* GFX_VIDEO_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vip.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vip.c deleted file mode 100644 index 0c320512b..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vip.c +++ /dev/null @@ -1,577 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/gfx_vip.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: gfx_vip.c $ - * - * This file contains routines to control the video input port (VIP). - * - * gfx_set_vip_enable - * gfx_set_vip_capture_run_mode - * gfx_set_vip_base - * gfx_set_vip_pitch - * gfx_set_vip_mode - * gfx_set_vbi_enable - * gfx_set_vbi_mode - * gfx_set_vbi_base - * gfx_set_vbi_pitch - * gfx_set_vbi_direct - * gfx_set_vbi_interrupt - * gfx_set_vip_bus_request_threshold_high - * gfx_set_vip_last_line - * gfx_test_vip_odd_field - * gfx_test_vip_bases_updated - * gfx_test_vip_fifo_overflow - * gfx_get_vip_line - * gfx_get_vip_base - * gfx_get_vbi_pitch - * - * And the following routines if GFX_READ_ROUTINES is set: - * - * gfx_get_vip_enable - * gfx_get_vip_pitch - * gfx_get_vip_mode - * gfx_get_vbi_enable - * gfx_get_vbi_mode - * gfx_get_vbi_base - * gfx_get_vbi_direct - * gfx_get_vbi_interrupt - * gfx_get_vip_bus_request_threshold_high - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* INCLUDE SUPPORT FOR SC1200, IF SPECIFIED. */ - -#if GFX_VIP_SC1200 -#include "vip_1200.c" -#endif - -/* WRAPPERS IF DYNAMIC SELECTION */ -/* Extra layer to call either CS5530 or SC1200 routines. */ - -#if GFX_VIP_DYNAMIC - -/*----------------------------------------------------------------------------- - * gfx_set_vip_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_enable(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_capture_run_mode - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_capture_run_mode(int mode) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_capture_run_mode(mode); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_base - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_base(unsigned long even, unsigned long odd) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_base(even, odd); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_pitch - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_pitch(unsigned long pitch) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_pitch(pitch); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_mode - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_mode(int mode) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_mode(mode); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_enable - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_enable(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_enable(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_mode - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_mode(int mode) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_mode(mode); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_base - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_base(unsigned long even, unsigned long odd) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_base(even, odd); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_pitch - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_pitch(unsigned long pitch) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_pitch(pitch); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_direct - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_direct(unsigned long even_lines, unsigned long odd_lines) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_direct(even_lines, odd_lines); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_interrupt - *----------------------------------------------------------------------------- - */ -int gfx_set_vbi_interrupt(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vbi_interrupt(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_bus_request_threshold_high - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_bus_request_threshold_high(int enable) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_bus_request_threshold_high(enable); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_last_line - *----------------------------------------------------------------------------- - */ -int gfx_set_vip_last_line(int last_line) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_set_vip_last_line(last_line); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_odd_field - *----------------------------------------------------------------------------- - */ -int gfx_test_vip_odd_field(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_test_vip_odd_field(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_bases_updated - *----------------------------------------------------------------------------- - */ -int gfx_test_vip_bases_updated(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_test_vip_bases_updated(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_fifo_overflow - *----------------------------------------------------------------------------- - */ -int gfx_test_vip_fifo_overflow(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_test_vip_fifo_overflow(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_line - *----------------------------------------------------------------------------- - */ -int gfx_get_vip_line(void) -{ - int status = GFX_STATUS_UNSUPPORTED; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - status = sc1200_get_vip_line(); -# endif - return(status); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vip_base(int odd) -{ - unsigned long base = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - base = sc1200_get_vip_base(odd); -# endif - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_pitch - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vbi_pitch(void) -{ - unsigned long pitch = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - pitch = sc1200_get_vbi_pitch(); -# endif - return(pitch); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*----------------------------------------------------------------------------- - * gfx_get_vip_enable - *----------------------------------------------------------------------------- - */ -int gfx_get_vip_enable(void) -{ - int enable = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - enable = sc1200_get_vip_enable(); -# endif - return(enable); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_pitch - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vip_pitch(void) -{ - unsigned long pitch = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - pitch = sc1200_get_vip_pitch(); -# endif - return(pitch); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_mode - *----------------------------------------------------------------------------- - */ -int gfx_get_vip_mode(void) -{ - int mode = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - mode = sc1200_get_vip_mode(); -# endif - return(mode); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_enable - *----------------------------------------------------------------------------- - */ -int gfx_get_vbi_enable(void) -{ - int enable = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - enable = sc1200_get_vbi_enable(); -# endif - return(enable); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_mode - *----------------------------------------------------------------------------- - */ -int gfx_get_vbi_mode(void) -{ - int mode = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - mode = sc1200_get_vbi_mode(); -# endif - return(mode); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_base - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vbi_base(int odd) -{ - unsigned long base = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - base = sc1200_get_vbi_base(odd); -# endif - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_direct - *----------------------------------------------------------------------------- - */ -unsigned long gfx_get_vbi_direct(int odd) -{ - unsigned long vbi_direct_lines = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - vbi_direct_lines = sc1200_get_vbi_direct(odd); -# endif - return(vbi_direct_lines); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_interrupt - *----------------------------------------------------------------------------- - */ -int gfx_get_vbi_interrupt(void) -{ - int enable = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - enable = sc1200_get_vbi_interrupt(); -# endif - return(enable); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_bus_request_threshold_high - *----------------------------------------------------------------------------- - */ -int gfx_get_vip_bus_request_threshold_high(void) -{ - int enable = 0; -# if GFX_VIP_SC1200 - if (gfx_vip_type == GFX_VIP_TYPE_SC1200) - enable = sc1200_get_vip_bus_request_threshold_high(); -# endif - return(enable); -} - -#endif /* GFX_READ_ROUTINES */ - -#endif /* GFX_VIP_DYNAMIC */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/history.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/history.h deleted file mode 100644 index 63d0ddc27..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/history.h +++ /dev/null @@ -1,145 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/history.h,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: history.h $ - * - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* Version is in the format of MMmmpp - * where in MM is the Major version, mm is the minor version - * and pp is the patch number (0 - 99) -*/ - -#define DURANGO_VERSION 24500 - -#if 0 - -This file contains specific revision info SINCE THE LAST RELEASE. It is not meant to -be a comprehensive record of all additions. - -#endif -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_acc.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_acc.c deleted file mode 100644 index 440f2ed85..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_acc.c +++ /dev/null @@ -1,954 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_acc.c,v 1.1 2002/10/11 14:33:00 alanh Exp $ */ -/* - * $Workfile: i2c_acc.c $ - * - * This file contains routines to write to and read from the I2C bus using - * the ACCESS.bus hardware in the SC1200. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* SUPER IO DEFINITIONS */ - -#define INDEX_1 0x15C /* base address 1 selected */ -#define DATA_1 0x15D -#define INDEX_2 0x2E /* base address 2 selected */ -#define DATA_2 0x2F -#define PCI_INDEX 0xCF8 /* PCI configuration space INDEX */ -#define PCI_DATA 0xCFC /* PCI configuration space DATA */ -#define BASE_ADR_MSB_REG 0x60 /* base address MSB register */ -#define BASE_ADR_LSB_REG 0x61 /* base address LSB register */ - -#define SIO_BASE_ADR_15C_15D 0x6000000 -#define SIO_BASE_ADR_2E_2F 0x4000000 - -/* SUPER IO GLOBALS */ - -unsigned short index_reg, data_reg; - -/* ACCESS BUS DEFINITIONS */ - -#define ACC_I2C_TIMEOUT 1000000 /* Number of reads before timing out */ -#define ACB1_BASE 0x810 /* ACCESS.bus base addresses */ -#define ACB2_BASE 0x820 -#define ACBSDA 0 /* ACB serial data */ -#define ACBST 1 /* ACB status */ -#define ACBCST 2 /* ACB control status */ -#define ACBCTL1 3 /* ACB control 1 */ -#define ACBADDR 4 /* ACB own address */ -#define ACBCTL2 5 /* ACB control 2 */ -#define LDN 0x7 /* Logical Device Numbers */ -#define ACB1_LDN 0x5 -#define ACB2_LDN 0x6 - -/* INITIAL ACCESS.bus BASE ADDRESS VALUES */ - -unsigned short base_address_array[3] = {0, ACB1_BASE, ACB2_BASE}; -char Freq = 0x71; - -/* LOCAL ACCESS.bus FUNCTION DECLARATIONS */ - -void acc_i2c_start(unsigned char busnum); -void acc_i2c_stop(unsigned char busnum); -void acc_i2c_abort_data(unsigned char busnum); -void acc_i2c_bus_recovery(unsigned char busnum); -void acc_i2c_stall_after_start(unsigned char busnum, int state); -void acc_i2c_send_address(unsigned char busnum, unsigned char cData); -int acc_i2c_ack(unsigned char busnum, int fPut, int negAck); -void acc_i2c_stop_clock(unsigned char busnum); -void acc_i2c_activate_clock(unsigned char busnum); -void acc_i2c_write_byte(unsigned char busnum, unsigned char cData); -unsigned char acc_i2c_read_byte(unsigned char busnum, int last_byte); -void acc_i2c_reset_bus(unsigned char busnum); -int acc_i2c_request_master(unsigned char busnum); -void acc_i2c_config(unsigned char busnum, short adr, char freq); -char acc_i2c_set_freq(unsigned char busnum, char freq); -unsigned short acc_i2c_set_base_address(unsigned char busnum, short adr); - -/* LOCAL HELPER ROUTINES */ - -void OsPciReadDWord(int bus, int dev, int func, int address, unsigned long * data); -int sio_set_index_data_reg(void); -void sio_write_reg(unsigned char reg, unsigned char data); -unsigned char sio_read_reg(unsigned char reg); - -/*--------------------------------------------------------------------------- - * OsPciReadDWord - * - * This routine reads one double word from the PCI configuration header - * defined by 'bus', 'dev', 'func' and 'address' to the double word - * pointed to by 'data'. - * - * Returns : None. - *--------------------------------------------------------------------------- - */ -void OsPciReadDWord (int bus, int dev, int func, int address, unsigned long * data) -{ - /* - * The address of a double word in the Configuration Header is built in - * the following way : - * {10000000,bus[23:16],device[15:11],function[10:8],address[7:2],00} - */ - long addr = (0x80000000 | - ((bus & 0xff) << 16) | - ((dev & 0x1f) << 11) | - ((func & 0x7) << 8) | - (address & 0xff)); - OUTD(PCI_INDEX, addr); - *data = IND(PCI_DATA); -} - -/*--------------------------------------------------------------------------- - * sio_set_index_data_reg - * - * This routine checks which index and data registers to use - * in order to access the Super I/O registers - * - * Returns : 1 - OK - * 0 - Super I/O disabled or configuration access disabled - * - *--------------------------------------------------------------------------- - */ -int sio_set_index_data_reg(void) -{ - unsigned long xbus_expention_bar, io_control_reg1; - - OsPciReadDWord (0, 0x12, 5, 0x10, &xbus_expention_bar); - xbus_expention_bar = xbus_expention_bar & 0xfffffffe; - io_control_reg1 = IND((unsigned short)xbus_expention_bar); - - if ((io_control_reg1) & (SIO_BASE_ADR_15C_15D)) - { - index_reg = INDEX_1; - data_reg = DATA_1; - return(1); - } - - if ((io_control_reg1) & (SIO_BASE_ADR_2E_2F)) - { - index_reg = INDEX_2; - data_reg = DATA_2; - return(1); - } - - return(0); -} - -/*--------------------------------------------------------------------------- - * sio_write_reg - * - * This routine writes 'data' to 'reg' Super I/O register - * - * Returns : None - *--------------------------------------------------------------------------- - */ -void sio_write_reg(unsigned char reg, unsigned char data) -{ - OUTB(index_reg, reg); - OUTB(data_reg, data); -} - -/*--------------------------------------------------------------------------- - * sio_read_reg - * - * This routine reads data from 'reg' Super I/O register - * - * Returns : The data read from the requested register - *--------------------------------------------------------------------------- - */ -unsigned char sio_read_reg(unsigned char reg) -{ - OUTB(index_reg, reg); - return INB(data_reg); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_reset - * - * This routine resets the I2C bus as follows : - * · Sets the base address of the ACCESS.bus - * · Sets the frequency of the ACCESS.bus - * · Resets the ACCESS.bus - * - * If 'adr' is -1 the address is read from the hardware. - * If 'freq' is -1 the frequency is set to 56 clock cycles. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int acc_i2c_reset(unsigned char busnum, short adr, char freq) -#else -int gfx_i2c_reset(unsigned char busnum, short adr, char freq) -#endif -{ - if ((busnum != 1) && (busnum != 2)) - return GFX_STATUS_BAD_PARAMETER; - acc_i2c_config(busnum, adr, freq); - if (base_address_array[busnum] == 0) - return GFX_STATUS_ERROR; - acc_i2c_reset_bus(busnum); - return GFX_STATUS_OK; -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_select_gpio - * - * This routine selects which GPIO pins to use. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int acc_i2c_select_gpio(int clock, int data) -#else -int gfx_i2c_select_gpio(int clock, int data) -#endif -{ - /* THIS ROUTINE DOES NOT APPLY TO THE ACCESS.bus IMPLEMENTATION. */ - - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_write - * - * This routine writes data to the specified I2C address. - * busnum - ACCESS.bus number (1 or 2). - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int acc_i2c_write(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -#else -int gfx_i2c_write(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -#endif -{ - int loop = 0; - - if ((busnum != 1) && (busnum != 2)) - return GFX_STATUS_BAD_PARAMETER; - - /* REQUEST MASTER */ - - if (!acc_i2c_request_master(busnum)) return(GFX_STATUS_ERROR); - - /* WRITE ADDRESS COMMAND */ - - acc_i2c_ack(busnum, 1, 0); - acc_i2c_stall_after_start(busnum, 1); - acc_i2c_send_address(busnum, (unsigned char)(chipadr & 0xFE)); - acc_i2c_stall_after_start(busnum, 0); - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - - /* WRITE COMMAND */ - - acc_i2c_write_byte(busnum, subadr); - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - - /* WRITE DATA */ - - for(loop = 0; loop < bytes; loop++) - { - acc_i2c_write_byte(busnum, *data); - if (loop < (bytes - 1)) - data += sizeof(unsigned char); - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - } - data -= (bytes - 1); - acc_i2c_stop(busnum); - - return GFX_STATUS_OK; -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_read - * - * This routine reads data from the specified I2C address. - * busnum - ACCESS.bus number (1 or 2). - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int acc_i2c_read(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -#else -int gfx_i2c_read(unsigned char busnum, unsigned char chipadr, unsigned char subadr, - unsigned char bytes, unsigned char * data) -#endif -{ - unsigned char bytesRead; - - if ((busnum != 1) && (busnum != 2)) - return GFX_STATUS_BAD_PARAMETER; - - if (bytes == 0) - return GFX_STATUS_OK; - - /* REQUEST MASTER */ - - if (!acc_i2c_request_master(busnum)) return(GFX_STATUS_ERROR); - - /* WRITE ADDRESS COMMAND */ - - acc_i2c_ack(busnum, 1, 0); - acc_i2c_stall_after_start(busnum, 1); - acc_i2c_send_address(busnum, (unsigned char)(chipadr & 0xFE)); - acc_i2c_stall_after_start(busnum, 0); - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - - /* WRITE COMMAND */ - - acc_i2c_write_byte(busnum, subadr); - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - - /* START THE READ */ - - acc_i2c_start(busnum); - - /* WRITE ADDRESS COMMAND */ - - acc_i2c_ack(busnum, 1, 1); - acc_i2c_stall_after_start(busnum, 1); - acc_i2c_send_address(busnum, (unsigned char)(chipadr | 0x01)); - - /* IF LAST BYTE */ - - if (bytes == 1) - acc_i2c_ack(busnum, 1, 1); - else - acc_i2c_ack(busnum, 1, 0); - - acc_i2c_stall_after_start(busnum, 0); - - if (!acc_i2c_ack(busnum, 0, 0)) return(GFX_STATUS_ERROR); - - /* READ COMMAND */ - - for(bytesRead = 0; bytesRead < bytes; bytesRead += 1) - { - if (bytesRead < (bytes - 2)) - { - data[bytesRead] = acc_i2c_read_byte(busnum, 0); - acc_i2c_ack(busnum, 1, 0); - } - else if (bytesRead == (bytes - 2)) /* TWO BYTES LEFT */ - { - acc_i2c_ack(busnum, 1, 1); - data[bytesRead] = acc_i2c_read_byte(busnum, 0); - acc_i2c_ack(busnum, 1, 1); - } - else /* LAST BYTE */ - { - data[bytesRead] = acc_i2c_read_byte(busnum, 1); - acc_i2c_stop(busnum); - } - - /* WHILE NOT LAST BYTE */ - - if ((!(bytesRead == (bytes - 1))) && (!acc_i2c_ack(busnum, 0, 0))) - return(bytesRead); - } - - return GFX_STATUS_OK; -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_init - * - * This routine initializes the use of the ACCESS.BUS. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int acc_i2c_init(void) -#else -int gfx_i2c_init(void) -#endif -{ - /* ### ADD ### THIS ROUTINE IS NOT YET IMPLEMENTED FOR ACCESS.bus */ - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_cleanup - * - * This routine ends the use of the ACCESS.BUS. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -void acc_i2c_cleanup(void) -#else -void gfx_i2c_cleanup(void) -#endif -{ - /* ### ADD ### THIS ROUTINE IS NOT YET IMPLEMENTED FOR ACCESS.bus */ -} - -/*--------------------------------------------------------*/ -/* LOCAL ROUTINES SPECIFIC TO ACCESS.bus IMPLEMENTATION */ -/*--------------------------------------------------------*/ - -/*--------------------------------------------------------------------------- - * acc_i2c_reset_bus - * - * This routine resets the I2C bus. - *--------------------------------------------------------------------------- - */ -void acc_i2c_reset_bus(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - - /* Disable the ACCESS.bus device and */ - /* Configure the SCL frequency */ - OUTB((unsigned short)(bus_base_address + ACBCTL2), (unsigned char)(Freq & 0xFE)); - - /* Configure no interrupt mode (polling) and */ - /* Disable global call address */ - OUTB((unsigned short)(bus_base_address + ACBCTL1), 0x0); - - /* Disable slave address */ - OUTB((unsigned short)(bus_base_address + ACBADDR), 0x0); - - /* Enable the ACCESS.bus device */ - reg = INB((unsigned short)(bus_base_address + ACBCTL2)); - reg |= 0x01; - OUTB((unsigned short)(bus_base_address + ACBCTL2), reg); - - /* Issue STOP event */ - - acc_i2c_stop(busnum); - - /* Clear NEGACK, STASTR and BER bits */ - OUTB((unsigned short)(bus_base_address + ACBST), 0x38); - - /* Clear BB (BUS BUSY) bit */ - reg = INB((unsigned short)(bus_base_address + ACBCST)); - reg |= 0x02; - OUTB((unsigned short)(bus_base_address + ACBCST), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_start - * - * This routine starts a transfer on the I2C bus. - *--------------------------------------------------------------------------- - */ -void acc_i2c_start(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - reg |= 0x01; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_stop - * - * This routine stops a transfer on the I2C bus. - *--------------------------------------------------------------------------- - */ -void acc_i2c_stop(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - reg |= 0x02; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_abort_data - *--------------------------------------------------------------------------- - */ -void acc_i2c_abort_data(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - acc_i2c_stop(busnum); - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - reg |= 0x10; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_bus_recovery - *--------------------------------------------------------------------------- - */ -void acc_i2c_bus_recovery(unsigned char busnum) -{ - acc_i2c_abort_data(busnum); - acc_i2c_reset_bus(busnum); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_stall_after_start - *--------------------------------------------------------------------------- - */ -void acc_i2c_stall_after_start(unsigned char busnum, int state) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - if (state) reg |= 0x80; - else reg &= 0x7F; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); - - if (!state) - { - reg = INB((unsigned short)(bus_base_address + ACBST)); - reg |= 0x08; - OUTB((unsigned short)(bus_base_address + ACBST), reg); - } -} - -/*--------------------------------------------------------------------------- - * acc_i2c_send_address - *--------------------------------------------------------------------------- - */ -void acc_i2c_send_address(unsigned char busnum, unsigned char cData) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - unsigned long timeout = 0; - - /* WRITE THE DATA */ - - OUTB((unsigned short)(bus_base_address + ACBSDA), cData); - while (1) { - reg = INB((unsigned short)(bus_base_address + ACBST)); - if ((reg & 0x38) != 0) /* check STASTR, BER and NEGACK */ - break; - if (timeout++ == ACC_I2C_TIMEOUT) - { - acc_i2c_bus_recovery(busnum); - return; - } - } - - /* CHECK FOR BUS ERROR */ - - if (reg & 0x20) - { - acc_i2c_bus_recovery(busnum); - return; - } - - /* CHECK NEGATIVE ACKNOWLEDGE */ - - if (reg & 0x10) - { - acc_i2c_abort_data(busnum); - return; - } - -} - -/*--------------------------------------------------------------------------- - * acc_i2c_ack - * - * This routine looks for acknowledge on the I2C bus. - *--------------------------------------------------------------------------- - */ -int acc_i2c_ack(unsigned char busnum, int fPut, int negAck) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - unsigned long timeout = 0; - - if (fPut) { /* read operation */ - if (!negAck) { - /* Push Ack onto I2C bus */ - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - reg &= 0xE7; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); - } - else { - /* Push negAck onto I2C bus */ - reg = INB((unsigned short)(bus_base_address + ACBCTL1)); - reg |= 0x10; - OUTB((unsigned short)(bus_base_address + ACBCTL1), reg); - } - } else { /* write operation */ - /* Receive Ack from I2C bus */ - while (1) { - reg = INB((unsigned short)(bus_base_address + ACBST)); - if ((reg & 0x70) != 0) /* check SDAST, BER and NEGACK */ - break; - if (timeout++ == ACC_I2C_TIMEOUT) - { - acc_i2c_bus_recovery(busnum); - return(0); - } - } - - /* CHECK FOR BUS ERROR */ - - if (reg & 0x20) - { - acc_i2c_bus_recovery(busnum); - return(0); - } - - /* CHECK NEGATIVE ACKNOWLEDGE */ - - if (reg & 0x10) - { - acc_i2c_abort_data(busnum); - return(0); - } - } - return (1); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_stop_clock - * - * This routine stops the ACCESS.bus clock. - *--------------------------------------------------------------------------- - */ -void acc_i2c_stop_clock(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - reg = INB((unsigned short)(bus_base_address + ACBCTL2)); - reg &= ~0x01; - OUTB((unsigned short)(bus_base_address + ACBCTL2), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_activate_clock - * - * This routine activates the ACCESS.bus clock. - *--------------------------------------------------------------------------- - */ -void acc_i2c_activate_clock(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - reg = INB((unsigned short)(bus_base_address + ACBCTL2)); - reg |= 0x01; - OUTB((unsigned short)(bus_base_address + ACBCTL2), reg); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_write_byte - * - * This routine writes a byte to the I2C bus - *--------------------------------------------------------------------------- - */ -void acc_i2c_write_byte(unsigned char busnum, unsigned char cData) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - unsigned long timeout = 0; - - while (1) { - reg = INB((unsigned short)(bus_base_address + ACBST)); - if (reg & 0x70) break; - if (timeout++ == ACC_I2C_TIMEOUT) - { - acc_i2c_bus_recovery(busnum); - return; - } - } - - /* CHECK FOR BUS ERROR */ - - if (reg & 0x20) - { - acc_i2c_bus_recovery(busnum); - return; - } - - /* CHECK NEGATIVE ACKNOWLEDGE */ - - if (reg & 0x10) - { - acc_i2c_abort_data(busnum); - return; - } - - /* WRITE THE DATA */ - - OUTB((unsigned short)(bus_base_address + ACBSDA), cData); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_read_byte - * - * This routine reads a byte from the I2C bus - *--------------------------------------------------------------------------- - */ -unsigned char acc_i2c_read_byte(unsigned char busnum, int last_byte) -{ - unsigned char cData, reg; - unsigned short bus_base_address = base_address_array[busnum]; - unsigned long timeout = 0; - - while (1) { - reg = INB((unsigned short)(bus_base_address + ACBST)); - if (reg & 0x60) break; - if (timeout++ == ACC_I2C_TIMEOUT) - { - acc_i2c_bus_recovery(busnum); - return(0xEF); - } - } - - /* CHECK FOR BUS ERROR */ - - if (reg & 0x20) - { - acc_i2c_bus_recovery(busnum); - return(0xEE); - } - - /* READ DATA */ - if (last_byte) - acc_i2c_stop_clock(busnum); - cData = INB((unsigned short)(bus_base_address + ACBSDA)); - if (last_byte) - acc_i2c_activate_clock(busnum); - - return (cData); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_request_master - *--------------------------------------------------------------------------- - */ -int acc_i2c_request_master(unsigned char busnum) -{ - unsigned char reg; - unsigned short bus_base_address = base_address_array[busnum]; - unsigned long timeout = 0; - - acc_i2c_start(busnum); - while (1) { - reg = INB((unsigned short)(bus_base_address + ACBST)); - if (reg & 0x60) break; - if (timeout++ == ACC_I2C_TIMEOUT) - { - acc_i2c_bus_recovery(busnum); - return(0); - } - } - - /* CHECK FOR BUS ERROR */ - - if (reg & 0x20) - { - acc_i2c_abort_data(busnum); - return(0); - } - - /* CHECK NEGATIVE ACKNOWLEDGE */ - - if (reg & 0x10) - { - acc_i2c_abort_data(busnum); - return(0); - } - return(1); -} - -/*--------------------------------------------------------*/ -/* LOCAL ROUTINES SPECIFIC TO ACCESS.bus INITIALIZATION */ -/*--------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - * acc_i2c_config - * - * This routine configures the I2C bus - *---------------------------------------------------------------------------- - */ -void acc_i2c_config(unsigned char busnum, short adr, char freq) -{ - base_address_array[busnum] = acc_i2c_set_base_address(busnum, adr); - Freq = acc_i2c_set_freq(busnum, freq); -} - -/*---------------------------------------------------------------------------- - * acc_i2c_set_freq - * - * This routine sets the frequency of the I2C bus - *---------------------------------------------------------------------------- - */ -char acc_i2c_set_freq(unsigned char busnum, char freq) -{ - unsigned short bus_base_address = base_address_array[busnum]; - - OUTB((unsigned short)(bus_base_address + ACBCTL2), 0x0); - - if (freq == -1) - freq = 0x71; - else - { - freq = freq << 1; - freq |= 0x01; - } - - OUTB((unsigned short)(bus_base_address + ACBCTL2), freq); - return (freq); -} - -/*--------------------------------------------------------------------------- - * acc_i2c_set_base_address - * - * This routine sets the base address of the I2C bus - *--------------------------------------------------------------------------- - */ -unsigned short acc_i2c_set_base_address(unsigned char busnum, short adr) -{ - unsigned short ab_base_addr; - - /* Get Super I/O Index and Data registers */ - if (!sio_set_index_data_reg()) - return (0); - - /* Configure LDN to current ACB */ - if (busnum == 1) - sio_write_reg(LDN, ACB1_LDN); - if (busnum == 2) - sio_write_reg(LDN, ACB2_LDN); - - if (adr == -1) { - /* Get ACCESS.bus base address */ - ab_base_addr = sio_read_reg(BASE_ADR_MSB_REG); - ab_base_addr = ab_base_addr << 8; - ab_base_addr |= sio_read_reg(BASE_ADR_LSB_REG); - if (ab_base_addr != 0) - return ab_base_addr; - else - adr = (busnum == 1 ? ACB1_BASE : ACB2_BASE); - } - - /* Set ACCESS.bus base address */ - sio_write_reg(BASE_ADR_LSB_REG, (unsigned char)(adr & 0xFF)); - sio_write_reg(BASE_ADR_MSB_REG, (unsigned char)(adr >> 8)); - - return adr; -} - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_gpio.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_gpio.c deleted file mode 100644 index b2f49c80e..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_gpio.c +++ /dev/null @@ -1,745 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/i2c_gpio.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: i2c_gpio.c $ - * - * This file contains routines to write to and read from the I2C bus using - * the GPIO pins of the CS5530. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* STATIC VARIABLES TO STORE WHAT GPIO PINS TO USE */ - -int gpio_clock = 0; -int gpio_data = 0; - -static int g_initialized = 0; - -#define I2CWRITE 0x00 /* Write address */ -#define I2CREAD 0x01 /* Read address */ - -#define I2CACK 0x00 /* Ack value */ -#define I2CNACK 0x01 /* Not - ack value */ - -#define CS5530_ID (0x80000000 | (0x00<<16) | (0x12<<11) | (0<<8) | 0x00) -#define CS5530_GPIO (0x80000000 | (0x00<<16) | (0x12<<11) | (0<<8) | 0x90) -#define SDA 0x0800 -#define SCL 0x0400 -#define SDADIR 0x0008 -#define SCLDIR 0x0004 - -int I2C_init(void); -void I2C_cleanup(void); - -int I2C_Read(unsigned char address, unsigned int reg, unsigned long *p_value, unsigned int bytes); -int I2C_Write(unsigned char address, unsigned int reg, unsigned long value, unsigned int bytes); -int I2CAL_init(void); -void I2CAL_cleanup(void); - -void I2CAL_output_clock(int state); -void I2CAL_output_data(int state); -unsigned char I2CAL_input_data(void); - -void I2CAL_set_data_for_input(void); -void I2CAL_set_data_for_output(void); - -void SendI2CStart(void); -void SendI2CData(unsigned char inData); - -unsigned char ReceiveI2CAck(void); -void SendI2CStop(void); -void SendI2CNack(void); -void SendI2CAck (void); -unsigned char ReceiveI2CData(void); - - -/* ### ADD ### ANY LOCAL ROUTINE DEFINITIONS SPECIFIC TO GPIO */ - -/*--------------------------------------------------------------------------- - * gfx_i2c_reset - * - * This routine resets the I2C bus. - *--------------------------------------------------------------------------- - */ - -#if GFX_I2C_DYNAMIC -int gpio_i2c_reset(unsigned char busnum, short adr, char freq) -#else -int gfx_i2c_reset(unsigned char busnum, short adr, char freq) -#endif -{ - /* ### ADD ### Any code needed to reset the state of the GPIOs. */ - return GFX_STATUS_OK; -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_select_gpio - * - * This routine selects which GPIO pins to use. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int gpio_i2c_select_gpio(int clock, int data) -#else -int gfx_i2c_select_gpio(int clock, int data) -#endif -{ - gpio_clock = clock; - gpio_data = data; - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_write - * - * This routine writes data to the specified I2C address. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int gpio_i2c_write(unsigned char busnum, unsigned char address, unsigned char reg, - unsigned char bytes, unsigned char * value) -#else -int gfx_i2c_write(unsigned char busnum, unsigned char address, unsigned char reg, - unsigned char bytes, unsigned char * value) -#endif -{ - /* ### ADD ### CODE TO WRITE BYTE TO I2B BUS */ - - int restart_count = 0; - - - while (restart_count++ < 5) - { - /* set the access pointer register. */ - /* The address is shifted left by one to make room for Read/Write bit */ - SendI2CStart(); - SendI2CData((char)((address << 1) | I2CWRITE)); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - SendI2CData((unsigned char)reg); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - - /* write the first byte */ - SendI2CData(*value); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - - - /* write the second byte. */ - if (bytes == 2) - { - SendI2CData(*(value+1)); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - } - - - /* done. */ - SendI2CStop(); - - return 0; - } - - return(0); - -} - -/*--------------------------------------------------------------------------- - * gfx_i2c_read - * - * This routine reads data from the specified I2C address. - *--------------------------------------------------------------------------- - */ -#if GFX_I2C_DYNAMIC -int gpio_i2c_read(unsigned char busnum, unsigned char address, unsigned char reg, - unsigned char bytes, unsigned char *p_value) -#else -int gfx_i2c_read(unsigned char busnum, unsigned char address, unsigned char reg, - unsigned char bytes, unsigned char *p_value) -#endif -{ - /* ### ADD ### CODE TO WRITE BYTE TO I2B BUS */ - /* For now return clock and data pins */ - - int restart_count = 0; - - - if (!p_value) - return(1); - - while (restart_count++ < 5) - { - /* set the access pointer register. */ - /* The address is shifted left by one to make room for Read/Write bit */ - SendI2CStart(); - SendI2CData((char)((address << 1) | I2CWRITE)); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - SendI2CData((unsigned char)(reg & 0xFF)); - SendI2CNack(); - - /* read the first data byte. */ - SendI2CStart(); - SendI2CData((char)((address << 1) | I2CREAD)); - if (!ReceiveI2CAck()) - { - SendI2CStop(); - gfx_delay_milliseconds(10); - continue; - } - *p_value = ReceiveI2CData(); - - - /* read the second byte. */ - if (bytes == 2) - { - SendI2CAck(); - *(p_value+1) = ReceiveI2CData(); - } - - - /* done. */ - SendI2CNack(); - SendI2CStop(); - - - return 0; - } - - return(1); -} - -/* Added i2c/gpio code to test fs451 chip. */ - -/* -//---------------------------------------------------------------------- -// -// void SendI2CStart(void) -// -// Sends an I2C start signal on the bus. -// -//---------------------------------------------------------------------- -*/ -void SendI2CStart(void) -{ - I2CAL_output_data(1); - I2CAL_output_clock(1); - I2CAL_output_data(0); - I2CAL_output_clock(0); -} - -/* -//---------------------------------------------------------------------- -// -// void SendI2CStop(void) -// -// Sends an I2C stop signal on the bus. -// -//---------------------------------------------------------------------- -*/ -void SendI2CStop(void) -{ - I2CAL_output_data(0); - I2CAL_output_clock(1); - I2CAL_output_data(1); -} - -/* -//---------------------------------------------------------------------- -// -// void SendI2CAck(void) -// -// Sends the Ack signal on the I2C bus. -// -//---------------------------------------------------------------------- -*/ -void SendI2CAck(void) -{ - I2CAL_output_data(0); - I2CAL_output_clock(1); - I2CAL_output_clock(0); -} - -/* -//---------------------------------------------------------------------- -// -// void SendI2CNack(void) -// -// Sends the Nt-Ack signal on the I2C bus. -// -//---------------------------------------------------------------------- -*/ -void SendI2CNack(void) -{ - I2CAL_output_data(1); - I2CAL_output_clock(1); - I2CAL_output_clock(0); -} - -/* -//---------------------------------------------------------------------- -// -// UInt8 SendI2CData( UInt8 inData ) -// -// Sends a byte of data on the I2C bus and returns the TRUE if the slave ACK'd -// the data. -// -// Input: inData - the byte of data to send -// Output: (return) - TRUE (1) if ACK was received, FALSE (0) if not -// -//---------------------------------------------------------------------- -*/ -void SendI2CData(unsigned char inData) -{ - unsigned char bit; - - /* Send all 8 bits of data byte, MSB to LSB */ - for (bit = 0x80; bit != 0; bit >>= 1) - { - if (inData & bit) - I2CAL_output_data(1); - else - I2CAL_output_data(0); - - I2CAL_output_clock(1); - I2CAL_output_clock(0); - } -} - -/* -//---------------------------------------------------------------------- -// -// UInt8 ReceiveI2CAck( ) -// -// Receives the Ack (or Nack) from the slave. -// -// Output: (return) - TRUE (1) if ACK was received, FALSE (0) if not -// -//---------------------------------------------------------------------- -*/ -unsigned char ReceiveI2CAck(void) -{ - unsigned char bit; - - /* Test for Ack/Nack */ - I2CAL_set_data_for_input(); - I2CAL_output_data(1); - I2CAL_output_clock(1); - bit = I2CAL_input_data(); - I2CAL_output_clock(0); - I2CAL_set_data_for_output(); - return !bit; -} - -/* -//---------------------------------------------------------------------- -// -// unsigned char ReceiveI2CData(void) -// -// Receives a byte of data from the I2C bus. -// -// Output: (return) - The data byte recehved from the bus -// -//---------------------------------------------------------------------- -*/ -unsigned char ReceiveI2CData(void) -{ - unsigned char data = 0; - unsigned char x; - - /* make sure the data line is released */ - I2CAL_set_data_for_input(); - I2CAL_output_data(1); - - /* shift in the data */ - for (x=0; x<8; x++) - { - /* shift the data left */ - I2CAL_output_clock(1); - data <<= 1; - data |= I2CAL_input_data(); - I2CAL_output_clock(0); - } - - I2CAL_set_data_for_output(); - I2CAL_output_data(1); - return data; -} - - -/* -//---------------------------------------------------------------------- -// -// void I2C_init(void) -// -// This routine initializes the I2C interface. Clients of the I2C.c -// will call this routine before calling any other routine in the I2C.c -// -//---------------------------------------------------------------------- -*/ - -#if GFX_I2C_DYNAMIC -int gpio_i2c_init(void) -#else -int gfx_i2c_init(void) -#endif -{ - int errc; - - /* init I2CAL */ - errc = I2CAL_init(); - if (errc) - return errc; - - /* set the clock and data lines to the proper states */ - I2CAL_output_clock(1); - I2CAL_output_data(1); - I2CAL_set_data_for_output(); - - SendI2CStart(); - SendI2CStop(); - SendI2CStop(); - - g_initialized = 1; - - return 0; -} - -/* -//---------------------------------------------------------------------- -// -// void I2C_cleanup(void) -// -// This routine disables the I2C interface. Clients of the I2C.c will not -// call any other I2C routine after calling this routine. -// -//---------------------------------------------------------------------- -*/ - -#if GFX_I2C_DYNAMIC -void gpio_i2c_cleanup(void) -#else -void gfx_i2c_cleanup(void) -#endif - -{ - if (g_initialized) - { - - /* set the clock and data lines to a harmless state */ - I2CAL_output_clock(1); - I2CAL_output_data(1); - - g_initialized = 0; - } - - I2CAL_cleanup(); -} - - - -int I2CAL_init(void) -{ - unsigned long l_reg; - unsigned short reg; - - /* initialize the i2c port. */ - l_reg = gfx_pci_config_read(CS5530_GPIO); - - if (l_reg != 0x01001078) - return 1; - - l_reg = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short) l_reg; - - /* both outputs, both high. */ - reg |= (SDADIR | SCLDIR | SDA | SCL); - l_reg = reg; - gfx_pci_config_write(CS5530_GPIO, l_reg); - - g_initialized = 1; - - return 0; -} - -void I2CAL_cleanup(void) -{ - if (g_initialized) - { - - g_initialized = 0; - } -} - - -/* -//-------------------------------------------------------------------------------- -// -// set the I2C clock line state -// -//-------------------------------------------------------------------------------- -*/ -void I2CAL_output_clock(int inState) -{ - unsigned short reg; - unsigned long value; - - value = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short)value; - - if (inState) - { /* write a 1. */ - reg |= SCL; - } - else - { /* write a 0. */ - reg &= ~SCL; - } - - value = reg; - gfx_pci_config_write(CS5530_GPIO, value); - - /* hold it for a minimum of 4.7us */ - gfx_delay_microseconds(5); -} - -/* -//-------------------------------------------------------------------------------- -// -// set the I2C data line state -// -//-------------------------------------------------------------------------------- -*/ -void I2CAL_output_data(int inState) -{ - unsigned short reg; - unsigned long value; - - value = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short)value; - - if (inState) - { /* write a 1. */ - reg |= SDA; - } - else - { - /* write a 0. */ - reg &= ~SDA; - } - value = reg; - gfx_pci_config_write(CS5530_GPIO, value); - - /* 250 ns setup time */ - gfx_delay_microseconds(1); -} - -/* -//-------------------------------------------------------------------------------- -// -// read the state of the data line -// -//-------------------------------------------------------------------------------- -*/ -unsigned char I2CAL_input_data(void) -{ - unsigned short reg; - unsigned long value; - - value = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short)value; - - if (reg & SDA) - return 1; - else - return 0; -} - -/* -//-------------------------------------------------------------------------------- -// -// set the I2C data for input mode -// -//-------------------------------------------------------------------------------- -*/ -void I2CAL_set_data_for_input(void) -{ - unsigned short reg; - unsigned long value; - - value = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short)value; - - reg &= ~SDADIR; - - value = reg; - - gfx_pci_config_write(CS5530_GPIO, value); -} - -/* -//-------------------------------------------------------------------------------- -// -// set the I2C data for output mode -// -//-------------------------------------------------------------------------------- -*/ -void I2CAL_set_data_for_output(void) -{ - unsigned short reg; - unsigned long value; - - value = gfx_pci_config_read(CS5530_GPIO); - reg = (unsigned short)value; - reg |= SDADIR; - value = reg; - - gfx_pci_config_write(CS5530_GPIO, value); - -} - - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu1.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu1.c deleted file mode 100644 index 6882122d5..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu1.c +++ /dev/null @@ -1,327 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu1.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: init_gu1.c $ - * - * This file contains routines used in the initialization of Geode-family - * processors. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*----------------------------------------------------------------------------- - * gfx_gxm_config_read - * - * This routine reads the value of the specified GXm configuration register. - *----------------------------------------------------------------------------- - */ -unsigned char gfx_gxm_config_read(unsigned char index) -{ - unsigned char value = 0xFF; - unsigned char lock; - - OUTB(0x22, GXM_CONFIG_CCR3); - lock = INB(0x23); - OUTB(0x22, GXM_CONFIG_CCR3); - OUTB(0x23, (unsigned char) (lock | 0x10)); - OUTB(0x22, index); - value = INB(0x23); - OUTB(0x22, GXM_CONFIG_CCR3); - OUTB(0x23, lock); - return(value); -} - -/*----------------------------------------------------------------------------- - * gfx_get_core_freq - * - * This routine returns the core clock frequency of a GXm if valid jumper settings are - * detected; 0 if not. It assumes that a 33.3 MHz PCI clock is being used. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_core_freq(void) -#else -unsigned long gfx_get_core_freq(void) -#endif -{ - unsigned char dir0, dir1; - - dir0 = gfx_gxm_config_read(GXM_CONFIG_DIR0) & 0x0F; - dir1 = gfx_gxm_config_read(GXM_CONFIG_DIR1); - - /* REVISION 4.0 AND UP */ - - if(dir1 >= 0x50) - { - switch(dir0) - { - case 0: - case 2: return 133; - - case 5: return 166; - case 3: return 200; - case 6: return 233; - case 7: return 266; - case 4: return 300; - case 1: return 333; - default: - return(0); - } - } - else - { - switch(dir0) - { - case 0: - case 2: return 133; - - case 7: return 166; - - case 1: - case 3: return 200; - - case 4: - case 6: return 233; - - case 5: return 266; - default: - return(0); - } - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cpu_register_base - * - * This routine returns the base address for graphics registers. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_cpu_register_base(void) -#else -unsigned long gfx_get_cpu_register_base(void) -#endif -{ - unsigned long base; - base = (unsigned long) gfx_gxm_config_read(GXM_CONFIG_GCR); - base = (base & 0x03) << 30; - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_base - * - * This routine returns the base address for graphics memory. This is an - * offset of 0x00800000 from the base address specified in the GCR register. - * - * The function returns zero if the GCR indicates the graphics subsystem - * is disabled. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_frame_buffer_base(void) -#else -unsigned long gfx_get_frame_buffer_base(void) -#endif -{ - unsigned long base; - base = (unsigned long) gfx_gxm_config_read(GXM_CONFIG_GCR); - base = (base & 0x03) << 30; - if (base) base |= 0x00800000; - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_size - * - * This routine returns the total size of graphics memory, in bytes. - * - * Currently this routine is hardcoded to return 2 Meg. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_frame_buffer_size(void) -#else -unsigned long gfx_get_frame_buffer_size(void) -#endif -{ -#if FB4MB - return(0x00400000); -#else - return(0x00200000); -#endif -} - -/*----------------------------------------------------------------------------- - * gfx_get_vid_register_base - * - * This routine returns the base address for the video hardware. It assumes - * an offset of 0x00010000 from the base address specified by the GCR. - * - * The function returns zero if the GCR indicates the graphics subsystem - * is disabled. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_vid_register_base(void) -#else -unsigned long gfx_get_vid_register_base(void) -#endif -{ - unsigned long base; - base = (unsigned long) gfx_gxm_config_read(GXM_CONFIG_GCR); - base = (base & 0x03) << 30; - if (base) base |= 0x00010000; - return(base); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_register_base - * - * This routine returns the base address for the VIP hardware. This is - * only applicable to the SC1200, for which this routine assumes an offset - * of 0x00015000 from the base address specified by the GCR. - * - * The function returns zero if the GCR indicates the graphics subsystem - * is disabled. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu1_get_vip_register_base(void) -#else -unsigned long gfx_get_vip_register_base(void) -#endif -{ - unsigned long base = 0; - if ((gfx_cpu_version & 0xFF) == GFX_CPU_SC1200) - { - base = (unsigned long) gfx_gxm_config_read(GXM_CONFIG_GCR); - base = (base & 0x03) << 30; - if (base) base |= 0x00015000; - } - return(base); -} - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu2.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu2.c deleted file mode 100644 index 9194bcf32..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu2.c +++ /dev/null @@ -1,246 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/init_gu2.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: init_gu2.c $ - * - * This file contains routines used in Redcloud initialization. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*----------------------------------------------------------------------------- - * gfx_get_core_freq - * - * Returns the core clock frequency of a GX2. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_core_freq(void) -#else -unsigned long gfx_get_core_freq(void) -#endif -{ - unsigned long value; - - /* CPU SPEED IS REPORTED BY A VSM IN VSA II */ - /* Virtual Register Class = 0x12 (Sysinfo) */ - /* CPU Speed Register = 0x01 */ - - OUTW (0xAC1C, 0xFC53); - OUTW (0xAC1C, 0x1201); - - value = (unsigned long)(INW (0xAC1E)); - - return (value); -} - -/*----------------------------------------------------------------------------- - * gfx_get_cpu_register_base - * - * This routine returns the base address for display controller registers. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_cpu_register_base(void) -#else -unsigned long gfx_get_cpu_register_base(void) -#endif -{ - return gfx_pci_config_read (0x80000918); -} - -/*----------------------------------------------------------------------------- - * gfx_get_graphics_register_base - * - * This routine returns the base address for the graphics acceleration. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_graphics_register_base(void) -#else -unsigned long gfx_get_graphics_register_base(void) -#endif -{ - return gfx_pci_config_read (0x80000914); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_base - * - * This routine returns the base address for graphics memory. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_frame_buffer_base(void) -#else -unsigned long gfx_get_frame_buffer_base(void) -#endif -{ - return gfx_pci_config_read (0x80000910); -} - -/*----------------------------------------------------------------------------- - * gfx_get_frame_buffer_size - * - * This routine returns the total size of graphics memory, in bytes. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_frame_buffer_size(void) -#else -unsigned long gfx_get_frame_buffer_size(void) -#endif -{ - unsigned long value; - - /* FRAME BUFFER SIZE IS REPORTED BY A VSM IN VSA II */ - /* Virtual Register Class = 0x02 */ - /* VG_MEM_SIZE (512KB units) = 0x00 */ - - OUTW (0xAC1C, 0xFC53); - OUTW (0xAC1C, 0x0200); - - value = (unsigned long)(INW (0xAC1E)) & 0xFFl; - - return (value << 19); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vid_register_base - * - * This routine returns the base address for the video hardware. - *----------------------------------------------------------------------------- - */ -#if GFX_INIT_DYNAMIC -unsigned long gu2_get_vid_register_base(void) -#else -unsigned long gfx_get_vid_register_base(void) -#endif -{ - return gfx_pci_config_read (0x8000091C); -} - - - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/msr_rdcl.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/msr_rdcl.c deleted file mode 100644 index 8c54f86cd..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/msr_rdcl.c +++ /dev/null @@ -1,715 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/msr_rdcl.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: msr_rdcl.c $ - * - * This file contains MSR access routines for Redcloud. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -void redcloud_build_mbus_tree(void); /* private routine definition */ -int redcloud_init_msr_devices(MSR aDev[], unsigned int array_size); /* private routine definition */ -DEV_STATUS redcloud_find_msr_device (MSR *pDev); /* private routine definition */ - - -/* REDCLOUD MSR BITMASKS */ - -#define MBD_MSR_CAP 0x2000 -#define MSR_CAP_ID_MASK 0xFF000 -#define MSR_CAP_ID_SHIFT 12 -#define MSR_CAP_REV_MASK 0x0F -#define MBIU_CAP 0x86 -#define NUM_PORTS_MASK 0x00380000 -#define NUM_PORTS_SHIFT 19 -#define MBIU_WHOAMI 0x8B -#define WHOAMI_MASK 0x07 - -/* REDCLOUD and CS5535 MSR DEVICES */ - -MSR msrDev[] = { - { FOUND, RC_CC_MBIU, RC_MB0_MBIU0 }, - { FOUND, RC_CC_MBIU, RC_MB0_MBIU1 }, - { NOT_KNOWN, RC_CC_MCP , FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_MPCI, FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_MC , FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_GP , FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_VG , FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_DF , FAKE_ADDRESS }, - { NOT_KNOWN, RC_CC_FG , FAKE_ADDRESS }, - { FOUND, RC_CC_VA , RC_MB0_CPU }, - { FOUND, CP_CC_MBIU, CP_MB0_MBIU0 }, - { NOT_KNOWN, CP_CC_MPCI, FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_USB2, FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_ATAC, FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_MDD , FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_ACC , FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_USB1, FAKE_ADDRESS }, - { NOT_KNOWN, CP_CC_MCP , FAKE_ADDRESS }, -}; -#define NUM_DEVS sizeof(msrDev) / sizeof(struct msr) - -/* CAPISTRANO DEVICE INDEX LIMITS */ -/* These defines represent the start and stop indexes into the device array */ -/* for all Capistrano devices. These should be updated whenever a device is */ -/* added or removed to the Capistrano list. */ - -#define CP_INDEX_START CP_ID_MBIU -#define CP_INDEX_STOP CP_ID_MCP - -/* GLOBAL MBUS CACHE STRUCTURES */ -/* These structures contain a "cached" copy of the MBUS topology */ -/* for easy future lookup. */ - -MBUS_NODE MBIU0[8], MBIU1[8], MBIU2[8]; - -/* REGISTER MACROS */ - -#define GET_DEVICE_ID( CAPABILITIES_HIGH, CAPABILITIES_LOW ) \ - ((unsigned int)(( (CAPABILITIES_LOW) & MSR_CAP_ID_MASK ) >> MSR_CAP_ID_SHIFT )) - -#define GET_NUM_PORTS( MBIU_CAP_HIGH, MBIU_CAP_LOW ) (((MBIU_CAP_HIGH) & NUM_PORTS_MASK ) >> NUM_PORTS_SHIFT) - -/*----------------------------------------------------------------------------- - * gfx_msr_init - * - * This routine initializes the base addresses of all known MBUS devices. - *----------------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -int redcloud_msr_init(void) -#else -int gfx_msr_init(void) -#endif -{ - Q_WORD msrValue; - int return_value = 1; - - /* CHECK FOR VALID MBUS CONFIGURATION */ - /* The CPU and the two MBIUs are assumed to be at known static addresses, so */ - /* we will check the device IDs at these addresses as proof of a valid mbus */ - /* configuration. */ - - MSR_READ (MBD_MSR_CAP, RC_MB0_CPU, &(msrValue.high), &(msrValue.low)); - if (GET_DEVICE_ID (msrValue.high, msrValue.low) != RC_CC_VA) - return_value = 0; - - MSR_READ (MBD_MSR_CAP, RC_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - if (GET_DEVICE_ID (msrValue.high, msrValue.low) != RC_CC_MBIU) - return_value = 0; - - MSR_READ (MBD_MSR_CAP, RC_MB0_MBIU1, &(msrValue.high), &(msrValue.low)); - if (GET_DEVICE_ID (msrValue.high, msrValue.low) != RC_CC_MBIU) - return_value = 0; - - /* ENUMERATE VALID BUS */ - /* If all static devices were identified, continue with the enumeration */ - - if (return_value) - { - /* OPTIMIZATION */ - /* Build a local copy of the MBUS topology. This allows us to */ - /* quickly search the entire MBUS for a given device ID without */ - /* repeated MSR accesses. */ - - redcloud_build_mbus_tree (); - - /* INITIALIZE MSR DEVICES */ - - return_value = redcloud_init_msr_devices (msrDev, NUM_DEVS); - - } - - return return_value; - -} - -/*-------------------------------------------------------------------------- - * void redcloud_build_mbus_tree() (PRIVATE ROUTINE - NOT PART OF DURANGO API) - * - * This routine walks through the MBUS and records the address value and - * device ID found at each node. If a node (aka port) is not populated, - * that node returns '0'. The deviceID for that node is set to '0' - * (NOT_POPULATED) to reflect this. If the node being queried points back to - * Vail or MBIU0, the deviceID for that node is set to 'REFLECTIVE'. Reflective - * nodes are nodes that forward the given MBUS address BACK to the initiator. - *----------------------------------------------------------------------------- - */ -void redcloud_build_mbus_tree(void) -{ - unsigned long mbiu_port_count, reflective; - unsigned long port; - Q_WORD msrValue; - - /* */ - /* ENUMERATE MBIU0 */ - /* */ - - /* COUNT MBIU PORTS */ - - MSR_READ (MBIU_CAP, RC_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - mbiu_port_count = GET_NUM_PORTS (msrValue.high, msrValue.low); - - /* FIND REFLECTIVE PORT */ - /* Query the MBIU for the port through which we are communicating. */ - /* We will avoid accesses to this port to avoid a self-reference. */ - - MSR_READ (MBIU_WHOAMI, RC_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - reflective = msrValue.low & WHOAMI_MASK; - - /* ENUMERATE ALL PORTS */ - /* For every possible port, set the MBIU.deviceId to something. */ - - for (port = 0; port < 8; port++) - { - /* FILL IN CLAIMED FIELD */ - /* All MBIU ports can only be assigned to one device from the */ - /* Durango table */ - - MBIU0[port].claimed = 0; - - /* MBIU0 PORT NUMBERS ARE IN ADDRESS BITS 31:29 */ - - MBIU0[port].address = port << 29; - - /* SPECIAL CASE FOR MBIU0 */ - /* MBIU0 port 0 is a special case, as it points back to MBIU0. MBIU0 */ - /* responds at address 0x40000xxx, which does not equal 0 << 29. */ - - if (port == 0) MBIU0[port].deviceId = RC_CC_MBIU; - else if (port == reflective) MBIU0[port].deviceId = REFLECTIVE; - else if (port > mbiu_port_count) MBIU0[port].deviceId = NOT_POPULATED; - else - { - MSR_READ (MBD_MSR_CAP, MBIU0[port].address, &(msrValue.high), &(msrValue.low)); - MBIU0[port].deviceId = GET_DEVICE_ID (msrValue.high, msrValue.low); - } - } - - /* */ - /* ENUMERATE MBIU1 */ - /* */ - - /* COUNT MBIU PORTS */ - - MSR_READ (MBIU_CAP, RC_MB0_MBIU1, &(msrValue.high), &(msrValue.low)); - mbiu_port_count = GET_NUM_PORTS (msrValue.high, msrValue.low); - - /* FIND REFLECTIVE PORT */ - /* Query the MBIU for the port through which we are communicating. */ - /* We will avoid accesses to this port to avoid a self-reference. */ - - MSR_READ (MBIU_WHOAMI, RC_MB0_MBIU1, &(msrValue.high), &(msrValue.low)); - reflective = msrValue.low & WHOAMI_MASK; - - /* ENUMERATE ALL PORTS */ - /* For every possible port, set the MBIU.deviceId to something. */ - - for (port = 0; port < 8; port++) - { - /* FILL IN CLAIMED FIELD */ - /* All MBIU ports can only be assigned to one device from the */ - /* Durango table */ - - MBIU1[port].claimed = 0; - - /* MBIU1 PORT NUMBERS ARE IN 28:26 AND 31:29 = 010B */ - - MBIU1[port].address = (0x02l << 29) + (port << 26); - - if (port == reflective) MBIU1[port].deviceId = REFLECTIVE; - else if (port > mbiu_port_count) MBIU1[port].deviceId = NOT_POPULATED; - else - { - MSR_READ (MBD_MSR_CAP, MBIU1[port].address, &(msrValue.high), &(msrValue.low)); - MBIU1[port].deviceId = GET_DEVICE_ID (msrValue.high, msrValue.low); - } - } - - /* */ - /* ENUMERATE MBIU2 (CS5535) */ - /* (if present) */ - - MSR_READ (MBD_MSR_CAP, CP_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - if (GET_DEVICE_ID (msrValue.high, msrValue.low) == CP_CC_MBIU) - { - /* COUNT MBIU PORTS */ - - MSR_READ (MBIU_CAP, CP_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - mbiu_port_count = GET_NUM_PORTS (msrValue.high, msrValue.low); - - /* FIND REFLECTIVE PORT */ - /* Query the MBIU for the port through which we are communicating. */ - /* We will avoid accesses to this port to avoid a self-reference. */ - - MSR_READ (MBIU_WHOAMI, CP_MB0_MBIU0, &(msrValue.high), &(msrValue.low)); - reflective = msrValue.low & WHOAMI_MASK; - - /* ENUMERATE ALL PORTS */ - /* For every possible port, set the MBIU.deviceId to something. */ - - for (port = 0; port < 8; port++) - { - /* FILL IN CLAIMED FIELD */ - /* All MBIU ports can only be assigned to one device from the */ - /* Durango table */ - - MBIU2[port].claimed = 0; - - /* MBIU2 PORT NUMBERS ARE IN 22:20 AND 31:23 = 010100010B */ - - MBIU2[port].address = (0x02l << 29) + (0x04l << 26) + (0x02l << 23) + (port << 20); - - if (port == reflective) MBIU2[port].deviceId = REFLECTIVE; - else if (port > mbiu_port_count) MBIU2[port].deviceId = NOT_POPULATED; - else - { - MSR_READ (MBD_MSR_CAP, MBIU2[port].address, &(msrValue.high), &(msrValue.low)); - MBIU2[port].deviceId = GET_DEVICE_ID (msrValue.high, msrValue.low); - } - } - } - else - { - /* NO 5535 */ - /* If the CS5535 is not installed, fill in the cached table */ - /* with the 'NOT_INSTALLED' flag. Also, fill in the device */ - /* status from NOT_KNOWN to REQ_NOT_INSTALLED. */ - - for (port = 0; port < 8; port++) - { - MBIU2[port].claimed = 0; - MBIU2[port].deviceId = NOT_INSTALLED; - MBIU2[port].address = (0x02l << 29) + (0x04l << 26) + (0x02l << 23) + (port << 20); - } - for (port = CP_INDEX_START; port <= CP_INDEX_STOP; port++) - { - msrDev[port].Present = REQ_NOT_INSTALLED; - } - } -} - -/*------------------------------------------------------------------ - * redcloud_init_msr_devices (PRIVATE ROUTINE - NOT PART OF DURANGO API) - - * Handles the details of finding each possible device on the MBUS. - * If a given device is not found, its structure is left uninitialized. - * If a given device is found, its structure is updated. - * - * This init routine only checks for devices in aDev[]. - * - * Passed: - * aDev - is a pointer to the array of MBUS devices. - * arraySize - number of elements in aDev. - * - * Returns: - * 1 - If, for every device, its address was found. - * 0 - If, for any device, an error was encountered. - *------------------------------------------------------------------ - */ -int redcloud_init_msr_devices(MSR aDev[], unsigned int array_size) -{ - unsigned int i, issues = 0; - - /* TRY TO FIND EACH ITEM IN THE ARRAY */ - - for (i = 0; i < array_size; i++) - { - /* IGNORE DEVICES THAT ARE ALREADY FOUND */ - /* The addresses for "found" devices are already known. */ - - if (aDev[i].Present == FOUND || aDev[i].Present == REQ_NOT_INSTALLED) - continue; - - /* TRY TO FIND THE DEVICE ON THE MBUS */ - - aDev[i].Present = redcloud_find_msr_device (&aDev[i]); - - /* INCREMENT ERROR COUNT IF DEVICE NOT FOUND */ - - if (aDev[i].Present != FOUND) - issues++; - } - - return (issues == 0); -} - -/*------------------------------------------------------------------ - * redcloud_find_msr_device (PRIVATE ROUTINE - NOT PART OF DURANGO API) - * - * Passed: - * pDev - is a pointer to one element in the array of MBUS devices - * - * Returns: - * FOUND - Device was found and pDev->Address has been updated. - * - * REQ_NOT_FOUND - Device was not found and pDev->Address has not - * been updated. - * - *------------------------------------------------------------------ -*/ -DEV_STATUS redcloud_find_msr_device (MSR *pDev) -{ - unsigned int i; - - /* SEARCH DURANGO'S CACHED MBUS TOPOLOGY */ - /* This gets a little tricky. As the only identifier we have for each */ - /* device is the device ID and we have multiple devices of the same type */ - /* MCP, MPCI, USB, etc. we need to make some assumptions based on table */ - /* order. These are as follows: */ - /* 1. All Redcloud nodes are searched first, as we assume that they */ - /* are first in the table. */ - /* 2. If two devices have the same device ID and are found on the same */ - /* device (GX2, CS5535, etc.) we assume that they are listed such */ - /* that the first device in the table with this device ID has a lower */ - /* port address. */ - /* 3. After a device ID has been matched, the port is marked as */ - /* 'claimed', such that future enumerations continue searching the */ - /* GeodeLink topology. */ - - /* SEARCH MBIU0 */ - - for (i = 0; i < 8; i++) - { - if (MBIU0[i].deviceId == pDev->Id && !(MBIU0[i].claimed)) - { - MBIU0[i].claimed = 1; - pDev->Address = MBIU0[i].address; - return FOUND; - } - } - - /* SEARCH MBIU1 */ - - for (i = 0; i < 8; i++) - { - if (MBIU1[i].deviceId == pDev->Id && !(MBIU1[i].claimed)) - { - MBIU1[i].claimed = 1; - pDev->Address = MBIU1[i].address; - return FOUND; - } - } - - /* SEARCH MBIU2 */ - - for (i = 0; i < 8; i++) - { - if (MBIU2[i].deviceId == pDev->Id && !(MBIU2[i].claimed)) - { - MBIU2[i].claimed = 1; - pDev->Address = MBIU2[i].address; - return FOUND; - } - } - - return REQ_NOT_FOUND; -} - -/*-------------------------------------------------------------------- - * gfx_id_msr_device - * - * This routine handles reading the capabilities MSR register (typically 0x2000) - * and checking if the 'id' field matchs pDev.Id. This routine is - * used by applications/drivers that need to extend the list of known - * MBUS devices beyond those known by Durango. - * - * Passed: - * pDev - Pointer to MSR structure containing the device's ID. - * address - device address. - * - * Returns: - * FOUND - The IDs do match. - * REQ_NOT_FOUND - There was not a match. - * - *-------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -DEV_STATUS redcloud_id_msr_device (MSR *pDev, unsigned long address) -#else -DEV_STATUS gfx_id_msr_device (MSR *pDev, unsigned long address) -#endif -{ - Q_WORD msrValue; - - MSR_READ (MBD_MSR_CAP, address, &(msrValue.high), &(msrValue.low)); - - if (GET_DEVICE_ID (msrValue.high, msrValue.low) == pDev->Id) - return FOUND; - else - return REQ_NOT_FOUND; -} - -/*-------------------------------------------------------------------- - * gfx_get_msr_dev_address - * - * This function returns the 32-bit address of the requested device. - * The device must be a known MBUS device. (It must be in Durango's - * device table.) DEV_STATUS should be checked to verify that the address - * was updated. - * - * - * Passed: - * device - device index of the device in question. - * *address - ptr to location where address should be stored. - * - * Returns: - * DEV_STATUS of device in question. (NOT_KNOWN if device is out of range.) - * *address - updated if 'device' is within range - * - * Notes: - * This function should only be called after gfx_msr_init - * - *-------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -DEV_STATUS redcloud_get_msr_dev_address (unsigned int device, unsigned long *address) -#else -DEV_STATUS gfx_get_msr_dev_address (unsigned int device, unsigned long *address) -#endif -{ - if (device < NUM_DEVS) - { - if (msrDev[device].Present == FOUND) - *address = msrDev[device].Address; - - return msrDev[device].Present; - } - return NOT_KNOWN; - -} - -/*-------------------------------------------------------------------- - * gfx_get_glink_id_at_address - * - * This function returns the 16-bit deviceId at the requested address. - * DEV_STATUS should be checked to make sure that device was updated. - * - * Passed: - * device - ptr to location where device ID should be stored. - * address - address of desired device ID. - * - * Returns: - * FOUND if address is a valid address, NOT_KNOWN if address cannot be found - * on the mbus. - * *device - updated with device Id info. - * - * Notes: - * This function should be called after gfx_msr_init - * - *-------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -DEV_STATUS redcloud_get_glink_id_at_address(unsigned int *device, unsigned long address) -#else -DEV_STATUS gfx_get_glink_id_at_address(unsigned int *device, unsigned long address) -#endif -{ - int port; - - for (port = 0; port < 8; port++) - { - if (MBIU0[port].address == address) - { - *device = MBIU0[port].deviceId; - return FOUND; - } - else if (MBIU1[port].address == address) - { - *device = MBIU1[port].deviceId; - return FOUND; - } - else if (MBIU2[port].address == address) - { - *device = MBIU2[port].deviceId; - return FOUND; - } - } - - return NOT_KNOWN; - -} - -/*-------------------------------------------------------------------- - * gfx_msr_read - * - * Performs a 64-bit read from 'msrRegister' in device 'device'. 'device' is - * an index into Durango's table of known MBUS devices. - * - * Returns: - * FOUND - if no errors were detected and msrValue has been updated. - * NOT_KNOWN - an error was detected. msrValue is not updated. - * REQ_NOT_FOUND - 'msrAddress' for 'devID' is unknown. Caller - * should call msrInit() first. msrValue is not updated. - * Notes: - * This function should be called after gfx_msr_init - *-------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -DEV_STATUS redcloud_msr_read (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -#else -DEV_STATUS gfx_msr_read (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -#endif -{ - if (device < NUM_DEVS) - { - if (msrDev[device].Present == FOUND) - MSR_READ (msrRegister, msrDev[device].Address, &(msrValue->high), &(msrValue->low)); - - return msrDev[device].Present; - } - return NOT_KNOWN; -} - -/*-------------------------------------------------------------------- - * gfx_msr_write - * - * Performs a 64-bit write to 'msrRegister' in device 'devID'. - * - * Returns: - * FOUND - if no errors were detected and msrValue has been updated. - * NOT_KNOWN - an error was detected. msrValue is not updated. - * REQ_NOT_FOUND - 'msrAddress' for 'devID' is unknown. Caller - * should call msrInit() first. msrValue is not updated. - * - * Notes: - * This function is valid to call after initMSR_API() - * - *-------------------------------------------------------------------- - */ -#if GFX_MSR_DYNAMIC -DEV_STATUS redcloud_msr_write (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -#else -DEV_STATUS gfx_msr_write (unsigned int device, unsigned int msrRegister, Q_WORD *msrValue) -#endif -{ - if (device < NUM_DEVS) - { - if (msrDev[device].Present == FOUND) - MSR_WRITE (msrRegister, msrDev[device].Address, &(msrValue->high), &(msrValue->low)); - - return msrDev[device].Present; - } - return NOT_KNOWN; -} diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/release.txt b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/release.txt deleted file mode 100644 index 8337322ed..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/release.txt +++ /dev/null @@ -1,412 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/release.txt,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -Durango Release Notes -Version 2.45.00 -Win98/DOS/Linux -August 29, 2002 - ------------------------------------------------------------------------------ -PRODUCT INFORMATION ------------------------------------------------------------------------------ -Durango is a graphics/video software support package designed to assist in the -development of display drivers and embedded applications. The core of this -package is source code that performs most of the graphics related -functionality for the National Semiconductor ® Geode family of products. -Development time for new software is reduced by using these routines to access -the hardware. - ------------------------------------------------------------------------------ -INSTALLATION INSTRUCTIONS ------------------------------------------------------------------------------ -Download the file to a directory. Modify and include the file durango.c -according to the needs of the application. - ------------------------------------------------------------------------------ -REVISION HISTORY ------------------------------------------------------------------------------ - -08/29/02 Version 2.45.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* Modified gfx_set_cursor_position to use cursor position when panning and not adjust - using hotspots. -* Added new routine gfx_get_refreshrate_from_mode. -* Added gfx_text_blt routine. -* Added gfx_get_tv_display_mode_frequency routine. -* Added gfx_get_frequency_from_refreshrate routine. -* Added gfx_set_video_cursor_enable routine. -* Fixed Linux compilation warnings. -* Updated modeset code to clear panning variables. -* Added panel timings for 1600x1200 desktops. -* Removed wait for VBlank when panning using cursor routines. - -============================================================================= - -07/12/02 Version 2.43.03 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* Modified gfx_get_display_mode to support 56 Hz modes. -* Added support for 8K pitch when setting a true color mode above 1024x768 -* Added a byte-packed option to gfx2_mono_expand_blt -* Fix for Carmel D2 alpha blending issue. -* Added typecasts for proper compilation. -* Fixed CS5535 MBIU address. -* Added new GX2 routine, gfx2_text_blt -* Added MSR implementations for Linux. -* Further optimized default GX1 string macros. -* Added new routine, gfx_set_panel_present to allow panning without adjusting panel timings. -* Added assembly macros for 32-bit Windows applications. - -============================================================================= - -03/21/02 Version 2.41.02 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* Optimized GX2 Bitmap-to-screen BLTs by using a 2-line offscreen scratch area. -* Fixed a bug in GX2 monochrome bitmap BLTs. -* Fixed gfx_get_clock_frequency for GX2 2.0 -* Added 56 Hz support to gfx_get_clock_frequency -* Changed gfx_set_compression_size to subtract header size -* Changed gfx_get_compression_size to add header size - -============================================================================= - -03/04/02 Version 2.39.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* Added support for CS5535 MSRs. -* Fixed a bug in monochrome bitmap BLTs. -* Added support for 32-bit CRC mechanism in GX2 2.0. -* First official GX2 release. -* Added support for new Dot PLL mechanism in GX2 2.0 -* Added support for Carmel D1.1 and D2. - -============================================================================= - -01/24/02 Version 2.37.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* Changed gfx_get_clock_frequency, gfx_get_cursor_offset and gfx_get_display_offset - to be outside the GFX_READ_ROUTINES flag. -* Modified the modeset code to set higher FIFO priority levels for high bandwidth - modes. -* Init code no longer returns Redcloud ID when no chip detected. -* Added fix for Redcloud 1.x rev ID -* New GX2 PLL settings - updates to the 14 MHz table and a new 48 MHz table. -* Optimized all bitmap-to-screen routines. Optimizations include new macros that - allow correct operation in a 16-bit environment. -* 3K cache is now assumed to be the default scratchpad configuration. -* gfx_get_frame_buffer_size for GX2 no longer uses a VGA register. This allows - correct operation even with an external VGA card present in the system. -* Added support for 1152x864 desktop resolution on a flat panel. -* Added 24BPP support for large display modes. -* Modified gfx_set_video_scale such that an identity scale is now default. -* Modifed flat panel modeset code to dynamically determine the size of the mode table. -* Added support for Carmel Rev D2. - -============================================================================= - -10/22/01 Version 2.35.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ - -* New release notes format. -* Added fix for SC1200 issue #813 (TVOut field indication is reversed. -* Added check for invalid values in video upscale. -* Fixed compilation warnings and run-time errors under DOS. -* Added new macros for word I/O. -* Optimized VSAII MSR code to used DWORD I/O. -* Fixed SoftVG base PCI base addresses. -* Several fixes to Redcloud API found during bringup. -* Modified Durango to support 4-pixel video alignment for Redcloud. -* Added the functions gfx_test_vip_overflow, gfx_get_vip_line, - gfx_set_decoder_luminance_filter, gfx_set_tv_YV_delya and - gfx_set_tv_field_status_invert. -* Added support for Carmel D1 revision ID. -* Moved gfx_get_vip_base and gfx_get_vbi_pitch outside of the - GXF_READ_ROUTINES flag. -* Minor fixes to saa7114.c and gfx_set_tv-enable. -* Added don't care option in gfx_set_vip_base. -* Added fix for SC1200 issue #1121 (VIP FIFO bus request threshold bit - is inverted. - -============================================================================= - -07/31/01 Version 2.33.02 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Completed implementation of vertical downscaling support for GX2. -* Added a method to lock the display controller timings. -* Added support for SC1200 Rev C. -* Small modifications to gfx_set_video_format. -* Removed unused and unimplemented I2C functions. -* Changes to prevent errors and compiler warnings in DOS. -* Updated headers to include both BSD and GPL licenses. - -============================================================================= - -06/08/01 Version 2.31.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added new routines to manipulate vertical video downscaling on GX2. -* Minor fixes to the function gfx_read_window_crc. -* Implemented all init routines for GX2 except gfx_get_core_freq. -* Added support for 27MHz reference frequency to the GX2 PLL. -* Added new function gfx_get_softvga_active. -* Minor changes to the function sc1200_reset_video. -* Fixed some minor compiler warnings. - -============================================================================= - -04/25/01 Version 2.29.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Disabled all CSC when setting an RGB video format. -* Modified sc1200_set_video_size to add 2 to the window height. -* Modified code to support the accelerator and cursor in pixel and line double modes. -* Modified gfx_get_core_freq to be a dynamic API routine. -* Added the function gfx_read_window_crc for GX2. -* Added init routine gfx_get_graphics_register_base for GX2. -* Added new macros to access the scratchpad RAM to support Win2K and WinME. -* Added mew macros to access the GP registers for GX2. - -============================================================================= - -04/06/01 Version 2.27.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added new TV read functions: - gfx_get_tv_enable, gfx_get_tv_output, gfx_get_tv_display_mode, - gfx_get_tv_mode_count, gfx_is_tv_display_mode_supported -* Added new function gfx_set_display_bpp. -* Added new function gfx_get_frame_buffer_line_size. -* Modified gfx_set_vbi_base to accept pure physical addresses instead of offsets. -* Implemented video and display controller routines for GX2. -* Modified some initialization routines to be dynamic. -* Created new API extension for GX2 MSR accesses. -* Added new icon routines for GX2. -* Modified gfx_set_tv_display to preserve current bpp. -* Minor modifications to gfx_set_tv_format, gfx_set_video_palette and - gfx_set_video_palette entry. -* Added support for 1152x864@75Hz - -============================================================================= - -03/12/01 Version 2.25.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Adapted new revision format system. -* Synchronized with NSTA Durango. Updated support for all SC1200 features. -* Added support for 640x400 as well as emulated VGA modes. -* Added new routines to access single palette color entries. -* Added new routine to return the maximum supported pixel clock. -* Added new routine gfx_set_crt_enable to manipulate the CRT display logic. -* Added new rendering routine gfx_color_pattern_fill. -* Added 4:2:0 and RGB video format support for CS5530 and SC1200. -* Modified code to allow operation under DOS. - -============================================================================= - -07/21/00 Version 2.04 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Verified Xfree86 driver version 1.1.4 under Linux, and ce v2.3. -* Merged sc1200 changes. -* Added routines to support the query of current display mode. -* Added functions gfx_enable_softvga, dfx_disable_softvga. -* Added code optimization in rendering loops to use 32 bit writes where possible. -* Added gfx_is_mode_supported to query if given mode supported by the h/w. -* Added Flat panel support, realy testing with panel done only for 800x600. -* Removed subtraction of 16 from gfx_set_compression_size. -* Added version.h file to reflect the version of the durango used. - -============================================================================= - -03/03/00 Version 2.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Verified Xfree86 driver version 1.1 under FreeBSD and Linux. -* Added automatic detection of BLT buffer bases in "gfx_set_bpp" routine. -* Fixed improper setting of VGA attrubute controller index register. -* Moved "gfx_get_display_bpp" to always be included. -* Moved "gfx_get_hactive" and "gfx_get_vactive" to always be included. -* Clipped video source size if off bottom or right side. -* Properly adjusted video offset if clipped on the top side. -* Added "gfx_get_video_line_size" and "gfx_get_video_xclip" routines. - -============================================================================= - -02/21/00 Version 2.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added gfx_vga.c. -* Added write to GP_BLIT_STATUS in "gfx_set_bpp" routine. -* Verified alpha blending on SC1200. -* Removed "gfx_set_blt_buffers" routine. - -============================================================================= - -02/09/00 Version 1.20 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Verified display modes and graphics rendering on SC1200. -* Updated PLL table for SC1200 to set modes. -* DURANGO.C FILE CHANGE!: Modifed and added compiler definitions. -* Split gfx_disp.c file into gu1_disp.c and gu2_disp.c -* Split gfx_rndr.c file into gu1_rndr.c and gu2_rndr.c -* Split gfx_vid.c file into vid_5530.c, vid_1400.c, and vid_1200.c -* Split gfx_vip.c file into vip_1400.c and vip_1200.c -* Split gfx_tv.c file into geode_tv.c and fs451_tv.c -* Split gfx_i2c.c file into acc_i2c.c and gpio_i2c.c. -* Split gfx_dcdr.c file to saa7114.c -* Added GFX_READ_ROUTINES compiler definition. -* Moved routines from gfx_read.c (no longer exists) to other files. -* Abstracted display controller access in the video overlay routines. -* Added routines to control display compression hardware. - -============================================================================= - -01/28/00 Version 1.13 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Passes randomly generated rendering tests in Darwin for GXLV. -* Fixed bug for large bitmap to screen BLTs (greater than 64K). -* Fixed bug for pattern fills using solid source data for plane masks. - -============================================================================= - -01/14/00 Version 1.12 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added proper use of hotspot to gfx_set_cursor_position. -* Fixed buffer size to handle all frame buffer start address alignments. -* Added initial version of gfx_tv.c. - -============================================================================= - -01/07/00 Version 1.11 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Fixed bug with transparent BLTs (loading transparent color into BB1). -* Added definition of gfx_color_bitmap_to_screen_blt to gfx_rtns.h. -* Added gfx_color_bitmap_to_screen_xblt (transparent bitmap to screen). - -============================================================================= - -12/21/99 Version 1.10 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added additional video decoder routines to gfx_dcdr.c. -* Added VBI routines to gfx_vip.c. -* Added alpha blending routines for SC1200 to gfx_vid.c - -============================================================================= - -10/01/99 Version 1.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Added video port, video decoder, I2C, and hardware query rouines. -* New files: gfx_vip.c, gfx_dcdr.c, gfx_i2c.c, gfx_read.c. - -============================================================================= - -08/27/99 Version 0.05 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* INTERFACE CHANGE: Changed "gfx_csptr[]" to "gfx_vidptr" and "gfx_vipptr". -* Added "gfx_get_vid_register_base" and "gfx_get_vip_register_base". -* Added initial PLL table for SC1400. -* Verified mode set and video overlay routines work correctly on SC1400. -* Updated initilization routines. -* Added update of graphics engine in "gfx_set_display_pitch". - -============================================================================= - -08/20/99 Version 0.04 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* INTERFACE CHANGE: "gfx_load_*" routines changed to "gfx_set_*" for naming - consistency. The "gfx_text_glyph" routine was removed. -* Added video overlay routines. -* Added gfx_vid.c file. - -============================================================================= - -08/16/99 Version 0.03 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* INTERFACE CHANGE: Access to CS5530 now through separate pointer. Project - must declare and map the gfx_csptr[GFX_CSPTR_SIZE] variable. -* Added durango.c file as template for main source file. -* Added gfx_init.c file. - -============================================================================= - -08/04/99 Version 0.02 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Additional modes in gfx_mode.h file. -* Separated register definitions from gfx_defs.h into gfx_regs.h. - -============================================================================= - -07/30/99 Version 0.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -* Initial release. ------------------------------------------------------------------------------ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu1.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu1.c deleted file mode 100644 index 14f21d145..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu1.c +++ /dev/null @@ -1,1660 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu1.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: rndr_gu1.c $ - * - * This file contains routines to program the 2D acceleration hardware for - * the first generation graphics unit (GXLV, SC1200). - * - * gfx_set_bpp - * gfx_set_solid_pattern - * gfx_set_mono_pattern - * gfx_set_color_pattern - * gfx_set_solid_source - * gfx_set_mono_source - * gfx_set_raster_operation - * gfx_pattern_fill - * gfx_screen_to_screen_blt - * gfx_screen_to_screen_xblt - * gfx_color_bitmap_to_screen_blt - * gfx_color_bitmap_to_screen_xblt - * gfx_mono_bitmap_to_screen_blt - * gfx_bresenham_line - * gfx_wait_until_idle - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#if GFX_NO_IO_IN_WAIT_MACROS -#define GFX_WAIT_PENDING while(READ_REG16(GP_BLIT_STATUS) & BS_BLIT_PENDING) { ; } -#define GFX_WAIT_BUSY while(READ_REG16(GP_BLIT_STATUS) & BS_BLIT_BUSY) { ; } -#define GFX_WAIT_PIPELINE while (READ_REG16(GP_BLIT_STATUS) & BS_PIPELINE_BUSY) { ; } -#else -#define GFX_WAIT_PENDING while(READ_REG16(GP_BLIT_STATUS) & BS_BLIT_PENDING) { INB (0x80); } -#define GFX_WAIT_BUSY while(READ_REG16(GP_BLIT_STATUS) & BS_BLIT_BUSY) { INB (0x80); } -#define GFX_WAIT_PIPELINE while (READ_REG16(GP_BLIT_STATUS) & BS_PIPELINE_BUSY) { INB (0x80); } -#endif - -void gu1_detect_blt_buffer_base(void); - -/*--------------------------------------------------------------------------- - * GFX_SET_BPP - * - * This routine sets the bits per pixel value in the graphics engine. - * It is also stored in a static variable to use in the future calls to - * the rendering routines. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_bpp(unsigned short bpp) -#else -void gfx_set_bpp(unsigned short bpp) -#endif -{ - int control = 0; - unsigned short pitch = gfx_get_display_pitch(); - GFXbpp = bpp; - - /* DETECT BASE ADDRESSES FOR BLT BUFFERS */ - /* Different for 2K or 3K of scratchpad. Also need to calculate */ - /* the number of pixels that can fit in a BLT buffer - need to */ - /* subtract 16 for alignment considerations. The 2K case, for */ - /* example, is 816 bytes wide, allowing 800 pixels in 8 BPP, which */ - /* means rendering operations won't be split for 800x600. */ - - gu1_detect_blt_buffer_base(); - GFXbufferWidthPixels = GFXbb1Base - GFXbb0Base - 16; - if( bpp > 8 ) { - /* If 16bpp, divide GFXbufferWidthPixels by 2 */ - GFXbufferWidthPixels >>= 1; - } - - /* SET THE GRAPHICS CONTROLLER BPP AND PITCH */ - if( bpp > 8 ) { - /* Set the 16bpp bit if necessary */ - control = BC_16BPP; - } - if((gfx_cpu_version == GFX_CPU_PYRAMID) && ( pitch > 2048 )) { - control |= BC_FB_WIDTH_4096; - } else if ( pitch > 1024) { - control |= BC_FB_WIDTH_2048; - } - GFX_WAIT_BUSY; - WRITE_REG32(GP_BLIT_STATUS, control); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_SOLID_SOURCE -// -// This routine is used to specify a solid source color. For the Xfree96 -// display driver, the source color is used to specify a planemask and the -// ROP is adjusted accordingly. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_solid_source(unsigned long color) -#else -void gfx_set_solid_source(unsigned long color) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* FORMAT 8 BPP COLOR */ - /* GX requires 8BPP color data be duplicated into bits [15:8]. */ - - if (GFXbpp == 8) - { - color &= 0x00FF; - color |= (color << 8); - } - - /* POLL UNTIL ABLE TO WRITE THE SOURCE COLOR */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_SRC_COLOR_0, (unsigned short) color); - WRITE_REG16(GP_SRC_COLOR_1, (unsigned short) color); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_MONO_SOURCE -// -// This routine is used to specify the monochrome source colors. -// It must be called *after* loading any pattern data (those routines -// clear the source flags). -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent) -#else -void gfx_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent) -#endif -{ - /* SET TRANSPARENCY FLAG */ - - GFXsourceFlags = transparent ? RM_SRC_TRANSPARENT : 0; - - /* FORMAT 8 BPP COLOR */ - /* GX requires 8BPP color data be duplicated into bits [15:8]. */ - - if (GFXbpp == 8) - { - bgcolor &= 0x00FF; - bgcolor |= (bgcolor << 8); - fgcolor &= 0x00FF; - fgcolor |= (fgcolor << 8); - } - - /* POLL UNTIL ABLE TO WRITE THE SOURCE COLOR */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_SRC_COLOR_0, (unsigned short) bgcolor); - WRITE_REG16(GP_SRC_COLOR_1, (unsigned short) fgcolor); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_SOLID_PATTERN -// -// This routine is used to specify a solid pattern color. It is called -// before performing solid rectangle fills or more complicated BLTs that -// use a solid pattern color. -// -// The driver should always call "gfx_load_raster_operation" after a call -// to this routine to make sure that the pattern flags are set appropriately. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_solid_pattern(unsigned long color) -#else -void gfx_set_solid_pattern(unsigned long color) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = 0; - - /* FORMAT 8 BPP COLOR */ - /* GX requires 8BPP color data be duplicated into bits [15:8]. */ - - if (GFXbpp == 8) - { - color &= 0x00FF; - color |= (color << 8); - } - - /* SAVE THE REFORMATTED COLOR FOR LATER */ - /* Used to call the "GFX_solid_fill" routine for special cases. */ - - GFXsavedColor = color; - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLOR */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_PAT_COLOR_0, (unsigned short) color); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_MONO_PATTERN -// -// This routine is used to specify a monochrome pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparent) -#else -void gfx_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparent) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = transparent ? RM_PAT_MONO | RM_PAT_TRANSPARENT : - RM_PAT_MONO; - - /* FORMAT 8 BPP COLOR */ - /* GXm requires 8BPP color data be duplicated into bits [15:8]. */ - - if (GFXbpp == 8) - { - bgcolor &= 0x00FF; - bgcolor |= (bgcolor << 8); - fgcolor &= 0x00FF; - fgcolor |= (fgcolor << 8); - } - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLORS AND DATA */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_PAT_COLOR_0, (unsigned short) bgcolor); - WRITE_REG16(GP_PAT_COLOR_1, (unsigned short) fgcolor); - WRITE_REG32(GP_PAT_DATA_0, data0); - WRITE_REG32(GP_PAT_DATA_1, data1); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_COLOR_PATTERN -// -// This routine is used to specify a color pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1,unsigned long data2,unsigned long data3, unsigned char transparent) -#else -void gfx_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned long data2,unsigned long data3,unsigned char transparent) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = transparent ? RM_PAT_MONO | RM_PAT_TRANSPARENT : - RM_PAT_MONO; - - GFXpatternFlags |= RM_PAT_COLOR; - /* FORMAT 8 BPP COLOR */ - /* GXm requires 8BPP color data be duplicated into bits [15:8]. */ - - if (GFXbpp == 8) - { - bgcolor &= 0x00FF; - bgcolor |= (bgcolor << 8); - fgcolor &= 0x00FF; - fgcolor |= (fgcolor << 8); - } - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLORS AND DATA */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_PAT_COLOR_0, (unsigned short) bgcolor); - WRITE_REG16(GP_PAT_COLOR_1, (unsigned short) fgcolor); - WRITE_REG32(GP_PAT_DATA_0, data0); - WRITE_REG32(GP_PAT_DATA_1, data1); - if (GFXbpp > 8) - { - WRITE_REG32(GP_PAT_DATA_2, data2); - WRITE_REG32(GP_PAT_DATA_3, data3); - } -} - -/* -//--------------------------------------------------------------------------- -// GFX_LOAD_COLOR_PATTERN_LINE -// -// This routine is used to load a single line of a 8x8 color pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_load_color_pattern_line (short y, unsigned long *pattern_8x8) -#else -void gfx_load_color_pattern_line (short y, unsigned long *pattern_8x8) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = RM_PAT_COLOR; - - y &= 7; - - if (GFXbpp > 8) - pattern_8x8 += (y << 2); - else - pattern_8x8 += (y << 1); - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLORS AND DATA */ - - GFX_WAIT_PENDING; - WRITE_REG32(GP_PAT_DATA_0, pattern_8x8[0]); - WRITE_REG32(GP_PAT_DATA_1, pattern_8x8[1]); - if (GFXbpp > 8) - { - WRITE_REG32(GP_PAT_DATA_2, pattern_8x8[2]); - WRITE_REG32(GP_PAT_DATA_3, pattern_8x8[3]); - } -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_RASTER_OPERATION -// -// This routine loads the specified raster operation. It sets the pattern -// flags appropriately. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_set_raster_operation(unsigned char rop) -#else -void gfx_set_raster_operation(unsigned char rop) -#endif -{ - unsigned short rop16; - - /* GENERATE 16-BIT VERSION OF ROP WITH PATTERN FLAGS */ - - rop16 = (unsigned short) rop | GFXpatternFlags; - if ((rop & 0x33) ^ ((rop >> 2) & 0x33)) - rop16 |= GFXsourceFlags; - - /* SAVE ROP FOR LATER COMPARISONS */ - /* Need to have the pattern flags included */ - - GFXsavedRop = rop16; - - /* SET FLAG INDICATING ROP REQUIRES DESTINATION DATA */ - /* True if even bits (0:2:4:6) do not equal the correspinding */ - /* even bits (1:3:5:7). */ - - GFXusesDstData = ((rop & 0x55) ^ ((rop >> 1) & 0x55)); - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLOR */ - /* Only one operation can be pending at a time. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_RASTER_MODE, rop16); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SOLID_FILL -// -// This routine MUST be used when performing a solid rectangle fill with -// the ROPs of PATCOPY (0xF0), BLACKNESS (0x00), WHITENESS (0xFF), or -// PATINVERT (0x0F). There is a bug in GXm for these cases that requires a -// workaround. -// -// For BLACKNESS (ROP = 0x00), set the color to 0x0000. -// For WHITENESS (ROP = 0xFF), set the color to 0xFFFF. -// For PATINVERT (ROP = 0x0F), invert the desired color. -// -// X screen X position (left) -// Y screen Y position (top) -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// COLOR fill color -// -// THIS ROUTINE SHOULD NOT BE DIRECTLY CALLED FROM THE DRIVER. The driver -// should always use GFX_pattern_fill and let that routine call this one -// when approipriate. This is to hide quirks specific to MediaGX hardware. -//--------------------------------------------------------------------------- -*/ -void gu1_solid_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long color) -{ - unsigned short section; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Only one operation can be pending at a time. */ - - GFX_WAIT_PENDING; - - /* SET REGISTERS TO DRAW RECTANGLE */ - - WRITE_REG16(GP_DST_XCOOR, x); - WRITE_REG16(GP_DST_YCOOR, y); - WRITE_REG16(GP_HEIGHT, height); - WRITE_REG16(GP_RASTER_MODE, 0x00F0); /* PATCOPY */ - WRITE_REG16(GP_PAT_COLOR_0, (unsigned short) color); - - /* CHECK WIDTH FOR GX BUG WORKAROUND */ - - if (width <= 16) - { - /* OK TO DRAW SMALL RECTANGLE IN ONE PASS */ - - WRITE_REG16(GP_WIDTH, width); - WRITE_REG16(GP_BLIT_MODE, 0); - } - else - { - /* DRAW FIRST PART OF RECTANGLE */ - /* Get to a 16 pixel boundary. */ - - section = 0x10 - (x & 0x0F); - WRITE_REG16(GP_WIDTH, section); - WRITE_REG16(GP_BLIT_MODE, 0); - - /* POLL UNTIL ABLE TO LOAD THE SECOND RECTANGLE */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_DST_XCOOR, x + section); - WRITE_REG16(GP_DST_YCOOR, y); - WRITE_REG16(GP_WIDTH, width - section); - WRITE_REG16(GP_BLIT_MODE, 0); - } -} - -/* -//---------------------------------------------------------------------------- -// GFX_PATTERN_FILL -// -// This routine is used to fill a rectangular region. The pattern must -// be previously loaded using one of GFX_load_*_pattern routines. Also, the -// raster operation must be previously specified using the -// "GFX_load_raster_operation" routine. -// -// X screen X position (left) -// Y screen Y position (top) -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height) -#else -void gfx_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height) -#endif -{ - unsigned short section, buffer_width, blit_mode; - - /* CHECK IF OPTIMIZED SOLID CASES */ - /* Check all 16 bits of the ROP to include solid pattern flags. */ - - switch(GFXsavedRop) - { - /* CHECK FOR SPECIAL CASES WITHOUT DESTINATION DATA */ - /* Need hardware workaround for fast "burst write" cases. */ - - case 0x00F0: - gu1_solid_fill(x, y, width, height, (unsigned short) GFXsavedColor); - break; - case 0x000F: - gu1_solid_fill(x, y, width, height, - (unsigned short) ~GFXsavedColor); - break; - case 0x0000: - gu1_solid_fill(x, y, width, height, 0x0000); - break; - case 0x00FF: - gu1_solid_fill(x, y, width, height, 0xFFFF); - break; - - /* REMAINING CASES REQUIRE DESTINATION DATA OR NOT SOLID COLOR */ - - default: - - /* DETERMINE BLT MODE VALUE */ - /* Still here for non-solid patterns without destination data. */ - - blit_mode = GFXusesDstData ? BM_READ_DST_FB0 : 0; - - /* SET SOURCE EXPANSION MODE */ - /* If the ROP requires source data, then the source data is all 1's */ - /* and then expanded into the desired color in GP_SRC_COLOR_1. */ - - blit_mode |= BM_SOURCE_EXPAND; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Write the registers that do not change for each section. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, height); - - /* SINCE ONLY DESTINATION DATA, WE CAN USE BOTH BB0 AND BB1. */ - /* Therefore, width available = BLT buffer width * 2. */ - - buffer_width = GFXbufferWidthPixels << 1; - - /* REPEAT UNTIL FINISHED WITH RECTANGLE */ - /* Perform BLT in vertical sections, as wide as the BLT buffer */ - /* allows. Hardware does not split the operations, so */ - /* software must do it to avoid large scanlines that would */ - /* overflow the BLT buffers. */ - - while(width > 0) - { - /* DETERMINE WIDTH OF SECTION */ - - if (width > buffer_width) section = buffer_width; - else section = width; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_DST_XCOOR, x); - WRITE_REG16(GP_DST_YCOOR, y); - WRITE_REG16(GP_WIDTH, section); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - - /* ADJUST PARAMETERS FOR NEXT SECTION */ - - width -= section; - x += section; - } - break; - } -} - -/* -//---------------------------------------------------------------------------- -// GFX_COLOR_PATTERN_FILL -// -// This routine is used to render a rectangle using the current raster -// operation and the specified color pattern. It allows an 8x8 color -// pattern to be rendered without multiple calls to the gfx_set_color_pattern -// and gfx_pattern_fill routines. -// -// X screen X position (left) -// Y screen Y position (top) -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *PATTERN pointer to 8x8 color pattern data -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern) -#else -void gfx_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern) -#endif -{ - unsigned short blit_mode, passes, cur_y, pat_y, i; - unsigned short buffer_width, line_width; - unsigned short bpp_shift, section, cur_x; - - /* SET APPROPRIATE INCREMENT */ - - bpp_shift = (GFXbpp > 8) ? 2 : 1; - - /* SET DESTINATION REQUIRED */ - - blit_mode = GFXusesDstData ? BM_READ_DST_FB0 : 0; - - /* SET SOURCE EXPANSION */ - - blit_mode |= BM_SOURCE_EXPAND; - - /* OVERRIDE RASTER MODE TO FORCE A COLOR PATTERN */ - - GFX_WAIT_PENDING; - WRITE_REG16 (GP_RASTER_MODE, (GFXsavedRop & ~RM_PAT_MASK & ~RM_PAT_TRANSPARENT) | RM_PAT_COLOR); - - /* WRITE THE REGISTERS THAT DO NOT CHANGE */ - /* If destination data is required, the width and */ - /* x position will be overwritten. */ - - WRITE_REG16 (GP_HEIGHT, 1); - WRITE_REG16 (GP_WIDTH, width); - WRITE_REG16 (GP_DST_XCOOR, x); - - /* THE ENTIRE PATTERN WILL NOT BE DRAWN IF THE HEIGHT IS LESS THAN 8 */ - - passes = (height < 8) ? height : 8; - - /* SINCE ONLY DESTINATION DATA, WE CAN USE BOTH BB0 AND BB1. */ - /* Therefore, width available = BLT buffer width * 2. */ - - buffer_width = GFXbufferWidthPixels << 1; - - - for (i = 0; i < passes; i++) - { - pat_y = ((y + i) & 7) << bpp_shift; - cur_y = y + i; - - /* WRITE THE PATTERN DATA FOR THE ACTIVE LINE */ - - GFX_WAIT_PENDING; - WRITE_REG32 (GP_PAT_DATA_0, pattern[pat_y]); - WRITE_REG32 (GP_PAT_DATA_1, pattern[pat_y + 1]); - - if (GFXbpp > 8) - { - WRITE_REG32 (GP_PAT_DATA_2, pattern[pat_y + 2]); - WRITE_REG32 (GP_PAT_DATA_3, pattern[pat_y + 3]); - } - - /* SPLIT BLT LINE INTO SECTIONS IF REQUIRED */ - /* If no destination data is required, we can ignore */ - /* the BLT buffers. Otherwise, we must separate the BLT */ - /* so as not to overflow the buffers */ - - if (blit_mode & BM_READ_DST_BB0) - { - line_width = width; - cur_x = x; - - while (line_width) - { - section = (line_width > buffer_width) ? buffer_width : line_width; - cur_y = y + i; - - GFX_WAIT_PENDING; - WRITE_REG16 (GP_DST_XCOOR, cur_x); - WRITE_REG16 (GP_WIDTH, section); - - while (cur_y < y + height) - { - GFX_WAIT_PENDING; - WRITE_REG16 (GP_DST_YCOOR, cur_y); - WRITE_REG16 (GP_BLIT_MODE, blit_mode); - cur_y += 8; - } - - cur_x += section; - line_width -= section; - } - - } - else - { - while (cur_y < y + height) - { - GFX_WAIT_PENDING; - WRITE_REG16 (GP_DST_YCOOR, cur_y); - WRITE_REG16 (GP_BLIT_MODE, blit_mode); - cur_y += 8; - } - } - - } - - - /* RESTORE ORIGINAL ROP AND FLAGS */ - - GFX_WAIT_PENDING; - WRITE_REG16 (GP_RASTER_MODE, GFXsavedRop); - -} - -/* -//---------------------------------------------------------------------------- -// SCREEN TO SCREEN BLT -// -// This routine should be used to perform a screen to screen BLT when the -// ROP does not require destination data. -// -// SRCX screen X position to copy from -// SRCY screen Y position to copy from -// DSTX screen X position to copy to -// DSTY screen Y position to copy to -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height) -#else -void gfx_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height) -#endif -{ - unsigned short section, buffer_width; - unsigned short blit_mode; - - /* CHECK IF RASTER OPERATION REQUIRES DESTINATION DATA */ - - blit_mode = GFXusesDstData ? BM_READ_DST_FB1 | BM_READ_SRC_FB : - BM_READ_SRC_FB; - - /* CHECK Y DIRECTION */ - /* Hardware has support for negative Y direction. */ - - if (dsty > srcy) - { - blit_mode |= BM_REVERSE_Y; - srcy += height - 1; - dsty += height - 1; - } - - /* CHECK X DIRECTION */ - /* Hardware does not support negative X direction since at the time */ - /* of development all supported resolutions could fit a scanline of */ - /* data at once into the BLT buffers (using both BB0 and BB1). This */ - /* code is more generic to allow for any size BLT buffer. */ - - if (dstx > srcx) - { - srcx += width; - dstx += width; - } - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Write the registers that do not change for each section. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, height); - - /* CHECK AVAILABLE BLT BUFFER SIZE */ - /* Can use both BLT buffers if no destination data is required. */ - - buffer_width = GFXusesDstData ? GFXbufferWidthPixels : - GFXbufferWidthPixels << 1; - - /* REPEAT UNTIL FINISHED WITH RECTANGLE */ - /* Perform BLT in vertical sections, as wide as the BLT buffer allows. */ - /* Hardware does not split the operations, so software must do it to */ - /* avoid large scanlines that would overflow the BLT buffers. */ - - while(width > 0) - { - /* CHECK WIDTH OF CURRENT SECTION */ - - if (width > buffer_width) section = buffer_width; - else section = width; - - /* PROGRAM REGISTERS THAT ARE THE SAME FOR EITHER X DIRECTION */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_SRC_YCOOR, srcy); - WRITE_REG16(GP_DST_YCOOR, dsty); - WRITE_REG16(GP_WIDTH, section); - - /* CHECK X DIRECTION */ - - if (dstx > srcx) - { - /* NEGATIVE X DIRECTION */ - /* Still positive X direction within the section. */ - - srcx -= section; - dstx -= section; - WRITE_REG16(GP_SRC_XCOOR, srcx); - WRITE_REG16(GP_DST_XCOOR, dstx); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - } - else - { - /* POSITIVE X DIRECTION */ - - WRITE_REG16(GP_SRC_XCOOR, srcx); - WRITE_REG16(GP_DST_XCOOR, dstx); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - dstx += section; - srcx += section; - } - width -= section; - } -} - -/* -//---------------------------------------------------------------------------- -// SCREEN TO SCREEN TRANSPARENT BLT -// -// This routine should be used to perform a screen to screen BLT when a -// specified color should by transparent. The only supported ROP is SRCCOPY. -// -// SRCX screen X position to copy from -// SRCY screen Y position to copy from -// DSTX screen X position to copy to -// DSTY screen Y position to copy to -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// COLOR transparent color -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color) -#else -void gfx_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color) -#endif -{ - unsigned short section, buffer_width; - unsigned short blit_mode = BM_READ_SRC_FB; - - /* CHECK Y DIRECTION */ - /* Hardware has support for negative Y direction. */ - - if (dsty > srcy) - { - blit_mode |= BM_REVERSE_Y; - srcy += height - 1; - dsty += height - 1; - } - - /* CHECK X DIRECTION */ - /* Hardware does not support negative X direction since at the time */ - /* of development all supported resolutions could fit a scanline of */ - /* data at once into the BLT buffers (using both BB0 and BB1). This */ - /* code is more generic to allow for any size BLT buffer. */ - - if (dstx > srcx) - { - srcx += width; - dstx += width; - } - - /* CALCULATE BLT BUFFER SIZE */ - /* Need to use BB1 to store the BLT buffer data. */ - - buffer_width = GFXbufferWidthPixels; - - /* WRITE TRANSPARENCY COLOR TO BLT BUFFER 1 */ - - if (GFXbpp == 8) - { - color &= 0x00FF; - color |= (color << 8); - } - color = (color & 0x0000FFFF) | (color << 16); - - /* WAIT UNTIL PIPELINE IS NOT BUSY BEFORE LOADING DATA INTO BB1 */ - /* Need to make sure any previous BLT using BB1 is complete. */ - /* Only need to load 32 bits of BB1 for the 1 pixel BLT that follows. */ - - GFX_WAIT_BUSY; - WRITE_SCRATCH32(GFXbb1Base, color); - - /* DO BOGUS BLT TO LATCH DATA FROM BB1 */ - /* Already know graphics pipeline is idle. */ - /* Only need to latch data into the holding registers for the current */ - /* data from BB1. A 1 pixel wide BLT will suffice. */ - - WRITE_REG32(GP_DST_XCOOR, 0); - WRITE_REG32(GP_SRC_XCOOR, 0); - WRITE_REG32(GP_WIDTH, 0x00010001); - WRITE_REG16(GP_RASTER_MODE, 0x00CC); - WRITE_REG16(GP_BLIT_MODE, BM_READ_SRC_FB | BM_READ_DST_BB1); - - /* WRITE REGISTERS FOR REAL SCREEN TO SCREEN BLT */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, height); - WRITE_REG16(GP_RASTER_MODE, 0x10C6); - WRITE_REG32(GP_PAT_COLOR_0, 0xFFFFFFFF); - - /* REPEAT UNTIL FINISHED WITH RECTANGLE */ - /* Perform BLT in vertical sections, as wide as the BLT buffer allows. */ - /* Hardware does not split the operations, so software must do it to */ - /* avoid large scanlines that would overflow the BLT buffers. */ - - while(width > 0) - { - /* CHECK WIDTH OF CURRENT SECTION */ - - if (width > buffer_width) section = buffer_width; - else section = width; - - /* PROGRAM REGISTERS THAT ARE THE SAME FOR EITHER X DIRECTION */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_SRC_YCOOR, srcy); - WRITE_REG16(GP_DST_YCOOR, dsty); - WRITE_REG16(GP_WIDTH, section); - - /* CHECK X DIRECTION */ - /* Again, this must be done in software, and can be removed if the */ - /* display driver knows that the BLT buffers will always be large */ - /* enough to contain an entire scanline of a screen to screen BLT. */ - - if (dstx > srcx) - { - /* NEGATIVE X DIRECTION */ - /* Still positive X direction within the section. */ - - srcx -= section; - dstx -= section; - WRITE_REG16(GP_SRC_XCOOR, srcx); - WRITE_REG16(GP_DST_XCOOR, dstx); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - } - else - { - /* POSITIVE X DIRECTION */ - - WRITE_REG16(GP_SRC_XCOOR, srcx); - WRITE_REG16(GP_DST_XCOOR, dstx); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - dstx += section; - srcx += section; - } - width -= section; - } -} - -/* -//---------------------------------------------------------------------------- -// COLOR BITMAP TO SCREEN BLT -// -// This routine transfers color bitmap data to the screen. For most cases, -// when the ROP is SRCCOPY, it may be faster to write a separate routine that -// copies the data to the frame buffer directly. This routine should be -// used when the ROP requires destination data. -// -// Transparency is handled by another routine. -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -//---------------------------------------------------------------------------- -*/ - -#if GFX_2DACCEL_DYNAMIC -void gu1_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch) -#else -void gfx_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch) -#endif -{ - unsigned short section, buffer_width; - unsigned short blit_mode = BM_READ_SRC_BB0; - unsigned short temp_height; - unsigned long dword_bytes_needed, bytes_extra; - unsigned long bpp_shift; - long array_offset; - - /* CHECK SIZE OF BLT BUFFER */ - - buffer_width = GFXbufferWidthPixels; - - /* CHECK IF RASTER OPERATION REQUIRES DESTINATION DATA */ - /* If no destination data, we have twice the room for */ - /* source data. */ - - if (GFXusesDstData) - blit_mode |= BM_READ_DST_FB1; - else - buffer_width <<= 1; - - /* SET THE SCRATCHPAD BASE */ - - SET_SCRATCH_BASE (GFXbb0Base); - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Write the registers that do not change for each section. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, 1); - - bpp_shift = (GFXbpp + 7) >> 4; - - while (width > 0) - { - if (width > buffer_width) section = buffer_width; - else section = width; - - dword_bytes_needed = (section << bpp_shift) & ~3l; - bytes_extra = (section << bpp_shift) & 3l; - - temp_height = height; - - /* WRITE THE REGISTERS FOR EACH SECTION */ - /* The GX hardware will auto-increment the Y coordinate, meaning */ - /* that we don't have to. */ - - WRITE_REG16 (GP_WIDTH, section); - WRITE_REG16 (GP_DST_XCOOR, dstx); - WRITE_REG16 (GP_DST_YCOOR, dsty); - - /* CALCULATE THE BITMAP OFFSET */ - - array_offset = (unsigned long)srcy * (long)pitch + ((long)srcx << bpp_shift); - - while (temp_height--) - { - GFX_WAIT_PIPELINE; - - /* WRITE ALL DATA TO THE BLT BUFFERS */ - /* The WRITE_SCRATCH_STRING macro assumes that the data begins at the */ - /* scratchpad offset set by the SET_SCRATCH_BASE macro. */ - - WRITE_SCRATCH_STRING (dword_bytes_needed, bytes_extra, data, array_offset); - WRITE_REG16 (GP_BLIT_MODE, blit_mode); - - array_offset += pitch; - } - - width -= section; - srcx += section; - dstx += section; - } -} - -/* -//---------------------------------------------------------------------------- -// COLOR BITMAP TO SCREEN TRANSPARENT BLT -// -// This routine transfers color bitmap data to the screen with transparency. -// The transparent color is specified. The only supported ROP is SRCCOPY, -// meaning that transparency cannot be applied if the ROP requires -// destination data (this is a hardware restriction). -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -// COLOR transparent color -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color) -#else -void gfx_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color) -#endif -{ - unsigned short section, buffer_width; - unsigned short temp_height; - unsigned long dword_bytes_needed, bytes_extra; - unsigned long bpp_shift; - long array_offset; - - /* CHECK SIZE OF BLT BUFFER */ - - buffer_width = GFXbufferWidthPixels; - - /* WRITE TRANSPARENCY COLOR TO BLT BUFFER 1 */ - - if (GFXbpp == 8) - { - color &= 0x00FF; - color |= (color << 8); - } - color = (color & 0x0000FFFF) | (color << 16); - - /* WAIT UNTIL PIPELINE IS NOT BUSY BEFORE LOADING DATA INTO BB1 */ - /* Need to make sure any previous BLT using BB1 is complete. */ - /* Only need to load 32 bits of BB1 for the 1 pixel BLT that follows. */ - - GFX_WAIT_PIPELINE; - GFX_WAIT_PENDING; - WRITE_SCRATCH32(GFXbb1Base, color); - - /* DO BOGUS BLT TO LATCH DATA FROM BB1 */ - /* Already know graphics pipeline is idle. */ - /* Only need to latch data into the holding registers for the current */ - /* data from BB1. A 1 pixel wide BLT will suffice. */ - - WRITE_REG32(GP_DST_XCOOR, 0); - WRITE_REG32(GP_SRC_XCOOR, 0); - WRITE_REG32(GP_WIDTH, 0x00010001); - WRITE_REG16(GP_RASTER_MODE, 0x00CC); - WRITE_REG16(GP_BLIT_MODE, BM_READ_SRC_FB | BM_READ_DST_BB1); - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Write the registers that do not change for each section. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, 1); - WRITE_REG16(GP_RASTER_MODE, 0x10C6); - WRITE_REG32(GP_PAT_COLOR_0, 0xFFFFFFFF); - - bpp_shift = (GFXbpp + 7) >> 4; - - /* SET THE SCRATCHPAD BASE */ - - SET_SCRATCH_BASE (GFXbb0Base); - - while (width > 0) - { - if (width > buffer_width) section = buffer_width; - else section = width; - - dword_bytes_needed = (section << bpp_shift) & ~3l; - bytes_extra = (section << bpp_shift) & 3l; - - temp_height = height; - - /* WRITE THE REGISTERS FOR EACH SECTION */ - /* The GX hardware will auto-increment the Y coordinate, meaning */ - /* that we don't have to. */ - - WRITE_REG16 (GP_WIDTH, section); - WRITE_REG16 (GP_DST_XCOOR, dstx); - WRITE_REG16 (GP_DST_YCOOR, dsty); - - /* CALCULATE THE BITMAP OFFSET */ - - array_offset = (unsigned long)srcy * (long)pitch + ((long)srcx << bpp_shift); - - while (temp_height--) - { - GFX_WAIT_PIPELINE; - - /* WRITE ALL DATA TO THE BLT BUFFERS */ - /* The WRITE_SCRATCH_STRING macro assumes that the data begins at the */ - /* scratchpad offset set by the SET_SCRATCH_BASE macro. */ - - WRITE_SCRATCH_STRING (dword_bytes_needed, bytes_extra, data, array_offset); - WRITE_REG16 (GP_BLIT_MODE, BM_READ_SRC_BB0); - - array_offset += pitch; - } - - width -= section; - srcx += section; - dstx += section; - } -} - -/* -//---------------------------------------------------------------------------- -// MONOCHROME BITMAP TO SCREEN BLT -// -// This routine transfers monochrome bitmap data to the screen. -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch) -#else -void gfx_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch) -#endif -{ - unsigned short section, buffer_width; - unsigned short blit_mode = BM_READ_SRC_BB0 | BM_SOURCE_EXPAND; - unsigned short temp_height; - unsigned long dword_bytes_needed, bytes_extra; - long array_offset; - - /* CHECK IF RASTER OPERATION REQUIRES DESTINATION DATA */ - /* If no destination data, the source data will always fit. */ - /* So, in that event we will set the buffer width to a */ - /* fictitiously large value such that the BLT is never split. */ - - if (GFXusesDstData) - { - buffer_width = GFXbufferWidthPixels; - blit_mode |= BM_READ_DST_FB1; - } - else - buffer_width = 3200; - - /* CHECK IF DATA ALREADY IN BLIT BUFFER */ - /* If the pointer is NULL, data for the full BLT is already there */ - /* WARNING: This could cause problems if destination data is */ - /* involved and it overflows the BLT buffer. Need to remove */ - /* this option and change the drivers to use a temporary buffer. */ - - if (!data) - { - GFX_WAIT_PENDING; - WRITE_REG16(GP_SRC_XCOOR, srcx & 7); - WRITE_REG16(GP_DST_XCOOR, dstx); - WRITE_REG16(GP_DST_YCOOR, dsty); - WRITE_REG16(GP_WIDTH, width); - WRITE_REG16(GP_HEIGHT, height); - WRITE_REG16(GP_BLIT_MODE, blit_mode); - return; - } - - /* SET THE SCRATCHPAD BASE */ - - SET_SCRATCH_BASE (GFXbb0Base); - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Write the registers that do not change for each section. */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, 1); - - while (width > 0) - { - if (width > buffer_width) section = buffer_width; - else section = width; - - /* CALCULATE BYTES NEEDED */ - /* Add 1 for possible alignment issues. */ - - dword_bytes_needed = ((section + 7 + (srcx & 7)) >> 3) & ~3l; - bytes_extra = ((section + 7 + (srcx & 7)) >> 3) & 3l; - - temp_height = height; - - /* WRITE THE REGISTERS FOR EACH SECTION */ - /* The GX hardware will auto-increment the Y coordinate, meaning */ - /* that we don't have to. */ - - WRITE_REG16 (GP_WIDTH, section); - WRITE_REG16 (GP_DST_XCOOR, dstx); - WRITE_REG16 (GP_DST_YCOOR, dsty); - WRITE_REG16 (GP_SRC_XCOOR, srcx & 7); - - /* CALCULATE THE BITMAP OFFSET */ - - array_offset = (unsigned long)srcy * (long)pitch + ((long)srcx >> 3); - - while (temp_height--) - { - GFX_WAIT_PIPELINE; - - /* WRITE ALL DATA TO THE BLT BUFFERS */ - /* The WRITE_SCRATCH_STRING macro assumes that the data begins at the */ - /* scratchpad offset set by the SET_SCRATCH_BASE macro. */ - - WRITE_SCRATCH_STRING (dword_bytes_needed, bytes_extra, data, array_offset); - WRITE_REG16 (GP_BLIT_MODE, blit_mode); - - array_offset += pitch; - } - - width -= section; - srcx += section; - dstx += section; - } -} - -/* -//---------------------------------------------------------------------------- -// MONOCHROME TEXT BLT -// -// This routine transfers contiguous monochrome text data to the screen. -// -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data) -#else -void gfx_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data) -#endif -{ - unsigned long dword_bytes_needed, bytes_extra; - long pitch, buffer_bytes, data_bytes; - - /* CALCULATE DATA SIZE */ - - pitch = (width + 7) >> 3; - data_bytes = (long)height * pitch; - - /* CHECK FOR SIMPLE CASE */ - /* This routine is designed to render a source copy text glyph. If destination */ - /* data is required or the source data will not fit, we will punt the operation */ - /* to the more versatile (and slow) mono bitmap routine. */ - - if (GFXbpp > 8) buffer_bytes = GFXbufferWidthPixels << 1; - else buffer_bytes = GFXbufferWidthPixels; - - if (GFXusesDstData || data_bytes > buffer_bytes) - { - gfx_mono_bitmap_to_screen_blt (0, 0, dstx, dsty, width, height, data, (short)pitch); - return; - } - - /* SET THE SCRATCHPAD BASE */ - - SET_SCRATCH_BASE (GFXbb0Base); - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - - dword_bytes_needed = data_bytes & ~3l; - bytes_extra = data_bytes & 3l; - - GFX_WAIT_PENDING; - WRITE_REG16(GP_HEIGHT, height); - WRITE_REG16 (GP_WIDTH, width); - WRITE_REG16 (GP_DST_XCOOR, dstx); - WRITE_REG16 (GP_DST_YCOOR, dsty); - WRITE_REG16 (GP_SRC_XCOOR, 0); - - /* WRITE ALL DATA TO THE BLT BUFFERS */ - /* The WRITE_SCRATCH_STRING macro assumes that the data begins at the */ - /* scratchpad offset set by the SET_SCRATCH_BASE macro. */ - - GFX_WAIT_PIPELINE; - - WRITE_SCRATCH_STRING (dword_bytes_needed, bytes_extra, data, 0); - WRITE_REG16 (GP_BLIT_MODE, BM_READ_SRC_BB0 | BM_SOURCE_TEXT); -} - -/* -//---------------------------------------------------------------------------- -// BRESENHAM LINE -// -// This routine draws a vector using the specified Bresenham parameters. -// Currently this file does not support a routine that accepts the two -// endpoints of a vector and calculates the Bresenham parameters. If it -// ever does, this routine is still required for vectors that have been -// clipped. -// -// X screen X position to start vector -// Y screen Y position to start vector -// LENGTH length of the vector, in pixels -// INITERR Bresenham initial error term -// AXIALERR Bresenham axial error term -// DIAGERR Bresenham diagonal error term -// FLAGS VM_YMAJOR, VM_MAJOR_INC, VM_MINOR_INC -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu1_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#else -void gfx_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#endif -{ - unsigned short vector_mode = flags; - if (GFXusesDstData) vector_mode |= VM_READ_DST_FB; - - /* CHECK NULL LENGTH */ - - if (!length) return; - - /* LOAD THE REGISTERS FOR THE VECTOR */ - - GFX_WAIT_PENDING; - WRITE_REG16(GP_DST_XCOOR, x); - WRITE_REG16(GP_DST_YCOOR, y); - WRITE_REG16(GP_VECTOR_LENGTH, length); - WRITE_REG16(GP_INIT_ERROR, initerr); - WRITE_REG16(GP_AXIAL_ERROR, axialerr); - WRITE_REG16(GP_DIAG_ERROR, diagerr); - WRITE_REG16(GP_VECTOR_MODE, vector_mode); -} - -/*--------------------------------------------------------------------------- - * GFX_WAIT_UNTIL_IDLE - * - * This routine waits until the graphics engine is idle. This is required - * before allowing direct access to the frame buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu1_wait_until_idle(void) -#else -void gfx_wait_until_idle(void) -#endif -{ - GFX_WAIT_BUSY; -} - -/*--------------------------------------------------------------------------- - * GFX_TEST_BLT_PENDING - * - * This routine returns 1 if a BLT is pending, meaning that a call to - * perform a rendering operation would stall. Otherwise it returns 0. - * It is used by Darwin during random testing to only start a BLT - * operation when it knows the Durango routines won't spin on graphics - * (so Darwin can continue to do frame buffer reads and writes). - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -int gu1_test_blt_pending(void) -#else -int gfx_test_blt_pending(void) -#endif -{ - if(READ_REG16(GP_BLIT_STATUS) & BS_BLIT_PENDING) return(1); - else return(0); -} - -/*--------------------------------------------------------------------------- - * BLT BUFFERS!!!!! - *--------------------------------------------------------------------------- - */ - -/* THE BOOT CODE MUST SET THE BLT BUFFER BASES USING THE "CPU_WRITE" */ -/* INSTRUCTION TO ONE OF THE FOLLOWING VALUES: */ - -#define BB0_BASE_2K 0x800 -#define BB1_BASE_2K 0xB30 -#define BB0_BASE_3K 0x400 -#define BB1_BASE_3K 0x930 - -/*--------------------------------------------------------------------------- - * gu1_detect_blt_buffer_base - * - * This detection is hidden from the driver by being called from the - * "gfx_set_bpp" routine. - * - * This is fairly ugly for the following reasons: - * - * - It is the boot code that must set the BLT buffer bases to the - * appropriate values and load the scratchpad tags. - * - The old drivers would also set the base address values to what they - * knew they should be for the 2K or 3K scratchpad configuration. - * - Unfortunately, to set the base addresses requires the use of the - * CPU_WRITE instruction, an instruction specific to GX. - * - Using the CPU_WRITE instruction requires the use of assembly to - * produce the appropriate op codes. - * - Assembly is something that is avoided in Durango because it is not - * platform independent. Some compilers do not support inline assembly. - * - Therefore Durango cannot use the CPU_WRITE instruction. - * - Therefore drivers using Durango must rely on the boot code to set - * the appropriate values. Durango uses this routine to check where - * the base addresses have been set. - * - Unfortunately, it is not as simple as using IO to check for 2K or 3K - * scratchpad size. In VSA1, even though the boot code may set it for - * 3K, SoftVGA comes along and resets it to 2K for it's use in text - * redraws. It used to be that the display driver would set it back - * to 3K. - * - So, the Durango code was changed to just always use 2K. - * - But, the XpressROM code sets it for 3K, and the newer versions of - * SoftVGA do not interfere with that, so then Durango needs to use - * the 3K values to work properly. - * - Therefore, Durango does somewhat of a kludge by writing to directly - * to the scratchpad at both the 2K and 3K locations, then performing - * a unobtrusive BLT that loads data into BB0 (the graphics engine - * always knows the true base). After the BLT, Durango looks to see - * which location changed to know where the base address is. - * - This is a relatively simple way to allow Durango to work on old - * and new platforms without using theCPU_WRITE instructions. - * - * To summarize, the BLT buffers are one of the most painful aspects of - * the GX graphics unit design, and have been removed from future designs - * (the graphics unit has its own dedicated RAM). Durango has tried to - * hide the BLT buffer use from the drivers. - *--------------------------------------------------------------------------- - */ -void gu1_detect_blt_buffer_base(void) -{ - /* ASSUME 2K */ - - GFXbb0Base = BB0_BASE_2K; - GFXbb1Base = BB1_BASE_2K; - - /* CHECK IF SCRATCHPAD IS SET TO 3K OR 4K */ - /* Boot code should still set 3K values for 4K. */ - - if (gfx_gxm_config_read(GXM_CONFIG_GCR) & 0x08) - { - /* WRITE DATA TO 3K LOCATION */ - - GFX_WAIT_BUSY; - WRITE_SCRATCH32(BB0_BASE_3K, 0xFEEDFACE); - - /* HAVE THE GRAPHICS UNIT STORE SOMETHING IN BB0 */ - - WRITE_REG32(GP_DST_XCOOR, 0x00000000); /* AT (0,0) */ - WRITE_REG32(GP_WIDTH, 0x00010004); /* 4x1 BLT */ - WRITE_REG16(GP_RASTER_MODE, 0x00AA); /* KEEP DST */ - WRITE_REG16(GP_BLIT_MODE, BM_READ_DST_FB0); /* STORE IN BB0 */ - - /* CHECK 3K LOCATION */ - /* Breaks if data happened to be 0xFEEDFACE - unlikely. */ - - GFX_WAIT_BUSY; - if (READ_SCRATCH32(BB0_BASE_3K) != 0xFEEDFACE) - { - GFXbb0Base = BB0_BASE_3K; - GFXbb1Base = BB1_BASE_3K; - } - } -} - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu2.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu2.c deleted file mode 100644 index 68952ac1e..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu2.c +++ /dev/null @@ -1,2208 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/rndr_gu2.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: rndr_gu2.c $ - * - * This file contains routines to program the 2D acceleration hardware for - * the second generation graphics unit. - * - * Basic rendering routines (common to all Geode processors): - * gfx_set_bpp - * gfx_set_solid_pattern - * gfx_set_mono_pattern - * gfx_set_color_pattern - * gfx_set_solid_source - * gfx_set_mono_source - * gfx_set_raster_operation - * gfx_pattern_fill - * gfx_color_pattern_fill - * gfx_screen_to_screen_blt - * gfx_screen_to_screen_xblt - * gfx_color_bitmap_to_screen_blt - * gfx_color_bitmap_to_screen_xblt - * gfx_mono_bitmap_to_screen_blt - * gfx_bresenham_line - * gfx_wait_until_idle - * - * Extended rendering routines for second generation functionality: - * gfx2_set_source_stride - * gfx2_set_destination_stride - * gfx2_set_pattern_origins - * gfx2_set_source_transparency - * gfx2_set_alpha_mode - * gfx2_set_alpha_value - * gfx2_pattern_fill - * gfx2_color_pattern_fill - * gfx2_screen_to_screen_blt - * gfx2_mono_expand_blt - * gfx2_color_bitmap_to_screen_blt - * gfx2_mono_bitmap_to_screen_blt - * gfx2_bresenham_line - * gfx2_sync_to_vblank - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#define GU2_WAIT_PENDING while(READ_GP32(MGP_BLT_STATUS) & MGP_BS_BLT_PENDING) -#define GU2_WAIT_BUSY while(READ_GP32(MGP_BLT_STATUS) & MGP_BS_BLT_BUSY) -#define GU2_WAIT_HALF_EMPTY while(!(READ_GP32(MGP_BLT_STATUS) & MGP_BS_HALF_EMPTY)) - -/* PATTERN SWIZZLES */ - -#define WORD_SWIZZLE(x) (((x) << 16) | ((x) >> 16)) -#define BYTE_SWIZZLE(x) (((x) << 24) | ((x) >> 24) | (((x) << 8) & 0x00FF0000) | (((x) >> 8) & 0x0000FF00)) - -/* GLOBAL VARIABLES USED BY THE RENDERING ROUTINES */ - -unsigned long gu2_bpp; -unsigned long gu2_pitch = 1280; -unsigned long gu2_src_pitch = 1280; -unsigned long gu2_dst_pitch = 1280; -unsigned long gu2_xshift = 1; -unsigned long gu2_pattern_origin = 0; -unsigned long gu2_rop32; -unsigned long gu2_alpha32 = 0; -unsigned long gu2_alpha_value = 0; -unsigned long gu2_alpha_mode = 0; -unsigned long gu2_alpha_active = 0; -unsigned short gu2_alpha_blt_mode = 0; -unsigned short gu2_alpha_vec_mode = 0; -unsigned short gu2_blt_mode = 0; -unsigned short gu2_vector_mode = 0; -unsigned short gu2_bm_throttle = 0; -unsigned short gu2_vm_throttle = 0; -int gu2_current_line = 0; - -/*--------------------------------------------------------------------------- - * GFX_RESET_PITCH (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine resets all pitches in the graphics engine to one value. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu2_reset_pitch(unsigned short pitch) -#else -void gfx_reset_pitch(unsigned short pitch) -#endif -{ - gu2_pitch = pitch; - gu2_dst_pitch = pitch; - gu2_src_pitch = pitch; -} - -/*--------------------------------------------------------------------------- - * GFX_SET_BPP - * - * This routine sets the bits per pixel value in the graphics engine. - * It is also stored in the static variable "gu2_bpp" to use in the future - * calls to the rendering routines. That variable contains the hardware - * specific value to load into the MGP_RASTER_MODE register. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_bpp(unsigned short bpp) -#else -void gfx_set_bpp(unsigned short bpp) -#endif -{ - GFXbpp = bpp; - - /* COVERT TO BPP/FORMAT VALUE */ - /* Save in global to combine with ROP later. */ - /* Could write register here and then use byte access for */ - /* the ROP, but would need to set other 24 bits to make */ - /* sure all are set to their appropriate values. */ - - switch(bpp) - { - case 8: gu2_bpp = MGP_RM_BPPFMT_332; gu2_xshift = 0; break; - case 12: gu2_bpp = MGP_RM_BPPFMT_4444; gu2_xshift = 1; break; - case 15: gu2_bpp = MGP_RM_BPPFMT_1555; gu2_xshift = 1; break; - case 16: gu2_bpp = MGP_RM_BPPFMT_565; gu2_xshift = 1; break; - case 32: gu2_bpp = MGP_RM_BPPFMT_8888; gu2_xshift = 2; break; - } - - /* SET INITIAL ROP BASED ONLY ON BPP */ - /* Needs to be set before loading any pattern or source colors. */ - /* We must wait for BUSY because these bits are not pipelined */ - /* in the hardware. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_RASTER_MODE, gu2_bpp); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_SOLID_SOURCE -// -// This routine is used to specify a solid source color. For the Xfree96 -// display driver, the source color is used to specify a planemask and the -// ROP is adjusted accordingly. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_solid_source(unsigned long color) -#else -void gfx_set_solid_source(unsigned long color) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* WRITE REGISTERS TO SPECIFY SOURCE COLOR */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_SRC_COLOR_FG, color); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_MONO_SOURCE -// -// This routine is used to specify the monochrome source colors. -// It must be called *after* loading any pattern data (those routines -// clear the source flags). -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent) -#else -void gfx_set_mono_source(unsigned long bgcolor, unsigned long fgcolor, - unsigned short transparent) -#endif -{ - /* SET TRANSPARENCY FLAG */ - - GFXsourceFlags = transparent ? MGP_RM_SRC_TRANS : 0; - - /* WRITE COLOR VALUES */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_SRC_COLOR_FG, fgcolor); - WRITE_GP32(MGP_SRC_COLOR_BG, bgcolor); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_SOLID_PATTERN -// -// This routine is used to specify a solid pattern color. It is called -// before performing solid rectangle fills or more complicated BLTs that -// use a solid pattern color. -// -// The driver should always call "gfx_load_raster_operation" after a call -// to this routine to make sure that the pattern flags are set appropriately. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_solid_pattern(unsigned long color) -#else -void gfx_set_solid_pattern(unsigned long color) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = 0; - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLOR */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_bpp); - WRITE_GP32(MGP_PAT_COLOR_0, color); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_MONO_PATTERN -// -// This routine is used to specify a monochrome pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparent) -#else -void gfx_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned char transparent) -#endif -{ - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - if (transparent) - GFXpatternFlags = MGP_RM_PAT_MONO | MGP_RM_PAT_TRANS; - else GFXpatternFlags = MGP_RM_PAT_MONO; - - /* POLL UNTIL ABLE TO WRITE THE PATTERN COLOR */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_bpp | GFXpatternFlags); - WRITE_GP32(MGP_PAT_COLOR_0, bgcolor); - WRITE_GP32(MGP_PAT_COLOR_1, fgcolor); - WRITE_GP32(MGP_PAT_DATA_0, data0); - WRITE_GP32(MGP_PAT_DATA_1, data1); -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_COLOR_PATTERN -// -// This routine is used to specify a color pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1,unsigned long data2,unsigned long data3, unsigned char transparent) -#else -void gfx_set_color_pattern(unsigned long bgcolor, unsigned long fgcolor, - unsigned long data0, unsigned long data1, unsigned long data2,unsigned long data3,unsigned char transparent) -#endif -{ - /* REMOVE */ -} - -/* -//--------------------------------------------------------------------------- -// GFX_LOAD_COLOR_PATTERN_LINE -// -// This routine is used to load a single line of a 8x8 color pattern. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_load_color_pattern_line (short y, unsigned long *pattern_8x8) - -#else -void gfx_load_color_pattern_line (short y, unsigned long *pattern_8x8) -#endif -{ - unsigned long temp1, temp2, temp3, temp4; - - /* CLEAR TRANSPARENCY FLAG */ - - GFXsourceFlags = 0; - - /* SET PATTERN FLAGS */ - - GFXpatternFlags = MGP_RM_PAT_COLOR; - - /* OVERRIDE THE RASTER MODE REGISTER */ - /* If the pattern format is set to anything but color */ - /* before loading the registers, some of the data will */ - /* be duplicated according to the current mode. */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, (gu2_rop32 & ~MGP_RM_PAT_FLAGS) | MGP_RM_PAT_COLOR); - - /* LOAD THE PATTERN DATA */ - /* This routine is designed to work in tandem with gfx_pattern_fill. */ - /* It is used for cases when multiple BLTs with color pattern data */ - /* are desired on the same line. It would be inefficient to */ - /* repeatedly call gfx_color_pattern_fill for each single-line BLT. */ - /* So, we will simply replicate the pattern data across all available */ - /* lines such that the pattern y origin plays no part in the BLT. */ - - /* 8 BPP */ - - if (gu2_xshift == 0) - { - pattern_8x8 += (y & 7) << 1; - temp1 = BYTE_SWIZZLE(pattern_8x8[0]); - temp2 = BYTE_SWIZZLE(pattern_8x8[1]); - WRITE_GP32 (MGP_PAT_DATA_1, temp1); - WRITE_GP32 (MGP_PAT_DATA_0, temp2); - WRITE_GP32 (MGP_PAT_COLOR_1, temp1); - WRITE_GP32 (MGP_PAT_COLOR_0, temp2); - - GU2_WAIT_BUSY; - WRITE_GP32 (MGP_PAT_COLOR_3, temp1); - WRITE_GP32 (MGP_PAT_COLOR_2, temp2); - WRITE_GP32 (MGP_PAT_COLOR_5, temp1); - WRITE_GP32 (MGP_PAT_COLOR_4, temp2); - } - else if (gu2_xshift == 1) - { - pattern_8x8 += (y & 7) << 2; - temp1 = WORD_SWIZZLE(pattern_8x8[0]); - temp2 = WORD_SWIZZLE(pattern_8x8[1]); - temp3 = WORD_SWIZZLE(pattern_8x8[2]); - temp4 = WORD_SWIZZLE(pattern_8x8[3]); - - WRITE_GP32 (MGP_PAT_COLOR_1, temp1); - WRITE_GP32 (MGP_PAT_COLOR_0, temp2); - WRITE_GP32 (MGP_PAT_DATA_1, temp3); - WRITE_GP32 (MGP_PAT_DATA_0, temp4); - - GU2_WAIT_BUSY; - WRITE_GP32 (MGP_PAT_COLOR_5, temp1); - WRITE_GP32 (MGP_PAT_COLOR_4, temp2); - WRITE_GP32 (MGP_PAT_COLOR_3, temp3); - WRITE_GP32 (MGP_PAT_COLOR_2, temp4); - } - else - { - pattern_8x8 += (y & 7) << 3; - - WRITE_GP32(MGP_PAT_COLOR_1, pattern_8x8[4]); - WRITE_GP32(MGP_PAT_COLOR_0, pattern_8x8[5]); - WRITE_GP32(MGP_PAT_DATA_1, pattern_8x8[6]); - WRITE_GP32(MGP_PAT_DATA_0, pattern_8x8[7]); - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_5, pattern_8x8[0]); - WRITE_GP32(MGP_PAT_COLOR_4, pattern_8x8[1]); - WRITE_GP32(MGP_PAT_COLOR_3, pattern_8x8[2]); - WRITE_GP32(MGP_PAT_COLOR_2, pattern_8x8[3]); - } -} - -/* -//--------------------------------------------------------------------------- -// GFX_SET_RASTER_OPERATION -// -// This routine loads the specified raster operation. It sets the pattern -// flags appropriately. -//--------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_set_raster_operation(unsigned char rop) -#else -void gfx_set_raster_operation(unsigned char rop) -#endif -{ - /* DISABLE ALPHA BLENDING */ - - gu2_alpha_active = 0; - - /* GENERATE 32-BIT VERSION OF ROP WITH PATTERN FLAGS */ - - gu2_rop32 = (unsigned long) rop | GFXpatternFlags | gu2_bpp; - - /* CHECK IF SOURCE FLAGS SHOULD BE MERGED */ - - if ((rop & 0x33) ^ ((rop >> 2) & 0x33)) gu2_rop32 |= GFXsourceFlags; - - /* SET FLAG INDICATING ROP REQUIRES DESTINATION DATA */ - /* True if even bits (0:2:4:6) do not equal the corresponding */ - /* even bits (1:3:5:7). */ - - if ((rop & 0x55) ^ ((rop >> 1) & 0x55)) - { - gu2_blt_mode = MGP_BM_DST_REQ; - gu2_vector_mode = MGP_VM_DST_REQ; - } - else - { - gu2_blt_mode = 0; - gu2_vector_mode = 0; - } -} - -/* -//---------------------------------------------------------------------------- -// GFX_PATTERN_FILL -// -// This routine is used to fill a rectangular region. The pattern must -// be previously loaded using one of GFX_load_*_pattern routines. Also, the -// raster operation must be previously specified using the -// "GFX_load_raster_operation" routine. -// -// X screen X position (left) -// Y screen Y position (top) -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height) -#else -void gfx_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height) -#endif -{ - unsigned long offset = 0, size; - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE STARTING OFFSET */ - - offset = (unsigned long) y * gu2_pitch + - (((unsigned long) x) << gu2_xshift); - - /* CHECK IF PATTERN ORIGINS NEED TO BE SET */ - - if (GFXpatternFlags) - { - /* COMBINE X AND Y PATTERN ORIGINS WITH OFFSET */ - - offset |= ((unsigned long) (x & 7)) << 26; - offset |= ((unsigned long) (y & 7)) << 29; - } - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_DST_OFFSET, offset); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_pitch); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode); -} - -/* -//---------------------------------------------------------------------------- -// GFX_COLOR_PATTERN_FILL -// -// This routine is used to render a rectangle using the current raster -// operation and the specified color pattern. It allows an 8x8 color -// pattern to be rendered without multiple calls to the gfx_set_color_pattern -// and gfx_pattern_fill routines. -// -// X screen X position (left) -// Y screen Y position (top) -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *PATTERN pointer to 8x8 color pattern data -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern) -#else -void gfx_color_pattern_fill(unsigned short x, unsigned short y, - unsigned short width, unsigned short height, unsigned long *pattern) -#endif -{ - /* CALL GFX2 ROUTINE TO AVOID DUPLICATION OF CODE */ - - unsigned long offset = (unsigned long) y * gu2_pitch + - (((unsigned long) x) << gu2_xshift); - unsigned long origin = gu2_pattern_origin; - unsigned long pitch = gu2_dst_pitch; - gfx2_set_pattern_origin(x, y); - gfx2_set_destination_stride((unsigned short) gu2_pitch); - gfx2_color_pattern_fill(offset, width, height, pattern); - - /* RESTORE GFX2 VALUES */ - - gu2_pattern_origin = origin; - gu2_dst_pitch = pitch; -}; - -/* -//---------------------------------------------------------------------------- -// SCREEN TO SCREEN BLT -// -// This routine should be used to perform a screen to screen BLT when the -// ROP does not require destination data. -// -// SRCX screen X position to copy from -// SRCY screen Y position to copy from -// DSTX screen X position to copy to -// DSTY screen Y position to copy to -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height) -#else -void gfx_screen_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height) -#endif -{ - unsigned long srcoffset, dstoffset, size; - unsigned short blt_mode; - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE THE DIRECTION OF THE BLT */ - - blt_mode = gu2_blt_mode | MGP_BM_SRC_FB; - if (dstx > srcx) - { - blt_mode |= MGP_BM_NEG_XDIR; - srcx += width - 1; - dstx += width - 1; - } - if (dsty > srcy) - { - blt_mode |= MGP_BM_NEG_YDIR; - srcy += height - 1; - dsty += height - 1; - } - - /* CALCULATE STARTING OFFSETS */ - - srcoffset = (unsigned long) srcy * gu2_pitch + - (((unsigned long) srcx) << gu2_xshift); - dstoffset = ((unsigned long) dsty * gu2_pitch + - (((unsigned long) dstx) << gu2_xshift)) & 0xFFFFFF; - - /* MERGE PATTERN INFORMATION */ - /* This must be done after the x and y coordinates have been updated, */ - /* as the x and y pattern origins correspond to the first ROPed pixel. */ - - if (GFXpatternFlags) - { - /* COMBINE X AND Y PATTERN ORIGINS WITH OFFSET */ - - dstoffset |= ((unsigned long) (dstx & 7)) << 26; - dstoffset |= ((unsigned long) (dsty & 7)) << 29; - } - - /* TURN INTO BYTE ADDRESS IF NEGATIVE X DIRECTION */ - /* This is a quirk of the hardware. */ - - if (blt_mode & MGP_BM_NEG_XDIR) - { - srcoffset += (1 << gu2_xshift) - 1; - dstoffset += (1 << gu2_xshift) - 1; - } - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_SRC_OFFSET, srcoffset); - WRITE_GP32(MGP_DST_OFFSET, dstoffset); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_pitch | (gu2_pitch << 16)); - WRITE_GP16(MGP_BLT_MODE, blt_mode); -} - -/* -//---------------------------------------------------------------------------- -// SCREEN TO SCREEN TRANSPARENT BLT -// -// This routine should be used to perform a screen to screen BLT when a -// specified color should by transparent. The only supported ROP is SRCCOPY. -// -// SRCX screen X position to copy from -// SRCY screen Y position to copy from -// DSTX screen X position to copy to -// DSTY screen Y position to copy to -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// COLOR transparent color -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color) -#else -void gfx_screen_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned long color) -#endif -{ - unsigned long rop32; - - /* SAVE ORIGINAL RASTER MODE SETTINGS */ - - rop32 = gu2_rop32; - - /* WRITE REGISTERS TO SPECIFY COLOR TRANSPARENCY */ - /* Match GU1 implementation that only allows SRCCOPY for the ROP. */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_SRC_COLOR_FG, color); - WRITE_GP32(MGP_SRC_COLOR_BG, 0xFFFFFFFF); - - /* SET GLOBAL RASTER SETTINGS */ - /* This is needed, as the screen-to-screen BLT */ - /* routine will overwrite the raster mode register. */ - - gu2_rop32 = gu2_bpp | MGP_RM_SRC_TRANS | 0xCC; - - /* CALL NORMAL SCREEN TO SCREEN BLT ROUTINE */ - - gfx_screen_to_screen_blt(srcx, srcy, dstx, dsty, width, height); - - /* RESTORE GLOBAL RASTER SETTINGS */ - - gu2_rop32 = rop32; -} - -/* -//---------------------------------------------------------------------------- -// COLOR BITMAP TO SCREEN BLT -// -// This routine transfers color bitmap data to the screen. -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -// -// Transparency is handled by another routine. -//---------------------------------------------------------------------------- -*/ - -#if GFX_2DACCEL_DYNAMIC -void gu2_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch) -#else -void gfx_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch) -#endif -{ - unsigned long dstoffset, srcoffset, size, bytes; - unsigned long offset, temp_offset; - unsigned long dword_bytes, bytes_extra; - unsigned short blt_mode; - - blt_mode = gu2_blt_mode | MGP_BM_SRC_FB; - size = (((unsigned long) width) << 16) | 1; - - /* CALCULATE STARTING OFFSETS */ - - offset = (unsigned long) srcy * pitch + ((unsigned long)srcx << gu2_xshift); - - dstoffset = (unsigned long) dsty * gu2_pitch + - (((unsigned long) dstx) << gu2_xshift); - - /* CHECK IF PATTERN ORIGINS NEED TO BE SET */ - - if (GFXpatternFlags) - { - /* COMBINE X AND Y PATTERN ORIGINS WITH OFFSET */ - - dstoffset |= ((unsigned long) (dstx & 7)) << 26; - dstoffset |= ((unsigned long) (dsty & 7)) << 29; - } - - bytes = width << gu2_xshift; - dword_bytes = bytes & ~0x3L; - bytes_extra = bytes & 0x3L; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - /* The source offset is always 0 since we allow misaligned dword reads. */ - /* We must wait for BLT busy because the GP may be executing a screen */ - /* to screen BLT from the scratchpad area. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_pitch); - - /* WRITE DATA ONE LINE AT A TIME */ - /* For speed reasons, data is written to an offscreen scratch area and then */ - /* BLTed using a screen to screen BLT. This is similar to the GX1 BLT buffers, but */ - /* slightly more efficient in that we can queue up data while the GP is rendering */ - /* a line. */ - - while (height--) - { - temp_offset = offset; - srcoffset = gfx_gx2_scratch_base; - if (gu2_current_line) - srcoffset += 8192; - - GU2_WAIT_PENDING; - WRITE_GP32 (MGP_SRC_OFFSET, srcoffset); - WRITE_GP32 (MGP_DST_OFFSET, dstoffset); - dstoffset += gu2_pitch; - dstoffset += 0x20000000; - - WRITE_FRAME_BUFFER_STRING32 (srcoffset, dword_bytes, data, temp_offset); - if (bytes_extra) - { - temp_offset += dword_bytes; - srcoffset += dword_bytes; - WRITE_FRAME_BUFFER_STRING8 (srcoffset, bytes_extra, data, temp_offset); - } - WRITE_GP16 (MGP_BLT_MODE, blt_mode); - offset += pitch; - gu2_current_line = 1 - gu2_current_line; - } -} - -/* -//---------------------------------------------------------------------------- -// COLOR BITMAP TO SCREEN TRANSPARENT BLT -// -// This routine transfers color bitmap data to the screen with transparency. -// The transparent color is specified. The only supported ROP is SRCCOPY, -// meaning that transparency cannot be applied if the ROP requires -// destination data (this is a hardware restriction). -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -// COLOR transparent color -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color) -#else -void gfx_color_bitmap_to_screen_xblt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, long pitch, - unsigned long color) -#endif -{ - unsigned long rop32; - - /* SAVE EXISTING RASTER MODE SETTINGS */ - - rop32 = gu2_rop32; - - /* WRITE REGISTERS TO SPECIFY COLOR TRANSPARENCY */ - /* Match GU1 implementation that only allows SRCCOPY for the ROP. */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_SRC_COLOR_FG, color); - WRITE_GP32(MGP_SRC_COLOR_BG, 0xFFFFFFFF); - - /* SET GLOBAL RASTER SETTINGS */ - /* This is needed, as the screen-to-screen BLT */ - /* routine will overwrite the raster mode register. */ - - gu2_rop32 = gu2_bpp | MGP_RM_SRC_TRANS | 0xCC; - - /* CALL NORMAL COLOR BITMAP TO SCREEN BLT ROUTINE */ - - gfx_color_bitmap_to_screen_blt(srcx, srcy, dstx, dsty, width, height, - data, pitch); - - /* RESTORE RASTER SETTINGS */ - - gu2_rop32 = rop32; -} - -/* -//---------------------------------------------------------------------------- -// MONOCHROME BITMAP TO SCREEN BLT -// -// This routine transfers monochrome bitmap data to the screen. -// -// SRCX X offset within source bitmap -// SRCY Y offset within source bitmap -// DSTX screen X position to render data -// DSTY screen Y position to render data -// WIDTH width of rectangle, in pixels -// HEIGHT height of rectangle, in scanlines -// *DATA pointer to bitmap data -// PITCH pitch of bitmap data (bytes between scanlines) -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch) -#else -void gfx_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data, short pitch) -#endif -{ - unsigned long dstoffset, size, bytes; - unsigned long offset, temp_offset, temp1 = 0, temp2 = 0; - unsigned long i, j = 0, fifo_lines, dwords_extra, bytes_extra; - unsigned long shift = 0; - - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE STARTING OFFSETS */ - - offset = (unsigned long) srcy * pitch + ((unsigned long)srcx >> 3); - - dstoffset = (unsigned long) dsty * gu2_pitch + - (((unsigned long) dstx) << gu2_xshift); - - /* CHECK IF PATTERN ORIGINS NEED TO BE SET */ - - if (GFXpatternFlags) - { - /* COMBINE X AND Y PATTERN ORIGINS WITH OFFSET */ - - dstoffset |= ((unsigned long) (dstx & 7)) << 26; - dstoffset |= ((unsigned long) (dsty & 7)) << 29; - } - - bytes = ((srcx & 7) + width + 7) >> 3; - fifo_lines = bytes >> 5; - dwords_extra = (bytes & 0x0000001Cl) >> 2; - bytes_extra = bytes & 0x00000003l; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - /* The source offset is always 0 since we allow misaligned dword reads. */ - /* Need to wait for busy instead of pending, since hardware clears */ - /* the host data FIFO at the beginning of a BLT. */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_SRC_OFFSET, ((unsigned long) srcx & 7) << 26); - WRITE_GP32(MGP_DST_OFFSET, dstoffset); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_pitch); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | MGP_BM_SRC_HOST | MGP_BM_SRC_MONO); - - /* WAIT FOR BLT TO BE LATCHED */ - - GU2_WAIT_PENDING; - - /* WRITE ALL OF THE DATA TO THE HOST SOURCE REGISTER */ - - while (height--) - { - temp_offset = offset; - - /* WRITE ALL FULL FIFO LINES */ - - for (i = 0; i < fifo_lines; i++) - { - GU2_WAIT_HALF_EMPTY; - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, 8, j, data, temp_offset, temp1); - temp_offset += 32; - } - - /* WRITE ALL FULL DWORDS */ - - GU2_WAIT_HALF_EMPTY; - if (dwords_extra) - { - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, dwords_extra, i, data, temp_offset, temp1); - temp_offset += (dwords_extra << 2); - } - - /* WRITE REMAINING BYTES */ - - shift = 0; - if (bytes_extra) - WRITE_GPREG_STRING8 (MGP_HST_SOURCE, bytes_extra, shift, i, data, temp_offset, temp1, temp2); - - offset += pitch; - } -} - -/*--------------------------------------------------------------------------- - * GFX_TEXT_BLT - * - * This routine is similar to the gfx_mono_bitmap_to_screen_blt routine - * but assumes that source data is byte-packed. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu2_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data) -#else -void gfx_text_blt(unsigned short dstx, unsigned short dsty, unsigned short width, - unsigned short height, unsigned char *data) -#endif -{ - unsigned long size, bytes; - unsigned long dstoffset, temp1 = 0, temp2 = 0, temp_offset = 0; - unsigned long i, j = 0, fifo_lines, dwords_extra, bytes_extra; - unsigned long shift; - - size = (((unsigned long) width) << 16) | height; - - dstoffset = (unsigned long) dsty * gu2_pitch + - (((unsigned long) dstx) << gu2_xshift); - - /* CHECK IF PATTERN ORIGINS NEED TO BE SET */ - - if (GFXpatternFlags) - { - /* COMBINE X AND Y PATTERN ORIGINS WITH OFFSET */ - - dstoffset |= ((unsigned long) (dstx & 7)) << 26; - dstoffset |= ((unsigned long) (dsty & 7)) << 29; - } - - /* CALCULATE STARTING OFFSETS */ - - bytes = ((width + 7) >> 3) * height; - fifo_lines = bytes >> 5; - dwords_extra = (bytes & 0x0000001Cl) >> 2; - bytes_extra = bytes & 0x00000003l; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_SRC_OFFSET, 0); - WRITE_GP32(MGP_DST_OFFSET, dstoffset); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_pitch); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | MGP_BM_SRC_HOST | - MGP_BM_SRC_BP_MONO); - - /* WAIT FOR BLT TO BE LATCHED */ - - GU2_WAIT_PENDING; - - /* WRITE ALL FULL FIFO LINES */ - - for (i = 0; i < fifo_lines; i++) - { - GU2_WAIT_HALF_EMPTY; - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, 8, j, data, temp_offset, temp1); - temp_offset += 32; - } - - /* WRITE ALL FULL DWORDS */ - - if (dwords_extra || bytes_extra) - { - GU2_WAIT_HALF_EMPTY; - if (dwords_extra) - { - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, dwords_extra, i, data, temp_offset, temp1); - temp_offset += (dwords_extra << 2); - } - if (bytes_extra) - { - shift = 0; - WRITE_GPREG_STRING8 (MGP_HST_SOURCE, bytes_extra, shift, i, data, temp_offset, temp1, temp2); - } - } -} - -/* -//---------------------------------------------------------------------------- -// BRESENHAM LINE -// -// This routine draws a vector using the specified Bresenham parameters. -// Currently this file does not support a routine that accepts the two -// endpoints of a vector and calculates the Bresenham parameters. If it -// ever does, this routine is still required for vectors that have been -// clipped. -// -// X screen X position to start vector -// Y screen Y position to start vector -// LENGTH length of the vector, in pixels -// INITERR Bresenham initial error term -// AXIALERR Bresenham axial error term -// DIAGERR Bresenham diagonal error term -// FLAGS VM_YMAJOR, VM_MAJOR_INC, VM_MINOR_INC -//---------------------------------------------------------------------------- -*/ -#if GFX_2DACCEL_DYNAMIC -void gu2_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#else -void gfx_bresenham_line(unsigned short x, unsigned short y, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#endif -{ - unsigned long offset; - unsigned long data1 = (((unsigned long) axialerr) << 16) | diagerr; - unsigned long data2 = (((unsigned long) length) << 16) | initerr; - unsigned short vector_mode = gu2_vector_mode | flags; - - /* CALCULATE STARTING OFFSET */ - - offset = (unsigned long) y * gu2_pitch + - (((unsigned long) x) << gu2_xshift); - - /* CHECK NULL LENGTH */ - - if (!length) return; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_DST_OFFSET, offset); - WRITE_GP32(MGP_VEC_ERR, data1); - WRITE_GP32(MGP_VEC_LEN, data2); - WRITE_GP32(MGP_STRIDE, gu2_pitch); - WRITE_GP16(MGP_VECTOR_MODE, vector_mode); -} - -/*--------------------------------------------------------------------------- - * GFX_WAIT_UNTIL_IDLE - * - * This routine waits until the graphics engine is idle. This is required - * before allowing direct access to the frame buffer. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu2_wait_until_idle(void) -#else -void gfx_wait_until_idle(void) -#endif -{ - while(READ_GP32(MGP_BLT_STATUS) & MGP_BS_BLT_BUSY); -} - -/*--------------------------------------------------------------------------- - * GFX_TEST_BLT_PENDING - * - * This routine returns 1 if a BLT is pending, meaning that a call to - * perform a rendering operation would stall. Otherwise it returns 0. - * It is used by Darwin during random testing to only start a BLT - * operation when it knows the Durango routines won't spin on graphics - * (so Darwin can continue to do frame buffer reads and writes). - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -int gu2_test_blt_pending(void) -#else -int gfx_test_blt_pending(void) -#endif -{ - if (READ_GP32(MGP_BLT_STATUS) & MGP_BS_BLT_PENDING) return(1); - return(0); -} - -/*--------------------------------------------------------------------------- - * NEW ROUTINES FOR REDCLOUD - *--------------------------------------------------------------------------- - */ - -/*--------------------------------------------------------------------------- - * GFX2_SET_SOURCE_STRIDE - * - * This routine sets the stride to be used in successive screen to screen - * BLTs (used by gfx2_screen_to_screen_blt and gfx2_mono_expand_blt). - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_source_stride (unsigned short stride) -#else -void gfx2_set_source_stride (unsigned short stride) -#endif -{ - /* SAVE STRIDE TO BE USED LATER */ - - gu2_src_pitch = (unsigned long) stride; -} - -/*--------------------------------------------------------------------------- - * GFX2_SET_DESTINATION_STRIDE - * - * This routine sets the stride used when rendering to the screen. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_destination_stride(unsigned short stride) -#else -void gfx2_set_destination_stride(unsigned short stride) -#endif -{ - /* SAVE STRIDE TO BE USED LATER */ - - gu2_dst_pitch = (unsigned long) stride; -} - -/*--------------------------------------------------------------------------- - * GFX2_SET_PATTERN_ORIGIN - * - * This routine sets the origin within an 8x8 pattern. It is needed if - * using a monochrome or color pattern (not used for a solid pattern). - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_pattern_origin(int x, int y) -#else -void gfx2_set_pattern_origin(int x, int y) -#endif -{ - /* STORE IN FORMAT THAT CAN BE COMBINED WITH THE DESTINATION OFFSET */ - - gu2_pattern_origin = (((unsigned long) (x & 7)) << 26) | - (((unsigned long) (y & 7)) << 29); -} - -/*--------------------------------------------------------------------------- - * GFX2_SET_SOURCE_TRANSPARENCY - * - * This routine sets the source transparency color and mask to be used - * in future rendering operations. If both the color and mask are set - * to zero (normally completely transparent), those values indicate that - * transparency should be disabled. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_source_transparency(unsigned long color, unsigned long mask) -#else -void gfx2_set_source_transparency(unsigned long color, unsigned long mask) -#endif -{ - /* WRITE REGISTERS TO SPECIFY COLOR TRANSPARENCY */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_SRC_COLOR_FG, color); - WRITE_GP32(MGP_SRC_COLOR_BG, mask); - - /* SET TRANSPARENCY FLAG */ - - GFXsourceFlags = (color || mask) ? MGP_RM_SRC_TRANS : 0; -} - -/*--------------------------------------------------------------------------- - * GFX2_SET_ALPHA_MODE - * - * This routine sets the alpha blending mode to be used in successive - * rendering operations. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_alpha_mode(int mode) -#else -void gfx2_set_alpha_mode(int mode) -#endif -{ - /* SAVE ALPHA MODE FOR LATER */ - - gu2_alpha_mode = mode; -} - -/*--------------------------------------------------------------------------- - * GFX2_SET_ALPHA_VALUE - * - * This routine sets the alpha value to be used with certain alpha blending - * modes (ALPHA_MODE_BLEND). - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_set_alpha_value(unsigned char value) -#else -void gfx2_set_alpha_value(unsigned char value) -#endif -{ - /* SAVE ALPHA VALUE TO BE USED LATER */ - - gu2_alpha_value = (unsigned long)value; - - /* SET GLOBAL FLAG */ - /* gfx2_* routines will use this flag to program alpha values */ - /* appropriately. Normal gfx_* routines will always write */ - /* the current ROP settings. In this way, the alpha mode */ - /* affects only second generation routines. */ - - gu2_alpha_active = 1; - - switch (gu2_alpha_mode) - { - case ALPHA_MODE_BLEND: - - /* GENERATE 32-BIT VERSION OF RASTER MODE REGISTER */ - /* Pattern data is not involved in the operation. */ - - gu2_alpha32 = gu2_alpha_value | gu2_bpp; - - /* HANDLE SPECIAL CASES FOR ENDPOINTS */ - /* The 8-bit hardware alpha value is always */ - /* interpreted as a fraction. Consequently, there */ - /* is no way to use values of 255 or 0 to exclude */ - /* one of the inputs. */ - - switch (gu2_alpha_value) - { - /* DESTINATION ONLY */ - /* Operation is alpha * A, where A is destination */ - /* and alpha is 1. */ - - case 0: - - gu2_alpha32 |= MGP_RM_SELECT_ALPHA_1 | - MGP_RM_ALPHA_TIMES_A | - MGP_RM_ALPHA_TO_RGB | - MGP_RM_DEST_FROM_CHAN_A; - break; - - /* SOURCE ONLY */ - /* Operation is alpha * A, where A is source and */ - /* alpha is 1. */ - - case 255: - - gu2_alpha32 |= MGP_RM_SELECT_ALPHA_1 | - MGP_RM_ALPHA_TO_RGB | - MGP_RM_ALPHA_TIMES_A; - break; - - /* DEFAULT */ - /* Operation is alpha * A + (1 - alpha) * B; */ - /* A is source, B is destination and alpha is the */ - /* programmed 8-bit value. */ - - default: - - gu2_alpha32 |= MGP_RM_SELECT_ALPHA_R | - MGP_RM_ALPHA_TO_RGB | - MGP_RM_ALPHA_A_PLUS_BETA_B; - - } - - /* CHECK IF SOURCE INFORMATION SHOULD BE MERGED */ - /* Alpha value of 0 indicates destination only. */ - - if (gu2_alpha_value != 0) - gu2_alpha32 |= GFXsourceFlags; - - /* SET FLAG FOR DESTINATION DATA IF NECESSARY */ - /* Alpha value of 255 indicates no destination */ - - if (gu2_alpha_value != 255) - { - gu2_alpha_blt_mode = MGP_BM_DST_REQ; - gu2_alpha_vec_mode = MGP_VM_DST_REQ; - } - - break; - } -} - -/*--------------------------------------------------------------------------- - * GFX2_PATTERN_FILL - * - * This routine is similar to the gfx_pattern_fill routine, but allows the - * use of an arbitrary destination stride. The rendering position is - * also specified as an offset instead of an (x,y) position. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_pattern_fill(unsigned long dstoffset, unsigned short width, unsigned short height) -#else -void gfx2_pattern_fill(unsigned long dstoffset, unsigned short width, unsigned short height) -#endif -{ - unsigned long size; - - size = (((unsigned long) width) << 16) | height; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; -} - -/*--------------------------------------------------------------------------- - * GFX2_COLOR_PATTERN_FILL - * - * This routine is used to render a rectangle using the current raster - * operation and the specified color pattern. It allows an 8x8 color - * pattern to be rendered without multiple calls to the gfx_set_color_pattern - * and gfx_pattern_fill routines. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_color_pattern_fill(unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned long *pattern) -#else -void gfx2_color_pattern_fill(unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned long *pattern) -#endif -{ - int pass; - unsigned long lines, size, patxorigin, patoffset; - - /* ONLY USE HW PATTERN ORIGIN FOR THE X DIRECTION */ - /* Y direction handled by referencing proper location in pattern data. */ - - patxorigin = (gu2_pattern_origin) & 0x1C000000; - - /* OVERRIDE PATTERN FLAGS IN ROP TO FORCE COLOR PATTERN */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_RASTER_MODE, (gu2_rop32 & ~MGP_RM_PAT_FLAGS) | MGP_RM_PAT_COLOR); - - /* ATTEMPT TO OPTIMIZE */ - /* If possible, we can perform the pattern fill in only a few passes */ - /* This is performed by multiplying the pitch by an appropriate amount. */ - /* Consequently, if the multiplied pitch exceeds 16 bits, this */ - /* optimization is impossible. */ - - if ((gu2_dst_pitch << (gu2_xshift + 1)) <= 0xFFFF) - { - /* HANDLE VARIOUS COLOR DEPTHS DIFFERENTLY */ - - switch (gu2_xshift) - { - case 0: /* 8 BPP */ - - /* TWO PASSES FOR 8 BPP */ - /* Render every other line per pass by doubling the pitch. */ - - patoffset = (gu2_pattern_origin >> 28) & 0x0E; - for (pass = 0; pass < 2; pass++) - { - /* CAN WRITE SOME PATTERN REGISTERS WHILE "PENDING" */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - lines = (height + 1 - pass) >> 1; - if (!lines) break; - size = (((unsigned long) width) << 16) | lines; - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch << 1); - WRITE_GP32(MGP_PAT_DATA_1, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_DATA_0, BYTE_SWIZZLE (pattern[patoffset+1])); - patoffset = (patoffset + 4) & 0x0E; - WRITE_GP32(MGP_PAT_COLOR_1, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_0, BYTE_SWIZZLE (pattern[patoffset+1])); - patoffset = (patoffset + 4) & 0x0E; - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_3, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_2, BYTE_SWIZZLE (pattern[patoffset+1])); - patoffset = (patoffset + 4) & 0x0E; - WRITE_GP32(MGP_PAT_COLOR_5, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_4, BYTE_SWIZZLE (pattern[patoffset+1])); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch; - patoffset = (patoffset + 6) & 0x0E; - } - break; - - case 1: /* 12, 15, OR 16 BPP */ - - /* FOUR PASSES FOR 16 BPP */ - /* Render every 4th line per pass by quadrupling the pitch. */ - - patoffset = (gu2_pattern_origin >> 27) & 0x1C; - for (pass = 0; pass < 4; pass++) - { - /* CAN WRITE SOME PATTERN REGISTERS WHILE "PENDING" */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - lines = (height + 3 - pass) >> 2; - if (!lines) break; - size = (((unsigned long) width) << 16) | lines; - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch << 2); - WRITE_GP32(MGP_PAT_COLOR_1, WORD_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_0, WORD_SWIZZLE (pattern[patoffset+1])); - WRITE_GP32(MGP_PAT_DATA_1, WORD_SWIZZLE (pattern[patoffset+2])); - WRITE_GP32(MGP_PAT_DATA_0, WORD_SWIZZLE (pattern[patoffset+3])); - patoffset = (patoffset + 16) & 0x1C; - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_5, WORD_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_4, WORD_SWIZZLE (pattern[patoffset+1])); - WRITE_GP32(MGP_PAT_COLOR_3, WORD_SWIZZLE (pattern[patoffset+2])); - WRITE_GP32(MGP_PAT_COLOR_2, WORD_SWIZZLE (pattern[patoffset+3])); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch; - patoffset = (patoffset + 20) & 0x1C; - } - break; - - case 2: /* 32 BPP */ - - /* EIGHT PASSES FOR 32 BPP */ - /* Render every 8th line per pass by setting pitch * 8. */ - - patoffset = (gu2_pattern_origin >> 26) & 0x38; - for (pass = 0; pass < 8; pass++) - { - /* CAN WRITE SOME PATTERN REGISTERS WHILE "PENDING" */ - - GU2_WAIT_PENDING; - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - lines = (height + 7 - pass) >> 3; - if (!lines) break; - size = (((unsigned long) width) << 16) | lines; - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch << 3); - WRITE_GP32(MGP_PAT_COLOR_1, pattern[patoffset+4]); - WRITE_GP32(MGP_PAT_COLOR_0, pattern[patoffset+5]); - WRITE_GP32(MGP_PAT_DATA_1, pattern[patoffset+6]); - WRITE_GP32(MGP_PAT_DATA_0, pattern[patoffset+7]); - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_5, pattern[patoffset]); - WRITE_GP32(MGP_PAT_COLOR_4, pattern[patoffset+1]); - WRITE_GP32(MGP_PAT_COLOR_3, pattern[patoffset+2]); - WRITE_GP32(MGP_PAT_COLOR_2, pattern[patoffset+3]); - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch; - patoffset = (patoffset + 8) & 0x38; - } - break; - } - } - - else - { - WRITE_GP32 (MGP_STRIDE, gu2_dst_pitch); - - switch (gu2_xshift) - { - case 0: /* 8 BPP - 4 LINES PER PASS */ - - patoffset = (gu2_pattern_origin >> 28) & 0x0E; - while (height) - { - lines = height > 4 ? 4 : height; - - /* CAN WRITE SOME REGISTERS WHILE PENDING */ - - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - WRITE_GP32(MGP_WID_HEIGHT, (((unsigned long) width) << 16) | lines); - WRITE_GP32(MGP_PAT_DATA_1, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_DATA_0, BYTE_SWIZZLE (pattern[patoffset + 1])); - patoffset = (patoffset + 2) & 0x0E; - WRITE_GP32(MGP_PAT_COLOR_1, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_0, BYTE_SWIZZLE (pattern[patoffset + 1])); - patoffset = (patoffset + 2) & 0x0E; - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_3, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_2, BYTE_SWIZZLE (pattern[patoffset + 1])); - patoffset = (patoffset + 2) & 0x0E; - WRITE_GP32(MGP_PAT_COLOR_5, BYTE_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_4, BYTE_SWIZZLE (pattern[patoffset + 1])); - patoffset = (patoffset + 2) & 0x0E; - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch << 2; - height -= (unsigned short)lines; - } - break; - - case 1: /* 12, 15 AND 16 BPP - 2 LINES PER PASS */ - - patoffset = (gu2_pattern_origin >> 27) & 0x1C; - while (height) - { - lines = height > 2 ? 2 : height; - - /* CAN WRITE SOME REGISTERS WHILE PENDING */ - - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - WRITE_GP32(MGP_WID_HEIGHT, (((unsigned long) width) << 16) | lines); - WRITE_GP32(MGP_PAT_COLOR_1, WORD_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_0, WORD_SWIZZLE (pattern[patoffset + 1])); - WRITE_GP32(MGP_PAT_DATA_1, WORD_SWIZZLE (pattern[patoffset + 2])); - WRITE_GP32(MGP_PAT_DATA_0, WORD_SWIZZLE (pattern[patoffset + 3])); - patoffset = (patoffset + 4) & 0x1C; - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_5, WORD_SWIZZLE (pattern[patoffset])); - WRITE_GP32(MGP_PAT_COLOR_4, WORD_SWIZZLE (pattern[patoffset + 1])); - WRITE_GP32(MGP_PAT_COLOR_3, WORD_SWIZZLE (pattern[patoffset + 2])); - WRITE_GP32(MGP_PAT_COLOR_2, WORD_SWIZZLE (pattern[patoffset + 3])); - patoffset = (patoffset + 4) & 0x1C; - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch << 1; - height -= (unsigned short)lines; - } - break; - - case 2: /* 32 BPP - 1 LINE PER PASS */ - - patoffset = (gu2_pattern_origin >> 26) & 0x38; - while (height) - { - /* CAN WRITE SOME REGISTERS WHILE PENDING */ - - WRITE_GP32(MGP_DST_OFFSET, dstoffset | patxorigin); - WRITE_GP32(MGP_WID_HEIGHT, (((unsigned long) width) << 16) | 1l); - WRITE_GP32(MGP_PAT_COLOR_1, pattern[patoffset + 4]); - WRITE_GP32(MGP_PAT_COLOR_0, pattern[patoffset + 5]); - WRITE_GP32(MGP_PAT_DATA_1, pattern[patoffset + 6]); - WRITE_GP32(MGP_PAT_DATA_0, pattern[patoffset + 7]); - - /* NEED TO WAIT UNTIL IDLE FOR COLORS 2 THROUGH 5 */ - /* Those registers are not pipelined. */ - - GU2_WAIT_BUSY; - WRITE_GP32(MGP_PAT_COLOR_5, pattern[patoffset]); - WRITE_GP32(MGP_PAT_COLOR_4, pattern[patoffset + 1]); - WRITE_GP32(MGP_PAT_COLOR_3, pattern[patoffset + 2]); - WRITE_GP32(MGP_PAT_COLOR_2, pattern[patoffset + 3]); - patoffset = (patoffset + 8) & 0x38; - WRITE_GP16(MGP_BLT_MODE, gu2_blt_mode | gu2_bm_throttle); - - /* ADJUST FOR NEXT PASS */ - - dstoffset += gu2_dst_pitch ; - height--; - } - break; - } - - } - -} - -/*--------------------------------------------------------------------------- - * GFX2_SCREEN_TO_SCREEN_BLT - * - * This routine is similar to the gfx_screen_to_screen_blt routine but - * allows the use of arbitrary source and destination strides and alpha - * blending. It also allows the use of an arbitrary ROP with transparency. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_screen_to_screen_blt(unsigned long srcoffset, unsigned long dstoffset, - unsigned short width, unsigned short height, int flags) -#else -void gfx2_screen_to_screen_blt(unsigned long srcoffset, unsigned long dstoffset, - unsigned short width, unsigned short height, int flags) -#endif -{ - unsigned long size, xbytes; - unsigned short blt_mode; - size = (((unsigned long) width) << 16) | height; - - /* USE ALPHA SETTINGS, IF REQUESTED */ - - if (gu2_alpha_active) - blt_mode = gu2_alpha_blt_mode | MGP_BM_SRC_FB; - - else - blt_mode = gu2_blt_mode | MGP_BM_SRC_FB; - - - /* CALCULATE THE DIRECTION OF THE BLT */ - /* Using offsets, so flags from the calling routine are needed. */ - - if (flags & 1) - { - xbytes = (width - 1) << gu2_xshift; - srcoffset += xbytes; - dstoffset += xbytes; - blt_mode |= MGP_BM_NEG_XDIR; - } - if (flags & 2) - { - srcoffset += (height - 1) * gu2_src_pitch; - dstoffset += (height - 1) * gu2_dst_pitch; - blt_mode |= MGP_BM_NEG_YDIR; - } - - /* TURN INTO BYTE ADDRESS IF NEGATIVE X DIRECTION */ - /* This is a quirk of the hardware. */ - - if (blt_mode & MGP_BM_NEG_XDIR) - { - srcoffset += (1 << gu2_xshift) - 1; - dstoffset += (1 << gu2_xshift) - 1; - } - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - - if (gu2_alpha_active) - { - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - { - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - } - - WRITE_GP32(MGP_SRC_OFFSET, srcoffset); - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch | (gu2_src_pitch << 16)); - WRITE_GP16(MGP_BLT_MODE, blt_mode | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; -} - -/*--------------------------------------------------------------------------- - * GFX2_MONO_EXPAND_BLT - * - * This routine is similar to the gfx2_screen_to_screen_blt routine but - * expands monochrome data stored in graphics memory. - * WARNING: This routine assumes that the regions in graphics memory - * will not overlap, and therefore does not check the BLT direction. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_mono_expand_blt(unsigned long srcbase, unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - int byte_packed) -#else -void gfx2_mono_expand_blt(unsigned long srcbase, unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, unsigned short height, - int byte_packed) -#endif -{ - unsigned long size, srcoffset; - unsigned short blt_mode; - - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE SOURCE OFFSET */ - - srcoffset = srcbase + (unsigned long) srcy * gu2_src_pitch; - srcoffset += srcx >> 3; - srcoffset |= ((unsigned long) srcx & 7) << 26; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - - if (gu2_alpha_active) - { - blt_mode = gu2_alpha_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - { - blt_mode = gu2_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - } - - if (byte_packed) blt_mode |= MGP_BM_SRC_FB | MGP_BM_SRC_BP_MONO | gu2_bm_throttle; - else blt_mode |= MGP_BM_SRC_FB | MGP_BM_SRC_MONO | gu2_bm_throttle; - - WRITE_GP32(MGP_SRC_OFFSET, srcoffset); - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch | (gu2_src_pitch << 16)); - WRITE_GP16(MGP_BLT_MODE, blt_mode); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; -} - -/*--------------------------------------------------------------------------- - * GFX2_COLOR_BITMAP_TO_SCREEN_BLT - * - * This routine is similar to the gfx_color_bitmap_to_screen_blt routine - * but allows the use of an arbitrary destination stride and alpha blending. - * It also allows the use of an arbitrary ROP with transparency. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned char *data, unsigned short pitch) -#else -void gfx2_color_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned char *data, unsigned short pitch) -#endif -{ - unsigned long size, bytes; - unsigned long offset, temp_offset; - unsigned long srcoffset, dword_bytes, bytes_extra; - unsigned short blt_mode; - - size = (((unsigned long) width) << 16) | 1; - - /* CALCULATE STARTING OFFSETS */ - - offset = (unsigned long) srcy * pitch + ((unsigned long)srcx << gu2_xshift); - - dstoffset |= gu2_pattern_origin; - - bytes = width << gu2_xshift; - dword_bytes = bytes & ~0x3L; - bytes_extra = bytes & 0x3L; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - /* The source offset is always 0 since we allow misaligned dword reads. */ - /* We must wait for BLT busy because the GP may be executing a screen */ - /* to screen BLT from the scratchpad area. */ - - GU2_WAIT_BUSY; - - if (gu2_alpha_active) - { - blt_mode = gu2_alpha_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - { - blt_mode = gu2_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - } - blt_mode |= MGP_BM_SRC_FB | gu2_bm_throttle; - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - WRITE_GP32(MGP_WID_HEIGHT, size); - - /* WRITE DATA ONE LINE AT A TIME */ - /* For speed reasons, data is written to an offscreen scratch area and then */ - /* BLTed using a screen to screen BLT. This is similar to the GX1 BLT buffers, but */ - /* slightly more efficient in that we can queue up data while the GP is rendering */ - /* a line. */ - - while (height--) - { - temp_offset = offset; - srcoffset = gfx_gx2_scratch_base; - if (gu2_current_line) - srcoffset += 8192; - - GU2_WAIT_PENDING; - WRITE_GP32 (MGP_SRC_OFFSET, srcoffset); - WRITE_GP32 (MGP_DST_OFFSET, dstoffset); - dstoffset += gu2_dst_pitch; - dstoffset += 0x20000000; - - WRITE_FRAME_BUFFER_STRING32 (srcoffset, dword_bytes, data, temp_offset); - if (bytes_extra) - { - temp_offset += dword_bytes; - srcoffset += dword_bytes; - WRITE_FRAME_BUFFER_STRING8 (srcoffset, bytes_extra, data, temp_offset); - } - WRITE_GP16 (MGP_BLT_MODE, blt_mode); - offset += pitch; - gu2_current_line = 1 - gu2_current_line; - } -} - -/*--------------------------------------------------------------------------- - * GFX2_TEXT_BLT - * - * This routine is similar to the gfx2_mono_bitmap_to_screen_blt routine - * but assumes that source data is byte-packed. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_text_blt(unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data) -#else -void gfx2_text_blt(unsigned long dstoffset, unsigned short width, unsigned short height, - unsigned char *data) -#endif -{ - unsigned long size, bytes; - unsigned long temp1 = 0, temp2 = 0, temp_offset = 0; - unsigned long i, j = 0, fifo_lines, dwords_extra, bytes_extra; - unsigned long shift; - unsigned short blt_mode; - - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE STARTING OFFSETS */ - - bytes = ((width + 7) >> 3) * height; - fifo_lines = bytes >> 5; - dwords_extra = (bytes & 0x0000001Cl) >> 2; - bytes_extra = bytes & 0x00000003l; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - - GU2_WAIT_PENDING; - - if (gu2_alpha_active) - { - blt_mode = gu2_alpha_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - { - blt_mode = gu2_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - } - - WRITE_GP32(MGP_SRC_OFFSET, 0); - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch); - WRITE_GP16(MGP_BLT_MODE, blt_mode | MGP_BM_SRC_HOST | - MGP_BM_SRC_BP_MONO | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - /* WAIT FOR BLT TO BE LATCHED */ - - GU2_WAIT_PENDING; - - /* WRITE ALL FULL FIFO LINES */ - - for (i = 0; i < fifo_lines; i++) - { - GU2_WAIT_HALF_EMPTY; - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, 8, j, data, temp_offset, temp1); - temp_offset += 32; - } - - /* WRITE ALL FULL DWORDS */ - - if (dwords_extra || bytes_extra) - { - GU2_WAIT_HALF_EMPTY; - if (dwords_extra) - { - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, dwords_extra, i, data, temp_offset, temp1); - temp_offset += (dwords_extra << 2); - } - if (bytes_extra) - { - shift = 0; - WRITE_GPREG_STRING8 (MGP_HST_SOURCE, bytes_extra, shift, i, data, temp_offset, temp1, temp2); - } - } -} - -/*--------------------------------------------------------------------------- - * GFX2_MONO_BITMAP_TO_SCREEN_BLT - * - * This routine is similar to the gfx_mono_bitmap_to_screen_blt routine - * but allows the use of an arbitrary destination stride and alpha blending. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned char *data, unsigned short pitch) -#else -void gfx2_mono_bitmap_to_screen_blt(unsigned short srcx, unsigned short srcy, - unsigned long dstoffset, unsigned short width, - unsigned short height, unsigned char *data, unsigned short pitch) -#endif -{ - unsigned long size, bytes; - unsigned long offset, temp_offset, temp1 = 0, temp2 = 0; - unsigned long i, j = 0, fifo_lines, dwords_extra, bytes_extra; - unsigned long shift = 0; - unsigned short blt_mode; - - size = (((unsigned long) width) << 16) | height; - - /* CALCULATE STARTING OFFSETS */ - - offset = (unsigned long) srcy * pitch + ((unsigned long)srcx >> 3); - - bytes = ((srcx & 7) + width + 7) >> 3; - fifo_lines = bytes >> 5; - dwords_extra = (bytes & 0x0000001Cl) >> 2; - bytes_extra = bytes & 0x00000003l; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - - GU2_WAIT_PENDING; - - if (gu2_alpha_active) - { - blt_mode = gu2_alpha_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - { - blt_mode = gu2_blt_mode; - - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - } - - WRITE_GP32(MGP_SRC_OFFSET, ((unsigned long) srcx & 7) << 26); - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_WID_HEIGHT, size); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch); - WRITE_GP16(MGP_BLT_MODE, blt_mode | MGP_BM_SRC_HOST | - MGP_BM_SRC_MONO | gu2_bm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; - - /* WAIT FOR BLT TO BE LATCHED */ - - GU2_WAIT_PENDING; - - /* WRITE ALL OF THE DATA TO THE HOST SOURCE REGISTER */ - - while (height--) - { - temp_offset = offset; - - /* WRITE ALL FULL FIFO LINES */ - - for (i = 0; i < fifo_lines; i++) - { - GU2_WAIT_HALF_EMPTY; - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, 8, j, data, temp_offset, temp1); - temp_offset += 32; - } - - /* WRITE ALL FULL DWORDS */ - - GU2_WAIT_HALF_EMPTY; - if (dwords_extra) - WRITE_GPREG_STRING32 (MGP_HST_SOURCE, dwords_extra, i, data, temp_offset, temp1); - temp_offset += (dwords_extra << 2); - - /* WRITE REMAINING BYTES */ - - shift = 0; - if (bytes_extra) - WRITE_GPREG_STRING8 (MGP_HST_SOURCE, bytes_extra, shift, i, data, temp_offset, temp1, temp2); - - offset += pitch; - } -} - -/*--------------------------------------------------------------------------- - * GFX2_BRESENHAM_LINE - * - * This routine is similar to the gfx_bresenam_line routine but allows - * the use of an arbitrary destination stride. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_bresenham_line(unsigned long dstoffset, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#else -void gfx2_bresenham_line(unsigned long dstoffset, - unsigned short length, unsigned short initerr, - unsigned short axialerr, unsigned short diagerr, - unsigned short flags) -#endif -{ - unsigned long vector_mode = gu2_vector_mode | flags; - unsigned long data1 = (((unsigned long) axialerr) << 16) | diagerr; - unsigned long data2 = (((unsigned long) length) << 16) | initerr; - - /* CHECK NULL LENGTH */ - - if (!length) return; - - /* POLL UNTIL ABLE TO WRITE TO THE REGISTERS */ - /* Put off poll for as long as possible (do most calculations first). */ - - GU2_WAIT_PENDING; - - if (gu2_alpha_active) - { - vector_mode = gu2_alpha_vec_mode | flags; - - WRITE_GP32(MGP_RASTER_MODE, gu2_alpha32); - } - else - WRITE_GP32(MGP_RASTER_MODE, gu2_rop32); - - - WRITE_GP32(MGP_DST_OFFSET, dstoffset | gu2_pattern_origin); - WRITE_GP32(MGP_VEC_ERR, data1); - WRITE_GP32(MGP_VEC_LEN, data2); - WRITE_GP32(MGP_STRIDE, gu2_dst_pitch); - WRITE_GP32(MGP_VECTOR_MODE, vector_mode | gu2_vm_throttle); - gu2_bm_throttle = 0; - gu2_vm_throttle = 0; -} - -/*--------------------------------------------------------------------------- - * GFX2_SYNC_TO_VBLANK - * - * This routine sets a flag to synchronize the next rendering routine to - * VBLANK. The flag is cleared by the rendering routine. - *--------------------------------------------------------------------------- - */ -#if GFX_2DACCEL_DYNAMIC -void gu22_sync_to_vblank(void) -#else -void gfx2_sync_to_vblank(void) -#endif -{ - /* SET FLAGS TO THROTTLE NEXT RENDERING ROUTINE */ - - gu2_bm_throttle = MGP_BM_THROTTLE; - gu2_vm_throttle = MGP_VM_THROTTLE; -} - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/saa7114.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/saa7114.c deleted file mode 100644 index 31d48abe3..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/saa7114.c +++ /dev/null @@ -1,916 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/saa7114.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: saa7114.c $ - * - * This file contains routines to control the Philips SAA7114 video decoder. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*---------------------------*/ -/* TABLE OF DEFAULT VALUES */ -/*---------------------------*/ - -typedef struct tagGFX_SAA7114_INIT -{ - unsigned char index; - unsigned char value; -} GFX_SAA7114_INIT; - -/* Task A is for VBI raw data and task B is for video */ - -GFX_SAA7114_INIT gfx_saa7114_init_values[] = { - { 0x01, 0x08 }, { 0x02, 0xC0 }, { 0x03, 0x00 }, { 0x04, 0x90 }, - { 0x05, 0x90 }, { 0x06, 0xEB }, { 0x07, 0xE0 }, { 0x08, 0x88 }, - { 0x09, 0x40 }, { 0x0A, 0x80 }, { 0x0B, 0x44 }, { 0x0C, 0x40 }, - { 0x0D, 0x00 }, { 0x0E, 0x89 }, { 0x0F, 0x2E }, { 0x10, 0x0E }, - { 0x11, 0x00 }, { 0x12, 0x05 }, { 0x13, 0x00 }, { 0x14, 0x08 }, - { 0x15, 0x11 }, { 0x16, 0xFE }, { 0x17, 0x00 }, { 0x18, 0x40 }, - { 0x19, 0x80 }, { 0x30, 0xBC }, { 0x31, 0xDF }, { 0x32, 0x02 }, - { 0x34, 0xCD }, { 0x35, 0xCC }, { 0x36, 0x3A }, { 0x38, 0x03 }, - { 0x39, 0x10 }, { 0x3A, 0x00 }, { 0x40, 0x00 }, { 0x41, 0xFF }, - { 0x42, 0xFF }, { 0x43, 0xFF }, { 0x44, 0xFF }, { 0x45, 0xFF }, - { 0x46, 0xFF }, { 0x47, 0xFF }, { 0x48, 0xFF }, { 0x49, 0xFF }, - { 0x4A, 0xFF }, { 0x4B, 0xFF }, { 0x4C, 0xFF }, { 0x4D, 0xFF }, - { 0x4E, 0xFF }, { 0x4F, 0xFF }, { 0x50, 0xFF }, { 0x51, 0xFF }, - { 0x52, 0xFF }, { 0x53, 0xFF }, { 0x54, 0xFF }, { 0x55, 0xFF }, - { 0x56, 0xFF }, { 0x57, 0xFF }, { 0x58, 0x00 }, { 0x59, 0x47 }, - { 0x5A, 0x06 }, { 0x5B, 0x43 }, { 0x5D, 0x3E }, { 0x5E, 0x00 }, - { 0x80, 0x30 }, { 0x83, 0x00 }, { 0x84, 0x60 }, { 0x85, 0x00 }, - { 0x86, 0xE5 }, { 0x87, 0x01 }, { 0x88, 0xF8 }, - - /* VBI task */ - - { 0x90, 0x01 }, { 0x91, 0xC8 }, { 0x92, 0x08 }, { 0x93, 0x84 }, - { 0x94, 0x10 }, { 0x95, 0x00 }, { 0x96, 0xD0 }, { 0x97, 0x02 }, - { 0x98, 0x05 }, { 0x99, 0x00 }, { 0x9A, 0x0B }, { 0x9B, 0x00 }, - { 0x9C, 0xA0 }, { 0x9D, 0x05 }, { 0x9E, 0x0B }, { 0x9F, 0x00 }, - { 0xA0, 0x01 }, { 0xA1, 0x00 }, { 0xA2, 0x00 }, { 0xA4, 0x80 }, - { 0xA5, 0x40 }, { 0xA6, 0x40 }, { 0xA8, 0x00 }, { 0xA9, 0x02 }, - { 0xAA, 0x00 }, { 0xAC, 0x00 }, { 0xAD, 0x01 }, { 0xAE, 0x00 }, - { 0xB0, 0x00 }, { 0xB1, 0x04 }, { 0xB2, 0x00 }, { 0xB3, 0x04 }, - { 0xB4, 0x00 }, { 0xB8, 0x00 }, { 0xB9, 0x00 }, { 0xBA, 0x00 }, - { 0xBB, 0x00 }, { 0xBC, 0x00 }, { 0xBD, 0x00 }, { 0xBE, 0x00 }, - { 0xBF, 0x00 }, - - /* Video task */ - - { 0xC0, 0x80 }, { 0xC1, 0x08 }, { 0xC2, 0x00 }, { 0xC3, 0x80 }, - { 0xC4, 0x10 }, { 0xC5, 0x00 }, { 0xC6, 0xD0 }, { 0xC7, 0x02 }, - { 0xC8, 0x11 }, { 0xC9, 0x00 }, { 0xCA, 0xF1 }, { 0xCB, 0x00 }, - { 0xCC, 0xD0 }, { 0xCD, 0x02 }, { 0xCE, 0xF1 }, { 0xCF, 0x00 }, - { 0xD0, 0x01 }, { 0xD1, 0x00 }, { 0xD2, 0x00 }, { 0xD4, 0x80 }, - { 0xD5, 0x40 }, { 0xD6, 0x40 }, { 0xD8, 0x00 }, { 0xD9, 0x04 }, - { 0xDA, 0x00 }, { 0xDC, 0x00 }, { 0xDD, 0x02 }, { 0xDE, 0x00 }, - { 0xE0, 0x00 }, { 0xE1, 0x04 }, { 0xE2, 0x00 }, { 0xE3, 0x04 }, - { 0xE4, 0x00 }, { 0xE8, 0x00 }, { 0xE9, 0x00 }, { 0xEA, 0x00 }, - { 0xEB, 0x00 }, { 0xEC, 0x00 }, { 0xED, 0x00 }, { 0xEE, 0x00 }, - { 0xEF, 0x00 }, -}; - -#define GFX_NUM_SAA7114_INIT_VALUES sizeof(gfx_saa7114_init_values)/sizeof(GFX_SAA7114_INIT) - -/*-----------------------------------------------------*/ -/* TABLE OF FIR PREFILTER RECOMMENDED VALUES */ -/*-----------------------------------------------------*/ - -int optimize_for_aliasing = 0; - -typedef struct tagGFX_SAA7114_FIR_PREFILTER -{ - unsigned char prescaler; - unsigned char acl_low; - unsigned char prefilter_low; - unsigned char acl_high; - unsigned char prefilter_high; -} GFX_SAA7114_FIR_PREFILTER; - -GFX_SAA7114_FIR_PREFILTER gfx_saa7114_fir_values[] = { - { 0x01, 0x00, 0x00, 0x00, 0x00 }, { 0x02, 0x02, 0x5A, 0x01, 0x51 }, - { 0x03, 0x04, 0xAB, 0x03, 0xA2 }, { 0x04, 0x07, 0xA3, 0x04, 0xAB }, - { 0x05, 0x08, 0xAC, 0x07, 0xA3 }, { 0x06, 0x08, 0xFC, 0x07, 0xF3 }, - { 0x07, 0x08, 0xFC, 0x07, 0xF3 }, { 0x08, 0x0F, 0xF4, 0x08, 0xFC }, - { 0x09, 0x0F, 0xF4, 0x08, 0xFC }, { 0x0A, 0x10, 0xFD, 0x08, 0xFC }, - { 0x0B, 0x10, 0xFD, 0x08, 0xFC }, { 0x0C, 0x10, 0xFD, 0x08, 0xFC }, - { 0x0D, 0x10, 0xFD, 0x10, 0xFD }, { 0x0E, 0x10, 0xFD, 0x10, 0xFD }, - { 0x0F, 0x1F, 0xF5, 0x10, 0xFD }, { 0x10, 0x20, 0xFE, 0x10, 0xFD }, - { 0x11, 0x20, 0xFE, 0x10, 0xFD }, { 0x12, 0x20, 0xFE, 0x10, 0xFD }, - { 0x13, 0x20, 0xFE, 0x20, 0xFE }, { 0x14, 0x20, 0xFE, 0x20, 0xFE }, - { 0x15, 0x20, 0xFE, 0x20, 0xFE }, { 0x16, 0x20, 0xFE, 0x20, 0xFE }, - { 0x17, 0x20, 0xFE, 0x20, 0xFE }, { 0x18, 0x20, 0xFE, 0x20, 0xFE }, - { 0x19, 0x20, 0xFE, 0x20, 0xFE }, { 0x1A, 0x20, 0xFE, 0x20, 0xFE }, - { 0x1B, 0x20, 0xFE, 0x20, 0xFE }, { 0x1C, 0x20, 0xFE, 0x20, 0xFE }, - { 0x1D, 0x20, 0xFE, 0x20, 0xFE }, { 0x1E, 0x20, 0xFE, 0x20, 0xFE }, - { 0x1F, 0x20, 0xFE, 0x20, 0xFE }, { 0x20, 0x3F, 0xFF, 0x20, 0xFE }, - { 0x21, 0x3F, 0xFF, 0x20, 0xFE }, { 0x22, 0x3F, 0xFF, 0x20, 0xFE }, - { 0x23, 0x3F, 0xFF, 0x20, 0xFF } -}; - -int saa7114_write_reg(unsigned char reg, unsigned char val) -{ - return gfx_i2c_write(2, SAA7114_CHIPADDR, reg, 1, &val); -} - -int saa7114_read_reg(unsigned char reg, unsigned char * val) -{ - return gfx_i2c_read(2, SAA7114_CHIPADDR, reg, 1, val); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_upscale - * - * This routine configures the video decoder task A to upscale raw VBI data - * horizontally to match a different system clock. - * The upscale is from 13.5 MHz (SAA7114) to 14.318 MHz (Bt835). - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_vbi_upscale(void) -#else -int gfx_set_decoder_vbi_upscale(void) -#endif -{ - /* Set horizontal output length to 1528 (720 * 2 * 14.318 / 13.5) */ - saa7114_write_reg(SAA7114_TASK_A_HORZ_OUTPUT_LO, 0xF8); - saa7114_write_reg(SAA7114_TASK_A_HORZ_OUTPUT_HI, 0x05); - - /* Set horizontal luminance scaling increment to 484 (1024 * 13.5 / 28.636) */ - saa7114_write_reg(SAA7114_TASK_A_HSCALE_LUMA_LO, 0xE4); - saa7114_write_reg(SAA7114_TASK_A_HSCALE_LUMA_HI, 0x01); - - /* Set horizontal chrominance scaling increment to 242 */ - saa7114_write_reg(SAA7114_TASK_A_HSCALE_CHROMA_LO, 0xF2); - saa7114_write_reg(SAA7114_TASK_A_HSCALE_CHROMA_HI, 0x00); - - return GFX_STATUS_OK; -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_software_reset - * - * This routine performs a software reset of the decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_decoder_software_reset(void) -#else -int gfx_decoder_software_reset(void) -#endif -{ - saa7114_write_reg(0x88, 0xC0); - /* I2C-bus latency should be sufficient for resetting the internal state machine. */ - /* gfx_delay_milliseconds(10); */ - saa7114_write_reg(0x88, 0xF0); - return GFX_STATUS_OK; -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_detect_macrovision - * - * This routine detects if macrovision exists in the input of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_decoder_detect_macrovision(void) -#else -int gfx_decoder_detect_macrovision(void) -#endif -{ - unsigned char macrovision = 0xff; - saa7114_read_reg(SAA7114_STATUS, ¯ovision); - return ((macrovision & 0x02) >> 1); -} - -/*----------------------------------------------------------------------------- - * gfx_decoder_detect_video - * - * This routine detects if video exists in the input of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_decoder_detect_video(void) -#else -int gfx_decoder_detect_video(void) -#endif -{ - unsigned char video = 0xff; - saa7114_read_reg(SAA7114_STATUS, &video); - return !((video & 0x40) >> 6); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_defaults - * - * This routine is called to set the initial register values of the - * video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_defaults(void) -#else -int gfx_set_decoder_defaults(void) -#endif -{ - int i; - - /* LOOP THROUGH INDEX/DATA PAIRS IN THE TABLE */ - - for (i = 0; i < GFX_NUM_SAA7114_INIT_VALUES; i++) - { - saa7114_write_reg(gfx_saa7114_init_values[i].index, - gfx_saa7114_init_values[i].value); - } - - gfx_decoder_software_reset(); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_analog_input - * - * This routine sets the analog input of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_analog_input(unsigned char input) -#else -int gfx_set_decoder_analog_input(unsigned char input) -#endif -{ - saa7114_write_reg(SAA7114_ANALOG_INPUT_CTRL1, input); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_brightness - * - * This routine sets the brightness of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_brightness(unsigned char brightness) -#else -int gfx_set_decoder_brightness(unsigned char brightness) -#endif -{ - saa7114_write_reg(SAA7114_BRIGHTNESS, brightness); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_contrast - * - * This routine sets the contrast of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_contrast(unsigned char contrast) -#else -int gfx_set_decoder_contrast(unsigned char contrast) -#endif -{ - saa7114_write_reg(SAA7114_CONTRAST, (unsigned char) (contrast >> 1)); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_hue - * - * This routine sets the hue control of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_hue(char hue) -#else -int gfx_set_decoder_hue(char hue) -#endif -{ - saa7114_write_reg(SAA7114_HUE, (unsigned char) hue); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_saturation - * - * This routine sets the saturation adjustment of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_saturation(unsigned char saturation) -#else -int gfx_set_decoder_saturation(unsigned char saturation) -#endif -{ - saa7114_write_reg(SAA7114_SATURATION, (unsigned char) (saturation >> 1)); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_input_offset - * - * This routine sets the size of the decoder input window. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_input_offset(unsigned short x, unsigned short y) -#else -int gfx_set_decoder_input_offset(unsigned short x, unsigned short y) -#endif -{ - /* SET THE INPUT WINDOW OFFSET */ - - saa7114_write_reg(SAA7114_HORZ_OFFSET_LO, (unsigned char) (x & 0x00FF)); - saa7114_write_reg(SAA7114_HORZ_OFFSET_HI, (unsigned char) (x >> 8)); - saa7114_write_reg(SAA7114_VERT_OFFSET_LO, (unsigned char) (y & 0x00FF)); - saa7114_write_reg(SAA7114_VERT_OFFSET_HI, (unsigned char) (y >> 8)); - - gfx_decoder_software_reset(); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_input_size - * - * This routine sets the size of the decoder input window. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_input_size(unsigned short width, unsigned short height) -#else -int gfx_set_decoder_input_size(unsigned short width, unsigned short height) -#endif -{ - /* DIVIDE HEIGHT BY TWO FOR INTERLACING */ - - height = (height + 1) >> 1; - - /* SET THE INPUT WINDOW SIZE */ - - saa7114_write_reg(SAA7114_HORZ_INPUT_LO, (unsigned char) (width & 0x00FF)); - saa7114_write_reg(SAA7114_HORZ_INPUT_HI, (unsigned char) (width >> 8)); - saa7114_write_reg(SAA7114_VERT_INPUT_LO, (unsigned char) (height & 0x00FF)); - saa7114_write_reg(SAA7114_VERT_INPUT_HI, (unsigned char) (height >> 8)); - - gfx_decoder_software_reset(); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_output_size - * - * This routine sets the size of the decoder output window. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_output_size(unsigned short width, unsigned short height) -#else -int gfx_set_decoder_output_size(unsigned short width, unsigned short height) -#endif -{ - /* ROUND WIDTH UP TO EVEN NUMBER TO PREVENT DECODER BECOMING STUCK */ - - width = ((width + 1) >> 1) << 1; - - /* DIVIDE HEIGHT BY TWO FOR INTERLACING */ - - height = (height + 1) >> 1; - - /* SET THE OUTPUT WINDOW SIZE */ - - saa7114_write_reg(SAA7114_HORZ_OUTPUT_LO, (unsigned char) (width & 0x00FF)); - saa7114_write_reg(SAA7114_HORZ_OUTPUT_HI, (unsigned char) (width >> 8)); - saa7114_write_reg(SAA7114_VERT_OUTPUT_LO, (unsigned char) (height & 0x00FF)); - saa7114_write_reg(SAA7114_VERT_OUTPUT_HI, (unsigned char) (height >> 8)); - - gfx_decoder_software_reset(); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_scale - * - * This routine sets the scaling of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#else -int gfx_set_decoder_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#endif -{ - unsigned char prescale = 0; - int scale = 0; - - /* SET THE HORIZONTAL PRESCALE */ - /* Downscale from 1 to 1/63 source size. */ - - if (dstw) prescale = (unsigned char) (srcw/dstw); - if (!prescale) prescale = 1; - if (prescale > 63) return(1); - saa7114_write_reg(SAA7114_HORZ_PRESCALER, prescale); - - /* USE FIR PREFILTER FUNCTIONALITY (OPTIMISATION) */ - - if ( prescale < 36 ) { - if (optimize_for_aliasing) { - saa7114_write_reg(SAA7114_HORZ_ACL, - gfx_saa7114_fir_values[prescale-1].acl_low ); - saa7114_write_reg(SAA7114_HORZ_FIR_PREFILTER, - gfx_saa7114_fir_values[prescale-1].prefilter_low ); - } else { - saa7114_write_reg(SAA7114_HORZ_ACL, - gfx_saa7114_fir_values[prescale-1].acl_high ); - saa7114_write_reg(SAA7114_HORZ_FIR_PREFILTER, - gfx_saa7114_fir_values[prescale-1].prefilter_high ); - } - } else { - /* SAME SETTINGS FOR RATIO 1/35 DOWNTO 1/63 */ - if (optimize_for_aliasing) { - saa7114_write_reg(SAA7114_HORZ_ACL, - gfx_saa7114_fir_values[34].acl_low ); - saa7114_write_reg(SAA7114_HORZ_FIR_PREFILTER, - gfx_saa7114_fir_values[34].prefilter_low ); - } else { - saa7114_write_reg(SAA7114_HORZ_ACL, - gfx_saa7114_fir_values[34].acl_high ); - saa7114_write_reg(SAA7114_HORZ_FIR_PREFILTER, - gfx_saa7114_fir_values[34].prefilter_high ); - } - } - - /* SET THE HORIZONTAL SCALING */ - - if (!dstw) return(1); - scale = ( (1024 * srcw * 1000) / (dstw * prescale) ) / 1000; - if ((scale > 8191) || (scale < 300)) return(1); - saa7114_write_reg(SAA7114_HSCALE_LUMA_LO, (unsigned char) (scale & 0x00FF)); - saa7114_write_reg(SAA7114_HSCALE_LUMA_HI, (unsigned char) (scale >> 8)); - scale >>= 1; - saa7114_write_reg(SAA7114_HSCALE_CHROMA_LO, (unsigned char) (scale & 0x00FF)); - saa7114_write_reg(SAA7114_HSCALE_CHROMA_HI, (unsigned char) (scale >> 8)); - - /* SET THE VERTICAL SCALING (INTERPOLATION MODE) */ - - if (!dsth) return(1); - - /* ROUND DESTINATION HEIGHT UP TO EVEN NUMBER TO PREVENT DECODER BECOMING STUCK */ - - dsth = ((dsth + 1) >> 1) << 1; - - scale = (int)((1024 * srch) / dsth); - saa7114_write_reg(SAA7114_VSCALE_LUMA_LO, (unsigned char) (scale & 0x00FF)); - saa7114_write_reg(SAA7114_VSCALE_LUMA_HI, (unsigned char) (scale >> 8)); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_LO, (unsigned char) (scale & 0x00FF)); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_HI, (unsigned char) (scale >> 8)); - - if (dsth >= (srch >> 1)) - { - /* USE INTERPOLATION MODE FOR SCALE FACTOR ABOVE 0.5 */ - - saa7114_write_reg(SAA7114_VSCALE_CONTROL, 0x00); - - /* SET VERTICAL PHASE REGISTER FOR CORRECT SCALED INTERLACED OUTPUT (OPTIMISATION) */ - /* THE OPTIMISATION IS BASED ON OFIDC = 0 (REG 90h[6] = 0 ) */ - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS0, SAA7114_VSCALE_PHO ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS1, SAA7114_VSCALE_PHO ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS2, (unsigned char)(SAA7114_VSCALE_PHO+scale/64-16) ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS3, (unsigned char)(SAA7114_VSCALE_PHO+scale/64-16) ); - - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS0, SAA7114_VSCALE_PHO ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS1, SAA7114_VSCALE_PHO ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS2, (unsigned char)(SAA7114_VSCALE_PHO+scale/64-16) ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS3, (unsigned char)(SAA7114_VSCALE_PHO+scale/64-16) ); - - /* RESTORE CONTRAST AND SATURATION FOR INTERPOLATION MODE */ - - saa7114_write_reg(SAA7114_FILTER_CONTRAST, (unsigned char) 0x40); - saa7114_write_reg(SAA7114_FILTER_SATURATION, (unsigned char) 0x40); - } - else - { - /* USE ACCUMULATION MODE FOR DOWNSCALING BY MORE THAN 2x */ - - saa7114_write_reg(SAA7114_VSCALE_CONTROL, 0x01); - - /* SET VERTICAL PHASE OFFSETS OFF (OPTIMISATION) */ - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS0, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS1, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS2, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_CHROMA_OFFS3, 0x00 ); - - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS0, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS1, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS2, 0x00 ); - saa7114_write_reg(SAA7114_VSCALE_LUMINA_OFFS3, 0x00 ); - - /* ADJUST CONTRAST AND SATURATION FOR ACCUMULATION MODE */ - - if (srch) scale = (64 * dsth) / srch; - saa7114_write_reg(SAA7114_FILTER_CONTRAST, (unsigned char) scale); - saa7114_write_reg(SAA7114_FILTER_SATURATION, (unsigned char) scale); - } - - gfx_decoder_software_reset(); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_format - * - * This routine programs the decoder to produce the specified format of VBI - * data for the specified lines. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_vbi_format(int start, int end, int format) -#else -int gfx_set_decoder_vbi_format(int start, int end, int format) -#endif -{ - int i; - unsigned char data; - - for (i = start; i <= end; i++) - { - switch (format) - { - case VBI_FORMAT_VIDEO: data = 0xFF; break; /* Active video */ - case VBI_FORMAT_RAW: data = 0x77; break; /* Raw VBI data */ - case VBI_FORMAT_CC: data = 0x55; break; /* US CC */ - case VBI_FORMAT_NABTS: data = 0xCC; break; /* US NABTS */ - default: - return GFX_STATUS_BAD_PARAMETER; - } - saa7114_write_reg((unsigned char)(0x3F + i), data); - } - return GFX_STATUS_OK; -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_vbi_enable - * - * This routine enables or disables VBI transfer in the decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_vbi_enable(int enable) -#else -int gfx_set_decoder_vbi_enable(int enable) -#endif -{ - unsigned char data; - saa7114_read_reg(SAA7114_IPORT_CONTROL, &data); - if (enable) data |= 0x80; - else data &= ~0x80; - saa7114_write_reg(SAA7114_IPORT_CONTROL, data); - return GFX_STATUS_OK; -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_TV_standard - * - * This routine configures the decoder for the required TV standard. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_TV_standard(TVStandardType TVStandard) -#else -int gfx_set_decoder_TV_standard(TVStandardType TVStandard) -#endif -{ - switch (TVStandard) { - case TV_STANDARD_NTSC: - saa7114_write_reg(0x0E, 0x89); - saa7114_write_reg(0x5A, 0x06); - break; - case TV_STANDARD_PAL: - saa7114_write_reg(0x0E, 0x81); - saa7114_write_reg(0x5A, 0x03); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - gfx_decoder_software_reset(); - return GFX_STATUS_OK; -} - -/*----------------------------------------------------------------------------- - * gfx_set_decoder_luminance_filter - * - * This routine sets the hue control of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_set_decoder_luminance_filter(unsigned char lufi) -#else -int gfx_set_decoder_luminance_filter(unsigned char lufi) -#endif -{ - unsigned char data; - saa7114_read_reg(SAA7114_LUMINANCE_CONTROL, &data); - saa7114_write_reg(SAA7114_LUMINANCE_CONTROL, (unsigned char)((data & ~0x0F) | (lufi & 0x0F))); - return(0); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_brightness - * - * This routine returns the current brightness of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned char saa7114_get_decoder_brightness(void) -#else -unsigned char gfx_get_decoder_brightness(void) -#endif -{ - unsigned char brightness = 0; - saa7114_read_reg(SAA7114_BRIGHTNESS, &brightness); - return(brightness); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_contrast - * - * This routine returns the current contrast of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned char saa7114_get_decoder_contrast(void) -#else -unsigned char gfx_get_decoder_contrast(void) -#endif -{ - unsigned char contrast = 0; - saa7114_read_reg(SAA7114_CONTRAST, &contrast); - contrast <<= 1; - return(contrast); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_hue - * - * This routine returns the current hue of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -char saa7114_get_decoder_hue(void) -#else -char gfx_get_decoder_hue(void) -#endif -{ - unsigned char hue = 0; - saa7114_read_reg(SAA7114_HUE, &hue); - return((char)hue); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_saturation - * - * This routine returns the current saturation of the video decoder. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned char saa7114_get_decoder_saturation(void) -#else -unsigned char gfx_get_decoder_saturation(void) -#endif -{ - unsigned char saturation = 0; - saa7114_read_reg(SAA7114_SATURATION, &saturation); - saturation <<= 1; - return(saturation); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_input_offset - * - * This routine returns the offset into the input window. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned long saa7114_get_decoder_input_offset(void) -#else -unsigned long gfx_get_decoder_input_offset(void) -#endif -{ - unsigned long value = 0; - unsigned char data; - saa7114_read_reg(SAA7114_HORZ_OFFSET_LO, &data); - value = (unsigned long) data; - saa7114_read_reg(SAA7114_HORZ_OFFSET_HI, &data); - value |= ((unsigned long) data) << 8; - saa7114_read_reg(SAA7114_VERT_OFFSET_LO, &data); - value |= ((unsigned long) data) << 16; - saa7114_read_reg(SAA7114_VERT_OFFSET_HI, &data); - value |= ((unsigned long) data) << 24; - return(value); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_input_size - * - * This routine returns the current size of the input window - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned long saa7114_get_decoder_input_size(void) -#else -unsigned long gfx_get_decoder_input_size(void) -#endif -{ - unsigned long value = 0; - unsigned char data; - saa7114_read_reg(SAA7114_HORZ_INPUT_LO, &data); - value = (unsigned long) data; - saa7114_read_reg(SAA7114_HORZ_INPUT_HI, &data); - value |= ((unsigned long) data) << 8; - saa7114_read_reg(SAA7114_VERT_INPUT_LO, &data); - value |= ((unsigned long) data) << 17; - saa7114_read_reg(SAA7114_VERT_INPUT_HI, &data); - value |= ((unsigned long) data) << 25; - return(value); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_output_size - * - * This routine returns the current size of the output window. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -unsigned long saa7114_get_decoder_output_size(void) -#else -unsigned long gfx_get_decoder_output_size(void) -#endif -{ - unsigned long value = 0; - unsigned char data; - saa7114_read_reg(SAA7114_HORZ_OUTPUT_LO, &data); - value = (unsigned long) data; - saa7114_read_reg(SAA7114_HORZ_OUTPUT_HI, &data); - value |= ((unsigned long) data) << 8; - saa7114_read_reg(SAA7114_VERT_OUTPUT_LO, &data); - value |= ((unsigned long) data) << 17; - saa7114_read_reg(SAA7114_VERT_OUTPUT_HI, &data); - value |= ((unsigned long) data) << 25; - return(value); -} - -/*----------------------------------------------------------------------------- - * gfx_get_decoder_vbi_format - * - * This routine returns the current format of VBI data for the specified line. - *----------------------------------------------------------------------------- - */ -#if GFX_DECODER_DYNAMIC -int saa7114_get_decoder_vbi_format(int line) -#else -int gfx_get_decoder_vbi_format(int line) -#endif -{ - unsigned char format = 0, data; - saa7114_read_reg((unsigned char)(0x3F + line), &data); - switch (data) - { - case 0xFF: format = VBI_FORMAT_VIDEO; break; /* Active video */ - case 0x77: format = VBI_FORMAT_RAW; break; /* Raw VBI data */ - case 0x55: format = VBI_FORMAT_CC; break; /* US CC */ - case 0xCC: format = VBI_FORMAT_NABTS; break; /* US NABTS */ - } - return(format); -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_1200.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_1200.c deleted file mode 100644 index 34bc08507..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_1200.c +++ /dev/null @@ -1,969 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_1200.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: tv_1200.c $ - * - * This file contains routines to control the SC1200 TVOUT and TV encoder. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*----------------------------------------------------------------------------- - * gfx_set_tv_format - * - * This routine sets the TV encoder registers to the specified format - * and resolution. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_format(TVStandardType format, GfxOnTVType resolution) -#else -int gfx_set_tv_format(TVStandardType format, GfxOnTVType resolution) -#endif -{ - unsigned long ctrl2, mode; - - /* Save TV output mode */ - ctrl2 = READ_VID32(SC1200_TVENC_TIM_CTRL_2) & (SC1200_TVENC_OUTPUT_YCBCR | SC1200_TVENC_CFS_MASK); - /* Save flicker filter setting */ - mode = READ_VID32(SC1200_TVOUT_HORZ_SCALING) & SC1200_TVOUT_FLICKER_FILTER_MASK; - - switch (format) { - case TV_STANDARD_NTSC : - /* Horizontal Sync Start is 848 */ - /* Horizontal Sync End is 856 */ - WRITE_VID32(SC1200_TVOUT_HORZ_SYNC, 0x03580350); - /* Vertical Sync Start is 0 */ - /* Vertical Sync End is 1 */ - /* Vertical Display Start Skew is 1 */ - /* Vertical Display End Skew is 1 */ - WRITE_VID32(SC1200_TVOUT_VERT_SYNC, 0x05001000); - /* Disable vertical down scaling, take all lines */ - if (gfx_chip_revision <= SC1200_REV_B3) - WRITE_VID32(SC1200_TVOUT_VERT_DOWNSCALE, 0xffffffff); - /* Enable video timing */ - /* Never reset sub carrier */ - /* Disable BLANK */ - /* Enable color burst */ - /* Add the IRE offset */ - /* NTSC color encoding */ - /* Video generator timing is 525 lines / 60Hz */ - /* Horizontal and Vertical counters are initialized to HPHASE & VPHASE */ - /* VPHASE is 2, HPHASE is 0x50 */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, 0x82a01050); - /* Increase horizontal blanking interval */ - /* Low Water Mark for Y is 0x1F */ - /* Low Water Mark for Cb is 0xF */ - /* HUE is 0 */ - /* SCPHASE is 0xF9 */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, 0x9ff000f9 | ctrl2); - /* Subcarrier Frequency is 3.579545 MHz */ - WRITE_VID32(SC1200_TVENC_SUB_FREQ, 0x21f07c1f); - /* VSTART is 18, HSTART is 113 */ - WRITE_VID32(SC1200_TVENC_DISP_POS, 0x00120071); - /* Display size: HEIGHT is 239, WIDTH is 719 */ - WRITE_VID32(SC1200_TVENC_DISP_SIZE, 0x00ef02cf); - switch (resolution) { - case GFX_ON_TV_SQUARE_PIXELS : - if (gfx_chip_revision <= SC1200_REV_B3) { - /* Horizontal Display start is 116 */ - /* Total number of pixels per line is 857 */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, 0x00740359); - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Enable Horizontal up scaling 9/8 */ - /* Disable Horizontal downscale */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x10020700 | mode); - /* Horizontal display end is 919, i.e. 720 active pixels */ - /* Total number of display lines per field is 240 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x039700f0); - } else { /* Use new scaler available in Rev. C */ - /* Horizontal Display start is 111 */ - /* Total number of pixels per line is 857 */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, 0x006f0359); - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Disable Horizontal up scaling 9/8 */ - /* Disable Horizontal downscale */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x10020500 | mode); - /* Set Horizontal upscaling to 64/58 (~ 11/10) */ - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, 0x3A000000); - /* Horizontal display end is 900, i.e. 706 active pixels */ - /* Total number of display lines per field is 240 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x038400f0); - } - break; - case GFX_ON_TV_NO_SCALING : - /* Horizontal Display start is 116 */ - /* Total number of pixels per line is 857 */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, 0x00740359); - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Disable Horizontal up scaling 9/8 */ - /* Disable Horizontal downscale */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x10020500 | mode); - /* Disable Horizontal scaling (set to 64/64) */ - if (gfx_chip_revision >= SC1200_REV_C1) - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, 0x40000000); - /* Horizontal display end is 919, i.e. 720 active pixels */ - /* Total number of display lines per field is 240 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x039700f0); - break; - default : - return(GFX_STATUS_BAD_PARAMETER); - } - break; - case TV_STANDARD_PAL : - /* Horizontal Sync Start is 854 */ - /* Horizontal Sync End is 862 */ - WRITE_VID32(SC1200_TVOUT_HORZ_SYNC, 0x035e0356); - /* Vertical Sync Start is 0 */ - /* Vertical Sync End is 1 */ - /* Vertical Display Start Skew is 1 */ - /* Vertical Display End Skew is 1 */ - WRITE_VID32(SC1200_TVOUT_VERT_SYNC, 0x05001000); - /* Disable vertical down scaling, take all lines */ - if (gfx_chip_revision <= SC1200_REV_B3) - WRITE_VID32(SC1200_TVOUT_VERT_DOWNSCALE, 0xffffffff); - /* Enable video timing */ - /* Never reset sub carrier (should be every 4 frames but doesn't work with genlock) */ - /* Disable BLANK */ - /* Enable color burst */ - /* Do not add the IRE offset */ - /* NTSC color encoding */ - /* Video generator timing is 625 lines / 50Hz */ - /* Horizontal and Vertical counters are initialized to HPHASE & VPHASE */ - /* VPHASE is 2, HPHASE is 50 */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, 0x81201050); - /* Increase horizontal blanking interval */ - /* Low Water Mark for Y is 0x1F */ - /* Low Water Mark for Cb is 0xF */ - /* HUE is 0 */ - /* SCPHASE is 0xD9 */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, 0x9ff000d9 | ctrl2); - /* Subcarrier Frequency is 4.43361875 MHz */ - WRITE_VID32(SC1200_TVENC_SUB_FREQ, 0x2a098acb); - /* VSTART is 22, HSTART is 123 */ - WRITE_VID32(SC1200_TVENC_DISP_POS, 0x0016007b); - /* Display size: HEIGHT is 287, WIDTH is 719 */ - WRITE_VID32(SC1200_TVENC_DISP_SIZE, 0x011f02cf); - switch (resolution) { - case GFX_ON_TV_NO_SCALING : - /* Horizontal Display start is 124 */ - /* Total number of pixels per line is 863 */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, 0x007c035f); - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Disable Horizontal up scaling 9/8 */ - /* Disable Horizontal downscale */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x10020500 | mode); - /* Disable Horizontal scaling (set to 64/64) */ - if (gfx_chip_revision >= SC1200_REV_C1) - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, 0x40000000); - /* Horizontal display end is 924, i.e. 720 active pixels */ - /* Total number of display lines per field is 288 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x039c0120); - break; - case GFX_ON_TV_SQUARE_PIXELS : - /* Horizontal Display start is 122 */ - /* Total number of pixels per line is 863 */ - WRITE_VID32(SC1200_TVOUT_HORZ_TIM, 0x007a035f); - if (gfx_chip_revision <= SC1200_REV_B3) { - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Disable Horizontal up scaling 9/8 */ - /* Horizontal downscale m/(m+1), m = 11, (i.e. 11/12 - closest possible to 54/59) */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x1002040b | mode); - /* Horizontal display end is 906, i.e. 704 active pixels */ - /* Total number of display lines per field is 288 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x038a0120); - } else { - /* HSYNC generated in the TV Encoder module */ - /* Interval between resets of TV Encoder is once every odd field */ - /* Enable Horizontal interpolation */ - /* Disable Horizontal up scaling 9/8 */ - /* Disable Horizontal downscale */ - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, 0x10020500 | mode); - /* Set Horizontal down scaling to 64/70 (closest possible to 54/59) */ - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, 0x46000000); - /* Horizontal display end is 904, i.e. 702 active pixels */ - /* Total number of display lines per field is 288 */ - WRITE_VID32(SC1200_TVOUT_LINE_END, 0x03880120); - } - break; - default : - return(GFX_STATUS_BAD_PARAMETER); - } - break; - default : - return(GFX_STATUS_BAD_PARAMETER); - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_output - * - * This routine sets the TV encoder registers to the specified output type. - * Supported output types are : S-VIDEO, Composite, YUV and SCART. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_output(int output) -#else -int gfx_set_tv_output(int output) -#endif -{ - unsigned long ctrl2, ctrl3; - - ctrl2 = READ_VID32(SC1200_TVENC_TIM_CTRL_2); - ctrl3 = READ_VID32(SC1200_TVENC_TIM_CTRL_3); - ctrl2 &= ~(SC1200_TVENC_OUTPUT_YCBCR | SC1200_TVENC_CFS_MASK); - ctrl3 &= ~(SC1200_TVENC_CM | SC1200_TVENC_SYNCMODE_MASK | SC1200_TVENC_CS); - switch (output) { - case TV_OUTPUT_COMPOSITE : - /* Analog outputs provide Y, C and CVBS */ - /* Chrominance Lowpass filter is 1.3MHz (for composite video output) */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, ctrl2 | SC1200_TVENC_CFS_CVBS); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_3, ctrl3); - break; - case TV_OUTPUT_S_VIDEO : - /* Analog outputs provide Y, C and CVBS */ - /* Chrominance Lowpass filter is 1.8MHz (for S-video output) */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, ctrl2 | SC1200_TVENC_CFS_SVIDEO); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_3, ctrl3); - break; - case TV_OUTPUT_YUV : - /* Analog outputs provide Y, Cb and Cr */ - /* A 7.5 IRE setup is applied to the output */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, ctrl2 | SC1200_TVENC_OUTPUT_YCBCR | SC1200_TVENC_CFS_BYPASS); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_3, ctrl3 | SC1200_TVENC_CM | SC1200_TVENC_CS); - break; - case TV_OUTPUT_SCART : - /* Analog outputs provide SCART (RGB and CVBS) */ - /* Sync is added to green signal */ - WRITE_VID32(SC1200_TVENC_TIM_CTRL_2, ctrl2 | SC1200_TVENC_CFS_CVBS); - WRITE_VID32(SC1200_TVENC_TIM_CTRL_3, ctrl3 | SC1200_TVENC_CM | SC1200_TVENC_SYNC_ON_GREEN); - break; - default : - return(GFX_STATUS_BAD_PARAMETER); - } - - /* Adjusts the internal voltage reference */ - ctrl2 = READ_VID32(SC1200_TVENC_DAC_CONTROL); - ctrl2 &= ~SC1200_TVENC_TRIM_MASK; - - /* Bypass for issue #926 : Inadequate chroma level of S-Video output */ - if ((gfx_chip_revision == SC1200_REV_B3) && (output == TV_OUTPUT_S_VIDEO)) - ctrl2 |= 0x7; - else - ctrl2 |= 0x5; - - WRITE_VID32(SC1200_TVENC_DAC_CONTROL, ctrl2); - - /* Disable 4:2:2 to 4:4:4 converter interpolation */ - WRITE_VID32(SC1200_TVOUT_DEBUG, SC1200_TVOUT_CONVERTER_INTERPOLATION); - - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_enable - * - * This routine enables or disables the TV output. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_enable(int enable) -#else -int gfx_set_tv_enable(int enable) -#endif -{ - unsigned long value_tim, value_dac; - value_tim = READ_VID32(SC1200_TVENC_TIM_CTRL_1); - value_dac = READ_VID32(SC1200_TVENC_DAC_CONTROL); - - if (enable) { - value_tim |= SC1200_TVENC_VIDEO_TIMING_ENABLE; - value_dac &= ~SC1200_TVENC_POWER_DOWN; - /* ENABLE GRAPHICS DISPLAY LOGIC IN VIDEO PROCESSOR */ - gfx_set_screen_enable(1); - } else { - value_tim &= ~SC1200_TVENC_VIDEO_TIMING_ENABLE; - value_dac |= SC1200_TVENC_POWER_DOWN; - /* Do not disable the graphics display logic because it might be needed for CRT */ - } - - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, value_tim); - WRITE_VID32(SC1200_TVENC_DAC_CONTROL, value_dac); - - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_flicker_filter - * - * This routine configures the TV out flicker filter. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_flicker_filter(int ff) -#else -int gfx_set_tv_flicker_filter(int ff) -#endif -{ - unsigned long mode; - mode = READ_VID32(SC1200_TVOUT_HORZ_SCALING); - mode &= ~SC1200_TVOUT_FLICKER_FILTER_MASK; - switch (ff) - { - case TV_FLICKER_FILTER_NONE: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, mode | SC1200_TVOUT_FLICKER_FILTER_DISABLED); - break; - case TV_FLICKER_FILTER_NORMAL: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, mode | SC1200_TVOUT_FLICKER_FILTER_FOURTH_HALF_FOURTH); - break; - case TV_FLICKER_FILTER_INTERLACED: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, mode | SC1200_TVOUT_FLICKER_FILTER_HALF_ONE_HALF); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_sub_carrier_reset - * - * This routine configures the TV encoder sub carrier reset interval. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_sub_carrier_reset(int screset) -#else -int gfx_set_tv_sub_carrier_reset(int screset) -#endif -{ - unsigned long mode; - mode = READ_VID32(SC1200_TVENC_TIM_CTRL_1); - mode &= ~SC1200_TVENC_SUB_CARRIER_RESET_MASK; - switch (screset) - { - case TV_SUB_CARRIER_RESET_NEVER: - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, mode | SC1200_TVENC_SUB_CARRIER_RESET_NEVER); - break; - case TV_SUB_CARRIER_RESET_EVERY_TWO_LINES: - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, mode | SC1200_TVENC_SUB_CARRIER_RESET_EVERY_TWO_LINES); - break; - case TV_SUB_CARRIER_RESET_EVERY_TWO_FRAMES: - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, mode | SC1200_TVENC_SUB_CARRIER_RESET_EVERY_TWO_FRAMES); - break; - case TV_SUB_CARRIER_RESET_EVERY_FOUR_FRAMES: - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, mode | SC1200_TVENC_SUB_CARRIER_RESET_EVERY_FOUR_FRAMES); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_vphase - * - * This routine sets the tv encoder VPHASE value. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_vphase(int vphase) -#else -int gfx_set_tv_vphase(int vphase) -#endif -{ - unsigned long mode = READ_VID32(SC1200_TVENC_TIM_CTRL_1); - mode &= ~SC1200_TVENC_VPHASE_MASK; - mode |= (vphase << SC1200_TVENC_VPHASE_POS) & SC1200_TVENC_VPHASE_MASK; - WRITE_VID32(SC1200_TVENC_TIM_CTRL_1, mode); - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_YC_delay - * - * This routine configures the TV out Y/C delay. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_YC_delay(int delay) -#else -int gfx_set_tv_YC_delay(int delay) -#endif -{ - unsigned long mode; - - /* This feature is implemented in Rev C1 */ - if (gfx_chip_revision < SC1200_REV_C1) return(GFX_STATUS_OK); - - mode = READ_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE); - mode &= ~SC1200_TVOUT_YC_DELAY_MASK; - switch (delay) - { - case TV_YC_DELAY_NONE: - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, mode | SC1200_TVOUT_YC_DELAY_NONE); - break; - case TV_Y_DELAY_ONE_PIXEL: - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, mode | SC1200_TVOUT_Y_DELAY_ONE_PIXEL); - break; - case TV_C_DELAY_ONE_PIXEL: - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, mode | SC1200_TVOUT_C_DELAY_ONE_PIXEL); - break; - case TV_C_DELAY_TWO_PIXELS: - WRITE_VID32(SC1200_TVOUT_HORZ_PRE_ENCODER_SCALE, mode | SC1200_TVOUT_C_DELAY_TWO_PIXELS); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tvenc_reset_interval - * - * This routine sets the interval between external resets of the TV encoder - * timing generator by the TV out. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tvenc_reset_interval(int interval) -#else -int gfx_set_tvenc_reset_interval(int interval) -#endif -{ - unsigned long value; - value = READ_VID32(SC1200_TVOUT_HORZ_SCALING); - value &= ~SC1200_TVENC_EXTERNAL_RESET_INTERVAL_MASK; - switch (interval) - { - case TVENC_RESET_EVERY_ODD_FIELD: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, value | SC1200_TVENC_EXTERNAL_RESET_EVERY_ODD_FIELD); - break; - case TVENC_RESET_EVERY_EVEN_FIELD: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, value | SC1200_TVENC_EXTERNAL_RESET_EVERY_EVEN_FIELD); - break; - case TVENC_RESET_NEXT_ODD_FIELD: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, value | SC1200_TVENC_EXTERNAL_RESET_NEXT_ODD_FIELD); - break; - case TVENC_RESET_NEXT_EVEN_FIELD: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, value | SC1200_TVENC_EXTERNAL_RESET_NEXT_EVEN_FIELD); - break; - case TVENC_RESET_EVERY_FIELD: - WRITE_VID32(SC1200_TVOUT_HORZ_SCALING, value | SC1200_TVENC_EXTERNAL_RESET_EVERY_FIELD); - break; - case TVENC_RESET_EVERY_X_ODD_FIELDS: - case TVENC_RESET_EVERY_X_EVEN_FIELDS: - return GFX_STATUS_UNSUPPORTED; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_enable - * - * This routine enables or disables the use of the hardware CC registers - * in the TV encoder. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_cc_enable(int enable) -#else -int gfx_set_tv_cc_enable(int enable) -#endif -{ - unsigned long value; - value = READ_VID32(SC1200_TVENC_CC_CONTROL); - value &= ~(0x0005F); - if (enable) value |= 0x51; - WRITE_VID32(SC1200_TVENC_CC_CONTROL, value); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_tv_display - * - * This routine sets the timings in the display controller to support a - * TV resolution. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_display(int width, int height) -#else -int gfx_set_tv_display(int width, int height) -#endif -{ - DISPLAYMODE *pMode; - int i; - - for (i = 0; i < NUM_TV_MODES; i++) - { - pMode = &TVTimings[i]; - if ((unsigned)width == pMode->hactive && (unsigned)height == pMode->vactive) - break; - } - - if (i == NUM_TV_MODES) - return 0; - - gfx_set_display_timings (gfx_get_display_bpp(), (unsigned short)pMode->flags, pMode->hactive, pMode->hblankstart, - pMode->hsyncstart, pMode->hsyncend, pMode->hblankend, - pMode->htotal, pMode->vactive, pMode->vblankstart, - pMode->vsyncstart, pMode->vsyncend, pMode->vblankend, - pMode->vtotal, pMode->frequency); - - return 1; -} - -/*----------------------------------------------------------------------------- - * cc_add_parity_bit - * - * This routine adds the (odd) parity bit to the data character. - *----------------------------------------------------------------------------- - */ -unsigned char cc_add_parity_bit(unsigned char data) -{ - int i, num = 0; - unsigned char d = data; - - for (i = 0; i < 7; i++) - { - if (d & 0x1) - num++; - d >>= 1; - } - if (num & 0x1) - return (data & ~0x80); - else - return (data | 0x80); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_data - * - * This routine writes the two specified characters to the CC data register - * of the TV encoder. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_cc_data(unsigned char data1, unsigned char data2) -#else -int gfx_set_tv_cc_data(unsigned char data1, unsigned char data2) -#endif -{ - unsigned long value; - value = cc_add_parity_bit(data1) | (cc_add_parity_bit(data2) << 8); - WRITE_VID32(SC1200_TVENC_CC_DATA, value); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_test_tvout_odd_field - * - * This routine returns 1 if the current TVout field is odd. Otherwise returns 0. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_test_tvout_odd_field(void) -#else -int gfx_test_tvout_odd_field(void) -#endif -{ - unsigned long debug = READ_VID32(SC1200_TVOUT_DEBUG); - WRITE_VID32(SC1200_TVOUT_DEBUG, debug | SC1200_TVOUT_FIELD_STATUS_TV); - if (READ_VID32(SC1200_TVOUT_DEBUG) & SC1200_TVOUT_FIELD_STATUS_EVEN) - return(0); - else return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_test_tvenc_odd_field - * - * This routine returns 1 if the current TV encoder field is odd. Otherwise returns 0. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_test_tvenc_odd_field(void) -#else -int gfx_test_tvenc_odd_field(void) -#endif -{ - unsigned long debug = READ_VID32(SC1200_TVOUT_DEBUG); - WRITE_VID32(SC1200_TVOUT_DEBUG, debug & ~SC1200_TVOUT_FIELD_STATUS_TV); - if (READ_VID32(SC1200_TVOUT_DEBUG) & SC1200_TVOUT_FIELD_STATUS_EVEN) - return(0); - else return(1); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_field_status_invert - * - * This routines determines whether the tvout/tvencoder field status bit is - * inverted (enable = 1) or not (enable = 0). - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_set_tv_field_status_invert(int enable) -#else -int gfx_set_tv_field_status_invert(int enable) -#endif -{ - unsigned long value; - value = READ_VID32(SC1200_TVOUT_DEBUG); - - if (enable) { - value |= SC1200_TVOUT_FIELD_STATUS_INVERT; - } else { - value &= ~(SC1200_TVOUT_FIELD_STATUS_INVERT); - } - - WRITE_VID32(SC1200_TVOUT_DEBUG, value); - - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_vphase - * - * This routine returns the tv encoder vertical phase. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_vphase(void) -#else -int gfx_get_tv_vphase(void) -#endif -{ - unsigned long mode = READ_VID32(SC1200_TVENC_TIM_CTRL_1); - return (int)((mode & SC1200_TVENC_VPHASE_MASK) >> SC1200_TVENC_VPHASE_POS); -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_enable - * - * This routine returns the current tv enable status - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_enable(unsigned int *p_on) -#else -int gfx_get_tv_enable(unsigned int *p_on) -#endif -{ - unsigned long control = READ_VID32 (SC1200_TVENC_DAC_CONTROL); - - *p_on = (unsigned int)(!(control & SC1200_TVENC_POWER_DOWN)); - - return GFX_STATUS_OK; -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_output - * - * This routine returns the current programmed TV output type. It does not - * detect invalid configurations. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_output(void) -#else -int gfx_get_tv_output(void) -#endif -{ - unsigned long ctrl2, ctrl3; - int format = 0; - - ctrl2 = READ_VID32 (SC1200_TVENC_TIM_CTRL_2); - ctrl3 = READ_VID32 (SC1200_TVENC_TIM_CTRL_3); - - if ((ctrl2 & SC1200_TVENC_CFS_MASK) == SC1200_TVENC_CFS_SVIDEO) - format = TV_OUTPUT_S_VIDEO; - else if (ctrl2 & SC1200_TVENC_OUTPUT_YCBCR) - format = TV_OUTPUT_YUV; - else if ((ctrl2 & SC1200_TVENC_CFS_MASK) == SC1200_TVENC_CFS_CVBS) - { - if (ctrl3 & SC1200_TVENC_CM) format = TV_OUTPUT_SCART; - else format = TV_OUTPUT_COMPOSITE; - } - - return format; -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_mode_count - * - * This routine returns the number of valid TV out resolutions. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_mode_count(TVStandardType format) -#else -int gfx_get_tv_mode_count(TVStandardType format) -#endif -{ - int mode, count = 0; - unsigned long flag; - - switch (format) - { - case TV_STANDARD_NTSC: flag = GFX_MODE_TV_NTSC; break; - case TV_STANDARD_PAL: flag = GFX_MODE_TV_PAL; break; - default: return 0; - } - - for (mode = 0; mode < NUM_TV_MODES; mode++) - { - if (TVTimings[mode].flags & flag) - count++; - } - - return count; -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_display_mode - * - * This routine returns the current TV display parameters. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_display_mode (int *width, int *height, int *bpp, int *hz) -#else -int gfx_get_tv_display_mode (int *width, int *height, int *bpp, int *hz) -#endif -{ - unsigned long frequency; - unsigned long mode, flags; - - *width = gfx_get_hactive(); - *height = gfx_get_vactive(); - *bpp = gfx_get_display_bpp (); - frequency = gfx_get_clock_frequency (); - - for (mode = 0; mode < NUM_TV_MODES; mode++) - { - if (TVTimings[mode].hactive == (unsigned short)(*width) && - TVTimings[mode].vactive == (unsigned short)(*height) && - TVTimings[mode].frequency == frequency) - { - flags = TVTimings[mode].flags; - - if (flags & GFX_MODE_TV_NTSC) *hz = 60; - else if (flags & GFX_MODE_TV_PAL) *hz = 50; - else *hz = 0; - return (1); - } - } - - return -1; -} - -/*--------------------------------------------------------------------------- - * gfx_get_tv_display_mode_frequency - * - * This routine returns the PLL frequency of a given TV mode. - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_get_tv_display_mode_frequency (unsigned short width, unsigned short height, - TVStandardType format, int *frequency) -#else -int gfx_get_tv_display_mode_frequency (unsigned short width, unsigned short height, - TVStandardType format, int *frequency) -#endif -{ - unsigned long mode, flag; - int retval = -1; - - *frequency = 0; - - switch (format) - { - case TV_STANDARD_NTSC: flag = GFX_MODE_TV_NTSC; break; - case TV_STANDARD_PAL: flag = GFX_MODE_TV_PAL; break; - default: return -1; - } - - for (mode = 0; mode < NUM_TV_MODES; mode++) - { - if ((TVTimings[mode].hactive == width) && - (TVTimings[mode].vactive == height) && - (TVTimings[mode].flags & flag)) - { - *frequency = TVTimings[mode].frequency; - retval = 1; - } - } - return retval; -} - -/*--------------------------------------------------------------------------- - * gfx_is_tv_display_mode_supported - * - * Returns >= 0 if the mode is available, -1 if the mode could not be found - *--------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int sc1200_is_tv_display_mode_supported (unsigned short width, unsigned short height, TVStandardType format) -#else -int gfx_is_tv_display_mode_supported (unsigned short width, unsigned short height, TVStandardType format) -#endif -{ - unsigned long mode, flag; - - switch (format) - { - case TV_STANDARD_NTSC: flag = GFX_MODE_TV_NTSC; break; - case TV_STANDARD_PAL: flag = GFX_MODE_TV_PAL; break; - default: return -1; - } - - for (mode = 0; mode < NUM_TV_MODES; mode++) - { - if (TVTimings[mode].hactive == width && - TVTimings[mode].vactive == height && - (TVTimings[mode].flags & flag)) - { - return ((int)mode); - } - } - - return -1; -} - - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.c deleted file mode 100644 index 488d07506..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.c +++ /dev/null @@ -1,3437 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.c,v 1.2 2002/10/18 20:02:40 tsi Exp $ */ -/* - * $Workfile: tv_fs450.c $ - * - * This file contains routines to control the FS450 tvout encoder. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#define FS450_DIRECTREG 0 - -#include "tv_fs450.h" - -/*========================================================================== -* -* Macros -* -*========================================================================== -*/ - -#undef fsmax -#undef fsmin -#define fsmax(a, b) ((a) > (b) ? (a) : (b)) -#define fsmin(a, b) ((a) < (b) ? (a) : (b)) - -#undef range_limit -#define range_limit(val,min_val,max_val) (fsmax((min_val),fsmin((val),(max_val)))) - -/*========================================================================== -* -* Registers -* -*========================================================================== -*/ - -#define MAX_REGISTERS 32 -#define MAX_BITS 32 - -#define READ 1 -#define WRITE 2 -#define READ_WRITE (READ | WRITE) - -typedef struct -{ - char *name; - unsigned long offset; - unsigned char bit_length; - unsigned char valid_bits; - unsigned char read_write; - char *bitfield_names[MAX_BITS]; -} S_REGISTER_DESCRIP; - -typedef struct -{ - int source; - char *name; - S_REGISTER_DESCRIP registers[MAX_REGISTERS]; -} S_SET_DESCRIP; - -const S_SET_DESCRIP *houston_regs(void); -const S_SET_DESCRIP *encoder_regs(void); -const S_SET_DESCRIP *macrovision_regs(void); -const S_SET_DESCRIP *gcc_regs(void); - -/*========================================================================== -* -* Houston Register Addresses & Bit Definitions -* -*========================================================================== -*/ - -#define HOUSTON_IHO 0x00 /*Input Horizontal Offset*/ -#define HOUSTON_IVO 0x02 /*Input Vertical Offset*/ -#define HOUSTON_IHA 0x04 /*Input Horizontal Active Width*/ -#define HOUSTON_VSC 0x06 /*Vertical Scaling Coeficient*/ -#define HOUSTON_HSC 0x08 /*Horizontal Scaling Coeficient*/ -#define HOUSTON_BYP 0x0A /*Bypass Register*/ -#define HOUSTON_CR 0x0C /*Control Register*/ -#define HOUSTON_SP 0x0E /*Status*/ -#define HOUSTON_NCONL 0x10 /*NCO numerator low word*/ -#define HOUSTON_NCONH 0x12 /*NCO numerator high word*/ -#define HOUSTON_NCODL 0x14 /*NCO denominator low word*/ -#define HOUSTON_NCODH 0x16 /*NCO denominator high word*/ -#define HOUSTON_APO 0x18 /**/ -#define HOUSTON_ALO 0x1A /**/ -#define HOUSTON_AFO 0x1C /**/ -#define HOUSTON_HSOUTWID 0x1E /**/ -#define HOUSTON_HSOUTST 0x20 /**/ -#define HOUSTON_HSOUTEND 0x22 /**/ -#define HOUSTON_SHP 0x24 /*Sharpness*/ -#define HOUSTON_FLK 0x26 /*Flicker Filter*/ -#define HOUSTON_BCONTL 0x28 /**/ -#define HOUSTON_BCONTH 0x2A /**/ -#define HOUSTON_BDONE 0x2C /**/ -#define HOUSTON_BDIAGL 0x2E /**/ -#define HOUSTON_BDIAGH 0x30 /**/ -#define HOUSTON_REV 0x32 /**/ -#define HOUSTON_MISC 0x34 /**/ -#define HOUSTON_FFO 0x36 /**/ -#define HOUSTON_FFO_LAT 0x38 /**/ -#define HOUSTON_VSOUTWID 0x3A -#define HOUSTON_VSOUTST 0x3C -#define HOUSTON_VSOUTEND 0x3E - -/*// BYP Register Bits*/ -#define BYP_RGB_BYPASS 0x0001 -#define BYP_HDS_BYPASS 0x0002 -#define BYP_HDS_TBYPASS 0x0004 -#define BYP_CAC_BYPASS 0x0008 -#define BYP_R2V_SBYPASS 0x0010 -#define BYP_R2V_BYPASS 0x0020 -#define BYP_VDS_BYPASS 0x0040 -#define BYP_FFT_BYPASS 0x0080 -#define BYP_FIF_BYPASS 0x0100 -#define BYP_FIF_TBYPASS 0x0200 -#define BYP_HUS_BYPASS 0x0400 -#define BYP_HUS_TBYPASS 0x0800 -#define BYP_CCR_BYPASS 0x1000 -#define BYP_PLL_BYPASS 0x2000 -#define BYP_NCO_BYPASS 0x4000 -#define BYP_ENC_BYPASS 0x8000 - -/*// CR Register Bits*/ -#define CR_RESET 0x0001 -#define CR_CLKOFF 0x0002 -#define CR_NCO_EN 0x0004 -#define CR_COMPOFF 0x0008 -#define CR_YCOFF 0x0010 -#define CR_LP_EN 0x0020 -#define CR_CACQ_CLR 0x0040 -#define CR_FFO_CLR 0x0080 -#define CR_656_PAL_NTSC 0x0100 -#define CR_656_STD_VMI 0x0200 -#define CR_OFMT 0x0400 -#define CR_UIM_CLK 0x0800 -#define CR_UIM_DEC 0x1000 -#define CR_BIPGEN_EN1 0x2000 -#define CR_UIM_MOD0 0x4000 -#define CR_UIM_MOD1 0x8000 - -/*// Status Register Bits*/ -#define SP_CACQ_ST 0x0001 -#define SP_FFO_ST 0x0002 -#define SP_REVID_MASK 0x7FFC -#define SP_MV_EN 0x8000 - -/*// BDONE Register Bits*/ -#define BDONE_BIST_DONE_A 0x0001 -#define BDONE_BIST_DONE_B 0x0002 -#define BDONE_BIST_DONE_C 0x0004 -#define BDONE_BIST_DONE_D 0x0008 -#define BDONE_BIST_DONE_E 0x0010 -#define BDONE_BIST_DONE_F 0x0020 -#define BDONE_BIST_DONE_G 0x0040 - -/*// BDIAGL Register Bits*/ -#define BDIAGL_BIST_DIAG_A 0x000F -#define BDIAGL_BIST_DIAG_B 0x00F0 -#define BDIAGL_BIST_DIAG_C 0x0F00 -#define BDIAGL_BIST_DIAG_D 0xF000 - -/*// BDIAGH Register Bits*/ -#define BDIAGH_BIST_DIAG_E 0x000F -#define BDIAGH_BIST_DIAG_F 0x000F -#define BDIAGH_BIST_DIAG_G 0x000F - -/*// MISC Register Bits*/ -#define MISC_TV_SHORT_FLD 0x0001 -#define MISC_ENC_TEST 0x0002 -#define MISC_DAC_TEST 0x0004 -#define MISC_MV_SOFT_EN 0x0008 -#define MISC_NCO_LOAD0 0x0010 -#define MISC_NCO_LOAD1 0x0020 -#define MISC_VGACKDIV 0x0200 -#define MISC_BRIDGE_SYNC 0x0400 -#define MISC_GTLIO_PD 0x8000 - - -/*========================================================================== -* -* Encoder Registers & Bit Definitions -* -*========================================================================== -*/ - -#define ENC_CHROMA_FREQ 0x40 -#define ENC_CHROMA_PHASE 0x44 -#define ENC_REG05 0x45 -#define ENC_REG06 0x46 -#define ENC_REG07 0x47 -#define ENC_HSYNC_WIDTH 0x48 -#define ENC_BURST_WIDTH 0x49 -#define ENC_BACK_PORCH 0x4A -#define ENC_CB_BURST_LEVEL 0x4B -#define ENC_CR_BURST_LEVEL 0x4C -#define ENC_SLAVE_MODE 0x4D -#define ENC_BLACK_LEVEL 0x4e -#define ENC_BLANK_LEVEL 0x50 -#define ENC_NUM_LINES 0x57 -#define ENC_WHITE_LEVEL 0x5e -#define ENC_CB_GAIN 0x60 -#define ENC_CR_GAIN 0x62 -#define ENC_TINT 0x65 -#define ENC_BREEZE_WAY 0x69 -#define ENC_FRONT_PORCH 0x6C -#define ENC_ACTIVELINE 0x71 -#define ENC_FIRST_LINE 0x73 -#define ENC_REG34 0x74 -#define ENC_SYNC_LEVEL 0x75 -#define ENC_VBI_BLANK_LEVEL 0x7C -#define ENC_RESET 0x7e -#define ENC_NOTCH_FILTER 0x8d - -/*========================================================================== -* -* Macrovision Registers & Bit Definitions -* -*========================================================================== -*/ - -#define MV_N0 0x59 -#define MV_N1 0x52 -#define MV_N2 0x7b -#define MV_N3 0x53 -#define MV_N4 0x79 -#define MV_N5 0x5d -#define MV_N6 0x7a -#define MV_N7 0x64 -#define MV_N8 0x54 -#define MV_N9 0x55 -#define MV_N10 0x56 -#define MV_N11 0x6d -#define MV_N12 0x6f -#define MV_N13 0x5a -#define MV_N14 0x5b -#define MV_N15 0x5c -#define MV_N16 0x63 -#define MV_N17 0x66 -#define MV_N18 0x68 -#define MV_N19 0x67 -#define MV_N20 0x61 -#define MV_N21 0x6a -#define MV_N22 0x76 -#define MV_AGC_PULSE_LEVEL 0x77 -#define MV_BP_PULSE_LEVEL 0x78 - -/*========================================================================== -* -* The TRACE macro can be used to display debug information. It can display -* one or more parameters in a formatted string like printf. No code will be -* generated for a release build. Use double parentheses for compatibility -* with C #define statements. Newline characters are not added -* automatically. Usage example: -* -* TRACE(("Number is %d, Name is %s.\n",iNumber,lpszName)) -* -*========================================================================== -*/ - -/*//#ifdef _DEBUG*/ -/*//void trace(const char *p_fmt,...);*/ -/*//#define TRACE(parameters) {trace parameters;}*/ -/*//#else*/ -#define TRACE(parameters) {} -/*//#endif*/ - -/****/ -/*// GCC timing structure.*/ -/****/ -typedef struct _S_TIMING_SPECS -{ - int vga_width; - int vga_lines; - int tv_width; - int tv_lines; - int h_total; - int h_sync; - int v_total; - int v_sync; -} S_TIMING_SPECS; - -/****/ -/*// Revision of Houston chip*/ -/****/ -#define HOUSTON_REV_A 0 -#define HOUSTON_REV_B 1 -static int houston_Rev(void); - -/*========================================================================== -* -* Functions -* -*========================================================================== -*/ - -static int houston_init(void); - -static unsigned char PLAL_FS450_i2c_address(void); -static int PLAL_FS450_UIM_mode(void); -static int PLAL_ReadRegister(S_REG_INFO *p_reg); -static int PLAL_WriteRegister(const S_REG_INFO *p_reg); -static int PLAL_IsTVOn(void); -static int PLAL_EnableVga(void); -static int PLAL_PrepForTVout(void); -static int PLAL_SetTVTimingRegisters(const S_TIMING_SPECS *p_specs); -static int PLAL_FinalEnableTVout(unsigned long vga_mode); - -/****/ -/*Direct Memory Access Functions*/ -/****/ -/*NOTE: Cx5530 is assumed hardcoded at 0x10000 offset*/ -/*from MediaGX base. F4Bar is bogus as described in the*/ -/*Cx5530 datasheet (actually points to GX frame buffer).*/ -/****/ -static int DMAL_ReadUInt32(unsigned long phys_addr, unsigned long *p_data) -{ - *p_data = READ_REG32(phys_addr); - return 0; -} - -static int DMAL_WriteUInt32(unsigned long phys_addr, unsigned long data) -{ - WRITE_REG32(phys_addr, data); - return 0; -} - -/****/ -/*Houston register access functions.*/ -/****/ -static int houston_ReadReg(unsigned int reg, unsigned long *p_value, unsigned int bytes) -{ - return gfx_i2c_read(1, PLAL_FS450_i2c_address(), (unsigned char)reg, - (unsigned char)bytes, (unsigned char *)p_value); -} - -static int houston_WriteReg(unsigned int reg, unsigned long value, unsigned int bytes) -{ - return gfx_i2c_write(1, PLAL_FS450_i2c_address(), (unsigned char)reg, - (unsigned char)bytes, (unsigned char *)&value); -} - -/****/ -/*TV configuration functions.*/ -/****/ -static int config_init(void); -static const S_TIMING_SPECS *p_specs(void); -static void config_power(int on); -static void config_vga_mode(unsigned long vga_mode); -static void config_tv_std(unsigned long tv_std, unsigned int trigger_bits); -static void conget_tv_std(unsigned long *p_tv_std); -static unsigned long supported_standards(void); -static void config_tvout_mode(unsigned long tvout_mode); -static void conget_tvout_mode(unsigned long *p_tvout_mode); -static void config_overscan_xy( unsigned long tv_std, unsigned long vga_mode, - int overscan_x, int overscan_y, int pos_x, int pos_y); -static void config_nco(unsigned long tv_std,unsigned long vga_mode); -static void config_sharpness(int sharpness); -static void conget_sharpness(int *p_sharpness); -static void config_flicker(int flicker); -static void conget_flicker(int *p_flicker); -static void config_color(int color); -static void conget_color(int *p_color); -static void config_brightness_contrast(unsigned long tv_std, unsigned int trigger_bits, - int brightness, int contrast); -static void conget_brightness_contrast(unsigned long tv_std, unsigned int trigger_bits, - int *p_brightness,int *p_contrast); -static void config_yc_filter(unsigned long tv_std,int luma_filter, int chroma_filter); -static void conget_yc_filter(int *p_luma_filter, int *p_chroma_filter); -static void config_macrovision(unsigned long tv_std, unsigned int cp_trigger_bits); -static void conget_macrovision(unsigned long tv_std, unsigned int *p_cp_trigger_bits); - -/****/ -/*Device settings.*/ -/****/ -typedef struct _S_DEVICE_SETTINGS -{ - int tv_on; - unsigned long vga_mode; - unsigned long tv_std; - unsigned long tvout_mode; - int overscan_x; - int overscan_y; - int position_x; - int position_y; - int sharpness; - int flicker; - int color; - int brightness; - int contrast; - unsigned char yc_filter; - unsigned int aps_trigger_bits; - int last_overscan_y; -} S_DEVICE_SETTINGS; - -static S_DEVICE_SETTINGS d; - -/*//==========================================================================*/ -/****/ -/*TV Setup Parameters*/ -/****/ -/*//==========================================================================*/ - -static const struct -{ - unsigned long chroma_freq[5]; - unsigned short chroma_phase[5]; - unsigned short cphase_rst[5]; - unsigned short color[5]; - unsigned short cr_burst_level[5]; - unsigned short cb_burst_level[5]; - unsigned short sys625_50[5]; - unsigned short vsync5[5]; - unsigned short pal_mode[5]; - unsigned short hsync_width[5]; - unsigned short burst_width[5]; - unsigned short back_porch[5]; - unsigned short front_porch[5]; - unsigned short breeze_way[5]; - unsigned short activeline[5]; - unsigned short blank_level[5]; - unsigned short vbi_blank_level[5]; - unsigned short black_level[5]; - unsigned short white_level[5]; - unsigned short hamp_offset[5]; - unsigned short sync_level[5]; - unsigned short tv_lines[5]; - unsigned short tv_width[5]; - unsigned short tv_active_lines[5]; - unsigned short tv_active_width[5]; - unsigned char notch_filter[5]; - unsigned short houston_cr[5]; - unsigned short houston_ncodl[5]; - unsigned short houston_ncodh[5]; -} tvsetup = -{ - /* ntsc, pal, ntsc-eij, pal-m, pal-n*/ - { 0x1f7cf021, 0xcb8a092a, 0x1f7cf021, 0xe3efe621, 0xcb8a092a }, /*chroma_freq*/ - { 0, 0, 0, 0, 0 }, /*chroma_phase*/ - { 2, 0, 2, 0, 0 }, /*cphase_rst*/ - { 54, 43, 54, 43, 43 }, /*color*/ - { 0, 31, 0, 29, 29 }, /*cr_burst_level*/ - { 59, 44, 59, 41, 41 }, /*cb_burst_level*/ - { 0, 1, 0, 0, 1 }, /*sys625_50*/ - { 0, 1, 0, 0, 0 }, /*vsync5*/ - { 0, 1, 0, 1, 1 }, /*pal_mode*/ - { 0x7a, 0x7a, 0x7a, 0x7a, 0x7a }, /*hsync_width*/ - { 0x40, 0x3c, 0x40, 0x40, 0x3c }, /*burst_width*/ - { 0x80, 0x9a, 0x80, 0x80, 0x9a }, /*back_porch*/ - { 0x24, 0x1e, 0x24, 0x24, 0x1e }, /*front_porch*/ - { 0x19, 0x1a, 0x19, 0x12, 0x1a }, /*breeze_way*/ - { 0xb4, 0xb4, 0xb4, 0xb4, 0xb4 }, /*active_line*/ - { 240, 251, 240, 240, 240 }, /*blank_level*/ - { 240, 251, 240, 240, 240 }, /*vbi_blank_level*/ - { 284, 252, 240, 252, 252 }, /*black_level*/ - { 823, 821, 823, 821, 821 }, /*white_level*/ - { 60, 48, 60, 48, 48 }, /*hamp_offset*/ - { 0x08, 0x08, 0x08, 0x08, 0x08 }, /*sync_level*/ - { 525, 625, 525, 525, 625 }, /*tv_lines*/ - { 858, 864, 858, 858, 864 }, /*tv_width*/ - { 487, 576, 487, 487, 576 }, /*tv_active_lines*/ - { 800, 800, 800, 800, 800 }, /*tv_active_width*/ - { 0x1a, 0x1d, 0x1a, 0x1d, 0x1d }, /*notch filter enabled*/ - { 0x0000, 0x0100, 0x0000, 0x0000, 0x0100 }, /*houston cr pal*/ - { 0x7e48, 0xf580, 0x7e48, 0x7e48, 0xf580 }, /*houston ncodl*/ - { 0x001b, 0x0020, 0x001b, 0x001b, 0x0020 } /*houston ncodh*/ -}; - -/****/ -/*MediaGX default underscan and centered position setups.*/ -/****/ -#define SCANTABLE_ENTRIES 5 -struct _scantable -{ - unsigned long mode; - unsigned short v_total[5]; - unsigned short v_sync[5]; - unsigned short iha[5]; - signed short iho[5]; - signed short hsc[5]; -}; - -static struct _scantable scantable[SCANTABLE_ENTRIES] = -{ - { - GFX_VGA_MODE_640X480, - { 617, 624, 617, 624, 624 }, /*v_total*/ - { 69, 88, 69, 88, 88 }, /*v_sync*/ - { 720, 720, 720, 720, 720 }, /*iha */ - { 0, 0, 0, 0, 0 }, /*iho */ - { -12, 0, -6, 0, 0 } /*hsc*/ - }, - { - GFX_VGA_MODE_800X600, - { 740, 740, 740, 740, 740 }, /*v_total*/ - { 90, 88, 90, 88, 88 }, /*v_sync*/ - { 720, 720, 508, 720, 720 }, /*iha */ - { -8, 11, -8, -8, 11 }, /*iho */ - { -27, -27, -27, -27, -27 } /*hsc*/ - }, - { - GFX_VGA_MODE_720X487, - { 525, 720, 525, 720, 720 }, /*v_total*/ - { 23, 230, 23, 230, 230 }, /*v_sync*/ - { 720, 720, 720, 720, 720 }, /*iha */ - { 0xa2, 0xa2, 0xa2, 0xa2, 0xa2 }, /*iho */ - { 0, 0, 0, 0, 0 } /*hsc*/ - }, - { - GFX_VGA_MODE_720X576, - { 720, 625, 720, 625, 625 }, /*v_total*/ - { 129, 25, 129, 25, 25 }, /*v_sync*/ - { 720, 720, 720, 720, 720 }, /*iha */ - { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa }, /*iho */ - { 0, 0, 0, 0, 0 } /*hsc*/ - }, - { - GFX_VGA_MODE_1024X768, - { 933, 942, 933, 806, 806 }, /*v_total*/ - { 121, 112, 121, 88, 88 }, /*v_sync*/ - { 600, 600, 600, 600, 600 }, /*iha */ - { 0x3c, 0x23, 0x3c, 0x65, 0x65 }, /*iho */ - { 35, 26, 35, 26, 26 } /*hsc*/ - }, -}; - -/****/ -/*Houston fifo configuration constants.*/ -/****/ -struct _ffolat -{ - int v_total; - unsigned short ffolat; -}; - -struct _ffolativo -{ - int v_total; - unsigned short ivo; - unsigned short ffolat; -}; - -/*h_total=832, ivo=40, tv_width=858, tv_lines=525, vga_lines=480*/ -#define SIZE6X4NTSC 66 -static struct _ffolat ffo6x4ntsc[SIZE6X4NTSC+1] = -{ - { 541, 0x40 }, { 545, 0x40 }, { 549, 0x40 }, { 553, 0x40 }, - { 557, 0x58 }, { 561, 0x40 }, { 565, 0x40 }, { 569, 0x40 }, - { 573, 0x48 }, { 577, 0x40 }, { 581, 0x40 }, { 585, 0x40 }, - { 589, 0x40 }, { 593, 0x48 }, { 597, 0x40 }, { 601, 0x40 }, - { 605, 0x40 }, { 609, 0x40 }, { 613, 0x5b }, { 617, 0x48 }, - { 621, 0x60 }, { 625, 0x48 }, { 629, 0x48 }, { 633, 0x40 }, - { 637, 0x5e }, { 641, 0x40 }, { 645, 0x50 }, { 649, 0x56 }, - { 653, 0x58 }, { 657, 0x6c }, { 661, 0x40 }, { 665, 0x40 }, - { 669, 0x40 }, { 673, 0x40 }, { 677, 0x40 }, { 681, 0x40 }, - { 685, 0x40 }, { 689, 0x40 }, { 693, 0x40 }, { 697, 0x40 }, - { 701, 0x40 }, { 705, 0x40 }, { 709, 0x40 }, { 713, 0x40 }, - { 717, 0x40 }, { 721, 0x40 }, { 725, 0x40 }, { 729, 0x40 }, - { 733, 0x40 }, { 737, 0x40 }, { 741, 0x40 }, { 745, 0x40 }, - { 749, 0x40 }, { 753, 0x40 }, { 757, 0x40 }, { 761, 0x40 }, - { 765, 0x40 }, { 769, 0x40 }, { 773, 0x40 }, { 777, 0x40 }, - { 781, 0x40 }, { 785, 0x40 }, { 789, 0x40 }, { 793, 0x40 }, - { 797, 0x30 }, { 801, 0x40 }, - { -1, 0 } -}; - -#define SIZE6X4PAL 45 -static struct _ffolat ffo6x4pal[SIZE6X4PAL+1] = -{ - { 625, 0x60 }, { 629, 0x60 }, { 633, 0x60 }, { 637, 0x60 }, - { 641, 0x50 }, { 645, 0x60 }, { 649, 0x60 }, { 653, 0x60 }, - { 657, 0x60 }, { 661, 0x60 }, { 665, 0x60 }, { 669, 0x60 }, - { 673, 0x60 }, { 677, 0x60 }, { 681, 0x60 }, { 685, 0x60 }, - { 689, 0x60 }, { 693, 0x60 }, { 697, 0x60 }, { 701, 0x60 }, - { 705, 0x60 }, { 709, 0x60 }, { 713, 0x60 }, { 717, 0x60 }, - { 721, 0x60 }, { 725, 0x60 }, { 729, 0x60 }, { 733, 0x60 }, - { 737, 0x60 }, { 741, 0x60 }, { 745, 0x60 }, { 749, 0x60 }, - { 753, 0x60 }, { 757, 0x60 }, { 761, 0x60 }, { 765, 0x60 }, - { 769, 0x60 }, { 773, 0x60 }, { 777, 0x60 }, { 781, 0x60 }, - { 785, 0x60 }, { 789, 0x60 }, { 793, 0x60 }, { 797, 0x60 }, - { 801, 0x60 }, - { -1, 0 } -}; - -#define SIZE7X4NTSC 40 -static struct _ffolat ffo7x4ntsc[SIZE7X4NTSC+1] = -{ - { 525, 0x52 }, { 529, 0x52 }, { 533, 0x52 }, { 537, 0x52 }, - { 541, 0x52 }, { 545, 0x40 }, { 549, 0x40 }, { 553, 0x40 }, - { 557, 0x58 }, { 561, 0x40 }, { 565, 0x58 }, { 569, 0x40 }, - { 573, 0x48 }, { 577, 0x40 }, { 581, 0x40 }, { 585, 0x40 }, - { 589, 0x40 }, { 593, 0x48 }, { 597, 0x40 }, { 601, 0x40 }, - { 605, 0x40 }, { 609, 0x40 }, { 613, 0x5b }, { 617, 0x48 }, - { 621, 0x60 }, { 625, 0x48 }, { 629, 0x48 }, { 633, 0x40 }, - { 637, 0x5e }, { 641, 0x40 }, { 645, 0x50 }, { 649, 0x56 }, - { 653, 0x58 }, { 657, 0x6c }, { 661, 0x40 }, { 665, 0x40 }, - { 669, 0x40 }, { 673, 0x40 }, { 677, 0x40 }, { 681, 0x40 }, - { -1, 0 } -}; - -#define SIZE7X4PAL 24 -static struct _ffolat ffo7x4pal[SIZE7X4PAL+1] = -{ - { 625, 0x60 }, { 629, 0x60 }, { 633, 0x60 }, { 637, 0x60 }, - { 641, 0x50 }, { 645, 0x60 }, { 649, 0x60 }, { 653, 0x60 }, - { 657, 0x60 }, { 661, 0x60 }, { 665, 0x60 }, { 669, 0x60 }, - { 673, 0x60 }, { 677, 0x60 }, { 681, 0x60 }, { 685, 0x60 }, - { 689, 0x60 }, { 693, 0x60 }, { 697, 0x60 }, { 701, 0x60 }, - { 705, 0x60 }, { 709, 0x60 }, { 713, 0x60 }, { 717, 0x60 }, - { -1, 0 } -}; - -#define SIZE7X5NTSC 54 -static struct _ffolat ffo7x5ntsc[SIZE7X5NTSC+1] = -{ - { 590, 0x40 }, { 594, 0x48 }, { 598, 0x40 }, { 602, 0x40 }, - { 606, 0x40 }, { 610, 0x40 }, { 614, 0x5b }, { 618, 0x48 }, - { 622, 0x60 }, { 626, 0x48 }, { 630, 0x48 }, { 634, 0x40 }, - { 638, 0x5e }, { 642, 0x40 }, { 646, 0x50 }, { 650, 0x56 }, - { 654, 0x58 }, { 658, 0x6c }, { 662, 0x40 }, { 666, 0x40 }, - { 670, 0x40 }, { 674, 0x40 }, { 678, 0x40 }, { 682, 0x40 }, - { 686, 0x40 }, { 690, 0x40 }, { 694, 0x40 }, { 698, 0x40 }, - { 702, 0x40 }, { 706, 0x40 }, { 710, 0x40 }, { 714, 0x40 }, - { 718, 0x40 }, { 722, 0x40 }, { 726, 0x40 }, { 730, 0x40 }, - { 734, 0x40 }, { 738, 0x40 }, { 742, 0x40 }, { 746, 0x40 }, - { 750, 0x40 }, { 754, 0x40 }, { 758, 0x40 }, { 762, 0x40 }, - { 766, 0x40 }, { 770, 0x40 }, { 774, 0x40 }, { 778, 0x40 }, - { 782, 0x40 }, { 786, 0x40 }, { 790, 0x40 }, { 794, 0x40 }, - { 798, 0x30 }, { 802, 0x40 }, - { -1, 0 } -}; - -#define SIZE7X5PAL 45 -static struct _ffolat ffo7x5pal[SIZE7X5PAL+1] = -{ - { 625, 0x60 }, { 629, 0x60 }, { 633, 0x60 }, { 637, 0x60 }, - { 641, 0x50 }, { 645, 0x60 }, { 649, 0x60 }, { 653, 0x60 }, - { 657, 0x60 }, { 661, 0x60 }, { 665, 0x60 }, { 669, 0x60 }, - { 673, 0x60 }, { 677, 0x60 }, { 681, 0x60 }, { 685, 0x60 }, - { 689, 0x60 }, { 693, 0x60 }, { 697, 0x60 }, { 701, 0x60 }, - { 705, 0x60 }, { 709, 0x60 }, { 713, 0x60 }, { 717, 0x60 }, - { 721, 0x60 }, { 725, 0x60 }, { 729, 0x60 }, { 733, 0x60 }, - { 737, 0x60 }, { 741, 0x60 }, { 745, 0x60 }, { 749, 0x60 }, - { 753, 0x60 }, { 757, 0x60 }, { 761, 0x60 }, { 765, 0x60 }, - { 769, 0x60 }, { 773, 0x60 }, { 777, 0x60 }, { 781, 0x60 }, - { 785, 0x60 }, { 789, 0x60 }, { 793, 0x60 }, { 797, 0x60 }, - { 801, 0x60 }, - { -1, 0 } -}; - -/*h_total=1056, vga_lines=600*/ -#define SIZE8X6NTSC 37 -static struct _ffolat ffo8x6ntsc[SIZE8X6NTSC+1] = { - { 620, 0x40 }, /*v_total_min >= vsync+10 >= vga_lines+10 = 610*/ - { 625, 0x58 }, { 630, 0x40 }, { 635, 0x40 }, { 640, 0x40 }, - { 645, 0x46 }, { 650, 0x46 }, { 655, 0x4f }, { 660, 0x4c }, - { 665, 0x4a }, { 670, 0x50 }, { 675, 0x2f }, { 680, 0x48 }, - { 685, 0x38 }, { 690, 0x31 }, { 695, 0x40 }, { 700, 0x21 }, - { 705, 0x25 }, { 710, 0x40 }, { 715, 0x48 }, { 720, 0x50 }, - { 725, 0x30 }, { 730, 0x50 }, { 735, 0x50 }, { 740, 0x50 }, - { 745, 0x40 }, { 750, 0x38 }, { 755, 0x50 }, { 760, 0x50 }, - { 765, 0x40 }, { 770, 0x38 }, { 775, 0x40 }, { 780, 0x40 }, - { 785, 0x40 }, { 790, 0x38 }, { 795, 0x50 }, { 800, 0x50 }, - { -1, 0 } -}; - -/*h_total=1056, vga_lines=600*/ -#define SIZE8X6PAL 36 -static struct _ffolat ffo8x6pal[SIZE8X6PAL+1] = { - { 625, 0x80 }, { 630, 0x80 }, { 635, 0x5a }, { 640, 0x55 }, - { 645, 0x48 }, { 650, 0x65 }, { 655, 0x65 }, { 660, 0x50 }, - { 665, 0x80 }, { 670, 0x70 }, { 675, 0x56 }, { 680, 0x80 }, - { 685, 0x58 }, { 690, 0x31 }, { 695, 0x80 }, { 700, 0x60 }, - { 705, 0x45 }, { 710, 0x4a }, { 715, 0x50 }, { 720, 0x50 }, - { 725, 0x50 }, { 730, 0x45 }, { 735, 0x50 }, { 740, 0x50 }, - { 745, 0x50 }, { 750, 0x50 }, { 755, 0x50 }, { 760, 0x50 }, - { 765, 0x50 }, { 770, 0x50 }, { 775, 0x50 }, { 780, 0x50 }, - { 785, 0x50 }, { 790, 0x50 }, { 795, 0x50 }, { 800, 0x50 }, - { -1, 0 } -}; - -/*h_total=1344, vga_lines=768*/ -#define SIZE10X7NTSC 45 -static struct _ffolativo ffo10x7ntsc[SIZE10X7NTSC] = { - { 783, 0x4d, 0x40 }, - { 789, 0x47, 0x14 }, - { 795, 0x47, 0x7f }, - { 801, 0x47, 0x53 }, - { 807, 0x47, 0x11 }, - { 813, 0x47, 0x78 }, - { 819, 0x47, 0x54 }, - { 825, 0x47, 0x40 }, - { 831, 0x47, 0x0f }, - { 837, 0x4d, 0x40 }, - { 843, 0x47, 0x5a }, - { 849, 0x4d, 0x40 }, - { 855, 0x47, 0x4b }, - { 861, 0x4d, 0x40 }, - { 867, 0x47, 0x4b }, - { 873, 0x4d, 0x40 }, - { 879, 0x47, 0x07 }, - { 885, 0x48, 0x20 }, - { 891, 0x47, 0x82 }, - { 897, 0x47, 0x60 }, - { 903, 0x47, 0x7f }, - { 909, 0x4d, 0x40 }, - { 915, 0x48, 0x40 }, - { 921, 0x4c, 0x40 }, - { 927, 0x49, 0x40 }, - { 933, 0x48, 0x40 }, - { 939, 0x4a, 0x40 }, - { 945, 0x46, 0x40 }, - { 951, 0x4a, 0x40 }, - { 957, 0x4a, 0x40 }, - { 963, 0x4b, 0x40 }, - { 969, 0x4b, 0x40 }, - { 975, 0x48, 0x40 }, - { 981, 0x47, 0x40 }, - { 987, 0x47, 0x40 }, - { 993, 0x47, 0x40 }, - { 999, 0x48, 0x40 }, - { 1005, 0x48, 0x40 }, - { 1011, 0x47, 0x40 }, - { 1017, 0x47, 0x40 }, - { 1023, 0x48, 0x40 }, - { 1029, 0x48, 0x40 }, - { 1035, 0x46, 0x40 }, - { 1041, 0x47, 0x40 }, - { 1047, 0x47, 0x40 } -}; - -/*h_total=1344, vga_lines=768*/ -#define SIZE10X7PAL 46 -static struct _ffolativo ffo10x7pal[SIZE10X7PAL] = { - { 781, 0x49, 0x40 }, - { 787, 0x46, 0x40 }, - { 793, 0x48, 0x40 }, - { 799, 0x46, 0x40 }, - { 805, 0x49, 0x40 }, - { 811, 0x47, 0x40 }, - { 817, 0x46, 0x40 }, - { 823, 0x46, 0x56 }, - { 829, 0x46, 0x2d }, - { 835, 0x46, 0x40 }, - { 841, 0x46, 0x2d }, - { 847, 0x46, 0x3f }, - { 853, 0x46, 0x10 }, - { 859, 0x46, 0x86 }, - { 865, 0x46, 0xc9 }, - { 871, 0x46, 0x83 }, - { 877, 0x46, 0xa8 }, - { 883, 0x46, 0x81 }, - { 889, 0x46, 0xa5 }, - { 895, 0x46, 0xa9 }, - { 901, 0x46, 0x81 }, - { 907, 0x46, 0xa4 }, - { 913, 0x46, 0xa5 }, - { 919, 0x46, 0x7f }, - { 925, 0x46, 0xa2 }, - { 931, 0x46, 0x9d }, - { 937, 0x46, 0xc1 }, - { 943, 0x46, 0x96 }, - { 949, 0x46, 0xb7 }, - { 955, 0x46, 0xb1 }, - { 961, 0x46, 0x8a }, - { 967, 0x46, 0xa9 }, - { 973, 0x46, 0xa0 }, - { 979, 0x46, 0x40 }, - { 985, 0x46, 0x97 }, - { 991, 0x46, 0xb5 }, - { 997, 0x46, 0xaa }, - { 1003, 0x46, 0x83 }, - { 1009, 0x46, 0x9f }, - { 1015, 0x47, 0x40 }, - { 1021, 0x46, 0xad }, - { 1027, 0x46, 0x87 }, - { 1033, 0x46, 0xa2 }, - { 1039, 0x47, 0x40 }, - { 1045, 0x46, 0xac }, - { 1051, 0x46, 0x86 } -}; - -/*//==========================================================================*/ -/****/ -/*FS450 API Functions.*/ -/****/ -/*//==========================================================================*/ - -/****/ -/*Initialize device settings*/ -/****/ -static void initialize_houston_static_registers(void) -{ - houston_WriteReg(HOUSTON_BYP, 0, 2); - houston_WriteReg(HOUSTON_APO, 0, 2); - houston_WriteReg(HOUSTON_ALO, 0, 2); - houston_WriteReg(HOUSTON_AFO, 0, 2); - houston_WriteReg(HOUSTON_BCONTL,0, 2); - houston_WriteReg(HOUSTON_BCONTH,0, 2); - houston_WriteReg(HOUSTON_BDONE, 0, 2); - houston_WriteReg(HOUSTON_BDIAGL,0, 2); - houston_WriteReg(HOUSTON_BDIAGH,0, 2); - houston_WriteReg(HOUSTON_MISC, 0, 2); -} - -int FS450_init(void) -{ - int err; - - TRACE(("FS450_Init()\n")) - - err = houston_init(); - if (err) - return err; - - - initialize_houston_static_registers(); - -#if 1 - d.tv_on = PLAL_IsTVOn() ? 1 : 0; -#else - d.tv_on = 0; -#endif - -#if 1 - /*get the current tv standard*/ - conget_tv_std(&d.tv_std); -#else - /*default to VP_TV_STANDARD_NTSC_M*/ - d.tv_std = VP_TV_STANDARD_NTSC_M; - config_tv_std(d.tv_std); -#endif - - d.vga_mode = 0; - -#if 0 - /*get the current tvout mode*/ - conget_tvout_mode(&d.tvout_mode); -#else - /*default to VP_TVOUT_MODE_CVBS_YC*/ - d.tvout_mode = GFX_TVOUT_MODE_CVBS_YC; -#endif - -#if 0 - /*get the current sharpness*/ - conget_sharpness(d.sharpness); -#else - /*default to 1000 out of 1000*/ - d.sharpness = 1000; - config_sharpness(d.sharpness); -#endif - -#if 0 - /*get the current flicker*/ - conget_flicker(d.flicker); -#else - /*default to 800 out of 1000*/ - d.flicker = 800; - config_flicker(d.flicker); -#endif - -#if 0 - /*get the current size and position*/ -#else - /*default to zeros*/ - d.overscan_x = 0; - d.overscan_y = 0; - d.position_x = 0; - d.position_y = 0; -#endif - -#if 0 - /*get the current color*/ - conget_color(d.color); -#else - d.color = 50; - /*//d.color = tvsetup.color[k];*/ - config_color(d.color); -#endif - -#if 0 - /*get the current brightness and contrast*/ - conget_brightness_contrast(d.tv_std,d.aps_trigger_bits,d.brightness,d.contrast); -#else - /*default*/ - d.brightness = 50; - d.contrast = 60; - config_brightness_contrast(d.tv_std,d.aps_trigger_bits,d.brightness,d.contrast); -#endif - -#if 1 - /*get the current yc filtering*/ - { - int luma_filter,chroma_filter; - - conget_yc_filter(&luma_filter,&chroma_filter); - d.yc_filter = 0; - if (luma_filter) - d.yc_filter |= GFX_LUMA_FILTER; - if (chroma_filter) - d.yc_filter |= GFX_CHROMA_FILTER; - } -#else - /*default*/ - d.yc_filter = GFX_LUMA_FILTER + GFX_CHROMA_FILTER; -#endif - -#if 0 - /*get the current cp settings*/ - conget_macrovision(d.tv_std,&d.aps_trigger_bits); -#else - d.aps_trigger_bits = 0; - config_macrovision(d.tv_std,d.aps_trigger_bits); -#endif - - d.last_overscan_y = -10000; - - return 0; -} - -void FS450_cleanup(void) -{ -} - -/*//==========================================================================*/ -/****/ -/*// Required configuration calls to write new settings to the device*/ - -#define REQ_TV_STANDARD_BIT 0x0002 -#define REQ_VGA_MODE_BIT 0x0004 -#define REQ_TVOUT_MODE_BIT 0x0008 -#define REQ_SHARPNESS_BIT 0x0010 -#define REQ_FLICKER_BIT 0x0020 -#define REQ_OVERSCAN_POSITION_BIT 0x0040 -#define REQ_COLOR_BIT 0x0080 -#define REQ_BRIGHTNESS_CONTRAST_BIT 0x0100 -#define REQ_YC_FILTER_BIT 0x0200 -#define REQ_MACROVISION_BIT 0x0400 -#define REQ_NCO_BIT 0x1000 - -#define REQ_TV_STANDARD (REQ_TV_STANDARD_BIT | REQ_OVERSCAN_POSITION | REQ_BRIGHTNESS_CONTRAST | REQ_MACROVISION_BIT | REQ_YC_FILTER) -#define REQ_VGA_MODE (REQ_VGA_MODE_BIT | REQ_OVERSCAN_POSITION) -#define REQ_TVOUT_MODE (REQ_TVOUT_MODE_BIT) -#define REQ_SHARPNESS (REQ_SHARPNESS_BIT) -#define REQ_FLICKER (REQ_FLICKER_BIT) -#define REQ_OVERSCAN_POSITION (REQ_OVERSCAN_POSITION_BIT | REQ_NCO) -#define REQ_COLOR (REQ_COLOR_BIT) -#define REQ_BRIGHTNESS_CONTRAST (REQ_BRIGHTNESS_CONTRAST_BIT) -#define REQ_YC_FILTER (REQ_YC_FILTER_BIT) -#define REQ_MACROVISION (REQ_TV_STANDARD_BIT | REQ_BRIGHTNESS_CONTRAST_BIT | REQ_MACROVISION_BIT) -#define REQ_NCO (REQ_NCO_BIT) -#define REQ_ENCODER (REQ_TV_STANDARD | REQ_COLOR | REQ_BRIGHTNESS_CONTRAST | REQ_YC_FILTER) - -static int write_config(int req) -{ - unsigned long reg, reg_encoder_reset = 0; - int reset; - - /*if we're changing the nco, and the vertical scaling has changed...*/ - reset = ((REQ_NCO_BIT & req) && (d.overscan_y != d.last_overscan_y)); - if (reset) - { - /*put the encoder into reset while making changes*/ - houston_ReadReg(ENC_RESET, ®, 1); - houston_WriteReg(ENC_RESET, reg | 0x01, 1); - reg_encoder_reset = reg & 0x01; - } - - if (REQ_TV_STANDARD_BIT & req) - config_tv_std(d.tv_std, d.aps_trigger_bits); - - if (REQ_VGA_MODE_BIT & req) - config_vga_mode(d.vga_mode); - - if (REQ_TVOUT_MODE_BIT & req) - config_tvout_mode(d.tvout_mode); - - if (REQ_OVERSCAN_POSITION_BIT & req) - { - config_overscan_xy( - d.tv_std, - d.vga_mode, - d.overscan_x, - d.overscan_y, - d.position_x, - d.position_y); - - /*h_timing and v_timing and syncs.*/ - if (PLAL_IsTVOn()) - PLAL_SetTVTimingRegisters(p_specs()); - } - - if (REQ_NCO_BIT & req) - config_nco(d.tv_std,d.vga_mode); - - if (REQ_SHARPNESS_BIT & req) - config_sharpness(d.sharpness); - - if (REQ_FLICKER_BIT & req) - config_flicker(d.flicker); - - if (REQ_COLOR_BIT & req) - config_color(d.color); - - if (REQ_BRIGHTNESS_CONTRAST_BIT & req) - { - config_brightness_contrast( - d.tv_std, - d.aps_trigger_bits, - d.brightness, - d.contrast); - } - - if (REQ_YC_FILTER_BIT & req) - { - config_yc_filter( - d.tv_std, - (d.yc_filter & GFX_LUMA_FILTER), - (d.yc_filter & GFX_CHROMA_FILTER)); - } - - if (REQ_MACROVISION_BIT & req) - config_macrovision(d.tv_std,d.aps_trigger_bits); - - /*if we decided to put the encoder into reset, put it back*/ - if (reset) - { - houston_ReadReg(ENC_RESET, ®, 1); - houston_WriteReg(ENC_RESET, reg_encoder_reset | (reg & ~0x01), 1); - - d.last_overscan_y = d.overscan_y; - } - return 0; -} - -/*==========================================================================*/ -/****/ -/*// TV On*/ - -#if GFX_TV_DYNAMIC -int fs450_get_tv_enable(unsigned int *p_on) -#else -int gfx_get_tv_enable(unsigned int *p_on) -#endif -{ - if (!p_on) - return ERR_INVALID_PARAMETER; - - *p_on = d.tv_on; - - return 0; -} - -/*//int FS450_set_tv_on(unsigned int on)*/ -#if GFX_TV_DYNAMIC -int fs450_set_tv_enable(int on) -#else -int gfx_set_tv_enable(int on) -#endif -{ - unsigned long reg; - - /*if not mode change, just return*/ - if ((d.tv_on && on) || (!d.tv_on && !on)) - return 0; - - /*if turning off...*/ - if (!on) - { - /*reenable vga.*/ - PLAL_EnableVga(); - - /*power down houston*/ - config_power(0); - - d.tv_on = 0; - - return 0; - } - - /*turning on...*/ - - /*power up houston */ - config_power(1); - - /*assert encoder reset.*/ - houston_WriteReg(ENC_RESET, 0x01, 1); - - /*initial platform preparation*/ - PLAL_PrepForTVout(); - - /*configure encoder and nco.*/ - write_config( - REQ_VGA_MODE | - REQ_TV_STANDARD | - REQ_TVOUT_MODE | - REQ_OVERSCAN_POSITION | - REQ_YC_FILTER | - REQ_MACROVISION); - - /*set LP_EN and UIM*/ - houston_ReadReg(HOUSTON_CR, ®, 2); - reg |= CR_LP_EN; - reg &= ~(CR_UIM_MOD0 | CR_UIM_MOD1); - reg |= (PLAL_FS450_UIM_mode() << 14); - houston_WriteReg(HOUSTON_CR,reg,2); - - /*set platform timing registers*/ - PLAL_SetTVTimingRegisters(p_specs()); - - PLAL_FinalEnableTVout(d.vga_mode); - - /*sync bridge*/ - { - int retry_count = 0; - - /*sync 50 times*/ - while (retry_count++ < 50) - { - /*sync bridge.*/ - houston_ReadReg(HOUSTON_MISC, ®, 2); - reg |= MISC_BRIDGE_SYNC; - houston_WriteReg(HOUSTON_MISC, reg, 2); - reg &= ~MISC_BRIDGE_SYNC; - houston_WriteReg(HOUSTON_MISC, reg, 2); - } - } - - /*deassert encoder reset.*/ - houston_WriteReg(ENC_RESET, 0x00, 1); - - d.tv_on = 1; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_tv_defaults(int format) -#else -int gfx_set_tv_defaults(int format) -#endif -{ - return 0; -} - -/*==========================================================================*/ -/****/ -/*// TV standard*/ - -#if GFX_TV_DYNAMIC -int fs450_get_tv_standard(unsigned long *p_standard) -#else -int gfx_get_tv_standard(unsigned long *p_standard) -#endif -{ - if (!p_standard) - return ERR_INVALID_PARAMETER; - - *p_standard = d.tv_std; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_get_available_tv_standards(unsigned long *p_standards) -#else -int gfx_get_available_tv_standards(unsigned long *p_standards) -#endif -{ - if (!p_standards) - return ERR_INVALID_PARAMETER; - - *p_standards = supported_standards(); - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_tv_standard(unsigned long standard) -#else -int gfx_set_tv_standard(unsigned long standard) -#endif -{ - /*verify supported standard.*/ - if (!(standard & supported_standards())) - return ERR_INVALID_PARAMETER; - - /*disallow if tv is on*/ - if (d.tv_on) - return ERR_CANNOT_CHANGE_WHILE_TV_ON; - - d.tv_std = standard; -/*// d.color = tvsetup.color[k];*/ - - return write_config(REQ_TV_STANDARD); -} - -/*==========================================================================*/ -/****/ -/*// vga mode as known by the driver*/ -#if GFX_TV_DYNAMIC -int fs450_get_tv_vga_mode(unsigned long *p_vga_mode) -#else -int gfx_get_tv_vga_mode(unsigned long *p_vga_mode) -#endif - -{ - if (!p_vga_mode) - return ERR_INVALID_PARAMETER; - - *p_vga_mode = d.vga_mode; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_get_available_tv_vga_modes(unsigned long *p_vga_modes) -#else -int gfx_get_available_tv_vga_modes(unsigned long *p_vga_modes) -#endif -{ - if (!p_vga_modes) - return ERR_INVALID_PARAMETER; - - *p_vga_modes = - GFX_VGA_MODE_640X480 | - GFX_VGA_MODE_720X487 | - GFX_VGA_MODE_720X576 | - GFX_VGA_MODE_800X600; - if (houston_Rev() >= HOUSTON_REV_B) - *p_vga_modes |= GFX_VGA_MODE_1024X768; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_tv_vga_mode(unsigned long vga_mode) -#else -int gfx_set_tv_vga_mode(unsigned long vga_mode) -#endif -{ - /*reject if not a single valid VGA mode*/ - switch (vga_mode) - { - default: - return ERR_INVALID_PARAMETER; - - case GFX_VGA_MODE_640X480: - case GFX_VGA_MODE_720X487: - case GFX_VGA_MODE_720X576: - case GFX_VGA_MODE_800X600: - break; - - case GFX_VGA_MODE_1024X768: - if (houston_Rev() >= HOUSTON_REV_B) - break; - return ERR_INVALID_PARAMETER; - } - - /*if the mode has changed...*/ - if (vga_mode != d.vga_mode) - { - d.vga_mode = vga_mode; - - return write_config(REQ_VGA_MODE); - } - - return 0; -} - -/*==========================================================================*/ -/****/ -/*// tvout mode*/ - -#if GFX_TV_DYNAMIC -int fs450_get_tvout_mode(unsigned long *p_tvout_mode) -#else -int gfx_get_tvout_mode(unsigned long *p_tvout_mode) -#endif -{ - if (!p_tvout_mode) - return ERR_INVALID_PARAMETER; - - *p_tvout_mode = d.tvout_mode; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_tvout_mode(unsigned long tvout_mode) -#else -int gfx_set_tvout_mode(unsigned long tvout_mode) -#endif -{ - d.tvout_mode = tvout_mode; - - return write_config(REQ_TVOUT_MODE); -} - -/*==========================================================================*/ -/****/ -/*// Sharpness*/ - -#if GFX_TV_DYNAMIC -int fs450_get_sharpness(int *p_sharpness) -#else -int gfx_get_sharpness(int *p_sharpness) -#endif -{ - if (!p_sharpness) - return ERR_INVALID_PARAMETER; - - *p_sharpness = d.sharpness; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_sharpness(int sharpness) -#else -int gfx_set_sharpness(int sharpness) -#endif -{ - d.sharpness = range_limit(sharpness, 0, 1000); - - return write_config(REQ_SHARPNESS); -} - -/*==========================================================================*/ -/****/ -/*flicker filter control.*/ - -#if GFX_TV_DYNAMIC -int fs450_get_flicker_filter(int *p_flicker) -#else -int gfx_get_flicker_filter(int *p_flicker) -#endif -{ - if (!p_flicker) - return ERR_INVALID_PARAMETER; - - *p_flicker = d.flicker; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_flicker_filter(int flicker) -#else -int gfx_set_flicker_filter(int flicker) -#endif -{ - d.flicker = range_limit(flicker, 0, 1000); - - return write_config(REQ_FLICKER); -} - -/*==========================================================================*/ -/****/ -/*// Overscan and Position*/ - -#if GFX_TV_DYNAMIC -int fs450_get_overscan(int *p_x, int *p_y) -#else -int gfx_get_overscan(int *p_x, int *p_y) -#endif -{ - if (!p_x || !p_y) - return ERR_INVALID_PARAMETER; - - *p_x = d.overscan_x; - *p_y = d.overscan_y; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_overscan(int x, int y) -#else -int gfx_set_overscan(int x, int y) -#endif -{ - d.overscan_x = range_limit(x, -1000, 1000); - d.overscan_y = range_limit(y, -1000, 1000); - - return write_config(REQ_OVERSCAN_POSITION); -} - -#if GFX_TV_DYNAMIC -int fs450_get_position(int *p_x, int *p_y) -#else -int gfx_get_position(int *p_x, int *p_y) -#endif -{ - if (!p_x || !p_y) - return ERR_INVALID_PARAMETER; - - *p_x = d.position_x; - *p_y = d.position_y; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_position(int x, int y) -#else -int gfx_set_position(int x, int y) -#endif -{ - d.position_x = range_limit(x, -1000, 1000); - d.position_y = range_limit(y, -1000, 1000); - - return write_config(REQ_OVERSCAN_POSITION); -} - -/*==========================================================================*/ -/****/ -/*// Color, Brightness, and Contrast*/ - -#if GFX_TV_DYNAMIC -int fs450_get_color(int *p_color) -#else -int gfx_get_color(int *p_color) -#endif -{ - if (!p_color) - return ERR_INVALID_PARAMETER; - - *p_color = d.color; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_color(int color) -#else -int gfx_set_color(int color) -#endif -{ - d.color = range_limit(color, 0, 100); - - return write_config(REQ_COLOR); -} - -#if GFX_TV_DYNAMIC -int fs450_get_brightness(int *p_brightness) -#else -int gfx_get_brightness(int *p_brightness) -#endif -{ - if (!p_brightness) - return ERR_INVALID_PARAMETER; - - *p_brightness = d.brightness; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_brightness(int brightness) -#else -int gfx_set_brightness(int brightness) -#endif -{ - d.brightness = range_limit(brightness, 0, 100); - - return write_config(REQ_BRIGHTNESS_CONTRAST); -} - -#if GFX_TV_DYNAMIC -int fs450_get_contrast(int *p_contrast) -#else -int gfx_get_contrast(int *p_contrast) -#endif -{ - if (!p_contrast) - return ERR_INVALID_PARAMETER; - - *p_contrast = d.contrast; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_contrast(int constrast) -#else -int gfx_set_contrast(int constrast) -#endif -{ - d.contrast = range_limit(constrast, 0, 100); - - return write_config(REQ_BRIGHTNESS_CONTRAST); -} - -/*==========================================================================*/ -/****/ -/*// YC filters*/ - -#if GFX_TV_DYNAMIC -int fs450_get_yc_filter(unsigned int *p_yc_filter) -#else -int gfx_get_yc_filter(unsigned int *p_yc_filter) -#endif -{ - if (!p_yc_filter) - return ERR_INVALID_PARAMETER; - - if (houston_Rev() < HOUSTON_REV_B) - return ERR_NOT_SUPPORTED; - - *p_yc_filter = d.yc_filter; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_yc_filter(unsigned int yc_filter) -#else -int gfx_set_yc_filter(unsigned int yc_filter) -#endif -{ - if (houston_Rev() < HOUSTON_REV_B) - return ERR_NOT_SUPPORTED; - - /*luma filter.*/ - if (yc_filter & GFX_LUMA_FILTER) - d.yc_filter |= GFX_LUMA_FILTER; - else - d.yc_filter &= ~GFX_LUMA_FILTER; - - /*chroma filter.*/ - if (yc_filter & GFX_CHROMA_FILTER) - d.yc_filter |= GFX_CHROMA_FILTER; - else - d.yc_filter &= ~GFX_CHROMA_FILTER; - - return write_config(REQ_YC_FILTER); -} - - -#if GFX_TV_DYNAMIC -int fs450_get_aps_trigger_bits(unsigned int *p_trigger_bits) -#else -int gfx_get_aps_trigger_bits(unsigned int *p_trigger_bits) -#endif -{ - if (!p_trigger_bits) - return ERR_INVALID_PARAMETER; - - *p_trigger_bits = d.aps_trigger_bits; - - return 0; -} - -#if GFX_TV_DYNAMIC -int fs450_set_aps_trigger_bits(unsigned int trigger_bits) -#else -int gfx_set_aps_trigger_bits(unsigned int trigger_bits) -#endif -{ - d.aps_trigger_bits = trigger_bits; - - return write_config(REQ_MACROVISION); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_format - * - * This routine sets the TV encoder registers to the specified format - * and resolution. - * Currently only NTSC 640x480 is supported. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int fs450_set_tv_format(TVStandardType format, GfxOnTVType resolution) -#else -int gfx_set_tv_format(TVStandardType format, GfxOnTVType resolution) -#endif -{ - /* ### ADD ### IMPLEMENTATION */ - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_output - * - * This routine sets the TV encoder registers to the specified output type. - * Supported output types are : S-VIDEO and Composite. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int fs450_set_tv_output(int output) -#else -int gfx_set_tv_output(int output) -#endif -{ - /* ### ADD ### IMPLEMENTATION */ - return(0); -} - - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_enable - * - * This routine enables or disables the use of the hardware CC registers - * in the TV encoder. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int fs450_set_tv_cc_enable(int enable) -#else -int gfx_set_tv_cc_enable(int enable) -#endif -{ - /* ### ADD ### IMPLEMENTATION */ - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_tv_cc_data - * - * This routine writes the two specified characters to the CC data register - * of the TV encoder. - *----------------------------------------------------------------------------- - */ -#if GFX_TV_DYNAMIC -int fs450_set_tv_cc_data(unsigned char data1, unsigned char data2) -#else -int gfx_set_tv_cc_data(unsigned char data1, unsigned char data2) -#endif -{ - /* ### ADD ### IMPLEMENTATION */ - return(0); -} - -#ifdef FS450_DIRECTREG - -/*//==========================================================================*/ -/****/ -/*// Direct Read and Write registers*/ - -int FS450_ReadRegister(S_REG_INFO *p_reg) -{ - unsigned long tmp; - - if (PLAL_ReadRegister(p_reg)) - return 0; - - if (SOURCE_HOUSTON == p_reg->source) - { - switch(p_reg->size) - { - case 1: - case 2: - { - houston_ReadReg((int)p_reg->offset, &tmp, (int)p_reg->size); - p_reg->value = tmp; - } - return 0; - - case 4: - { - houston_ReadReg((unsigned int)p_reg->offset, &tmp, 2); - p_reg->value = (tmp << 16); - houston_ReadReg((unsigned int)(p_reg->offset+2), &tmp, 2); - p_reg->value |= tmp; - } - return 0; - } - } - - return ERR_INVALID_PARAMETER; -} - -int FS450_WriteRegister(S_REG_INFO *p_reg) -{ - if (PLAL_WriteRegister(p_reg)) - return 0; - - if (SOURCE_HOUSTON == p_reg->source) - { - houston_WriteReg((unsigned int)p_reg->offset, p_reg->value, p_reg->size); - - return 0; - } - - return ERR_INVALID_PARAMETER; -} - -#endif - -/****/ -/*Houston initialization function.*/ -/****/ -static int g_houston_rev = -1; - -static int houston_init(void) -{ - /*//int errc;*/ - unsigned long write, read; - - TRACE(("houston_init()\n")) - - /*initialize I2C*/ - /*errc = I2C_init(); - if (errc) - return errc; - */ - - /*Before we begin, we must enable power to the TFT*/ - read = READ_VID32 (CS5530_DISPLAY_CONFIG); - read |= CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN; - WRITE_VID32 (CS5530_DISPLAY_CONFIG, read); - - - /*simple w/r test.*/ - write = 0x0055; - read = 0; - - houston_WriteReg(HOUSTON_IHO, write, 2); - houston_ReadReg(HOUSTON_IHO, &read, 2); - if (read != write) - { - houston_WriteReg(HOUSTON_IHO, write, 2); - houston_ReadReg(HOUSTON_IHO, &read, 2); - if (read != write) - { - /*chip is not there, do something appropriate?*/ - TRACE(("wrote HOUSTON_IHO=0x0055, read 0x%04x\n",read)) - return ERR_DEVICE_NOT_FOUND; - } - } - - /*read chip revision.*/ - houston_ReadReg(HOUSTON_REV, &read, 2); - g_houston_rev = (int) read; - - /*ok.*/ - return 0; -} - -static int houston_Rev(void) -{ - return g_houston_rev; -} - -static S_TIMING_SPECS g_specs; - -static const S_TIMING_SPECS *p_specs(void) -{ - return &g_specs; -} - -/*//==========================================================================*/ -/****/ -/*FS450 configuration functions.*/ -/****/ -/*//==========================================================================*/ -static int config_init(void) -{ - int err; - - TRACE(("config_init()\n")) - - err = houston_init(); - if (err) - return err; - - return 0; -} - - -/*==========================================================================*/ -/****/ -/*convert word to encoder 10 bit value.*/ - -static unsigned short w10bit2z(unsigned short w) -{ - return (w >> 2) | ((w & 0x03) << 8); -} - -static unsigned short z2w10bit(unsigned short z) -{ - return (0x03 & (z >> 8)) | ((0xFF & z) << 2); -} - - -/*==========================================================================*/ -/****/ -/*// TV Standards*/ - -static const struct -{ - unsigned long standard; - int tvsetup_index; -} g_tv_standards[] = -{ - {GFX_TV_STANDARD_NTSC_M, 0}, - {GFX_TV_STANDARD_NTSC_M_J, 2}, - {GFX_TV_STANDARD_PAL_B, 1}, - {GFX_TV_STANDARD_PAL_D, 1}, - {GFX_TV_STANDARD_PAL_H, 1}, - {GFX_TV_STANDARD_PAL_I, 1}, - {GFX_TV_STANDARD_PAL_M, 3}, - {GFX_TV_STANDARD_PAL_N, 4}, - {GFX_TV_STANDARD_PAL_G, 1}, -}; - -static int map_tvstd_to_index(unsigned long tv_std) -{ - unsigned int i; - - for (i = 0; i < sizeof(g_tv_standards) / sizeof(*g_tv_standards); i++) - { - if (tv_std == g_tv_standards[i].standard) - return g_tv_standards[i].tvsetup_index; - } - - return -1; -} - -static unsigned long supported_standards(void) -{ - unsigned long standards = 0; - unsigned int i; - - for (i = 0; i < sizeof(g_tv_standards) / sizeof(*g_tv_standards); i++) - { - if (g_tv_standards[i].tvsetup_index >= 0) - standards |= g_tv_standards[i].standard; - } - - return standards; -} - - -/*==========================================================================*/ - -static void config_power(int on) -{ - unsigned long reg; - - if (houston_Rev() < HOUSTON_REV_B) - { - /*no power down supported, but still turn of clock in off mode*/ - if (on) - { - houston_ReadReg(HOUSTON_CR, ®, 2); - reg &= ~(CR_CLKOFF | CR_RESET); - houston_WriteReg(HOUSTON_CR, reg, 2); - reg |= CR_RESET; - houston_WriteReg(HOUSTON_CR, reg, 2); - reg &= ~CR_RESET; - houston_WriteReg(HOUSTON_CR, reg, 2); - } - else - { - houston_ReadReg(HOUSTON_CR, ®, 2); - reg |= CR_CLKOFF; - houston_WriteReg(HOUSTON_CR, reg, 2); - } - - return; - } - - if (on) - { - /*!CLKOFF, !COMPOFF, !YCOFF*/ - /*and reset Houston*/ - houston_ReadReg(HOUSTON_CR, ®, 2); - reg &= ~(CR_CLKOFF | CR_RESET | CR_COMPOFF | CR_YCOFF); - houston_WriteReg(HOUSTON_CR, reg, 2); - reg |= CR_RESET; - houston_WriteReg(HOUSTON_CR, reg, 2); - reg &= ~CR_RESET; - houston_WriteReg(HOUSTON_CR, reg, 2); - - /*!GTLIO_PD*/ - houston_ReadReg(HOUSTON_MISC, ®, 2); - reg &= ~MISC_GTLIO_PD; - houston_WriteReg(HOUSTON_MISC,reg,2); - } - else - { - /*CLKOFF, COMPOFF, YCOFF*/ - houston_ReadReg(HOUSTON_CR, ®, 2); - reg |= (CR_CLKOFF | CR_COMPOFF | CR_YCOFF); - houston_WriteReg(HOUSTON_CR, reg, 2); - - /*GTLIO_PD*/ - houston_ReadReg(HOUSTON_MISC, ®, 2); - reg |= MISC_GTLIO_PD; - houston_WriteReg(HOUSTON_MISC,reg,2); - } -} - - -/*==========================================================================*/ -/****/ -/*// VGA mode*/ - -static void config_vga_mode(unsigned long vga_mode) -{ - /*h_total must be evenly divisible by 32?*/ - - static struct - { - unsigned long mode; - int width; - int lines; - int h_total; - } vgaparams[] = - { - {GFX_VGA_MODE_640X480, 640, 480, 1056}, - {GFX_VGA_MODE_720X487, 720, 487, 1056}, - {GFX_VGA_MODE_720X576, 720, 576, 1056}, - {GFX_VGA_MODE_800X600, 800, 600, 1056}, - {GFX_VGA_MODE_1024X768, 1024, 768, 1344}, - }; - - unsigned long cr, misc, byp; - unsigned int i; - - g_specs.vga_width = 0; - g_specs.vga_lines = 0; - g_specs.h_total = 0; - - for (i = 0; i < sizeof(vgaparams) / sizeof(*vgaparams); i++) - { - if (vga_mode == vgaparams[i].mode) - { - g_specs.vga_width = vgaparams[i].width; - g_specs.vga_lines = vgaparams[i].lines; - g_specs.h_total = vgaparams[i].h_total; - break; - } - } - if (!g_specs.h_total) - return; - - /*clock mux decimator and vga dual.*/ - houston_ReadReg(HOUSTON_CR, &cr, 2); - houston_ReadReg(HOUSTON_MISC, &misc, 2); - houston_ReadReg(HOUSTON_BYP, &byp, 2); - - if (vga_mode == GFX_VGA_MODE_1024X768) - { - /*XGA*/ - cr |= CR_UIM_DEC; - misc |= MISC_VGACKDIV; - byp |= (BYP_HDS_BYPASS | BYP_CAC_BYPASS); - } - else - { - /*VGA,SVGA*/ - cr &= ~CR_UIM_DEC; - misc &= ~MISC_VGACKDIV; - byp &= ~(BYP_HDS_BYPASS | BYP_CAC_BYPASS); - } - - houston_WriteReg(HOUSTON_CR, cr, 2); - houston_WriteReg(HOUSTON_MISC, misc, 2); - houston_WriteReg(HOUSTON_BYP, byp, 2); -} - - -/*==========================================================================*/ -/****/ -/*// Write settings for TV standard to device*/ - -static void config_tv_std(unsigned long tv_std, unsigned int trigger_bits) -{ - int k; - unsigned short reg34; - unsigned long cr, w; - unsigned long l; - - /*verify supported standard.*/ - k = map_tvstd_to_index(tv_std); - if (k < 0) - return; - - /*store tv width and lines*/ - g_specs.tv_width = tvsetup.tv_width[k]; - g_specs.tv_lines = tvsetup.tv_lines[k]; - - /*houston CR register.*/ - houston_ReadReg(HOUSTON_CR, &cr, 2); - cr &= ~CR_656_PAL_NTSC; - cr |= tvsetup.houston_cr[k]; - houston_WriteReg(HOUSTON_CR, cr, 2); - - /*setup the encoder.*/ - l = tvsetup.chroma_freq[k]; - houston_WriteReg(ENC_CHROMA_FREQ, (int)(l & 0x00ff), 1); - houston_WriteReg(ENC_CHROMA_FREQ+1, (int)((l>>8) & 0x00ff), 1); - houston_WriteReg(ENC_CHROMA_FREQ+2, (int)((l>>16) & 0x00ff), 1); - houston_WriteReg(ENC_CHROMA_FREQ+3, (int)((l>>24) & 0x00ff), 1); - - houston_WriteReg(ENC_CHROMA_PHASE, tvsetup.chroma_phase[k], 1); - houston_WriteReg(ENC_REG05, 0x00, 1); /*reg 0x05*/ - houston_WriteReg(ENC_REG06, 0x89, 1); /*reg 0x06*/ - houston_WriteReg(ENC_REG07, 0x00, 1); /*reg 0x07*/ - houston_WriteReg(ENC_HSYNC_WIDTH, tvsetup.hsync_width[k], 1); - houston_WriteReg(ENC_BURST_WIDTH, tvsetup.burst_width[k], 1); - houston_WriteReg(ENC_BACK_PORCH, tvsetup.back_porch[k], 1); - houston_WriteReg(ENC_CB_BURST_LEVEL, tvsetup.cb_burst_level[k], 1); - houston_WriteReg(ENC_CR_BURST_LEVEL, tvsetup.cr_burst_level[k], 1); - houston_WriteReg(ENC_SLAVE_MODE, 0x01, 1); /*slave mode*/ - if (trigger_bits == 0) - w = w10bit2z(tvsetup.blank_level[k]); /*blank level*/ - else - w = w10bit2z((unsigned short)(tvsetup.blank_level[k]-tvsetup.hamp_offset[k])); - houston_WriteReg(ENC_BLANK_LEVEL, w & 0x00ff, 1); - houston_WriteReg(ENC_BLANK_LEVEL+1, w >> 8, 1); - w = w10bit2z(tvsetup.tv_lines[k]); /*num_lines*/ - houston_WriteReg(ENC_NUM_LINES, w & 0x00ff, 1); - houston_WriteReg(ENC_NUM_LINES+1, w >> 8, 1); - - houston_WriteReg(ENC_TINT, 0x00, 1); /*tint*/ - houston_WriteReg(ENC_BREEZE_WAY, tvsetup.breeze_way[k], 1); - houston_WriteReg(ENC_FRONT_PORCH, tvsetup.front_porch[k], 1); - houston_WriteReg(ENC_ACTIVELINE, tvsetup.activeline[k], 1); - houston_WriteReg(ENC_FIRST_LINE, 0x15, 1); /*firstvideoline*/ - reg34 = - 0x80 | - (tvsetup.pal_mode[k] << 6) | - (tvsetup.sys625_50[k] << 3) | - (tvsetup.cphase_rst[k] << 1) | - (tvsetup.vsync5[k]); - houston_WriteReg(ENC_REG34, reg34, 1); /*reg 0x34*/ - houston_WriteReg(ENC_SYNC_LEVEL, tvsetup.sync_level[k], 1); - if (trigger_bits == 0) - w = w10bit2z(tvsetup.vbi_blank_level[k]); /*blank level*/ - else - w = w10bit2z((unsigned short)(tvsetup.vbi_blank_level[k]-1)); - houston_WriteReg(ENC_VBI_BLANK_LEVEL, w & 0x00ff, 1); - houston_WriteReg(ENC_VBI_BLANK_LEVEL+1, w >> 8, 1); -} - -static void conget_tv_std(unsigned long *p_tv_standard) -{ - unsigned long cr; - - if (!p_tv_standard) - return; - - /*just pick between NTSC and PAL*/ - houston_ReadReg(HOUSTON_CR, &cr, 2); - if (CR_656_PAL_NTSC & cr) - *p_tv_standard = GFX_TV_STANDARD_PAL_B; - else - *p_tv_standard = GFX_TV_STANDARD_NTSC_M; -} - -/*==========================================================================*/ -/****/ -/*// TVout mode*/ - -static void config_tvout_mode(unsigned long tvout_mode) -{ - unsigned long cr; - - houston_ReadReg(HOUSTON_CR, &cr, 2); - - /*all dacs off*/ - cr |= (CR_COMPOFF | CR_YCOFF); - /*not rgb*/ - cr &= ~CR_OFMT; - - /*turn on requested output*/ - if (GFX_TVOUT_MODE_CVBS & tvout_mode) - cr &= ~CR_COMPOFF; - if (GFX_TVOUT_MODE_YC & tvout_mode) - cr &= ~CR_YCOFF; - if (GFX_TVOUT_MODE_RGB & tvout_mode) - { - cr &= ~(CR_COMPOFF | CR_YCOFF); - cr |= CR_OFMT; - } - - houston_WriteReg(HOUSTON_CR, cr, 2); -} - -static void conget_tvout_mode(unsigned long *p_tvout_mode) -{ - unsigned long cr; - - if (!p_tvout_mode) - return; - - houston_ReadReg(HOUSTON_CR, &cr, 2); - - if (CR_OFMT & cr) - *p_tvout_mode = GFX_TVOUT_MODE_RGB; - else - { - *p_tvout_mode = 0; - if (!(CR_YCOFF & cr)) - *p_tvout_mode |= GFX_TVOUT_MODE_YC; - if (!(CR_COMPOFF & cr)) - *p_tvout_mode |= GFX_TVOUT_MODE_CVBS; - } -} - - -/*==========================================================================*/ -/****/ -/*// Size & Position*/ - -#define IS_NTSC(tv_std) (tv_std & ( \ - GFX_TV_STANDARD_NTSC_M | \ - GFX_TV_STANDARD_NTSC_M_J | \ - GFX_TV_STANDARD_PAL_M)) -#define IS_PAL(tv_std) (tv_std & ( \ - GFX_TV_STANDARD_PAL_B | \ - GFX_TV_STANDARD_PAL_D | \ - GFX_TV_STANDARD_PAL_H | \ - GFX_TV_STANDARD_PAL_I | \ - GFX_TV_STANDARD_PAL_N | \ - GFX_TV_STANDARD_PAL_G)) - -/*return fifo delay setting for mode, std, and total lines.*/ - -static void get_ffolat_ivo( - unsigned long vga_mode, - unsigned long tv_std, - long i, - unsigned short *ffolat, - unsigned short *ivo) -{ - switch (vga_mode) - { - case GFX_VGA_MODE_640X480: - if (IS_NTSC(tv_std)) - { - if (i > SIZE6X4NTSC-1) i = SIZE6X4NTSC-1; - *ffolat = ffo6x4ntsc[i].ffolat; - *ivo = 0x20; - } - else - { - if (i > SIZE6X4PAL-1) i = SIZE6X4PAL-1; - *ffolat = ffo6x4pal[i].ffolat; - *ivo = 0x28; - } - break; - - case GFX_VGA_MODE_800X600: - if (IS_NTSC(tv_std)) - { - if (i > SIZE8X6NTSC-1) i = SIZE8X6NTSC-1; - *ffolat = ffo8x6ntsc[i].ffolat; - *ivo = 0x3a; - } - else - { - if (i > SIZE8X6PAL-1) i = SIZE8X6PAL-1; - *ffolat = ffo8x6pal[i].ffolat; - *ivo = 0x39; - } - break; - - case GFX_VGA_MODE_720X487: - *ffolat = 0x40; /*//FFO7x4;*/ - *ivo = 0x1a; - break; - - case GFX_VGA_MODE_720X576: - *ffolat = 0x40; /*//FFO7x5;*/ - *ivo = 0x1a; - break; - - case GFX_VGA_MODE_1024X768: - default: - if (IS_NTSC(tv_std)) - { - if (i > SIZE10X7NTSC-1) i = SIZE10X7NTSC-1; - *ffolat = ffo10x7ntsc[i].ffolat; - *ivo = ffo10x7ntsc[i].ivo; - } - else - { - if (i > SIZE10X7PAL-1) i = SIZE10X7PAL-1; - *ffolat = ffo10x7pal[i].ffolat; - *ivo = ffo10x7pal[i].ivo; - } - break; - } -} - - -/*get vertical line min and max for mode and std.*/ - -static void get_vtotal_min_max( - unsigned long vga_mode, - unsigned long tv_std, - int *v_total_min, - int *v_total_max, - int *v_step) -{ - int k = map_tvstd_to_index(tv_std); - - switch (vga_mode) - { - case GFX_VGA_MODE_640X480: - if (IS_NTSC(tv_std)) - { - *v_total_min = ffo6x4ntsc[0].v_total; - *v_total_max = ffo6x4ntsc[SIZE6X4NTSC-1].v_total; - } - else - { - *v_total_min = ffo6x4pal[0].v_total; - *v_total_max = ffo6x4pal[SIZE6X4PAL-1].v_total; - } - *v_step = 4; - break; - - case GFX_VGA_MODE_800X600: - if (IS_NTSC(tv_std)) - { - *v_total_min = ffo8x6ntsc[0].v_total; - *v_total_max = ffo8x6ntsc[SIZE8X6NTSC-1].v_total; - } - else - { - *v_total_min = ffo8x6pal[0].v_total; - *v_total_max = ffo8x6pal[SIZE8X6PAL-1].v_total; - } - *v_step = 5; - break; - - case GFX_VGA_MODE_720X487: - case GFX_VGA_MODE_720X576: - *v_total_min = tvsetup.tv_lines[k]; - *v_total_max = tvsetup.tv_lines[k]; - *v_step = 4; - break; - - case GFX_VGA_MODE_1024X768: - if (IS_NTSC(tv_std)) - { - *v_total_min = ffo10x7ntsc[0].v_total; - *v_total_max = ffo10x7ntsc[SIZE10X7NTSC-1].v_total; - } - else - { - *v_total_min = ffo10x7pal[0].v_total; - *v_total_max = ffo10x7pal[SIZE10X7PAL-1].v_total; - } - *v_step = 6; - break; - } -} - -static void config_overscan_xy( - unsigned long tv_std, - unsigned long vga_mode, - int overscan_x, - int overscan_y, - int pos_x, - int pos_y) -{ - unsigned int vga_index; - unsigned long reg; - double vsc; - int k; - unsigned short ffolat, ivo; - int base_v_total, range, v_offset; - int v_total_min, v_total_max, v_step; - float r, f; - int vga_pixels,pre_pixels; - float hscale, hscale_min, hscale_max; - int hsc; - int iho, iho_max, ihw; - - /*tv_std is valid.*/ - k = map_tvstd_to_index(tv_std); - - /*store tv width and lines*/ - g_specs.tv_width = tvsetup.tv_width[k]; - g_specs.tv_lines = tvsetup.tv_lines[k]; - - /*determine vga mode index*/ - for (vga_index = 0; vga_index < SCANTABLE_ENTRIES; vga_index++) - { - if (scantable[vga_index].mode == vga_mode) - break; - } - if (vga_index >= SCANTABLE_ENTRIES) - return; - - /****/ - /*vertical scaling (v_total setup).*/ - /****/ - /*calculate vertical range.*/ - get_vtotal_min_max(vga_mode, tv_std, &v_total_min, &v_total_max, &v_step); - TRACE(("v_total min=%d, max=%d\n", v_total_min, v_total_max)) - base_v_total = scantable[vga_index].v_total[k]; - range = fsmax(base_v_total - v_total_min, v_total_max - base_v_total); - TRACE(("v_total range = %d\n",range)) - - /*map +/-1000 overscan y into +/-range.*/ - v_offset = (int) ((((float)overscan_y * range) / 1000.f) + .5f); - TRACE(("v_offset = %d\n", v_offset)) - - /*range limit v_total.*/ - g_specs.v_total = range_limit(base_v_total + v_offset, v_total_min, v_total_max); - - /*round to calibrated value.*/ - v_offset = (g_specs.v_total - v_total_min + (v_step/2)) / v_step; - g_specs.v_total = v_total_min + v_offset * v_step; - TRACE(("desired v_total=%d\n", g_specs.v_total)) - - /****/ - /*vertical positioning (vsync setup).*/ - /****/ - get_ffolat_ivo(vga_mode, tv_std, v_offset, &ffolat, &ivo); - houston_WriteReg(HOUSTON_IVO, ivo, 2); - - /*scale base sync offset by scaling ratio.*/ - r = (float) g_specs.v_total / (float) base_v_total; - v_offset = (int) (r * (float) scantable[vga_index].v_sync[k]); - - /*scale ivo.*/ - f = (float) ivo; - v_offset -= (int) (f - f/r); - - /*compensate for center screen.*/ - f = (float) tvsetup.tv_active_lines[k] / 2.f; - v_offset += (int) (f * r - f); - - /*calculate vsync.*/ - g_specs.v_sync = g_specs.v_total-v_offset + pos_y; - TRACE(("desired v_total=%d, desired v_sync=%d\n", g_specs.v_total, g_specs.v_sync)) - if (g_specs.v_sync < g_specs.vga_lines+10) - { - TRACE(("vsync too low\n")) - /*//d.v_total += d.vga_lines+10-d.v_sync;*/ - g_specs.v_sync = g_specs.vga_lines+10; - } - else if (g_specs.v_sync > g_specs.v_total-10) - { - TRACE(("vsync too high\n")) - g_specs.v_sync = g_specs.v_total-10; - } - TRACE(("v_total=%d v_sync=%d\n", g_specs.v_total, g_specs.v_sync)) - - /*FFOLAT.*/ - houston_WriteReg(HOUSTON_FFO_LAT, ffolat, 2); - - /*VSC.*/ - vsc = (65536.0f * (1.0f - (double)g_specs.tv_lines / (double)g_specs.v_total)) + 0.5f; - reg = ((unsigned long) -vsc) & 0xffff; - TRACE(("vsc=%04x, tv_lines=%d, v_total=%d\n", reg, g_specs.tv_lines, g_specs.v_total)) - houston_WriteReg(HOUSTON_VSC, (int)reg, 2); - - /****/ - /*horizontal scaling.*/ - /****/ - - /*vga pixels is vga width, except in 1024x768, where it's half that.*/ - vga_pixels = g_specs.vga_width; - if (1024 == vga_pixels) - vga_pixels /= 2; - - /*maximum scaling coefficient is tv_width / vga_pixels*/ - /*minimum is about 1/2, but that is quite small. arbitrarily set minimum at 75% maximum.*/ - hscale_max = (720.0f / vga_pixels); - hscale_min = fsmax((0.75f * hscale_max),(1.0f - (63.0f / 128.0f))); - TRACE(( - "hscale_min = %u.%u, hscale_max = %u.%u\n", - (int)hscale_min, - (int)((hscale_min - (int)hscale_min) * 1000), - (int)hscale_max, - (int)((hscale_max - (int)hscale_max) * 1000))) - - /*map overscan_x into min to max.*/ - hscale = hscale_min + ((overscan_x + 1000.0f) / 2000.0f) * (hscale_max - hscale_min); - TRACE(("hscale = %u.%u\n",(int)hscale,(int)((hscale - (int)hscale) * 1000))) - - /*determine hsc where hscale = (1 + hsc/128)*/ - if (hscale >= 1.0f) - hsc = (int)(128.f * (hscale - 1.0f) + .5f); - else - hsc = (int)(128.f * (hscale - 1.0f) - .5f); - TRACE(("hsc = %d\n",hsc)) - if (hsc >= 0) - houston_WriteReg(HOUSTON_HSC, hsc << 8, 2); - else - houston_WriteReg(HOUSTON_HSC, hsc & 0xFF, 2); - - /*recalculate hscale for future formulas*/ - hscale = 1.0f + (hsc / 128.0f); - TRACE(("recalculated hscale = %u.%u\n",(int)hscale,(int)((hscale - (int)hscale) * 1000))) - - /****/ - /*horizontal offset.*/ - /****/ - - /*place hsync 40 before halfway from vga_width to htotal*/ - /*but not less than vga_width + 10*/ - g_specs.h_sync = fsmax((g_specs.h_total + g_specs.vga_width) / 2 - 40, g_specs.vga_width + 10); - /*also, make it even*/ - g_specs.h_sync &= ~1; - TRACE(("hsync = %u\n",g_specs.h_sync)) - - /*iho range is 0 to iho_max.*/ - /*iho_max is 2 * iho_center.*/ - /*iho_center is pre_pixels - (tvwidth / hscale - vga pixels) / 2.*/ - /*pre_pixels = (htotal - hsync) * (vga_pixels / vga_width)*/ - /*note that the range is inverted also, because it specifies the number of pixels*/ - /*to skip, or subtract. iho=0 maps to farthest right.*/ - /*map -pos_x = +/-1000 into (0 to iho_max)*/ - pre_pixels = (int)((long)(g_specs.h_total - g_specs.h_sync) * vga_pixels / g_specs.vga_width); - iho_max = (2 * pre_pixels) - ((int)(720.0f / hscale + 0.5f) - vga_pixels); - TRACE(("iho_max = %u\n",iho_max)) - iho = (int) range_limit(((long)(1000 - pos_x) * iho_max / 2000)+scantable[vga_index].iho[k], 0, iho_max); - TRACE(("iho = %u\n",iho)) - houston_WriteReg(HOUSTON_IHO, iho, 2); - - /****/ - /*input horizontal width.*/ - /****/ - - /*input horizontal width is vga pixels + pre_pixels - iho*/ - /*additionally, ihw cannot exceed tv width / hscale*/ - /*and if hsc is negative, (ihw)(-hsc/128) cannot exceed ~250.*/ - /*and ihw should be even.*/ - ihw = fsmin( - vga_pixels + pre_pixels - iho, - (int)(720.0f / hscale)); - if (hsc < 0) - ihw = (int)fsmin(ihw,253L * 128 / (-hsc)); - ihw &= ~1; - TRACE(("ihw = %u\n",ihw)) - houston_WriteReg(HOUSTON_IHA, ihw, 2); - - f = (((float)g_specs.h_total * g_specs.v_total)*27.f) / - ((float)g_specs.tv_width * g_specs.tv_lines); - - TRACE(("freq=%u.%uMHz\n",(int)f,(int)((f - (int)f) * 1000))) -} - -/*==========================================================================*/ -/****/ -/*configure houston nco.*/ - -static void config_nco(unsigned long tv_std,unsigned long vga_mode) -{ - unsigned long cr, misc; - unsigned long reg; - int k = map_tvstd_to_index(tv_std); - - /*read and store CR.*/ - houston_ReadReg(HOUSTON_CR, &cr, 2); - - /*make sure NCO_EN (enable latch) bit is clear*/ - cr &= ~CR_NCO_EN; - houston_WriteReg(HOUSTON_CR, cr, 2); - - /*clear NCO_LOADX.*/ - houston_ReadReg(HOUSTON_MISC, &misc, 2); - misc &= ~(MISC_NCO_LOAD1 + MISC_NCO_LOAD0); - houston_WriteReg(HOUSTON_MISC, misc, 2); - - if (vga_mode == GFX_VGA_MODE_1024X768) - { - /*setup for M and N load (Nco_load=1).*/ - misc |= (MISC_NCO_LOAD0); - houston_WriteReg(HOUSTON_MISC, misc, 2); - - /*M and N.*/ - houston_WriteReg(HOUSTON_NCONL, 1024-2, 2); - houston_WriteReg(HOUSTON_NCODL, 128-1, 2); - - /*latch M/N in.*/ - cr |= CR_NCO_EN; - houston_WriteReg(HOUSTON_CR, cr, 2); - cr &= ~CR_NCO_EN; - houston_WriteReg(HOUSTON_CR, cr, 2); - - /*setup ncon and ncod load (Nco_load=0).*/ - misc &= ~(MISC_NCO_LOAD1 + MISC_NCO_LOAD0); - houston_WriteReg(HOUSTON_MISC, misc, 2); - - /*NCON.*/ - reg = ((unsigned long)g_specs.v_total * g_specs.h_total) / 2; - houston_WriteReg(HOUSTON_NCONH, reg >> 16, 2); - houston_WriteReg(HOUSTON_NCONL, reg & 0xffff, 2); - - /*NCOD.*/ - houston_WriteReg(HOUSTON_NCODL, tvsetup.houston_ncodl[k], 2); - houston_WriteReg(HOUSTON_NCODH, tvsetup.houston_ncodh[k], 2); - } - else - { - /*setup for M and N load (Nco_load=2).*/ - misc |= (MISC_NCO_LOAD1); - houston_WriteReg(HOUSTON_MISC, misc, 2); - - /*NCON.*/ - reg = (unsigned long)g_specs.v_total * g_specs.h_total; - houston_WriteReg(HOUSTON_NCONH, reg >> 16, 2); - houston_WriteReg(HOUSTON_NCONL, reg & 0xffff, 2); - - /*NCOD.*/ - houston_WriteReg(HOUSTON_NCODL, tvsetup.houston_ncodl[k], 2); - houston_WriteReg(HOUSTON_NCODH, tvsetup.houston_ncodh[k], 2); - - TRACE(( - "NCON = %lu (0x%08lx), NCOD = %lu (0x%08lx)\n", - reg, - reg, - ((unsigned long)tvsetup.houston_ncodh[k] << 16) + tvsetup.houston_ncodl[k], - ((unsigned long)tvsetup.houston_ncodh[k] << 16) + tvsetup.houston_ncodl[k])) - } - - /*latch M/N and NCON/NCOD in.*/ - cr |= CR_NCO_EN; - houston_WriteReg(HOUSTON_CR, cr, 2); - cr &= ~CR_NCO_EN; - houston_WriteReg(HOUSTON_CR, cr, 2); -} - - -/*==========================================================================*/ -/****/ -/*// Write sharpness settings to device*/ - -static void config_sharpness(int sharpness) -{ - unsigned int shp; - - /*map 0-1000 to 0-20.*/ - shp = (unsigned int)(0.5f + ((float)sharpness * 20.0f / 1000.0f)); - shp = range_limit(shp, 0, 20); - - houston_WriteReg(HOUSTON_SHP, shp, 2); -} - -static void conget_sharpness(int *p_sharpness) -{ - unsigned long shp; - - if (!p_sharpness) - return; - - houston_ReadReg(HOUSTON_SHP, &shp, 2); - - /*map 0-20 to 0-1000.*/ - *p_sharpness = (int)(0.5f + ((float)shp * 1000.0f / 20.0f)); -} - - -/*==========================================================================*/ -/****/ -/*// Write flicker settings to device*/ - -static void config_flicker(int flicker) -{ - unsigned int flk; - - /*map 0-1000 to 0-16.*/ - flk = (unsigned int)(0.5f + ((float)flicker * 16.0f / 1000.0f)); - flk = range_limit(flk,0,16); - - houston_WriteReg(HOUSTON_FLK, flk, 2); -} - -static void conget_flicker(int *p_flicker) -{ - unsigned long flk; - - if (!p_flicker) - return; - - houston_ReadReg(HOUSTON_FLK, &flk, 2); - - /*map 0-16 to 0-1000.*/ - *p_flicker = (int)(0.5f + ((float)flk * 1000.0f / 16.0f)); -} - - -/*==========================================================================*/ -/****/ -/*// Write color settings to device*/ - -static void config_color(int color) -{ - unsigned long clr; - - /*map 0-100 to 0-255.*/ - /*montreal production test needs 169 to be mappable, so*/ - /*use .8 rounding factor, 169=(int)(66.*2.55+.8).*/ - clr = (unsigned long)(0.8f + ((float)color * 255.0f / 100.0f)); - clr = range_limit(clr,0,255); - - houston_WriteReg(ENC_CR_GAIN, clr, 1); - houston_WriteReg(ENC_CB_GAIN, clr, 1); -} - -static void conget_color(int *p_color) -{ - unsigned long cr_gain; - - if (!p_color) - return; - - /*just get CR GAIN, CB GAIN should match.*/ - houston_ReadReg(ENC_CR_GAIN, &cr_gain, 1); - - /*map 0-255 to 0-100.*/ - *p_color = (int)(0.5f + ((float)cr_gain * 100.0f / 255.0f)); -} - - -/*==========================================================================*/ -/****/ -/*// Write brightness and contrast settings to device*/ - -#define NTSC_BLANK_LEVEL 240 - -static const int min_black_level = NTSC_BLANK_LEVEL+1; -static const int max_white_level = 1023; - -static void config_brightness_contrast(unsigned long tv_std, unsigned int trigger_bits, - int brightness, int contrast) -{ - int brightness_off; - float contrast_mult; - int black, white; - unsigned short w; - int k = map_tvstd_to_index(tv_std); - - /*0-100 maps to +/-220.*/ - brightness_off = (int)(0.5f + ((float)brightness * 440.0f / 100.0f)) - 220; - - /*0-100 maps to .75-1.25.*/ - contrast_mult = ((float) contrast * 0.5f / 100.0f) + 0.75f; - - black = tvsetup.black_level[k]; - if (trigger_bits != 0) - black -= tvsetup.hamp_offset[k]; - - white = tvsetup.white_level[k]; - if (trigger_bits != 0) - white -= tvsetup.hamp_offset[k]; - - black = (int) ((float) (black + brightness_off) * contrast_mult); - white = (int) ((float) (white + brightness_off) * contrast_mult); - if (black < min_black_level) - black = min_black_level; - if (white > max_white_level) - white = max_white_level; - - w = w10bit2z((unsigned short) black); - houston_WriteReg(ENC_BLACK_LEVEL, w & 0x00ff, 1); - houston_WriteReg(ENC_BLACK_LEVEL+1, w >> 8, 1); - w = w10bit2z((unsigned short) white); - houston_WriteReg(ENC_WHITE_LEVEL, w & 0x00ff, 1); - houston_WriteReg(ENC_WHITE_LEVEL+1, w >> 8, 1); -} - -static void conget_brightness_contrast(unsigned long tv_std, unsigned int trigger_bits, - int *p_brightness, int *p_contrast) -{ - int brightness_off; - float contrast_mult; - unsigned short black, white; - unsigned long zh,zl; - int k; - - if (!p_brightness || !p_contrast) - return; - - k = map_tvstd_to_index(tv_std); - - houston_ReadReg(ENC_BLACK_LEVEL, &zl, 1); - houston_ReadReg(ENC_BLACK_LEVEL+1, &zh, 1); - black = z2w10bit((unsigned short)(zl + (zh << 8))); - if (trigger_bits != 0) - black += tvsetup.hamp_offset[k]; - houston_ReadReg(ENC_WHITE_LEVEL, &zl, 1); - houston_ReadReg(ENC_WHITE_LEVEL+1, &zh, 1); - white = z2w10bit((unsigned short)(zl + (zh << 8))); - if (trigger_bits != 0) - white += tvsetup.hamp_offset[k]; - - /*this reverse computation does not account for clipping, but should*/ - /*provide somewhat reasonable numbers*/ - contrast_mult = ((float)white - (float)black) / ((float)tvsetup.white_level[k] - (float)tvsetup.black_level[k]); - brightness_off = (int)(((float)black / contrast_mult) - tvsetup.black_level[k]); - - /*+/-220 maps to 0-100.*/ - *p_brightness = range_limit((int)(0.5f + ((float)(brightness_off + 220) * 100.0f / 440.0f)),0,100); - - /*.75-1.25 maps to 0-100.*/ - *p_contrast = range_limit((int)(0.5f + ((float)(contrast_mult - 0.75f) * 100.0f / 0.5f)),0,100); -} - - -/*==========================================================================*/ -/****/ -/*configure luma/chroma filters.*/ - -static void config_yc_filter(unsigned long tv_std,int luma_filter, int chroma_filter) -{ - unsigned long reg, reg07, reg34; - - if (houston_Rev() < HOUSTON_REV_B) - return; - - /*luma filter.*/ - if (luma_filter) - reg = tvsetup.notch_filter[map_tvstd_to_index(tv_std)]; - else - reg = 0; - houston_WriteReg(ENC_NOTCH_FILTER, reg, 1); - - /*chroma filter.*/ - houston_ReadReg(ENC_REG07, ®07, 1); - houston_ReadReg(ENC_REG34, ®34, 1); - if (chroma_filter) - { - reg07 &= ~0x08; - reg34 &= ~0x20; - } - else - { - reg07 |= 0x08; - reg34 |= 0x20; - } - houston_WriteReg(ENC_REG07, reg07, 1); - houston_WriteReg(ENC_REG34, reg34, 1); -} - -static void conget_yc_filter(int *p_luma_filter, int *p_chroma_filter) -{ - unsigned long reg, reg07, reg34; - - if (!p_luma_filter || !p_chroma_filter) - return; - - if (houston_Rev() < HOUSTON_REV_B) - { - *p_luma_filter = 0; - *p_chroma_filter = 0; - return; - } - - /*luma filter.*/ - houston_ReadReg(ENC_NOTCH_FILTER, ®, 1); - *p_luma_filter = (reg ? 1 : 0); - - /*chroma filter.*/ - houston_ReadReg(ENC_REG07, ®07, 1); - houston_ReadReg(ENC_REG34, ®34, 1); - *p_chroma_filter = !((0x08 & reg07) || (0x20 & reg34)); -} - - -/*==========================================================================*/ -/****/ -/*// Macrovision*/ - -static void config_macrovision(unsigned long tv_std, unsigned int trigger_bits) -{ -/****/ -/*Constants to index into mvsetup columns.*/ -/****/ -#define nNTSC_APS00 0 /*ntsc mv off.*/ -#define nNTSC_APS01 1 /*ntsc AGC only.*/ -#define nNTSC_APS10 2 /*ntsc AGC + 2-line CS.*/ -#define nNTSC_APS11 3 /*ntsc AGC + 4-line CS.*/ -#define nPAL_APS00 4 /*pal mv off.*/ -#define nPAL_APSXX 5 /*pal mv on.*/ -#define nMVModes 6 - -/****/ -/*Macrovision setup table.*/ -/****/ -static const struct mvparms - { - unsigned short n0[nMVModes]; - unsigned short n1[nMVModes]; - unsigned short n2[nMVModes]; - unsigned short n3[nMVModes]; - unsigned short n4[nMVModes]; - unsigned short n5[nMVModes]; - unsigned short n6[nMVModes]; - unsigned short n7[nMVModes]; - unsigned short n8[nMVModes]; - unsigned short n9[nMVModes]; - unsigned short n10[nMVModes]; - unsigned short n11[nMVModes]; - unsigned short n12[nMVModes]; - unsigned short n13[nMVModes]; - unsigned short n14[nMVModes]; - unsigned short n15[nMVModes]; - unsigned short n16[nMVModes]; - unsigned short n17[nMVModes]; - unsigned short n18[nMVModes]; - unsigned short n19[nMVModes]; - unsigned short n20[nMVModes]; - unsigned short n21[nMVModes]; - unsigned short n22[nMVModes]; - unsigned short agc_pulse_level[nMVModes]; - unsigned short bp_pulse_level[nMVModes]; - } - -mvsetup = - - { /*// ntsc ntsc ntsc ntsc pal pal*/ - /*// MV AGC AGC + AGC + MV MV*/ - /*// off. only 2-line 4-line off. on.*/ - /*// CS. CS.*/ - { 0x00, 0x36, 0x3e, 0x3e, 0x00, 0x3e }, /*n0*/ - { 0x1d, 0x1d, 0x1d, 0x17, 0x1a, 0x1a }, /*n1*/ - { 0x11, 0x11, 0x11, 0x15, 0x22, 0x22 }, /*n2*/ - { 0x25, 0x25, 0x25, 0x21, 0x2a, 0x2a }, /*n3*/ - { 0x11, 0x11, 0x11, 0x15, 0x22, 0x22 }, /*n4*/ - { 0x01, 0x01, 0x01, 0x05, 0x05, 0x05 }, /*n5*/ - { 0x07, 0x07, 0x07, 0x05, 0x02, 0x02 }, /*n6*/ - { 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 }, /*n7*/ - { 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c }, /*n8*/ - { 0x1b, 0x1b, 0x1b, 0x1b, 0x3d, 0x3d }, /*n9*/ - { 0x24, 0x24, 0x24, 0x24, 0x14, 0x14 }, /*n10*/ - { 0x780f, 0x780f, 0x780f, 0x780f, 0x7e07, 0x7e07 }, /*n11*/ - { 0x0000, 0x0000, 0x0000, 0x0000, 0x5402, 0x5402 }, /*n12*/ - { 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0xfe }, /*n13*/ - { 0x0f, 0x0f, 0x0f, 0x0f, 0x7e, 0x7e }, /*n14*/ - { 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }, /*n15*/ - { 0x01, 0x01, 0x01, 0x01, 0x00, 0x00 }, /*n16*/ - { 0x0a, 0x0a, 0x0a, 0x0a, 0x08, 0x08 }, /*n17*/ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /*n18*/ - { 0x05, 0x05, 0x05, 0x05, 0x04, 0x04 }, /*n19*/ - { 0x04, 0x04, 0x04, 0x04, 0x07, 0x07 }, /*n20*/ - { 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x0155, 0x0155 }, /*n21*/ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /*n22*/ - { 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3 }, /*agc_pulse_level*/ - { 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8 }, /*bp_pulse_level*/ - }; - - int nMode; - unsigned long misc; - unsigned short n0; - - trigger_bits &= 0x3; - - /*Determine the OEM Macrovision Program Mode and Register 0 Data.*/ - if (IS_NTSC(tv_std)) - { - /*NTSC TV Standard.*/ - if (trigger_bits == 0) - { - /*turn Macrovision OFF.*/ - nMode = nNTSC_APS00; - } - else if (trigger_bits == 1) - { - /*AGC Only.*/ - nMode = nNTSC_APS01; - } - else if (trigger_bits == 2) - { - /*AGC + 2-line CS.*/ - nMode = nNTSC_APS10; - } - else - { - /*AGC + 4-line CS.*/ - nMode = nNTSC_APS11; - } - } - else - { - /*PAL TV Standard.*/ - if (trigger_bits == 0) - { - /*turn Macrovision OFF.*/ - nMode = nPAL_APS00; - } - else - { - /*APS 01, 10, or 11.*/ - nMode = nPAL_APSXX; - } - } - - /*Retrieve the Macrovision Program Mode Data*/ - if (tv_std != GFX_TV_STANDARD_PAL_M) - n0 = mvsetup.n0[nMode]; - else - { - /*PAL-M sets up like NTSC except for n0.*/ - if ((trigger_bits & 0x03) == 0) - n0 = mvsetup.n0[nPAL_APS00]; - else - n0 = mvsetup.n0[nPAL_APSXX]; - } - - /*download settings now.*/ - houston_WriteReg(MV_N0, n0, 1); - houston_WriteReg(MV_N1, mvsetup.n1[nMode], 1); - houston_WriteReg(MV_N2, mvsetup.n2[nMode], 1); - houston_WriteReg(MV_N3, mvsetup.n3[nMode], 1); - houston_WriteReg(MV_N4, mvsetup.n4[nMode], 1); - houston_WriteReg(MV_N5, mvsetup.n5[nMode], 1); - houston_WriteReg(MV_N6, mvsetup.n6[nMode], 1); - houston_WriteReg(MV_N7, mvsetup.n7[nMode], 1); - houston_WriteReg(MV_N8, mvsetup.n8[nMode], 1); - houston_WriteReg(MV_N9, mvsetup.n9[nMode], 1); - houston_WriteReg(MV_N10, mvsetup.n10[nMode], 1); - houston_WriteReg(MV_N11, mvsetup.n11[nMode] & 0xff, 1); - houston_WriteReg(MV_N11+1, mvsetup.n11[nMode] >> 8, 1); - houston_WriteReg(MV_N12, mvsetup.n12[nMode] & 0xff, 1); - houston_WriteReg(MV_N12+1, mvsetup.n12[nMode] >> 8, 1); - houston_WriteReg(MV_N13, mvsetup.n13[nMode], 1); - houston_WriteReg(MV_N14, mvsetup.n14[nMode], 1); - houston_WriteReg(MV_N15, mvsetup.n15[nMode], 1); - houston_WriteReg(MV_N16, mvsetup.n16[nMode], 1); - houston_WriteReg(MV_N17, mvsetup.n17[nMode], 1); - houston_WriteReg(MV_N18, mvsetup.n18[nMode], 1); - houston_WriteReg(MV_N19, mvsetup.n19[nMode], 1); - houston_WriteReg(MV_N20, mvsetup.n20[nMode], 1); - houston_WriteReg(MV_N21, mvsetup.n21[nMode] & 0xff, 1); - houston_WriteReg(MV_N21+1, mvsetup.n21[nMode] >> 8, 1); - houston_WriteReg(MV_N22, mvsetup.n22[nMode], 1); - houston_WriteReg(MV_AGC_PULSE_LEVEL, mvsetup.agc_pulse_level[nMode], 1); - houston_WriteReg(MV_BP_PULSE_LEVEL, mvsetup.bp_pulse_level[nMode], 1); - - houston_ReadReg(HOUSTON_MISC, &misc, 2); - if (trigger_bits == 0) - misc &= ~MISC_MV_SOFT_EN; - else - misc |= MISC_MV_SOFT_EN; - houston_WriteReg(HOUSTON_MISC, misc, 2); -} - -static void conget_macrovision(unsigned long tv_std, unsigned int *p_cp_trigger_bits) -{ - unsigned long n0,n1; - - if (!p_cp_trigger_bits) - return; - - houston_ReadReg(MV_N0,&n0,1); - houston_ReadReg(MV_N1,&n1,1); - - *p_cp_trigger_bits = 0; - - if (IS_NTSC(tv_std)) - { - switch(n0) - { - case 0: - *p_cp_trigger_bits = 0; - break; - - case 0x36: - *p_cp_trigger_bits = 1; - break; - - case 0x3E: - { - if (0x1D == n1) - *p_cp_trigger_bits = 2; - else - *p_cp_trigger_bits = 3; - } - break; - } - } - else if (IS_PAL(tv_std)) - { - if (0 == n0) - *p_cp_trigger_bits = 0; - else - { - /*don't know here what the non-zero trigger bits were*/ - *p_cp_trigger_bits = 1; - } - } -} - -/*// PLAL_MediaGX.cpp*/ -/*//==========================================================================*/ -/****/ -/*These functions provides implementation of platform-specific functions*/ -/*MediaGX platform.*/ -/****/ -/*//==========================================================================*/ - -/*MediaGX control registers.*/ -#define CCR3 0xC3 -#define GCR 0xb8 - -/*Media GX registers*/ -/* -#define DC_UNLOCK 0x8300 -#define DC_GENERAL_CFG 0x8304 -#define DC_TIMING_CFG 0x8308 -#define DC_OUTPUT_CFG 0x830c -#define DC_H_TIMING_1 0X8330 -#define DC_H_TIMING_2 0X8334 -#define DC_H_TIMING_3 0X8338 -#define DC_FP_H_TIMING 0X833c -#define DC_V_TIMING_1 0X8340 -#define DC_V_TIMING_2 0X8344 -#define DC_V_TIMING_3 0X8348 -#define DC_FP_V_TIMING 0X834c -*/ -/*Media GX general config register.*/ -#define GX_DCLK_MUL 0x00c0 -#define GX_DCLKx1 0x0040 -#define GX_DCLKx2 0x0080 -#define GX_DCLKx4 0x00c0 - -/*Media GX timing config register.*/ -#define GX_TGEN 0x0020 - -/*Cx5530 register offsets (from GX_BASE).*/ -#define CX_DISPLAY_CONFIG 0x10004 -#define CX_DOT_CLK 0x10024 -#define CX_TV_CONFIG 0x10028 - -/*Cx5530 display configuration register.*/ -#define CX_FPVSYNC_POL 0x0800 -#define CX_FPHSYNC_POL 0x0400 -#define CX_FPDATA_ENB 0x0080 -#define CX_FPPOWER_ENB 0x0040 -#define CX_CRTVSYNC_POL 0x0200 -#define CX_CRTHSYNC_POL 0x0100 - -/*Cx5530 dot clock configuration register.*/ -#define CX_TVCLK_SELECT 0x0400 - -/*Cx5530 tv configuration register*/ -#define CX_INVERT_FPCLK (1 << 6) - -/*//==========================================================================*/ -/****/ -/*// FS450 I2C Address*/ -/****/ -/*// There are two possible 7-bit addresses, 0x4A and 0x6A.*/ -/*// The address if selectable via pins on the FS450.*/ -/*// There are also two possible 10-bit addresses, 0x224 and 0x276, but this*/ -/*// source is not designed to use them.*/ -/****/ - -#define FS450_I2C_ADDRESS (0x4A) - -static unsigned char PLAL_FS450_i2c_address(void) -{ - return FS450_I2C_ADDRESS; -} - - -/*//==========================================================================*/ -/****/ -/*// FS450 UIM mode*/ -/****/ -/*// This mode is programmed in the FS450 command register when enabling TV*/ -/*// out.*/ - -static int PLAL_FS450_UIM_mode(void) -{ - return 3; -} - -/*//==========================================================================*/ -/****/ -/*// Read and Write MediaGX registers*/ - -static unsigned long ReadGx(unsigned long inRegAddr) -{ - unsigned long data; - - DMAL_ReadUInt32(inRegAddr, &data); - - return data; -} - -static void WriteGx(unsigned long inRegAddr, unsigned long inData) -{ - int is_timing_register; - unsigned long reg_timing_cfg; - - /*because the unlock register for the MediaGx video registers may not*/ - /*persist, we will write the unlock code before every write.*/ - DMAL_WriteUInt32(DC_UNLOCK, 0x4758); - - /*see if register is a timing register*/ - is_timing_register = - (DC_H_TIMING_1 == inRegAddr) || - (DC_H_TIMING_2 == inRegAddr) || - (DC_H_TIMING_3 == inRegAddr) || - (DC_FP_H_TIMING == inRegAddr) || - (DC_V_TIMING_1 == inRegAddr) || - (DC_V_TIMING_2 == inRegAddr) || - (DC_V_TIMING_3 == inRegAddr) || - (DC_FP_V_TIMING == inRegAddr); - - /*if the register is a timing register, clear the TGEN bit to allow modification*/ - if (is_timing_register) - { - DMAL_ReadUInt32(DC_TIMING_CFG, ®_timing_cfg); - DMAL_WriteUInt32(DC_TIMING_CFG, reg_timing_cfg & ~GX_TGEN); - } - - /*write the requested register*/ - DMAL_WriteUInt32(inRegAddr, inData); - - /*reset the TGEN bit to previous state*/ - if (is_timing_register) - { - DMAL_WriteUInt32(DC_TIMING_CFG, reg_timing_cfg); - } -} - -#ifdef FS450_DIRECTREG - -/*//==========================================================================*/ -/****/ -/*// Platform-specific processing for a Read or Write Register calls.*/ -/*// The functions should return true if the specified register belongs to*/ -/*// this platform.*/ - -static int PLAL_ReadRegister(S_REG_INFO *p_reg) -{ - if (!p_reg) - return 0; - - if (SOURCE_GCC == p_reg->source) - { - p_reg->value = ReadGx(p_reg->offset); - - return 1; - } - - return 0; -} - -static int PLAL_WriteRegister(const S_REG_INFO *p_reg) -{ - if (!p_reg) - return 0; - - if (SOURCE_GCC == p_reg->source) - { - WriteGx(p_reg->offset, p_reg->value); - - return 1; - } - - return 0; -} - -#endif - - -/*//==========================================================================*/ -/****/ -/*// Determine if TV is on*/ - -static int PLAL_IsTVOn(void) -{ - unsigned long reg; - - /*check Cx5530 dot clock*/ - reg = ReadGx(CX_DOT_CLK); - return (reg & CX_TVCLK_SELECT) ? 1 : 0; -} - - -/*//==========================================================================*/ -/****/ -/*// Platform-specific actions to reset to VGA mode*/ - -static int PLAL_EnableVga(void) -{ - unsigned long reg; - - /*2 x dclk*/ - reg = ReadGx(DC_GENERAL_CFG); - reg &= ~GX_DCLK_MUL; - reg |= GX_DCLKx2; - WriteGx(DC_GENERAL_CFG, reg); - - /*select pll dot clock.*/ - reg = ReadGx(CX_DOT_CLK); - reg &= ~CX_TVCLK_SELECT; - WriteGx(CX_DOT_CLK, reg); - - /*timing config, reset everything on dclk.*/ - reg = ReadGx(DC_TIMING_CFG); - reg &= ~GX_TGEN; - WriteGx(DC_TIMING_CFG, reg); - reg |= GX_TGEN; - WriteGx(DC_TIMING_CFG, reg); - - /*un-invert FP clock*/ - reg = ReadGx(CX_TV_CONFIG); - reg &= ~CX_INVERT_FPCLK; - WriteGx(CX_TV_CONFIG,reg); - - return 0; -} - - -/*//==========================================================================*/ -/****/ -/*// Platform-specific actions to enter TVout mode*/ - -static int PLAL_PrepForTVout(void) -{ - unsigned int reg; - - /*Cx5530 tv config.*/ - reg = 0; - WriteGx(CX_TV_CONFIG, reg); - - /*invert FP clock*/ - reg = (int)ReadGx(CX_TV_CONFIG); - reg |= CX_INVERT_FPCLK; - WriteGx(CX_TV_CONFIG,reg); - - return 0; -} - -static int PLAL_SetTVTimingRegisters(const S_TIMING_SPECS *p_specs) -{ - unsigned long reg; - - /*timing config, reset everything on dclk.*/ - reg = ReadGx(DC_TIMING_CFG); - reg &= ~GX_TGEN; - WriteGx(DC_TIMING_CFG, reg); - - /*htotal and hactive.*/ - reg = ((p_specs->h_total-1) << 16) | (p_specs->vga_width-1); - WriteGx(DC_H_TIMING_1, reg); - - /*hblank.*/ - reg = ((p_specs->h_total-1) << 16) | (p_specs->vga_width-1); - WriteGx(DC_H_TIMING_2, reg); - - /*hsync.*/ - reg = ((p_specs->h_sync+63) << 16) | p_specs->h_sync; - WriteGx(DC_H_TIMING_3, reg); - - /*fp hsync.*/ - WriteGx(DC_FP_H_TIMING, reg); - - /*vtotal and vactive.*/ - reg = ((p_specs->v_total-1) << 16) | (p_specs->vga_lines-1); - WriteGx(DC_V_TIMING_1, reg); - - /*vblank.*/ - reg = ((p_specs->v_total-1) << 16) | (p_specs->vga_lines-1); - WriteGx(DC_V_TIMING_2, reg); - - /*vsync.*/ - reg = ((p_specs->v_sync) << 16) | (p_specs->v_sync-1); - WriteGx(DC_V_TIMING_3, reg); - - /*fp vsync.*/ - reg = ((p_specs->v_sync-1) << 16) | (p_specs->v_sync-2); - WriteGx(DC_FP_V_TIMING, reg); - - /*timing config, reenable all dclk stuff.*/ - reg = ReadGx(DC_TIMING_CFG); - reg |= GX_TGEN; - WriteGx(DC_TIMING_CFG, reg); - - return 0; -} - -static int PLAL_FinalEnableTVout(unsigned long vga_mode) -{ - unsigned int reg; - - /*Cx5530 select tv dot clock.*/ - reg = (int)ReadGx(CX_DOT_CLK); - reg |= CX_TVCLK_SELECT; - WriteGx(CX_DOT_CLK, reg); - - /*2 x dclk (actually 1x)*/ - reg = (int)ReadGx(DC_GENERAL_CFG); - reg &= ~GX_DCLK_MUL; - WriteGx(DC_GENERAL_CFG, reg); - - - reg |= GX_DCLKx2; - WriteGx(DC_GENERAL_CFG, reg); - - /*Cx5530 display configuration register.*/ - reg = (int)ReadGx(CX_DISPLAY_CONFIG); - reg |= (CX_FPVSYNC_POL | CX_FPHSYNC_POL | CX_FPDATA_ENB | CX_FPPOWER_ENB); - WriteGx(CX_DISPLAY_CONFIG, reg); - -/*disable, shouldn't be necessary*/ -#if 0 - /*kick MediaGX clock multiplier to clean up clock*/ - reg = ReadGx(DC_GENERAL_CFG); - reg &= ~GX_DCLK_MUL; - WriteGx(DC_GENERAL_CFG, reg); - reg |= GX_DCLKx2; - WriteGx(DC_GENERAL_CFG, reg); -#endif - - return 0; -} - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.h deleted file mode 100644 index 01f35052c..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.h +++ /dev/null @@ -1,318 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/tv_fs450.h,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: tv_fs450.h $ - * - * This file defines the common FS450 API. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#ifndef __FS450_H__ -#define __FS450_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ==========================================================================*/ -/* Init and cleanup functions*/ - -int FS450_init(void); -void FS450_cleanup(void); - /* call FS450_init at startup to probe for and initialize FS450.*/ - /* returns 0 if successful.*/ - -/* ==========================================================================*/ -/* TV output on or off*/ - -int FS450_get_tv_enable(unsigned int *p_on); -int FS450_set_tv_enable(unsigned int on); - /* on is 1 for TV on, 0 for off*/ - - -/* ==========================================================================*/ -/* TV standard*/ - -int FS450_get_tv_standard(unsigned long *p_standard); -int FS450_get_available_tv_standards(unsigned long *p_standards); -int FS450_set_tv_standard(unsigned long standard); - /* standard is one of the FS450_TV_STANDARD constants*/ - /* standards is a bitmask of zero or more FS450_TV_STANDARD constants*/ - -/* FS450 TV Standard flags*/ -#define FS450_TV_STANDARD_NTSC_M 0x0001 -#define FS450_TV_STANDARD_NTSC_M_J 0x0002 -#define FS450_TV_STANDARD_PAL_B 0x0004 -#define FS450_TV_STANDARD_PAL_D 0x0008 -#define FS450_TV_STANDARD_PAL_H 0x0010 -#define FS450_TV_STANDARD_PAL_I 0x0020 -#define FS450_TV_STANDARD_PAL_M 0x0040 -#define FS450_TV_STANDARD_PAL_N 0x0080 -#define FS450_TV_STANDARD_PAL_G 0x0100 - - -/* ==========================================================================*/ -/* VGA mode assumed by FS450*/ - -int FS450_get_vga_mode(unsigned long *p_vga_mode); -int FS450_get_available_vga_modes(unsigned long *p_vga_modes); -int FS450_set_vga_mode(unsigned long vga_mode); - /* vga_mode is one of the FS450_VGA_MODE constants*/ - /* vga_modes is a bitmask of zero or more FS450_VGA_MODE constants*/ - -/* FS450 VGA Mode flags*/ -#define FS450_VGA_MODE_UNKNOWN 0 -#define FS450_VGA_MODE_640X480 0x0001 -#define FS450_VGA_MODE_720X487 0x0002 -#define FS450_VGA_MODE_720X576 0x0004 -#define FS450_VGA_MODE_800X600 0x0008 -#define FS450_VGA_MODE_1024X768 0x0010 - - -/* ==========================================================================*/ -/* TVout mode*/ - -int FS450_get_tvout_mode(unsigned long *p_tvout_mode); -int FS450_set_tvout_mode(unsigned long tvout_mode); - /* tvout_mode is a bitmask of FS450_TVOUT_MODE constants*/ - -/* FS450 TVout mode flags*/ -#define FS450_TVOUT_MODE_CVBS 0x0001 -#define FS450_TVOUT_MODE_YC 0x0002 -#define FS450_TVOUT_MODE_RGB 0x0004 -#define FS450_TVOUT_MODE_CVBS_YC (FS450_TVOUT_MODE_CVBS | FS450_TVOUT_MODE_YC) - - -/* ==========================================================================*/ -/* Flicker control*/ - -int FS450_get_sharpness(int *p_sharpness); -int FS450_set_sharpness(int sharpness); - /* sharpness is a percentage in tenths of a percent, 0 to 1000*/ - -int FS450_get_flicker_filter(int *p_flicker); -int FS450_set_flicker_filter(int flicker); - /* flicker_filter is a percentage in tenths of a percent, 0 to 1000*/ - - -/* ==========================================================================*/ -/* Size and Position*/ - -int FS450_get_overscan(int *p_x, int *p_y); -int FS450_set_overscan(int x, int y); -int FS450_get_position(int *p_x, int *p_y); -int FS450_set_position(int x, int y); - /* x and y are horizontal and vertical adjustments, -1000 to +1000*/ - - -/* ==========================================================================*/ -/* Visual adjustments*/ - -int FS450_get_color(int *p_color); -int FS450_set_color(int color); - /* color is a percentage, 0 to 100*/ - -int FS450_get_brightness(int *p_brightness); -int FS450_set_brightness(int brightness); - /* brightness is a percentage, 0 to 100*/ - -int FS450_get_contrast(int *p_contrast); -int FS450_set_contrast(int constrast); - /* contrast is a percentage, 0 to 100*/ - -/* ==========================================================================*/ -/* Luma and Chroma filter*/ - -int FS450_get_yc_filter(unsigned int *p_yc_filter); -int FS450_set_yc_filter(unsigned int yc_filter); - /* yc_filter is a bitmask of FS450_LUMA_FILTER and/or FS450_CHROMA_FILTER*/ - -/* FS450 Luma and Chroma Filters*/ -#define FS450_LUMA_FILTER 0x0001 -#define FS450_CHROMA_FILTER 0x0002 - - -/* ==========================================================================*/ -/* Macrovision*/ - -int FS450_get_aps_trigger_bits(unsigned int *p_trigger_bits); -int FS450_set_aps_trigger_bits(unsigned int trigger_bits); - /* trigger_bits is one of the FS450_APS_TRIGGER constants*/ - -/* APS Trigger Bits*/ -#define FS450_APS_TRIGGER_OFF 0 -#define FS450_APS_TRIGGER_AGC_ONLY 1 -#define FS450_APS_TRIGGER_AGC_2_LINE 2 -#define FS450_APS_TRIGGER_AGC_4_LINE 3 - - -/* ==========================================================================*/ -/* direct access to Houston and platform registers (debug builds only)*/ -/* The two functions FS450_ReadRegister and FS450_WriteRegister allow access*/ -/* to device registers. These functions are intended for debugging purposes*/ -/* only and should not be included in a shipping product.*/ - -#ifdef FS450_DIRECTREG - -#define SOURCE_HOUSTON 0 -#define SOURCE_GCC 1 - -typedef struct _S_REG_INFO -{ - int source; - unsigned int size; - unsigned long offset; - unsigned long value; -} S_REG_INFO; - -int FS450_ReadRegister(S_REG_INFO *p_reg); -int FS450_WriteRegister(S_REG_INFO *p_reg); - -#endif - - -/* ==========================================================================*/ -/* Error Codes*/ - -#define ERR_INVALID_PARAMETER 0x1000 -#define ERR_NOT_SUPPORTED 0x1001 -#define ERR_CANNOT_CHANGE_WHILE_TV_ON 0x1002 - -#define ERR_DRIVER_NOT_FOUND 0x1100 -#define ERR_DRIVER_ERROR 0x1101 -#define ERR_DEVICE_NOT_FOUND 0x1120 - -#define ERR_I2C_MISSING_DEVICE 0x1200 -#define ERR_I2C_WRITE_FAILED 0x1201 -#define ERR_I2C_READ_FAILED 0x1202 - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vga_gu1.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vga_gu1.c deleted file mode 100644 index 754a64f94..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vga_gu1.c +++ /dev/null @@ -1,696 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vga_gu1.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: vga_gu1.c $ - * - * This file contains routines to set modes using the VGA registers. - * Since this file is for the first generation graphics unit, it interfaces - * to SoftVGA registers. It works for both VSA1 and VSA2. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/* SoftVGA Extended CRTC register indices and bit definitions */ - -#define CRTC_EXTENDED_REGISTER_LOCK 0x30 -#define CRTC_MODE_SWITCH_CONTROL 0x3F - -/* BIT DEFINITIONS */ - -#define CRTC_BIT_16BPP 0x01 -#define CRTC_BIT_555 0x02 - -/* LOCAL ROUTINE DEFINITIONS */ - -int gu1_detect_vsa2(void); - -/*---------------------------------*/ -/* MODE TABLES FOR VGA REGISTERS */ -/*---------------------------------*/ - -/* FOR SoftVGA, the CRTC_EXTENDED_ADDRESS_CONTROL (0x43) is always equal to - * 0x03 for a packed linear frame buffer organization. The - * CRTC_EXTENDED_DAC_CONTROL (0x4B) is always equal to 0x03 to work with - * older versions of VSA1 (that needed to specify 8 or 16 bit bus to an - * external RAMDAC. This is not used in VSA2. The clock frequency is - * specified in register 0x4D if clock control (0x4C) is set to 0x80. - * Higher resolutions (1280x1024) use the CRTC_EXTENDED_VERTICAL_TIMING - * register (index 0x41). - */ - -gfx_vga_struct gfx_vga_modes[] = -{ -/*------------------------------------------------------------------------------*/ - { 640, 480, 60, /* 640x480 */ - 25, /* 25 MHz clock = 60 Hz refresh rate */ - 0xE3, /* miscOutput register */ - { 0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, /* standard CRTC */ - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xEA, 0x0C, 0xDF, 0x50, 0x00, 0xE7, 0x04, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 640, 480, 72, /* 640x480 */ - 29, /* 29 MHz clock = 72 Hz refresh rate */ - 0xE3, /* miscOutput register */ - { 0x63, 0x4f, 0x50, 0x86, 0x55, 0x99, 0x06, 0x3e, /* standard CRTC */ - 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe9, 0x0c, 0xdf, 0x00, 0x00, 0xe7, 0x00, 0xe3, 0xff }, - { 0x6D, 0x00, 0x00, 0x03, 0x00, 0x01, 0x01, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x01, 0x08, 0x80, 0x1F, 0x00, 0x4B } }, -/*------------------------------------------------------------------------------*/ - { 640, 480, 75, /* 640x480 */ - 31, /* 31.5 MHz clock = 75 Hz refresh rate */ - 0xE3, /* miscOutput register */ - { 0x64, 0x4F, 0x4F, 0x88, 0x54, 0x9B, 0xF2, 0x1F, /* standard CRTC */ - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE1, 0x04, 0xDF, 0x50, 0x00, 0xDF, 0xF3, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x1F, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 800, 600, 60, /* 800x600 */ - 40, /* 40 MHz clock = 60 Hz refresh rate */ - 0x23, /* miscOutput register */ - { 0x7F, 0x63, 0x64, 0x82, 0x6B, 0x1B, 0x72, 0xF0, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x0D, 0x57, 0x64, 0x00, 0x57, 0x73, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x28, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 800, 600, 72, /* 800x600 */ - 47, /* 47 MHz clock = 72 Hz refresh rate */ - 0x2B, /* miscOutput register */ - { 0x7D, 0x63, 0x63, 0x81, 0x6D, 0x1B, 0x98, 0xF0, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7D, 0x03, 0x57, 0x00, 0x00, 0x57, 0x9A, 0xE3, 0xFF }, - { 0x6F, 0x00, 0x00, 0x03, 0x00, 0x01, 0x01, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x01, 0x08, 0x80, 0x32, 0x00, 0x4B } }, -/*------------------------------------------------------------------------------*/ - { 800, 600, 75, /* 800x600 */ - 49, /* 49.5 MHz clock = 75 Hz refresh rate */ - 0x23, /* miscOutput register */ - { 0x7F, 0x63, 0x63, 0x83, 0x68, 0x11, 0x6F, 0xF0, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x1C, 0x57, 0x64, 0x00, 0x57, 0x70, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x31, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 1024, 768, 60, /* 1024x768 */ - 65, /* 65 MHz clock = 60 Hz refresh rate */ - 0xE3, /* miscOutput register */ - { 0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xF5, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x0A, 0xFF, 0x80, 0x00, 0xFF, 0x25, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x41, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 1024, 768, 70, /* 1024x768 */ - 76, /* 76 MHz clock = 70 Hz refresh rate */ - 0x2B, /* miscOutput register */ - { 0xA1, 0x7F, 0x7F, 0x85, 0x85, 0x95, 0x24, 0xF5, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x09, 0xFF, 0x00, 0x00, 0xFF, 0x26, 0xE3, 0xFF }, - { 0x62, 0x00, 0x00, 0x03, 0x00, 0x01, 0x01, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x01, 0x02, 0x80, 0x4B, 0x00, 0x4B } }, -/*------------------------------------------------------------------------------*/ - { 1024, 768, 75, /* 1024x768 */ - 79, /* 79 MHz clock = 75 Hz refresh rate */ - 0xE3, /* miscOutput register */ - { 0x9F, 0x7F, 0x7F, 0x83, 0x84, 0x8F, 0x1E, 0xF5, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x04, 0xFF, 0x80, 0x00, 0xFF, 0x1F, 0xE3, 0xFF }, - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x4F, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 1280, 1024, 60, /* 1280x1024 */ - 108, /* 108 MHz clock = 60 Hz refresh rate */ - 0x23, /* miscOutput register */ - { 0xCF, 0x9F, 0xA0, 0x92, 0xAA, 0x19, 0x28, 0x52, /* standard CRTC */ - 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x04, 0xFF, 0xA0, 0x00, 0x00, 0x29, 0xE3, 0xFF }, - { 0x00, 0x51, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x6C, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 1280, 1024, 75, /* 1280x1024 */ - 135, /* 135 MHz clock = 75 Hz refresh rate */ - 0x23, /* miscOutput register */ - { 0xCE, 0x9F, 0x9F, 0x92, 0xA4, 0x15, 0x28, 0x52, /* standard CRTC */ - 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x04, 0xFF, 0xA0, 0x00, 0x00, 0x29, 0xE3, 0xFF }, - { 0x00, 0x51, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x00, 0x03, 0x80, 0x87, 0x00, 0x00 } }, -/*------------------------------------------------------------------------------*/ - { 1280, 1024, 85, /* 1280x1024 */ - 159, /* 159 MHz clock = 85 Hz refresh rate */ - 0x2B, /* miscOutput register */ - { 0xD3, 0x9F, 0xA0, 0x98, 0xA8, 0x9C, 0x2E, 0x5A, /* standard CRTC */ - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x04, 0xFF, 0x00, 0x00, 0xFF, 0x30, 0xE3, 0xFF }, - { 0x6B, 0x41, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, /* extended CRTC */ - 0x00, 0x00, 0x01, 0x00, 0x80, 0x9D, 0x00, 0x4B } }, - -/*------------------------------------------------------------------------------*/ -}; - -#define GFX_VGA_MODES sizeof(gfx_vga_modes)/sizeof(gfx_vga_struct) - -/*----------------------------------------------------------------------------- - * gfx_get_softvga_active - * - * This returns the active status of SoftVGA - *----------------------------------------------------------------------------- - */ -int gfx_get_softvga_active(void) -{ - unsigned short crtcindex, crtcdata; - - if(gu1_detect_vsa2()) - return(gfx_get_vsa2_softvga_enable()); - - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - OUTB(crtcindex, CRTC_MODE_SWITCH_CONTROL); - return(INB(crtcdata) & 0x1); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_test_pci - * - * This routine looks for the VGA PCI header. It checks to see that bit 1 - * of the command register is writable to know that SoftVGA is trapping - * the PCI config cuscles. If SoftVGA is not emulating the header, the - * hardware will still respond with the proper device ID, etc. - * - * We need to know that SoftVGA is really there so that we can set the - * command register and have the proper effect (enable trapping of VGA). - * Otherwise, if we enable VGA via the PCI header, trapping really won't be - * enabled and the VGA register writes will go out to the external card. - *----------------------------------------------------------------------------- - */ -int gfx_vga_test_pci(void) -{ - int softvga = 1; - unsigned long value; - value = gfx_pci_config_read(0x80009400); - if ((value & 0x0000FFFF) != 0x1078) softvga = 0; - else - { - value = gfx_pci_config_read(0x80009404); - gfx_pci_config_write(0x80009404, value | 0x02); - if (!(gfx_pci_config_read(0x80009404) & 0x02)) softvga = 0; - gfx_pci_config_write(0x80009404, value); - } - return(softvga); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_get_pci_command - * - * This routine returns the value of the PCI command register. - *----------------------------------------------------------------------------- - */ -unsigned char gfx_vga_get_pci_command(void) -{ - unsigned long value; - value = gfx_pci_config_read(0x80009404); - return((unsigned char) value); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_set_pci_command - * - * This routine writes the value of the PCI command register. It is used - * to enable or disable SoftVGA. - * - * Bit 0: Enable VGA IO - * Bit 1: Enable VGA memory - *----------------------------------------------------------------------------- - */ -int gfx_vga_set_pci_command(unsigned char command) -{ - unsigned long value; - value = gfx_pci_config_read(0x80009404) & 0xFFFFFF00; - value |= (unsigned long) command; - gfx_pci_config_write(0x80009404, value); - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_seq_reset - * - * This routine enables or disables SoftVGA. It is used to make SoftVGA - * "be quiet" and not interfere with any of the direct hardware access from - * Durango. For VSA1, the sequencer is reset to stop text redraws. VSA2 may - * provide a better way to have SoftVGA sit in the background. - *----------------------------------------------------------------------------- - */ -int gfx_vga_seq_reset(int reset) -{ - OUTB(0x3C4, 0); - OUTB(0x3C5, (unsigned char) (reset ? 0x00 : 0x03)); - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_set_graphics_bits - * - * This routine sets the standard VGA sequencer, graphics controller, and - * attribute registers to appropriate values for a graphics mode (packed, - * 8 BPP or greater). This is also known as "VESA" modes. The timings for - * a particular mode are handled by the CRTC registers, which are set by - * the "gfx_vga_restore" routine. Most OSs that use VGA to set modes save - * and restore the standard VGA registers themselves, which is why these - * registers are not part of the save/restore paradigm. - *----------------------------------------------------------------------------- - */ -int gfx_vga_set_graphics_bits(void) -{ - /* SET GRAPHICS BIT IN GRAPHICS CONTROLLER REG 0x06 */ - - OUTB(0x3CE, 0x06); - OUTB(0x3CF, 0x01); - - /* SET GRAPHICS BIT IN ATTRIBUTE CONTROLLER REG 0x10 */ - - INB(0x3BA); /* Reset flip-flop */ - INB(0x3DA); - OUTB(0x3C0, 0x10); - OUTB(0x3C0, 0x01); - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_mode - * - * This routine searches the VGA mode table for a match of the specified - * mode and then fills in the VGA structure with the associated VGA register - * values. The "gfx_vga_restore" routine can then be called to actually - * set the mode. - *----------------------------------------------------------------------------- - */ -int gfx_vga_mode(gfx_vga_struct *vga, int xres, int yres, int bpp, int hz) -{ - int i; - unsigned short pitch; - for (i = 0; i < GFX_VGA_MODES; i++) - { - if ((gfx_vga_modes[i].xsize == xres) && - (gfx_vga_modes[i].ysize == yres) && - (gfx_vga_modes[i].hz == hz)) - { - /* COPY ENTIRE STRUCTURE FROM THE TABLE */ - - *vga = gfx_vga_modes[i]; - - /* SET PITCH TO 1K OR 2K */ - /* CRTC_EXTENDED_OFFSET index is 0x45, so offset = 0x05 */ - - pitch = (unsigned short) xres; - if (bpp > 8) pitch <<= 1; - if (pitch <= 1024) pitch = 1024 >> 3; - else pitch = 2048 >> 3; - vga->stdCRTCregs[0x13] = (unsigned char) pitch; - vga->extCRTCregs[0x05] = (unsigned char)((pitch >> 8) & 0x03); - - /* SET PROPER COLOR DEPTH VALUE */ - /* CRTC_EXTENDED_COLOR_CONTROL index is 0x46, so offset = 0x06 */ - - switch(bpp) - { - case 15: - vga->extCRTCregs[0x06] = CRTC_BIT_16BPP | CRTC_BIT_555; - break; - case 16: - vga->extCRTCregs[0x06] = CRTC_BIT_16BPP; - break; - default: - vga->extCRTCregs[0x06] = 0; - break; - } - return(GFX_STATUS_OK); - } - } - return(GFX_STATUS_UNSUPPORTED); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_pitch - * - * This routine updates the VGA regisers in the specified VGA structure for - * the specified pitch. It does not program the hardware. - *----------------------------------------------------------------------------- - */ -int gfx_vga_pitch(gfx_vga_struct *vga, unsigned short pitch) -{ - pitch >>= 3; - vga->stdCRTCregs[0x13] = (unsigned char) pitch; - vga->extCRTCregs[0x05] = (unsigned char)((pitch >> 8) & 0x03); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_save - * - * This routine saves the state of the VGA registers into the specified - * structure. Flags indicate what portions of the register state need to - * be saved. - *----------------------------------------------------------------------------- - */ -int gfx_vga_save(gfx_vga_struct *vga, int flags) -{ - int i; - unsigned short crtcindex, crtcdata; - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - /* CHECK MISCELLANEOUS OUTPUT FLAG */ - - if (flags & GFX_VGA_FLAG_MISC_OUTPUT) - { - /* SAVE MISCCELLANEOUS OUTPUT REGISTER */ - - vga->miscOutput = INB(0x3CC); - } - - /* CHECK STANDARD CRTC FLAG */ - - if (flags & GFX_VGA_FLAG_STD_CRTC) - { - /* SAVE STANDARD CRTC REGISTERS */ - - for (i = 0; i < GFX_STD_CRTC_REGS; i++) - { - OUTB(crtcindex, (unsigned char) i); - vga->stdCRTCregs[i] = INB(crtcdata); - } - } - - /* CHECK EXTENDED CRTC FLAG */ - - if (flags & GFX_VGA_FLAG_EXT_CRTC) - { - /* SAVE EXTENDED CRTC REGISTERS */ - - for (i = 0; i < GFX_EXT_CRTC_REGS; i++) - { - OUTB(crtcindex, (unsigned char) (0x40+i)); - vga->extCRTCregs[i] = INB(crtcdata); - } - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_clear_extended - * - * This routine clears the extended SoftVGA register values to have SoftVGA - * behave like standard VGA. - *----------------------------------------------------------------------------- - */ -void gfx_vga_clear_extended(void) -{ - int i; - unsigned short crtcindex, crtcdata; - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - OUTB(crtcindex, 0x30); - OUTB(crtcdata, 0x57); - OUTB(crtcdata, 0x4C); - for (i = 0x40; i <= 0x4F; i++) - { - OUTB(crtcindex, (unsigned char) i); - OUTB(crtcdata, 0); - } - OUTB(crtcindex, 0x30); - OUTB(crtcdata, 0x00); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_restore - * - * This routine restores the state of the VGA registers from the specified - * structure. Flags indicate what portions of the register state need to - * be saved. - *----------------------------------------------------------------------------- - */ -int gfx_vga_restore(gfx_vga_struct *vga, int flags) -{ - int i; - unsigned short crtcindex, crtcdata; - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - /* CHECK MISCELLANEOUS OUTPUT FLAG */ - - if (flags & GFX_VGA_FLAG_MISC_OUTPUT) - { - /* RESTORE MISCELLANEOUS OUTPUT REGISTER VALUE */ - - OUTB(0x3C2, vga->miscOutput); - } - - /* CHECK STANDARD CRTC FLAG */ - - if (flags & GFX_VGA_FLAG_STD_CRTC) - { - /* UNLOCK STANDARD CRTC REGISTERS */ - - OUTB(crtcindex, 0x11); - OUTB(crtcdata, 0); - - /* RESTORE STANDARD CRTC REGISTERS */ - - for (i = 0; i < GFX_STD_CRTC_REGS; i++) - { - OUTB(crtcindex, (unsigned char) i); - OUTB(crtcdata, vga->stdCRTCregs[i]); - } - } - - /* CHECK EXTENDED CRTC FLAG */ - - if (flags & GFX_VGA_FLAG_EXT_CRTC) - { - /* UNLOCK EXTENDED CRTC REGISTERS */ - - OUTB(crtcindex, 0x30); - OUTB(crtcdata, 0x57); - OUTB(crtcdata, 0x4C); - - /* RESTORE EXTENDED CRTC REGISTERS */ - - for (i = 0; i < GFX_EXT_CRTC_REGS; i++) - { - OUTB(crtcindex, (unsigned char) (0x40+i)); - OUTB(crtcdata, vga->extCRTCregs[i]); - } - - /* LOCK EXTENDED CRTC REGISTERS */ - - OUTB(crtcindex, 0x30); - OUTB(crtcdata, 0x00); - - /* CHECK IF DIRECT FRAME BUFFER MODE (VESA MODE) */ - - if (vga->extCRTCregs[0x03] & 1) - { - /* SET BORDER COLOR TO BLACK */ - /* This really should be another thing saved/restored, but */ - /* Durango currently doesn't do the attr controller registers. */ - - INB(0x3BA); /* Reset flip-flop */ - INB(0x3DA); - OUTB(0x3C0, 0x11); - OUTB(0x3C0, 0x00); - } - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_vga_mode_switch - * - * This routine programs the SoftVGA register to indicate that a mode switch - * is in progress. This results in a cleaner mode switch since SoftVGA will - * not validate the hardware with intermediate values. - *----------------------------------------------------------------------------- - */ -int gfx_vga_mode_switch(int active) -{ - unsigned short crtcindex, crtcdata; - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - /* UNLOCK EXTENDED CRTC REGISTERS */ - - OUTB(crtcindex, CRTC_EXTENDED_REGISTER_LOCK); - OUTB(crtcdata, 0x57); - OUTB(crtcdata, 0x4C); - - /* SIGNAL THE BEGINNING OR END OF THE MODE SWITCH */ - /* SoftVGA will hold off validating the back end hardware. */ - - OUTB(crtcindex, CRTC_MODE_SWITCH_CONTROL); - active = active ? 1 : 0; - OUTB(crtcdata, (unsigned char) active); - - /* WAIT UNTIL SOFTVGA HAS VALIDATED MODE IF ENDING MODE SWITCH */ - /* This is for VSA1 only, where SoftVGA waits until the next */ - /* vertical blank to validate the hardware state. */ - - if ((!active) && (!(gu1_detect_vsa2()))) - { - OUTB(crtcindex, 0x33); - while(INB(crtcdata) & 0x80); - } - - /* LOCK EXTENDED CRTC REGISTERS */ - - OUTB(crtcindex, CRTC_EXTENDED_REGISTER_LOCK); - OUTB(crtcdata, 0x00); - return(0); -} - -/*----------------------------------------------------------------------------- - * gu1_detect_vsa2 - * - * This routine detects if VSA2 is present. The interface to SoftVGA - * changed slightly. - *----------------------------------------------------------------------------- - */ -int gu1_detect_vsa2(void) -{ - unsigned short crtcindex, crtcdata; - crtcindex = (INB(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - OUTB(crtcindex, 0x35); - if (INB(crtcdata) != 'C') return(0); - OUTB(crtcindex, 0x36); - if (INB(crtcdata) != 'X') return(0); - return(1); -} - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_1200.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_1200.c deleted file mode 100644 index 4d1837d85..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_1200.c +++ /dev/null @@ -1,2532 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_1200.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: vid_1200.c $ - * - * This file contains routines to control the SC1200 video overlay hardware. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*---------------------------------------------------------------------------- - * SC1200 PLL TABLE - *---------------------------------------------------------------------------- - */ - -typedef struct tagSC1200PLL -{ - long frequency; /* 16.16 fixed point frequency */ - unsigned long clock_select; /* clock select register (0x2C) */ -} SC1200PLL; - -SC1200PLL gfx_sc1200_clock_table[] = { - { (25L << 16) | ((1750L * 65536L) / 10000L), 0x0070E00C }, /* 25.1750 (sc=24.9231) */ - { (27L << 16) | ((0000L * 65536L) / 10000L), 0x00300100 }, /* 27.0000 */ - { (28L << 16) | ((3220L * 65536L) / 10000L), 0x0070EC0C }, /* 28.3220 (SC=27.000) */ - { (31L << 16) | ((5000L * 65536L) / 10000L), 0x00500D02 }, /* 31.5000 */ - { (36L << 16) | ((0000L * 65536L) / 10000L), 0x00500F02 }, /* 36.0000 */ - { (37L << 16) | ((5000L * 65536L) / 10000L), 0x0050B108 }, /* 37.5000 */ - { (40L << 16) | ((0000L * 65536L) / 10000L), 0x0050D20D }, /* 40.0000 */ - { (44L << 16) | ((9000L * 65536L) / 10000L), 0x0050DC0D }, /* 44.9000 */ - { (49L << 16) | ((5000L * 65536L) / 10000L), 0x00501502 }, /* 49.5000 */ - { (50L << 16) | ((0000L * 65536L) / 10000L), 0x0050A404 }, /* 50.0000 */ - { (50L << 16) | ((3500L * 65536L) / 10000L), 0x0050E00C }, /* 50.3500 */ - { (54L << 16) | ((0000L * 65536L) / 10000L), 0x00300300 }, /* 54.0000 */ - { (56L << 16) | ((3916L * 65536L) / 10000L), 0x0050F40D }, /* 56.3916 */ - { (56L << 16) | ((6440L * 65536L) / 10000L), 0x0050EC0C }, /* 56.6440 */ - { (59L << 16) | ((0000L * 65536L) / 10000L), 0x0030A207 }, /* 59.0000 */ - { (63L << 16) | ((0000L * 65536L) / 10000L), 0x00300D02 }, /* 63.0000 */ - { (65L << 16) | ((0000L * 65536L) / 10000L), 0x0030CC0F }, /* 65.0000 */ - { (67L << 16) | ((5000L * 65536L) / 10000L), 0x00300400 }, /* 67.5000 */ - { (70L << 16) | ((8000L * 65536L) / 10000L), 0x00301403 }, /* 70.8000 */ - { (72L << 16) | ((0000L * 65536L) / 10000L), 0x00300F02 }, /* 72.0000 */ - { (75L << 16) | ((0000L * 65536L) / 10000L), 0x0030B108 }, /* 75.0000 */ - { (78L << 16) | ((7500L * 65536L) / 10000L), 0x0030A205 }, /* 78.7500 */ - { (80L << 16) | ((0000L * 65536L) / 10000L), 0x0030D20D }, /* 80.0000 */ - { (87L << 16) | ((2728L * 65536L) / 10000L), 0x0030E00E }, /* 87.2728 */ - { (89L << 16) | ((8000L * 65536L) / 10000L), 0x0030DC0D }, /* 89.8000 */ - { (94L << 16) | ((5000L * 65536L) / 10000L), 0x00300600 }, /* 99.0000 */ - { (99L << 16) | ((0000L * 65536L) / 10000L), 0x00301502 }, /* 99.0000 */ - { (100L << 16) | ((0000L * 65536L) / 10000L), 0x0030A404 }, /* 100.00 */ - { (108L << 16) | ((0000L * 65536L) / 10000L), 0x00100300 }, /* 108.00 */ - { (112L << 16) | ((5000L * 65536L) / 10000L), 0x00301802 }, /* 108.00 */ - { (130L << 16) | ((0000L * 65536L) / 10000L), 0x0010CC0F }, /* 130.00 */ - { (135L << 16) | ((0000L * 65536L) / 10000L), 0x00100400 }, /* 135.00 */ - { (157L << 16) | ((5000L * 65536L) / 10000L), 0x0010A205 }, /* 157.50 */ - { (162L << 16) | ((0000L * 65536L) / 10000L), 0x00100500 }, /* 162.00 */ - { (175L << 16) | ((0000L * 65536L) / 10000L), 0x0010E00E }, /* 175.50 */ - { (189L << 16) | ((0000L * 65536L) / 10000L), 0x00100600 }, /* 189.00 */ - { (202L << 16) | ((0000L * 65536L) / 10000L), 0x0010EF0E }, /* 202.50 */ - { (232L << 16) | ((0000L * 65536L) / 10000L), 0x0010AA04 }, /* 232.50 */ - - /* Precomputed inidces in the hardware */ - { 0x0018EC4D, 0x000F0000 }, /* 24.923052 */ - { 0x00192CCC, 0x00000000 }, /* 25.1750 */ - { 0x001B0000, 0x00300100 }, /* 27.0000 */ - { 0x001F8000, 0x00010000 }, /* 31.5000 */ - { 0x00240000, 0x00020000 }, /* 36.0000 */ - { 0x00280000, 0x00030000 }, /* 40.0000 */ - { 0x00318000, 0x00050000 }, /* 49.5000 */ - { 0x00320000, 0x00040000 }, /* 50.0000 */ - { 0x00384000, 0x00060000 }, /* 56.2500 */ - { 0x00410000, 0x00080000 }, /* 65.0000 */ - { 0x004E8000, 0x000A0000 }, /* 78.5000 */ - { 0x005E8000, 0x000B0000 }, /* 94.5000 */ - { 0x006C0000, 0x000C0000 }, /* 108.0000 */ - { 0x00870000, 0x000D0000 }, /* 135.0000 */ -}; - -#define NUM_SC1200_FREQUENCIES sizeof(gfx_sc1200_clock_table)/sizeof(SC1200PLL) - -/*--------------------------------------------------------------------------- - * gfx_reset_video (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine is used to disable all components of video overlay before - * performing a mode switch. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_reset_video(void) -#else -void gfx_reset_video(void) -#endif -{ - int i; - - gfx_set_video_enable(0); - - /* SET WINDOW 0 AFTER RESET */ - - for (i = 2; i >= 0; i--) - { - gfx_select_alpha_region(i); - gfx_set_alpha_enable(0); - gfx_set_alpha_color_enable(0); - } -} - -/*----------------------------------------------------------------------------- - * gfx_set_display_control (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine configures the display output. - * - * "sync_polarities" is used to set the polarities of the sync pulses according - * to the following mask: - * - * Bit 0: If set to 1, negative horizontal polarity is programmed, - * otherwise positive horizontal polarity is programmed. - * Bit 1: If set to 1, negative vertical polarity is programmed, - * otherwise positive vertical polarity is programmed. - * - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_display_control(int sync_polarities) -#else -int gfx_set_display_control(int sync_polarities) -#endif -{ - unsigned long dcfg; - - /* CONFIGURE DISPLAY OUTPUT FROM VIDEO PROCESSOR */ - - dcfg = READ_VID32(SC1200_DISPLAY_CONFIG); - dcfg &= ~(SC1200_DCFG_CRT_SYNC_SKW_MASK | SC1200_DCFG_PWR_SEQ_DLY_MASK | - SC1200_DCFG_CRT_HSYNC_POL | SC1200_DCFG_CRT_VSYNC_POL | - SC1200_DCFG_FP_PWR_EN | SC1200_DCFG_FP_DATA_EN); - - dcfg |= (SC1200_DCFG_CRT_SYNC_SKW_INIT | - SC1200_DCFG_PWR_SEQ_DLY_INIT | - SC1200_DCFG_GV_PAL_BYP); - - if (PanelEnable) - dcfg |= SC1200_DCFG_FP_PWR_EN; - - /* SET APPROPRIATE SYNC POLARITIES */ - - if (sync_polarities & 0x1) - dcfg |= SC1200_DCFG_CRT_HSYNC_POL; - if (sync_polarities & 0x2) - dcfg |= SC1200_DCFG_CRT_VSYNC_POL; - - WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_clock_frequency - * - * This routine sets the clock frequency, specified as a 16.16 fixed point - * value (0x00318000 = 49.5 MHz). It will set the closest frequency found - * in the lookup table. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_set_clock_frequency(unsigned long frequency) -#else -void gfx_set_clock_frequency(unsigned long frequency) -#endif -{ - int index; - unsigned long value, pll; - long min, diff; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - value = gfx_sc1200_clock_table[0].clock_select; - min = (long) gfx_sc1200_clock_table[0].frequency - frequency; - if (min < 0L) min = -min; - for (index = 1; index < NUM_SC1200_FREQUENCIES; index++) - { - diff = (long) gfx_sc1200_clock_table[index].frequency - frequency; - if (diff < 0L) diff = -diff; - if (diff < min) - { - min = diff; - value = gfx_sc1200_clock_table[index].clock_select; - } - } - - /* SET THE DOT CLOCK REGISTER */ - - pll = READ_VID32(SC1200_VID_MISC); - WRITE_VID32(SC1200_VID_MISC, pll | SC1200_PLL_POWER_NORMAL); - WRITE_VID32(SC1200_VID_CLOCK_SELECT, value); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_set_screen_enable (PRIVATE ROUTINE - NOT PART OF API) - * - * This routine enables or disables the graphics display logic of the video processor. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_screen_enable(int enable) -#else -int gfx_set_screen_enable(int enable) -#endif -{ - unsigned long config; - config = READ_VID32(SC1200_DISPLAY_CONFIG); - if (enable) - WRITE_VID32(SC1200_DISPLAY_CONFIG, config | SC1200_DCFG_DIS_EN); - else - WRITE_VID32(SC1200_DISPLAY_CONFIG, config & ~SC1200_DCFG_DIS_EN); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_crt_enable - * - * This routine enables or disables the CRT output from the video processor. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_crt_enable(int enable) -#else -int gfx_set_crt_enable(int enable) -#endif -{ - unsigned long config, misc; - config = READ_VID32(SC1200_DISPLAY_CONFIG); - misc = READ_VID32(SC1200_VID_MISC); - - /* - * IMPORTANT: For all modes do NOT disable the graphics display logic - * because it might be needed for TV - */ - - switch (enable) - { - case CRT_DISABLE: /* HSync:Off VSync:Off */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, config & ~(SC1200_DCFG_HSYNC_EN - | SC1200_DCFG_VSYNC_EN - | SC1200_DCFG_DAC_BL_EN)); - WRITE_VID32(SC1200_VID_MISC, misc | SC1200_DAC_POWER_DOWN); - break; - case CRT_ENABLE: /* Enable CRT display, including display logic */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, config | SC1200_DCFG_HSYNC_EN - | SC1200_DCFG_VSYNC_EN - | SC1200_DCFG_DAC_BL_EN); - WRITE_VID32(SC1200_VID_MISC, misc & ~SC1200_DAC_POWER_DOWN); - - /* ENABLE GRAPHICS DISPLAY LOGIC */ - gfx_set_screen_enable(1); - break; - case CRT_STANDBY: /* HSync:Off VSync:On */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, (config & ~(SC1200_DCFG_HSYNC_EN - | SC1200_DCFG_DAC_BL_EN)) - | SC1200_DCFG_VSYNC_EN); - WRITE_VID32(SC1200_VID_MISC, misc | SC1200_DAC_POWER_DOWN); - break; - case CRT_SUSPEND: /* HSync:On VSync:Off */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, (config & ~(SC1200_DCFG_VSYNC_EN - | SC1200_DCFG_DAC_BL_EN)) - | SC1200_DCFG_HSYNC_EN); - WRITE_VID32(SC1200_VID_MISC, misc | SC1200_DAC_POWER_DOWN); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_enable - * - * This routine enables or disables the video overlay functionality. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_enable(int enable) -#else -int gfx_set_video_enable(int enable) -#endif -{ - unsigned long vcfg; - - /* WAIT FOR VERTICAL BLANK TO START */ - /* Otherwise a glitch can be observed. */ - - if (gfx_test_timing_active()) - { - if (!gfx_test_vertical_active()) - { - while(!gfx_test_vertical_active()); - } - while(gfx_test_vertical_active()); - } - - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - if (enable) - { - /* ENABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(1); - - /* ENABLE SC1200 VIDEO OVERLAY */ - - vcfg |= SC1200_VCFG_VID_EN; - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - } - else - { - /* DISABLE SC1200 VIDEO OVERLAY */ - - vcfg &= ~SC1200_VCFG_VID_EN; - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - - /* DISABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(0); - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_format - * - * Sets input video format type, to one of the YUV formats or to RGB. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_format(unsigned long format) -#else -int gfx_set_video_format(unsigned long format) -#endif -{ - unsigned long ctrl, vcfg = 0; - - /* SET THE SC1200 VIDEO INPUT FORMAT */ - - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - ctrl = READ_VID32(SC1200_VID_ALPHA_CONTROL); - ctrl &= ~(SC1200_VIDEO_INPUT_IS_RGB); - vcfg &= ~(SC1200_VCFG_VID_INP_FORMAT | SC1200_VCFG_4_2_0_MODE); - switch(format) - { - case VIDEO_FORMAT_UYVY: - vcfg |= SC1200_VCFG_UYVY_FORMAT; - break; - case VIDEO_FORMAT_YUYV: - vcfg |= SC1200_VCFG_YUYV_FORMAT; - break; - case VIDEO_FORMAT_Y2YU: - vcfg |= SC1200_VCFG_Y2YU_FORMAT; - break; - case VIDEO_FORMAT_YVYU: - vcfg |= SC1200_VCFG_YVYU_FORMAT; - break; - case VIDEO_FORMAT_Y0Y1Y2Y3: - vcfg |= SC1200_VCFG_UYVY_FORMAT; - vcfg |= SC1200_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y3Y2Y1Y0: - vcfg |= SC1200_VCFG_Y2YU_FORMAT; - vcfg |= SC1200_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y1Y0Y3Y2: - vcfg |= SC1200_VCFG_YUYV_FORMAT; - vcfg |= SC1200_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y1Y2Y3Y0: - vcfg |= SC1200_VCFG_YVYU_FORMAT; - vcfg |= SC1200_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_RGB: - ctrl |= SC1200_VIDEO_INPUT_IS_RGB; - vcfg |= SC1200_VCFG_UYVY_FORMAT; - break; - case VIDEO_FORMAT_P2M_P2L_P1M_P1L: - ctrl |= SC1200_VIDEO_INPUT_IS_RGB; - vcfg |= SC1200_VCFG_Y2YU_FORMAT; - break; - case VIDEO_FORMAT_P1M_P1L_P2M_P2L: - ctrl |= SC1200_VIDEO_INPUT_IS_RGB; - vcfg |= SC1200_VCFG_YUYV_FORMAT; - break; - case VIDEO_FORMAT_P1M_P2L_P2M_P1L: - ctrl |= SC1200_VIDEO_INPUT_IS_RGB; - vcfg |= SC1200_VCFG_YVYU_FORMAT; - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - - /* ALWAYS DISABLE GRAPHICS CSC */ - /* This is enabled in the function gfx_set_color_space_YUV for */ - /* YUV blending on TV. */ - - ctrl &= ~SC1200_CSC_GFX_RGB_TO_YUV; - - if (ctrl & SC1200_VIDEO_INPUT_IS_RGB) - ctrl &= ~SC1200_CSC_VIDEO_YUV_TO_RGB; - else - ctrl |= SC1200_CSC_VIDEO_YUV_TO_RGB; - - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, ctrl); - - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_size - * - * This routine specifies the size of the source data. It is used only - * to determine how much data to transfer per frame, and is not used to - * calculate the scaling value (that is handled by a separate routine). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_size(unsigned short width, unsigned short height) -#else -int gfx_set_video_size(unsigned short width, unsigned short height) -#endif -{ - unsigned long size, vcfg; - - /* SET THE SC1200 VIDEO LINE SIZE */ - - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - vcfg &= ~(SC1200_VCFG_LINE_SIZE_LOWER_MASK | SC1200_VCFG_LINE_SIZE_UPPER); - size = (width >> 1); - vcfg |= (size & 0x00FF) << 8; - if (size & 0x0100) vcfg |= SC1200_VCFG_LINE_SIZE_UPPER; - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - - /* SET TOTAL VIDEO BUFFER SIZE IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - /* Add 1 line to bypass issue #803 */ - gfx_set_display_video_size(width, (unsigned short)(height + 2)); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_offset - * - * This routine sets the starting offset for the video buffer when only - * one offset needs to be specified. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_offset(unsigned long offset) -#else -int gfx_set_video_offset(unsigned long offset) -#endif -{ - /* SAVE VALUE FOR FUTURE CLIPPING OF THE TOP OF THE VIDEO WINDOW */ - - gfx_vid_offset = offset; - - /* SET VIDEO BUFFER OFFSET IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_offset(offset); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_upscale - * - * This routine sets the scale factor for the video overlay window. The - * size of the source and destination regions are specified in pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_upscale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#else -int gfx_set_video_upscale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#endif -{ - unsigned long xscale, yscale; - - /* SAVE PARAMETERS (unless don't-care zero destination arguments are used) */ - /* These are needed for clipping the video window later. */ - - if (dstw != 0) { - gfx_vid_srcw = srcw; - gfx_vid_dstw = dstw; - } - if (dsth != 0) { - gfx_vid_srch = srch; - gfx_vid_dsth = dsth; - } - - /* CALCULATE SC1200 SCALE FACTORS */ - - if (dstw == 0) xscale = READ_VID32(SC1200_VIDEO_UPSCALE) & 0xffff; /* keep previous if don't-care argument */ - else if (dstw <= srcw) xscale = 0x2000l; /* horizontal downscaling is currently done in a separate function */ - else if ((srcw == 1) || (dstw == 1)) return GFX_STATUS_BAD_PARAMETER; - else xscale = (0x2000l * (srcw - 1l)) / (dstw - 1l); - - if (dsth == 0) yscale = (READ_VID32(SC1200_VIDEO_UPSCALE) & 0xffff0000) >> 16; /* keep previous if don't-care argument */ - else if (dsth <= srch) yscale = 0x2000l; /* No vertical downscaling in SC1200 so force to 1x if attempted */ - else if ((srch == 1) || (dsth == 1)) return GFX_STATUS_BAD_PARAMETER; - else yscale = (0x2000l * (srch - 1l)) / (dsth - 1l); - - WRITE_VID32(SC1200_VIDEO_UPSCALE, (yscale << 16) | xscale); - - /* CALL ROUTINE TO UPDATE WINDOW POSITION */ - /* This is required because the scale values effect the number of */ - /* source data pixels that need to be clipped, as well as the */ - /* amount of data that needs to be transferred. */ - - gfx_set_video_window(gfx_vid_xpos, gfx_vid_ypos, gfx_vid_width, gfx_vid_height); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_scale - * - * This routine sets the scale factor for the video overlay window. The - * size of the source and destination regions are specified in pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#else -int gfx_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#endif -{ - return gfx_set_video_upscale(srcw, srch, dstw, dsth); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_config - * - * This routine sets the downscale type and factor for the video overlay window. - * Note: No downscaling support for RGB565 and YUV420 video formats. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_downscale_config(unsigned short type, unsigned short m) -#else -int gfx_set_video_downscale_config(unsigned short type, unsigned short m) -#endif -{ - unsigned long downscale; - - if ((m < 1) || (m > 16)) return GFX_STATUS_BAD_PARAMETER; - - downscale = READ_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL); - downscale &= ~(SC1200_VIDEO_DOWNSCALE_FACTOR_MASK | SC1200_VIDEO_DOWNSCALE_TYPE_MASK); - downscale |= ((m - 1l) << SC1200_VIDEO_DOWNSCALE_FACTOR_POS); - switch(type) - { - case VIDEO_DOWNSCALE_KEEP_1_OF: - downscale |= SC1200_VIDEO_DOWNSCALE_TYPE_A; - break; - case VIDEO_DOWNSCALE_DROP_1_OF: - downscale |= SC1200_VIDEO_DOWNSCALE_TYPE_B; - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - WRITE_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL, downscale); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_coefficients - * - * This routine sets the downscale filter coefficients. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) -#else -int gfx_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) -#endif -{ - if ((coef1 + coef2 + coef3 + coef4) != 16) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_VID32(SC1200_VIDEO_DOWNSCALER_COEFFICIENTS, ((unsigned long)coef1 << SC1200_VIDEO_DOWNSCALER_COEF1_POS) | - ((unsigned long)coef2 << SC1200_VIDEO_DOWNSCALER_COEF2_POS) | - ((unsigned long)coef3 << SC1200_VIDEO_DOWNSCALER_COEF3_POS) | - ((unsigned long)coef4 << SC1200_VIDEO_DOWNSCALER_COEF4_POS)); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_enable - * - * This routine enables or disables downscaling for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_downscale_enable(int enable) -#else -int gfx_set_video_downscale_enable(int enable) -#endif -{ - unsigned long downscale; - - downscale = READ_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL); - downscale &= ~SC1200_VIDEO_DOWNSCALE_ENABLE; - if (enable) - downscale |= SC1200_VIDEO_DOWNSCALE_ENABLE; - WRITE_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL, downscale); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_window - * - * This routine sets the position and size of the video overlay window. The - * y position is specified in screen relative coordinates, and may be negative. - * The size of destination region is specified in pixels. The line size - * indicates the number of bytes of source data per scanline. - * For the effect of negative x values, call the function - * gfx_set_video_left_crop(). - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_window(short x, short y, unsigned short w, unsigned short h) -#else -int gfx_set_video_window(short x, short y, unsigned short w, unsigned short h) -#endif -{ - unsigned long control; - unsigned long hadjust, vadjust; - unsigned long xstart, ystart, xend, yend; - - /* For left cropping call the function gfx_set_video_left_crop() */ - - if (x < 0) - return GFX_STATUS_BAD_PARAMETER; - - /* SAVE PARAMETERS */ - /* These are needed to call this routine if the scale value changes. */ - /* In the case of SC1200 they are also needed for restoring when video is re-enabled */ - - gfx_vid_xpos = x; - gfx_vid_ypos = y; - gfx_vid_width = w; - gfx_vid_height = h; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 14l; - vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l; - - /* HORIZONTAL START */ - - xstart = (unsigned long)x + hadjust; - - /* HORIZONTAL END */ - /* End positions in register are non-inclusive (one more than the actual end) */ - - if ((x + w) < gfx_get_hactive()) - xend = (unsigned long)x + (unsigned long)w + hadjust; - else /* right clipping needed */ - xend = (unsigned long)gfx_get_hactive() + hadjust; - - /* VERTICAL START */ - - ystart = (unsigned long)y + vadjust; - - /* VERTICAL END */ - - if ((y + h) < gfx_get_vactive()) - yend = (unsigned long)y + (unsigned long)h + vadjust; - else /* bottom clipping needed */ - yend = (unsigned long)gfx_get_vactive() + vadjust; - - /* SET VIDEO LINE INVERT BIT */ - - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - if (y & 0x1) - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control | SC1200_VIDEO_LINE_OFFSET_ODD); - else - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control & ~SC1200_VIDEO_LINE_OFFSET_ODD); - - /* SET VIDEO POSITION */ - - WRITE_VID32(SC1200_VIDEO_X_POS, (xend << 16) | xstart); - WRITE_VID32(SC1200_VIDEO_Y_POS, (yend << 16) | ystart); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_left_crop - * - * This routine sets the number of pixels which will be cropped from the - * beginning of each video line. The video window will begin to display only - * from the pixel following the cropped pixels, and the cropped pixels - * will be ignored. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_left_crop(unsigned short x) -#else -int gfx_set_video_left_crop(unsigned short x) -#endif -{ - unsigned long vcfg, initread; - - /* CLIPPING ON LEFT */ - /* Adjust initial read for scale, checking for divide by zero */ - - if (gfx_vid_dstw) - initread = (unsigned long)x * gfx_vid_srcw / gfx_vid_dstw; - else initread = 0l; - - /* SET INITIAL READ ADDRESS */ - - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - vcfg &= ~SC1200_VCFG_INIT_READ_MASK; - vcfg |= (initread << 15) & SC1200_VCFG_INIT_READ_MASK; - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_color_key - * - * This routine specifies the color key value and mask for the video overlay - * hardware. To disable color key, the color and mask should both be set to - * zero. The hardware uses the color key in the following equation: - * - * ((source data) & (color key mask)) == ((color key) & (color key mask)) - * - * If "graphics" is set to TRUE, the source data is graphics, and color key - * is an RGB value. If "graphics" is set to FALSE, the source data is the video, - * and color key is a YUV value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#else -int gfx_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#endif -{ - unsigned long dcfg = 0; - - /* SET SC1200 COLOR KEY VALUE */ - - WRITE_VID32(SC1200_VIDEO_COLOR_KEY, key); - WRITE_VID32(SC1200_VIDEO_COLOR_MASK, mask); - - /* SELECT GRAPHICS OR VIDEO DATA TO COMPARE TO THE COLOR KEY */ - - dcfg = READ_VID32(SC1200_DISPLAY_CONFIG); - if (graphics & 0x01) dcfg &= ~SC1200_DCFG_VG_CK; - else dcfg |= SC1200_DCFG_VG_CK; - WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_filter - * - * This routine enables or disables the video overlay filters. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_filter(int xfilter, int yfilter) -#else -int gfx_set_video_filter(int xfilter, int yfilter) -#endif -{ - unsigned long vcfg = 0; - - /* ENABLE OR DISABLE SC1200 VIDEO OVERLAY FILTERS */ - - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - vcfg &= ~(SC1200_VCFG_X_FILTER_EN | SC1200_VCFG_Y_FILTER_EN); - if (xfilter) vcfg |= SC1200_VCFG_X_FILTER_EN; - if (yfilter) vcfg |= SC1200_VCFG_Y_FILTER_EN; - WRITE_VID32(SC1200_VIDEO_CONFIG, vcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette - * - * This routine loads the video hardware palette. If a NULL pointer is - * specified, the palette is bypassed (for SC1200, this means loading the - * palette with identity values). - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_palette(unsigned long *palette) -#else -int gfx_set_video_palette(unsigned long *palette) -#endif -{ - unsigned long i, entry; - - /* WAIT FOR VERTICAL BLANK TO END */ - /* Otherwise palette will not be written properly. */ - - if (gfx_test_timing_active()) - { - if (gfx_test_vertical_active()) - { - while(gfx_test_vertical_active()); - } - while(!gfx_test_vertical_active()); - } - - /* LOAD SC1200 VIDEO PALETTE */ - - WRITE_VID32(SC1200_PALETTE_ADDRESS, 0); - for (i = 0; i < 256; i++) - { - if (palette) entry = palette[i]; - else entry = (i << 8) | (i << 16) | (i << 24); - WRITE_VID32(SC1200_PALETTE_DATA, entry); - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette_entry - * - * This routine loads a single entry of the video hardware palette. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_palette_entry(unsigned long index, unsigned long palette) -#else -int gfx_set_video_palette_entry(unsigned long index, unsigned long palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* WAIT FOR VERTICAL BLANK TO END */ - /* Otherwise palette will not be written properly. */ - - if (gfx_test_timing_active()) - { - if (gfx_test_vertical_active()) - { - while(gfx_test_vertical_active()); - } - while(!gfx_test_vertical_active()); - } - - /* SET A SINGLE ENTRY */ - - WRITE_VID32(SC1200_PALETTE_ADDRESS, index); - WRITE_VID32(SC1200_PALETTE_DATA, palette); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_request() - * - * This routine sets the horizontal (pixel) and vertical (line) video request - * values. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_request(short x, short y) -#else -int gfx_set_video_request(short x, short y) -#endif -{ - /* SET SC1200 VIDEO REQUEST */ - - x += gfx_get_htotal() - gfx_get_hsync_end() - 2; - y += gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - if ((x < 0) || (x > SC1200_VIDEO_REQUEST_MASK) || - (y < 0) || (y > SC1200_VIDEO_REQUEST_MASK)) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_VID32(SC1200_VIDEO_REQUEST, ((unsigned long)x << SC1200_VIDEO_X_REQUEST_POS) | - ((unsigned long)y << SC1200_VIDEO_Y_REQUEST_POS)); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_source() - * - * This routine sets the video source to either memory or Direct VIP. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_source(VideoSourceType source) -#else -int gfx_set_video_source(VideoSourceType source) -#endif -{ - unsigned long display_mode; - display_mode = READ_VID32(SC1200_VIDEO_DISPLAY_MODE); - - /* SET SC1200 VIDEO SOURCE */ - switch (source) - { - case VIDEO_SOURCE_MEMORY: - WRITE_VID32(SC1200_VIDEO_DISPLAY_MODE, (display_mode & ~SC1200_VIDEO_SOURCE_MASK) | SC1200_VIDEO_SOURCE_GX1); - break; - case VIDEO_SOURCE_DVIP: - WRITE_VID32(SC1200_VIDEO_DISPLAY_MODE, (display_mode & ~SC1200_VIDEO_SOURCE_MASK) | SC1200_VIDEO_SOURCE_DVIP); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_source() - * - * This routine sets the vbi source to either memory or Direct VIP. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_vbi_source(VbiSourceType source) -#else -int gfx_set_vbi_source(VbiSourceType source) -#endif -{ - unsigned long display_mode; - display_mode = READ_VID32(SC1200_VIDEO_DISPLAY_MODE); - - /* SET SC1200 VBI SOURCE */ - switch (source) - { - case VBI_SOURCE_MEMORY: - WRITE_VID32(SC1200_VIDEO_DISPLAY_MODE, (display_mode & ~SC1200_VBI_SOURCE_MASK) | SC1200_VBI_SOURCE_GX1); - break; - case VBI_SOURCE_DVIP: - WRITE_VID32(SC1200_VIDEO_DISPLAY_MODE, (display_mode & ~SC1200_VBI_SOURCE_MASK) | SC1200_VBI_SOURCE_DVIP); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_lines() - * - * This routine sets the VBI lines to pass to the TV encoder. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_vbi_lines(unsigned long even, unsigned long odd) -#else -int gfx_set_vbi_lines(unsigned long even, unsigned long odd) -#endif -{ - /* SET SC1200 VBI LINES */ - WRITE_VID32(SC1200_VIDEO_EVEN_VBI_LINE_ENABLE, even & SC1200_VIDEO_VBI_LINE_ENABLE_MASK); - WRITE_VID32(SC1200_VIDEO_ODD_VBI_LINE_ENABLE, odd & SC1200_VIDEO_VBI_LINE_ENABLE_MASK); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vbi_total() - * - * This routine sets the total number of VBI bytes for each field. - * The total is needed when both VBI and active video are received from memory. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_vbi_total(unsigned long even, unsigned long odd) -#else -int gfx_set_vbi_total(unsigned long even, unsigned long odd) -#endif -{ - /* SET SC1200 VBI TOTAL */ - WRITE_VID32(SC1200_VIDEO_EVEN_VBI_TOTAL_COUNT, even & SC1200_VIDEO_VBI_TOTAL_COUNT_MASK); - WRITE_VID32(SC1200_VIDEO_ODD_VBI_TOTAL_COUNT, odd & SC1200_VIDEO_VBI_TOTAL_COUNT_MASK); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_interlaced() - * - * This routine configures the video processor video overlay mode to be - * interlaced YUV. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_interlaced(int enable) -#else -int gfx_set_video_interlaced(int enable) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - /* SET INTERLACED VIDEO */ - if (enable) - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control | SC1200_VIDEO_IS_INTERLACED); - else - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control & ~SC1200_VIDEO_IS_INTERLACED); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_color_space_YUV() - * - * This routine configures the video processor to process graphics and video - * in either YUV or RGB color space. The mode should be set to tune image - * quality. - * Setting "enable" to TRUE improves image quality on TV, - * but in this mode colors on CRT will not be correct. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_color_space_YUV(int enable) -#else -int gfx_set_color_space_YUV(int enable) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - - /* SET SC1200 VIDEO COLOR SPACE TO YUV OR RGB */ - - if (enable) - { - /* ENABLE YUV BLENDING */ - /* YUV blending cannot be enabled in RGB video formats */ - - control |= SC1200_CSC_GFX_RGB_TO_YUV; /* Convert graphics to YUV */ - control &= ~SC1200_CSC_VIDEO_YUV_TO_RGB; /* Leave video in YUV */ - - if (control & SC1200_VIDEO_INPUT_IS_RGB) - return(GFX_STATUS_UNSUPPORTED); /* Can't convert video from RGB to YUV */ - } - else - { - /* RGB BLENDING */ - - control &= ~SC1200_CSC_GFX_RGB_TO_YUV; /* Leave graphics in RGB */ - if (control & SC1200_VIDEO_INPUT_IS_RGB) - control &= ~SC1200_CSC_VIDEO_YUV_TO_RGB; /* Leave video in RGB */ - else - control |= SC1200_CSC_VIDEO_YUV_TO_RGB; /* Convert video to RGB */ - } - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_vertical_scaler_offset() - * - * This routine sets the value by which the odd frame is shifted with respect - * to the even frame. This is useful for de-interlacing in Bob method, by - * setting the shift value to be one line. - * If offset is 0, no shifting occurs. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_vertical_scaler_offset(char offset) -#else -int gfx_set_vertical_scaler_offset(char offset) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - if (offset == 1) { - control &= ~SC1200_VERTICAL_SCALER_SHIFT_MASK; /* Clear shifting value */ - control |= SC1200_VERTICAL_SCALER_SHIFT_INIT; /* Set shifting value */ - control |= SC1200_VERTICAL_SCALER_SHIFT_EN; /* Enable odd frame shifting */ - } else if (offset == 0) { - control &= ~SC1200_VERTICAL_SCALER_SHIFT_EN; /* No shifting occurs */ - control &= ~SC1200_VERTICAL_SCALER_SHIFT_MASK; /* Clear shifting value */ - } - else - return(GFX_STATUS_BAD_PARAMETER); /* TODO: how to program other values ? */ - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_top_line_in_odd() - * - * This routine sets the field in which the top line of input video resides. - * If enable is "0", this is the even field (default). [not to be confused - * with the odd field being the top field on TV]. - * If enable is "1", this is the odd field. - * Use enable "1" for input devices whose field indication is reversed from - * normal, i.e. an indication of "odd" field is given for even field data, - * and vice versa. - * This setting affects the video processor only when it is in either interlaced - * or Bob (scaler offset active) modes. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_top_line_in_odd(int enable) -#else -int gfx_set_top_line_in_odd(int enable) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - if (enable) - control |= SC1200_TOP_LINE_IN_ODD; /* Set shifting value */ - else - control &= ~SC1200_TOP_LINE_IN_ODD; /* No shifting occurs */ - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, control); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_genlock_delay() - * - * This routine sets the delay between VIP VSYNC and display controller VSYNC. - * The delay is in 27 MHz clocks. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_genlock_delay(unsigned long delay) -#else -int gfx_set_genlock_delay(unsigned long delay) -#endif -{ - /* SET SC1200 GENLOCK DELAY */ - WRITE_VID32(SC1200_GENLOCK_DELAY, delay & SC1200_GENLOCK_DELAY_MASK); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_genlock_enable() - * - * This routine sets and configures the genlock according to the flags parameter. - * Flags value of 0 disables genlock and resets its configuration. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_genlock_enable(int flags) -#else -int gfx_set_genlock_enable(int flags) -#endif -{ - unsigned long genlock = 0; - - if (flags) - { - /* SET SC1200 GENLOCK CONFIGURATION */ - if (flags & GENLOCK_SINGLE) genlock |= SC1200_GENLOCK_SINGLE_ENABLE; - if (flags & GENLOCK_FIELD_SYNC) genlock |= SC1200_GENLOCK_FIELD_SYNC_ENABLE; - if (flags & GENLOCK_CONTINUOUS) genlock |= SC1200_GENLOCK_CONTINUOUS_ENABLE; - if (flags & GENLOCK_SYNCED_EDGE_FALLING) genlock |= SC1200_GENLOCK_GX_VSYNC_FALLING_EDGE; - if (flags & GENLOCK_SYNCING_EDGE_FALLING) genlock |= SC1200_GENLOCK_VIP_VSYNC_FALLING_EDGE; - if (flags & GENLOCK_TIMEOUT) genlock |= SC1200_GENLOCK_TIMEOUT_ENABLE; - if (flags & GENLOCK_TVENC_RESET_EVEN_FIELD) genlock |= SC1200_GENLOCK_TVENC_RESET_EVEN_FIELD; - if (flags & GENLOCK_TVENC_RESET_BEFORE_DELAY) genlock |= SC1200_GENLOCK_TVENC_RESET_BEFORE_DELAY; - if (flags & GENLOCK_TVENC_RESET) genlock |= SC1200_GENLOCK_TVENC_RESET_ENABLE; - if (flags & GENLOCK_SYNC_TO_TVENC) genlock |= SC1200_GENLOCK_SYNC_TO_TVENC; - } - WRITE_VID32(SC1200_GENLOCK, genlock); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_cursor() - * - * This routine configures the video hardware cursor. - * If the "mask"ed bits in the graphics pixel match "key", then either "color1" - * or "color2" will be used for this pixel, according to the value of bit - * number "select_color2" of the graphics pixel. - * - * key - 24 bit RGB value - * mask - 24 bit mask - * color1, color2 - RGB or YUV, depending on the current color space conversion - * select_color2 - value between 0 to 23 - * - * To disable match, a "mask" and "key" value of 0xffffff should be set, - * because the graphics pixels incoming to the video processor have maximum 16 - * bits set (0xF8FCF8). - * - * This feature is useful for disabling alpha blending of the cursor. - * Otherwise cursor image would be blurred (or completely invisible if video - * alpha is maximum value). - * Note: the cursor pixel replacements take place both inside and outside the - * video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2) -#else -int gfx_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2) -#endif -{ - if (select_color2 > SC1200_CURSOR_COLOR_BITS) return GFX_STATUS_BAD_PARAMETER; - key = (key & SC1200_COLOR_MASK) | ((unsigned long)select_color2 << SC1200_CURSOR_COLOR_KEY_OFFSET_POS); - WRITE_VID32(SC1200_CURSOR_COLOR_KEY, key); - WRITE_VID32(SC1200_CURSOR_COLOR_MASK, mask); - WRITE_VID32(SC1200_CURSOR_COLOR_1, color1); - WRITE_VID32(SC1200_CURSOR_COLOR_2, color2); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_enable - * - * This routine enables or disables the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_enable(int enable) -#else -int gfx_set_alpha_enable(int enable) -#endif -{ - unsigned long address = 0, value = 0; - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = SC1200_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 4); - value = READ_VID32(address); - if (enable) value |= (SC1200_ACTRL_WIN_ENABLE | SC1200_ACTRL_LOAD_ALPHA); - else value &= ~(SC1200_ACTRL_WIN_ENABLE); - WRITE_VID32(address, value); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_window - * - * This routine sets the size of the currently selected alpha region. - * Note: "x" and "y" are signed to enable using negative values needed for - * implementing workarounds of hardware issues. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_window(short x, short y, - unsigned short width, unsigned short height) -#else -int gfx_set_alpha_window(short x, short y, - unsigned short width, unsigned short height) -#endif -{ - unsigned long address = 0; - - /* CHECK FOR CLIPPING */ - - if ((x + width) > gfx_get_hactive()) width = gfx_get_hactive() - x; - if ((y + height) > gfx_get_vactive()) height = gfx_get_vactive() - y; - - /* ADJUST POSITIONS */ - - x += gfx_get_htotal() - gfx_get_hsync_end() - 2; - y += gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = SC1200_ALPHA_XPOS_1 + ((unsigned long)gfx_alpha_select << 4); - - /* End positions in register are non-inclusive (one more than the actual end) */ - - WRITE_VID32(address, (unsigned long) x | - ((unsigned long) (x + width) << 16)); - WRITE_VID32(address + 4l, (unsigned long) y | - ((unsigned long) (y + height) << 16)); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_value - * - * This routine sets the alpha value for the currently selected alpha - * region. It also specifies an increment/decrement value for fading. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_value(unsigned char alpha, char delta) -#else -int gfx_set_alpha_value(unsigned char alpha, char delta) -#endif -{ - unsigned long address = 0, value = 0; - unsigned char new_value = 0; - int loop = 1; - - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = SC1200_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 4); - value = READ_VID32(address); - value &= SC1200_ACTRL_WIN_ENABLE; /* keep only enable bit */ - value |= (unsigned long) alpha; - value |= (((unsigned long) delta) & 0xff) << 8; - value |= SC1200_ACTRL_LOAD_ALPHA; - WRITE_VID32(address, value); - - /* WORKAROUND FOR ISSUE #1187 */ - /* Need to verify that the alpha operation succeeded */ - - while (1) - { - /* WAIT FOR VERTICAL BLANK TO END */ - if (gfx_test_timing_active()) - { - if (gfx_test_vertical_active()) - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - } - new_value = (unsigned char)((READ_VID32(SC1200_ALPHA_WATCH) >> (gfx_alpha_select << 3)) & 0xff); - if (new_value == alpha) - return GFX_STATUS_OK; - if (++loop > 10) - return GFX_STATUS_ERROR; - WRITE_VID32(address, value); - } -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_priority - * - * This routine sets the priority of the currently selected alpha region. - * A higher value indicates a higher priority. - * Note: Priority of enabled alpha windows must be different. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_priority(int priority) -#else -int gfx_set_alpha_priority(int priority) -#endif -{ - unsigned long pos = 0, value = 0; - if (priority > 3) return(GFX_STATUS_BAD_PARAMETER); - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - value = READ_VID32(SC1200_VID_ALPHA_CONTROL); - pos = 16 + (gfx_alpha_select << 1); - value &= ~(0x03l << pos); - value |= (unsigned long)priority << pos; - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, value); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color - * - * This routine sets the color to be displayed inside the currently selected - * alpha window when there is a color key match (when the alpha color - * mechanism is enabled). - * "color" is a 24 bit RGB value (for RGB blending) or YUV value (for YUV blending). - * In Interlaced YUV blending mode, Y/2 value should be used. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_color(unsigned long color) -#else -int gfx_set_alpha_color(unsigned long color) -#endif -{ - unsigned long address = 0; - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = SC1200_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 4); - - /* ONLY 24 VALID BITS */ - color &= 0xffffffl; - - /* KEEP UPPER BYTE UNCHANGED */ - WRITE_VID32(address, (color | (READ_VID32(address) & ~0xffffffl))); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color_enable - * - * Enable or disable the color mechanism in the alpha window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_alpha_color_enable(int enable) -#else -int gfx_set_alpha_color_enable(int enable) -#endif -{ - unsigned long color; - unsigned long address = 0; - - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = SC1200_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 4); - color = READ_VID32(address); - if (enable) - color |= SC1200_ALPHA_COLOR_ENABLE; - else - color &= ~SC1200_ALPHA_COLOR_ENABLE; - WRITE_VID32(address, color); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_no_ck_outside_alpha - * - * This function affects where inside the video window color key or chroma - * key comparison is done: - * If enable is TRUE, color/chroma key comparison is performed only inside - * the enabled alpha windows. Outside the (enabled) alpha windows, only video - * is displayed if color key is used, and only graphics is displayed if chroma - * key is used. - * If enable is FALSE, color/chroma key comparison is performed in all the - * video window area. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_no_ck_outside_alpha(int enable) -#else -int gfx_set_no_ck_outside_alpha(int enable) -#endif -{ - unsigned long value; - value = READ_VID32(SC1200_VID_ALPHA_CONTROL); - if (enable) - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, value | SC1200_NO_CK_OUTSIDE_ALPHA); - else - WRITE_VID32(SC1200_VID_ALPHA_CONTROL, value & ~SC1200_NO_CK_OUTSIDE_ALPHA); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_macrovision_enable - * - * This routine enables or disables macrovision on the tv encoder output. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_set_macrovision_enable(int enable) -#else -int gfx_set_macrovision_enable(int enable) -#endif -{ - if (enable) - WRITE_VID32(SC1200_TVENC_MV_CONTROL, SC1200_TVENC_MV_ENABLE); - else - WRITE_VID32(SC1200_TVENC_MV_CONTROL, 0); - return(GFX_STATUS_OK); -} - -#define SC1200_VIDEO_PCI_44 0x80009444 - -/*--------------------------------------------------------------------------- - * gfx_disable_softvga - * - * Disables SoftVga. This function is only valid with VSA2, Returns 1 if - * SoftVga can be disabled; 0 if not. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_disable_softvga(void) -#else -int gfx_disable_softvga(void) -#endif -{ - unsigned long reg_val; - - /* get the current value */ - reg_val = gfx_pci_config_read(SC1200_VIDEO_PCI_44); - /* setting video PCI register 44 bit 0 to 1 disables SoftVga */ - reg_val |= 0x1; - gfx_pci_config_write(SC1200_VIDEO_PCI_44, reg_val); - - /* see if we set the bit and return the appropriate value */ - reg_val = gfx_pci_config_read(SC1200_VIDEO_PCI_44); - if((reg_val & 0x1) == 0x1) - return(1); - else - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_enable_softvga - * - * Enables SoftVga. This function is only valid with VSA2, Returns 1 if - * SoftVga can be enbled; 0 if not. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_enable_softvga(void) -#else -int gfx_enable_softvga(void) -#endif -{ - unsigned long reg_val; - - /* get the current value */ - reg_val = gfx_pci_config_read(SC1200_VIDEO_PCI_44); - /* clearing video PCI register 44 bit 0 enables SoftVga */ - gfx_pci_config_write(SC1200_VIDEO_PCI_44, reg_val & 0xfffffffel); - - /* see if we cleared the bit and return the appropriate value */ - reg_val = gfx_pci_config_read(SC1200_VIDEO_PCI_44); - if((reg_val & 0x1) == 0) - return(1); - else - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_clock_frequency - * - * This routine returns the current clock frequency in 16.16 format. - * It reads the current register value and finds the match in the table. - * If no match is found, this routine returns 0. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_clock_frequency(void) -#else -unsigned long gfx_get_clock_frequency(void) -#endif -{ - int index; - unsigned long value, mask; - mask = 0x007FFF0F; - value = READ_VID32(SC1200_VID_CLOCK_SELECT) & mask; - for (index = 0; index < NUM_SC1200_FREQUENCIES; index++) - { - if ((gfx_sc1200_clock_table[index].clock_select & mask) == value) - return(gfx_sc1200_clock_table[index].frequency); - } - return(0); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*--------------------------------------------------------------------------- - * gfx_get_vsa2_softvga_enable - * - * This function returns the enable status of SoftVGA. It is valid - * only if VSAII is present. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_vsa2_softvga_enable(void) -#else -int gfx_get_vsa2_softvga_enable(void) -#endif -{ - unsigned long reg_val; - - reg_val = gfx_pci_config_read(SC1200_VIDEO_PCI_44); - if((reg_val & 0x1) == 0) - return(1); - else - return(0); - -} - -/*--------------------------------------------------------------------------- - * gfx_get_sync_polarities - * - * This routine returns the polarities of the sync pulses: - * Bit 0: Set if negative horizontal polarity. - * Bit 1: Set if negative vertical polarity. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_sync_polarities(void) -#else -int gfx_get_sync_polarities(void) -#endif -{ - int polarities = 0; - if (READ_VID32(SC1200_DISPLAY_CONFIG) & SC1200_DCFG_CRT_HSYNC_POL) polarities |= 1; - if (READ_VID32(SC1200_DISPLAY_CONFIG) & SC1200_DCFG_CRT_VSYNC_POL) polarities |= 2; - return(polarities); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_palette_entry - * - * This routine returns a single palette entry. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_palette_entry(unsigned long index, unsigned long *palette) -#else -int gfx_get_video_palette_entry(unsigned long index, unsigned long *palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* READ A SINGLE ENTRY */ - - WRITE_VID32 (SC1200_PALETTE_ADDRESS, index); - *palette = READ_VID32 (SC1200_PALETTE_DATA); - - return (GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_enable - * - * This routine returns the value "one" if video overlay is currently enabled, - * otherwise it returns the value "zero". - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_enable(void) -#else -int gfx_get_video_enable(void) -#endif -{ - if (READ_VID32(SC1200_VIDEO_CONFIG) & SC1200_VCFG_VID_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_format - * - * This routine returns the current video overlay format. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_format(void) -#else -int gfx_get_video_format(void) -#endif -{ - unsigned long ctrl, vcfg; - - ctrl = READ_VID32(SC1200_VID_ALPHA_CONTROL); - vcfg = READ_VID32(SC1200_VIDEO_CONFIG); - - if (ctrl & SC1200_VIDEO_INPUT_IS_RGB) - { - switch (vcfg & SC1200_VCFG_VID_INP_FORMAT) - { - case SC1200_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_RGB; - case SC1200_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_P2M_P2L_P1M_P1L; - case SC1200_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_P1M_P1L_P2M_P2L; - case SC1200_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_P1M_P2L_P2M_P1L; - } - } - - if (vcfg & SC1200_VCFG_4_2_0_MODE) - { - switch (vcfg & SC1200_VCFG_VID_INP_FORMAT) - { - case SC1200_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_Y0Y1Y2Y3; - case SC1200_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_Y3Y2Y1Y0; - case SC1200_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_Y1Y0Y3Y2; - case SC1200_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_Y1Y2Y3Y0; - } - } - else - { - switch (vcfg & SC1200_VCFG_VID_INP_FORMAT) - { - case SC1200_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_UYVY; - case SC1200_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_Y2YU; - case SC1200_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_YUYV; - case SC1200_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_YVYU; - } - } - return (GFX_STATUS_ERROR); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_src_size - * - * This routine returns the size of the source video overlay buffer. The - * return value is (height << 16) | width. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_src_size(void) -#else -unsigned long gfx_get_video_src_size(void) -#endif -{ - unsigned long width = 0, height = 0; - - /* DETERMINE SOURCE WIDTH FROM THE SC1200 VIDEO LINE SIZE */ - - width = (READ_VID32(SC1200_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(SC1200_VIDEO_CONFIG) & SC1200_VCFG_LINE_SIZE_UPPER) - width += 512l; - - if (width) - { - /* DETERMINE HEIGHT BY DIVIDING TOTAL SIZE BY WIDTH */ - /* Get total size from display controller - abtracted. */ - - height = gfx_get_display_video_size() / (width << 1); - } - return((height << 16) | width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_line_size - * - * This routine returns the line size of the source video overlay buffer, in - * pixels. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_line_size(void) -#else -unsigned long gfx_get_video_line_size(void) -#endif -{ - unsigned long width = 0; - - /* DETERMINE SOURCE WIDTH FROM THE SC1200 VIDEO LINE SIZE */ - - width = (READ_VID32(SC1200_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(SC1200_VIDEO_CONFIG) & SC1200_VCFG_LINE_SIZE_UPPER) - width += 512l; - return(width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_xclip - * - * This routine returns the number of bytes clipped on the left side of a - * video overlay line (skipped at beginning). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_xclip(void) -#else -unsigned long gfx_get_video_xclip(void) -#endif -{ - unsigned long clip = 0; - - /* DETERMINE SOURCE WIDTH FROM THE SC1200 VIDEO LINE SIZE */ - - clip = (READ_VID32(SC1200_VIDEO_CONFIG) >> 14) & 0x000007FC; - return(clip); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_offset - * - * This routine returns the current offset for the video overlay buffer. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_offset(void) -#else -unsigned long gfx_get_video_offset(void) -#endif -{ - return(gfx_get_display_video_offset()); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_upscale - * - * This routine returns the scale factor for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_upscale(void) -#else -unsigned long gfx_get_video_upscale(void) -#endif -{ - return(READ_VID32(SC1200_VIDEO_UPSCALE)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_scale - * - * This routine returns the scale factor for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_scale(void) -#else -unsigned long gfx_get_video_scale(void) -#endif -{ - return gfx_get_video_upscale(); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_config - * - * This routine returns the current type and value of video downscaling. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_downscale_config(unsigned short *type, unsigned short *m) -#else -int gfx_get_video_downscale_config(unsigned short *type, unsigned short *m) -#endif -{ - unsigned long downscale; - - downscale = READ_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL); - *m = (unsigned short)((downscale & SC1200_VIDEO_DOWNSCALE_FACTOR_MASK) >> SC1200_VIDEO_DOWNSCALE_FACTOR_POS) + 1; - - switch(downscale & SC1200_VIDEO_DOWNSCALE_TYPE_MASK) - { - case SC1200_VIDEO_DOWNSCALE_TYPE_A: - *type = VIDEO_DOWNSCALE_KEEP_1_OF; - break; - case SC1200_VIDEO_DOWNSCALE_TYPE_B: - *type = VIDEO_DOWNSCALE_DROP_1_OF; - break; - default: - return GFX_STATUS_ERROR; - break; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_coefficients - * - * This routine returns the current video downscaling coefficients. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4) -#else -void gfx_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4) -#endif -{ - unsigned long coef; - - coef = READ_VID32(SC1200_VIDEO_DOWNSCALER_COEFFICIENTS); - *coef1 = (unsigned short)((coef >> SC1200_VIDEO_DOWNSCALER_COEF1_POS) & SC1200_VIDEO_DOWNSCALER_COEF_MASK); - *coef2 = (unsigned short)((coef >> SC1200_VIDEO_DOWNSCALER_COEF2_POS) & SC1200_VIDEO_DOWNSCALER_COEF_MASK); - *coef3 = (unsigned short)((coef >> SC1200_VIDEO_DOWNSCALER_COEF3_POS) & SC1200_VIDEO_DOWNSCALER_COEF_MASK); - *coef4 = (unsigned short)((coef >> SC1200_VIDEO_DOWNSCALER_COEF4_POS) & SC1200_VIDEO_DOWNSCALER_COEF_MASK); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_enable - * - * This routine returns 1 if video downscaling is currently enabled, - * or 0 if it is currently disabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_video_downscale_enable(int *enable) -#else -void gfx_get_video_downscale_enable(int *enable) -#endif -{ - if (READ_VID32(SC1200_VIDEO_DOWNSCALER_CONTROL) & SC1200_VIDEO_DOWNSCALE_ENABLE) - *enable = 1; - else - *enable = 0; - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_dst_size - * - * This routine returns the size of the displayed video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_dst_size(void) -#else -unsigned long gfx_get_video_dst_size(void) -#endif -{ - unsigned long xsize, ysize; - - xsize = READ_VID32(SC1200_VIDEO_X_POS); - xsize = ((xsize >> 16) & 0x7FF) - (xsize & 0x7FF); - ysize = READ_VID32(SC1200_VIDEO_Y_POS); - ysize = ((ysize >> 16) & 0x7FF) - (ysize & 0x7FF); - return((ysize << 16) | xsize); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_position - * - * This routine returns the position of the video overlay window. The - * return value is (ypos << 16) | xpos. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_position(void) -#else -unsigned long gfx_get_video_position(void) -#endif -{ - unsigned long hadjust, vadjust; - unsigned long xpos, ypos; - - /* READ HARDWARE POSITION */ - - xpos = READ_VID32(SC1200_VIDEO_X_POS) & 0x000007FF; - ypos = READ_VID32(SC1200_VIDEO_Y_POS) & 0x000007FF; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = (unsigned long)gfx_get_htotal() - (unsigned long)gfx_get_hsync_end() - 14l; - vadjust = (unsigned long)gfx_get_vtotal() - (unsigned long)gfx_get_vsync_end() + 1l; - xpos -= hadjust; - ypos -= vadjust; - return((ypos << 16) | (xpos & 0x0000FFFF)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key - * - * This routine returns the current video color key value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_color_key(void) -#else -unsigned long gfx_get_video_color_key(void) -#endif -{ - return(READ_VID32(SC1200_VIDEO_COLOR_KEY)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_mask - * - * This routine returns the current video color mask value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_video_color_key_mask(void) -#else -unsigned long gfx_get_video_color_key_mask(void) -#endif -{ - return(READ_VID32(SC1200_VIDEO_COLOR_MASK)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_src - * - * This routine returns 0 for video data compare, 1 for graphics data. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_color_key_src(void) -#else -int gfx_get_video_color_key_src(void) -#endif -{ - if (READ_VID32(SC1200_DISPLAY_CONFIG) & SC1200_DCFG_VG_CK) return(0); - return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_filter - * - * This routine returns if the filters are currently enabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_filter(void) -#else -int gfx_get_video_filter(void) -#endif -{ - int retval = 0; - if (READ_VID32(SC1200_VIDEO_CONFIG) & SC1200_VCFG_X_FILTER_EN) - retval |= 1; - if (READ_VID32(SC1200_VIDEO_CONFIG) & SC1200_VCFG_Y_FILTER_EN) - retval |= 2; - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_request - * - * This routine returns the horizontal (pixel) and vertical (lines) video - * request values. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_request(short *x, short *y) -#else -int gfx_get_video_request(short *x, short *y) -#endif -{ - int request = 0; - request = (int)(READ_VID32(SC1200_VIDEO_REQUEST)); - *x = (request >> SC1200_VIDEO_X_REQUEST_POS) & SC1200_VIDEO_REQUEST_MASK; - *y = (request >> SC1200_VIDEO_Y_REQUEST_POS) & SC1200_VIDEO_REQUEST_MASK; - - *x -= gfx_get_htotal() - gfx_get_hsync_end() - 2; - *y -= gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_source - * - * This routine returns the current video source. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_source(VideoSourceType *source) -#else -int gfx_get_video_source(VideoSourceType *source) -#endif -{ - switch(READ_VID32(SC1200_VIDEO_DISPLAY_MODE) & SC1200_VIDEO_SOURCE_MASK) - { - case SC1200_VIDEO_SOURCE_GX1: - *source = VIDEO_SOURCE_MEMORY; - break; - case SC1200_VIDEO_SOURCE_DVIP: - *source = VIDEO_SOURCE_DVIP; - break; - default: - return GFX_STATUS_ERROR; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_source - * - * This routine returns the current vbi source. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_vbi_source(VbiSourceType *source) -#else -int gfx_get_vbi_source(VbiSourceType *source) -#endif -{ - switch(READ_VID32(SC1200_VIDEO_DISPLAY_MODE) & SC1200_VBI_SOURCE_MASK) - { - case SC1200_VBI_SOURCE_GX1: - *source = VBI_SOURCE_MEMORY; - break; - case SC1200_VBI_SOURCE_DVIP: - *source = VBI_SOURCE_DVIP; - break; - default: - return GFX_STATUS_ERROR; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_lines - * - * This routine returns the VBI lines which are sent to the TV encoder. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_vbi_lines(int odd) -#else -unsigned long gfx_get_vbi_lines(int odd) -#endif -{ - if (odd) return(READ_VID32(SC1200_VIDEO_ODD_VBI_LINE_ENABLE) & SC1200_VIDEO_VBI_LINE_ENABLE_MASK); - return(READ_VID32(SC1200_VIDEO_EVEN_VBI_LINE_ENABLE) & SC1200_VIDEO_VBI_LINE_ENABLE_MASK); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vbi_total - * - * This routine returns the total number of VBI bytes in the field. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_vbi_total(int odd) -#else -unsigned long gfx_get_vbi_total(int odd) -#endif -{ - if (odd) return(READ_VID32(SC1200_VIDEO_ODD_VBI_TOTAL_COUNT) & SC1200_VIDEO_VBI_TOTAL_COUNT_MASK); - return(READ_VID32(SC1200_VIDEO_EVEN_VBI_TOTAL_COUNT) & SC1200_VIDEO_VBI_TOTAL_COUNT_MASK); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_interlaced() - * - * This routine returns "1" if input video is currently in interlaced mode. - * "0" otherwise. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_interlaced(void) -#else -int gfx_get_video_interlaced(void) -#endif -{ - if (READ_VID32(SC1200_VID_ALPHA_CONTROL) & SC1200_VIDEO_IS_INTERLACED) - return(1); - else - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_color_space_YUV() - * - * This routine returns "1" if video processor color space mode is currently - * YUV. "0" otherwise. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_color_space_YUV(void) -#else -int gfx_get_color_space_YUV(void) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - - /* IS SC1200 VIDEO COLOR SPACE RGB OR CONVERTED TO RGB */ - if ((control & SC1200_VIDEO_INPUT_IS_RGB) || (control & SC1200_CSC_VIDEO_YUV_TO_RGB)) - return(0); - else - return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_get_vertical_scaler_offset() - * - * This routine sets "offset" to the value by which odd frames are shifted, - * if insert is enabled, and to 0 if no shifting occurs. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_vertical_scaler_offset(char *offset) -#else -int gfx_get_vertical_scaler_offset(char *offset) -#endif -{ - unsigned long control; - control = READ_VID32(SC1200_VID_ALPHA_CONTROL); - if (control & SC1200_VERTICAL_SCALER_SHIFT_EN) { - if ((control & SC1200_VERTICAL_SCALER_SHIFT_MASK) == SC1200_VERTICAL_SCALER_SHIFT_INIT) - *offset = 1; - else - return GFX_STATUS_ERROR; /* TODO: find the interpretation of other values */ - } else - *offset = 0; - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_genlock_delay - * - * This routine returns the genlock delay in 27 MHz clocks. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_get_genlock_delay(void) -#else -unsigned long gfx_get_genlock_delay(void) -#endif -{ - return(READ_VID32(SC1200_GENLOCK_DELAY) & SC1200_GENLOCK_DELAY_MASK); -} - -/*--------------------------------------------------------------------------- - * gfx_get_genlock_enable - * - * This routine returns "1" if genlock is currently enabled, "0" otherwise. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_genlock_enable(void) -#else -int gfx_get_genlock_enable(void) -#endif -{ - if (READ_VID32(SC1200_GENLOCK) & - (SC1200_GENLOCK_SINGLE_ENABLE | SC1200_GENLOCK_CONTINUOUS_ENABLE)) - return(1); - else - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_cursor() - * - * This routine configures the video hardware cursor. - * If the "mask"ed bits in the graphics pixel match "key", then either "color1" - * or "color2" will be used for this pixel, according to the value of the bit - * in offset "select_color2". - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2) -#else -int gfx_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2) -#endif -{ - *select_color2 = (unsigned short)(READ_VID32(SC1200_CURSOR_COLOR_KEY) >> SC1200_CURSOR_COLOR_KEY_OFFSET_POS); - *key = READ_VID32(SC1200_CURSOR_COLOR_KEY) & SC1200_COLOR_MASK; - *mask = READ_VID32(SC1200_CURSOR_COLOR_MASK) & SC1200_COLOR_MASK; - *color1 = READ_VID32(SC1200_CURSOR_COLOR_1) & SC1200_COLOR_MASK; - *color2 = (unsigned short)(READ_VID32(SC1200_CURSOR_COLOR_2) & SC1200_COLOR_MASK); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc - * - * This routine returns the hardware CRC value, which is used for automated - * testing. The value is like a checksum, but will change if pixels move - * locations. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long sc1200_read_crc(void) -#else -unsigned long gfx_read_crc(void) -#endif -{ - unsigned long crc = 0xFFFFFFFF; - if (gfx_test_timing_active()) - { - /* WAIT UNTIL ACTIVE DISPLAY */ - - while(!gfx_test_vertical_active()); - - /* RESET CRC DURING ACTIVE DISPLAY */ - - WRITE_VID32(SC1200_VID_CRC, 0); - WRITE_VID32(SC1200_VID_CRC, 1); - - /* WAIT UNTIL NOT ACTIVE, THEN ACTIVE, NOT ACTIVE, THEN ACTIVE */ - - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - crc = READ_VID32(SC1200_VID_CRC) >> 8; - } - return(crc); -} - -/*----------------------------------------------------------------------------- - * gfx_get_macrovision_enable - * - * This routine returns the value "one" if macrovision currently enabled in the - * TV encoder, otherwise it returns the value "zero". - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int sc1200_get_macrovision_enable(void) -#else -int gfx_get_macrovision_enable(void) -#endif -{ - if (READ_VID32(SC1200_TVENC_MV_CONTROL) == SC1200_TVENC_MV_ENABLE) return(1); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_enable - * - * This routine returns 1 if the selected alpha window is currently - * enabled, or 0 if it is currently disabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_alpha_enable(int *enable) -#else -void gfx_get_alpha_enable(int *enable) -#endif -{ - unsigned long value = 0; - *enable = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(SC1200_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 4)); - if (value & SC1200_ACTRL_WIN_ENABLE) *enable = 1; - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_size - * - * This routine returns the size of the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height) -#else -void gfx_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height) -#endif -{ - unsigned long value = 0; - *x = 0; - *y = 0; - *width = 0; - *height = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(SC1200_ALPHA_XPOS_1 + ((unsigned long)gfx_alpha_select << 4)); - *x = (unsigned short) (value & 0x000007FF); - *width = (unsigned short) ((value >> 16) & 0x000007FF) - *x; - value = READ_VID32(SC1200_ALPHA_YPOS_1 + ((unsigned long)gfx_alpha_select << 4)); - *y = (unsigned short) (value & 0x000007FF); - *height = (unsigned short) ((value >> 16) & 0x000007FF) - *y; - } - *x -= gfx_get_htotal() - gfx_get_hsync_end() - 2; - *y -= gfx_get_vtotal() - gfx_get_vsync_end() + 1; - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_value - * - * This routine returns the alpha value and increment/decrement value of - * the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_alpha_value(unsigned char *alpha, char *delta) -#else -void gfx_get_alpha_value(unsigned char *alpha, char *delta) -#endif -{ - unsigned long value = 0; - *alpha = 0; - *delta = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(SC1200_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 4)); - *alpha = (unsigned char) (value & 0x00FF); - *delta = (char) ((value >> 8) & 0x00FF); - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_priority - * - * This routine returns the priority of the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_alpha_priority(int *priority) -#else -void gfx_get_alpha_priority(int *priority) -#endif -{ - unsigned long pos = 0, value = 0; - *priority = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(SC1200_VID_ALPHA_CONTROL); - pos = 16 + (gfx_alpha_select << 1); - *priority = (int) ((value >> pos) & 3); - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_color - * - * This routine returns the color register value for the currently selected - * alpha region. Bit 24 is set if the color register is enabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void sc1200_get_alpha_color(unsigned long *color) -#else -void gfx_get_alpha_color(unsigned long *color) -#endif -{ - *color = 0; - if (gfx_alpha_select <= 2) - { - *color = READ_VID32(SC1200_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 4)); - } - return; -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_5530.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_5530.c deleted file mode 100644 index ddc559530..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_5530.c +++ /dev/null @@ -1,1241 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_5530.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: vid_5530.c $ - * - * This file contains routines to control the CS5530 video overlay hardware. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*---------------------------------------------------------------------------- - * CS5530 PLL TABLE - *---------------------------------------------------------------------------- - */ -typedef struct tagCS5530PLLENTRY -{ - long frequency; /* 16.16 fixed point frequency */ - unsigned long pll_value; /* associated register value */ -} CS5530PLLENTRY; - -CS5530PLLENTRY CS5530_PLLtable[] = { - { 0x00192CCC, 0x31C45801, }, /* 25.1750 */ - { 0x001C526E, 0x20E36802, }, /* 28.3220 */ - { 0x001F8000, 0x33915801, }, /* 31.5000 */ - { 0x00240000, 0x31EC4801, }, /* 36.0000 */ - { 0x00258000, 0x21E22801, }, /* 37.5000 */ - { 0x00280000, 0x33088801, }, /* 40.0000 */ - { 0x002CE666, 0x33E22801, }, /* 44.9000 */ - { 0x00318000, 0x336C4801, }, /* 49.5000 */ - { 0x00320000, 0x23088801, }, /* 50.0000 */ - { 0x00325999, 0x23088801, }, /* 50.3500 */ - { 0x00360000, 0x3708A801, }, /* 54.0000 */ - { 0x00384000, 0x23E36802, }, /* 56.2500 */ - { 0x0038643F, 0x23E36802, }, /* 56.3916 */ - { 0x0038A4DD, 0x23E36802, }, /* 56.6444 */ - { 0x003B0000, 0x37C45801, }, /* 59.0000 */ - { 0x003F0000, 0x23EC4801, }, /* 63.0000 */ - { 0x00410000, 0x37911801, }, /* 65.0000 */ - { 0x00438000, 0x37963803, }, /* 67.5000 */ - { 0x0046CCCC, 0x37058803, }, /* 70.8000 */ - { 0x00480000, 0x3710C805, }, /* 72.0000 */ - { 0x004B0000, 0x37E22801, }, /* 75.0000 */ - { 0x004EC000, 0x27915801, }, /* 78.7500 */ - { 0x00500000, 0x37D8D802, }, /* 80.0000 */ - { 0x0059CCCC, 0x27588802, }, /* 89.8000 */ - { 0x005E8000, 0x27EC4802, }, /* 94.5000 */ - { 0x00630000, 0x27AC6803, }, /* 99.0000 */ - { 0x00640000, 0x27088801, }, /* 100.0000 */ - { 0x006C0000, 0x2710C805, }, /* 108.0000 */ - { 0x00708000, 0x27E36802, }, /* 112.5000 */ - { 0x00820000, 0x27C58803, }, /* 130.0000 */ - { 0x00870000, 0x27316803, }, /* 135.0000 */ - { 0x009D8000, 0x2F915801, }, /* 157.5000 */ - { 0x00A20000, 0x2F08A801, }, /* 162.0000 */ - { 0x00AF0000, 0x2FB11802, }, /* 175.0000 */ - { 0x00BD0000, 0x2FEC4802, }, /* 189.0000 */ - { 0x00CA0000, 0x2F963803, }, /* 202.0000 */ - { 0x00E80000, 0x2FB1B802, }, /* 232.0000 */ -}; - -#define NUM_CS5530_FREQUENCIES sizeof(CS5530_PLLtable)/sizeof(CS5530PLLENTRY) - -/*--------------------------------------------------------------------------- - * gfx_set_crt_enable - * - * This routine enables or disables the CRT output from the video processor. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_crt_enable(int enable) -#else -int gfx_set_crt_enable(int enable) -#endif -{ - unsigned long config; - config = READ_VID32(CS5530_DISPLAY_CONFIG); - - switch (enable) - { - case CRT_DISABLE: /* Disable everything */ - - WRITE_VID32(CS5530_DISPLAY_CONFIG, config & ~(CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN - | CS5530_DCFG_VSYNC_EN | CS5530_DCFG_DAC_BL_EN - | CS5530_DCFG_DAC_PWDNX)); - break; - - case CRT_ENABLE: /* Enable CRT display, including display logic */ - - WRITE_VID32(CS5530_DISPLAY_CONFIG, config | CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN - | CS5530_DCFG_VSYNC_EN | CS5530_DCFG_DAC_BL_EN - | CS5530_DCFG_DAC_PWDNX); - break; - - case CRT_STANDBY: /* HSync:Off VSync:On */ - - WRITE_VID32(CS5530_DISPLAY_CONFIG, (config & ~(CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN - | CS5530_DCFG_DAC_BL_EN | CS5530_DCFG_DAC_PWDNX)) - | CS5530_DCFG_VSYNC_EN ); - break; - - case CRT_SUSPEND: /* HSync:On VSync:Off */ - - WRITE_VID32(CS5530_DISPLAY_CONFIG, (config & ~(CS5530_DCFG_DIS_EN | CS5530_DCFG_VSYNC_EN - | CS5530_DCFG_DAC_BL_EN | CS5530_DCFG_DAC_PWDNX)) - | CS5530_DCFG_HSYNC_EN ); - break; - - default: - return (GFX_STATUS_BAD_PARAMETER); - } - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_reset_video (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine is used to disable all components of video overlay before - * performing a mode switch. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void cs5530_reset_video(void) -#else -void gfx_reset_video(void) -#endif -{ - gfx_set_video_enable(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_display_control (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine configures the display output. - * - * "sync_polarities" is used to set the polarities of the sync pulses according - * to the following mask: - * - * Bit 0: If set to 1, negative horizontal polarity is programmed, - * otherwise positive horizontal polarity is programmed. - * Bit 1: If set to 1, negative vertical polarity is programmed, - * otherwise positive vertical polarity is programmed. - * - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_display_control(int sync_polarities) -#else -int gfx_set_display_control(int sync_polarities) -#endif -{ - unsigned long dcfg; - - /* ENABLE DISPLAY OUTPUT FROM CX5530 */ - - dcfg = READ_VID32(CS5530_DISPLAY_CONFIG); - - /* CLEAR RELEVANT FIELDS */ - - dcfg &= ~(CS5530_DCFG_CRT_SYNC_SKW_MASK | CS5530_DCFG_PWR_SEQ_DLY_MASK | - CS5530_DCFG_CRT_HSYNC_POL | CS5530_DCFG_CRT_VSYNC_POL | - CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN); - - /* INITIALIZATION */ - - dcfg |= (CS5530_DCFG_CRT_SYNC_SKW_INIT | - CS5530_DCFG_PWR_SEQ_DLY_INIT | - CS5530_DCFG_GV_PAL_BYP); - - if (PanelEnable) - { - dcfg |= CS5530_DCFG_FP_PWR_EN; - dcfg |= CS5530_DCFG_FP_DATA_EN; - } - - /* SET APPROPRIATE SYNC POLARITIES */ - - if (sync_polarities & 1) - dcfg |= CS5530_DCFG_CRT_HSYNC_POL; - if (sync_polarities & 2) - dcfg |= CS5530_DCFG_CRT_VSYNC_POL; - - WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg); - return (0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_clock_frequency - * - * This routine sets the clock frequency, specified as a 16.16 fixed point - * value (0x00318000 = 49.5 MHz). It will set the closest frequency found - * in the lookup table. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void cs5530_set_clock_frequency(unsigned long frequency) -#else -void gfx_set_clock_frequency(unsigned long frequency) -#endif -{ - int index; - unsigned long value; - long min, diff; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - value = CS5530_PLLtable[0].pll_value; - min = (long) CS5530_PLLtable[0].frequency - frequency; - if (min < 0L) min = -min; - for (index = 1; index < NUM_CS5530_FREQUENCIES; index++) - { - diff = (long) CS5530_PLLtable[index].frequency - frequency; - if (diff < 0L) diff = -diff; - if (diff < min) - { - min = diff; - value = CS5530_PLLtable[index].pll_value; - } - } - - /* SET THE DOT CLOCK REGISTER */ - - WRITE_VID32(CS5530_DOT_CLK_CONFIG, value); - WRITE_VID32(CS5530_DOT_CLK_CONFIG, value | 0x80000100); /* set reset/bypass */ - gfx_delay_milliseconds(1); /* wait for PLL to settle */ - WRITE_VID32(CS5530_DOT_CLK_CONFIG, value & 0x7FFFFFFF); /* clear reset */ - WRITE_VID32(CS5530_DOT_CLK_CONFIG, value & 0x7FFFFEFF); /* clear bypass */ - return; -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_enable - * - * This routine enables or disables the video overlay functionality. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_enable(int enable) -#else -int gfx_set_video_enable(int enable) -#endif -{ - unsigned long vcfg; - - /* WAIT FOR VERTICAL BLANK TO START */ - /* Otherwise a glitch can be observed. */ - - if (gfx_test_timing_active()) - { - if (!gfx_test_vertical_active()) - { - while(!gfx_test_vertical_active()); - } - while(gfx_test_vertical_active()); - } - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - if (enable) - { - /* ENABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(1); - - /* SET CS5530 BUS CONTROL PARAMETERS */ - /* Currently always high speed, 8-bit interface. */ - - vcfg |= CS5530_VCFG_HIGH_SPD_INT; - vcfg &= ~(CS5530_VCFG_EARLY_VID_RDY | CS5530_VCFG_16_BIT_EN); - - /* ENABLE CS5530 VIDEO OVERLAY */ - - vcfg |= CS5530_VCFG_VID_EN; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - } - else - { - /* DISABLE CS5530 VIDEO OVERLAY */ - - vcfg &= ~CS5530_VCFG_VID_EN; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - - /* DISABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(0); - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_format - * - * Currently only sets 4:2:0 format, Y1 V Y0 U. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_format(unsigned long format) -#else -int gfx_set_video_format(unsigned long format) -#endif -{ - unsigned long vcfg = 0; - - /* SET THE CS5530 VIDEO INPUT FORMAT */ - - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - vcfg &= ~(CS5530_VCFG_VID_INP_FORMAT | CS5530_VCFG_4_2_0_MODE); - vcfg &= ~(CS5530_VCFG_CSC_BYPASS); - vcfg &= ~(CS5530_VCFG_GV_SEL); - - if (format < 4) - vcfg |= (format << 2); - else - { - if (format == VIDEO_FORMAT_Y0Y1Y2Y3) - { - vcfg |= CS5530_VCFG_4_2_0_MODE; - vcfg |= 1 << 2; - } - if (format == VIDEO_FORMAT_RGB) - { - vcfg |= CS5530_VCFG_CSC_BYPASS; - vcfg |= CS5530_VCFG_GV_SEL; - } - } - - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_size - * - * This routine specifies the size of the source data. It is used only - * to determine how much data to transfer per frame, and is not used to - * calculate the scaling value (that is handled by a separate routine). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_size(unsigned short width, unsigned short height) -#else -int gfx_set_video_size(unsigned short width, unsigned short height) -#endif -{ - unsigned long size, vcfg; - - /* SET THE CS5530 VIDEO LINE SIZE */ - - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - vcfg &= ~(CS5530_VCFG_LINE_SIZE_LOWER_MASK | CS5530_VCFG_LINE_SIZE_UPPER); - size = (width >> 1); - vcfg |= (size & 0x00FF) << 8; - if (size & 0x0100) vcfg |= CS5530_VCFG_LINE_SIZE_UPPER; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - - /* SET TOTAL VIDEO BUFFER SIZE IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_size(width, height); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_offset - * - * This routine sets the starting offset for the video buffer when only - * one offset needs to be specified. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_offset(unsigned long offset) -#else -int gfx_set_video_offset(unsigned long offset) -#endif -{ - /* SAVE VALUE FOR FUTURE CLIPPING OF THE TOP OF THE VIDEO WINDOW */ - - gfx_vid_offset = offset; - - /* SET VIDEO BUFFER OFFSET IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_offset(offset); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_scale - * - * This routine sets the scale factor for the video overlay window. The - * size of the source and destination regions are specified in pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#else -int gfx_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#endif -{ - unsigned long xscale, yscale; - - /* SAVE PARAMETERS */ - /* These are needed for clipping the video window later. */ - - gfx_vid_srcw = srcw; - gfx_vid_srch = srch; - gfx_vid_dstw = dstw; - gfx_vid_dsth = dsth; - - /* CALCULATE CS5530 SCALE FACTORS */ - /* No downscaling in CS5530 so force to 1x if attempted. */ - - if (dstw <= srcw) xscale = 0x1FFF; - else if (dstw == 1 || srcw == 1) return GFX_STATUS_BAD_PARAMETER; - else xscale = (0x2000l * (srcw - 1l)) / (dstw - 1l); - if (dsth <= srch) yscale = 0x1FFF; - else if (dsth == 1 || srch == 1) return GFX_STATUS_BAD_PARAMETER; - else yscale = (0x2000l * (srch - 1l)) / (dsth - 1l); - WRITE_VID32(CS5530_VIDEO_SCALE, (yscale << 16) | xscale); - - /* CALL ROUTINE TO UPDATE WINDOW POSITION */ - /* This is required because the scale values effect the number of */ - /* source data pixels that need to be clipped, as well as the */ - /* amount of data that needs to be transferred. */ - - gfx_set_video_window(gfx_vid_xpos, gfx_vid_ypos, gfx_vid_width, - gfx_vid_height); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_window - * - * This routine sets the position and size of the video overlay window. The - * position is specified in screen relative coordinates, and may be negative. - * The size of destination region is specified in pixels. The line size - * indicates the number of bytes of source data per scanline. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_window(short x, short y, unsigned short w, - unsigned short h) -#else -int gfx_set_video_window(short x, short y, unsigned short w, - unsigned short h) -#endif -{ - unsigned long vcfg = 0; - unsigned long hadjust, vadjust; - unsigned long initread; - unsigned long xstart, ystart, xend, yend; - unsigned long offset, line_size; - - /* SAVE PARAMETERS */ - /* These are needed to call this routine if the scale value changes. */ - - gfx_vid_xpos = x; - gfx_vid_ypos = y; - gfx_vid_width = w; - gfx_vid_height = h; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 13l; - vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l; - - if (x > 0) - { - /* NO CLIPPING ON LEFT */ - - xstart = x + hadjust; - initread = 0; - } - else - { - /* CLIPPING ON LEFT */ - /* Adjust initial read for scale, checking for divide by zero */ - - xstart = hadjust; - if (gfx_vid_dstw) - initread = ((-x) * gfx_vid_srcw) / gfx_vid_dstw; - else initread = 0; - } - - /* CLIPPING ON RIGHT */ - - xend = x + w; - if (xend > gfx_get_hactive()) xend = gfx_get_hactive(); - xend += hadjust; - - /* CLIPPING ON TOP */ - - offset = gfx_vid_offset; - if (y >= 0) - { - ystart = y + vadjust; - } - else - { - ystart = vadjust; - line_size = (READ_VID32(CS5530_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_LINE_SIZE_UPPER) - line_size += 512l; - if (gfx_vid_dsth) - offset = gfx_vid_offset + (line_size << 1) * - (((-y) * gfx_vid_srch) / gfx_vid_dsth); - } - - /* CLIPPING ON BOTTOM */ - - yend = y + h; - if (yend >= gfx_get_vactive()) yend = gfx_get_vactive(); - yend += vadjust; - - /* SET VIDEO BUFFER OFFSET IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_offset(offset); - - /* DISABLE REGISTER UPDATES */ - - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - vcfg &= ~CS5530_VCFG_VID_REG_UPDATE; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - - /* SET VIDEO POSITION */ - - WRITE_VID32(CS5530_VIDEO_X_POS, (xend << 16) | xstart); - WRITE_VID32(CS5530_VIDEO_Y_POS, (yend << 16) | ystart); - - /* SET INITIAL READ ADDRESS AND ENABLE REGISTER UPDATES */ - - vcfg &= ~CS5530_VCFG_INIT_READ_MASK; - vcfg |= (initread << 15) & CS5530_VCFG_INIT_READ_MASK; - vcfg |= CS5530_VCFG_VID_REG_UPDATE; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_color_key - * - * This routine specifies the color key value and mask for the video overlay - * hardware. To disable color key, the color and mask should both be set to - * zero. The hardware uses the color key in the following equation: - * - * ((source data) & (color key mask)) == ((color key) & (color key mask)) - * - * The source data can be either graphics data or video data. The bluescreen - * parameter is set to have the hardware compare video data and clear to - * comapare graphics data. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#else -int gfx_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#endif -{ - unsigned long dcfg = 0; - - /* SET CS5530 COLOR KEY VALUE */ - - WRITE_VID32(CS5530_VIDEO_COLOR_KEY, key); - WRITE_VID32(CS5530_VIDEO_COLOR_MASK, mask); - - /* SELECT GRAPHICS OR VIDEO DATA TO COMPARE TO THE COLOR KEY */ - - dcfg = READ_VID32(CS5530_DISPLAY_CONFIG); - if (graphics & 0x01) dcfg &= ~CS5530_DCFG_VG_CK; - else dcfg |= CS5530_DCFG_VG_CK; - WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_filter - * - * This routine enables or disables the video overlay filters. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_filter(int xfilter, int yfilter) -#else -int gfx_set_video_filter(int xfilter, int yfilter) -#endif -{ - unsigned long vcfg = 0; - - /* ENABLE OR DISABLE CS5530 VIDEO OVERLAY FILTERS */ - - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - vcfg &= ~(CS5530_VCFG_X_FILTER_EN | CS5530_VCFG_Y_FILTER_EN); - if (xfilter) vcfg |= CS5530_VCFG_X_FILTER_EN; - if (yfilter) vcfg |= CS5530_VCFG_Y_FILTER_EN; - WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette - * - * This routine loads the video hardware palette. If a NULL pointer is - * specified, the palette is bypassed (for CS5530, this means loading the - * palette with identity values). - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_palette(unsigned long *palette) -#else -int gfx_set_video_palette(unsigned long *palette) -#endif -{ - unsigned long i, entry; - - /* LOAD CS5530 VIDEO PALETTE */ - - WRITE_VID32(CS5530_PALETTE_ADDRESS, 0); - for (i = 0; i < 256; i++) - { - if (palette) entry = palette[i]; - else entry = i | (i << 8) | (i << 16); - WRITE_VID32(CS5530_PALETTE_DATA, entry); - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette_entry - * - * This routine loads a single entry of the video hardware palette. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_set_video_palette_entry(unsigned long index, unsigned long palette) -#else -int gfx_set_video_palette_entry(unsigned long index, unsigned long palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* SET A SINGLE ENTRY */ - - WRITE_VID32(CS5530_PALETTE_ADDRESS, index); - WRITE_VID32(CS5530_PALETTE_DATA, palette); - - return(0); -} - -#define CX55xx_VIDEO_PCI_44 0x80009444 - -/*--------------------------------------------------------------------------- - * gfx_disable_softvga - * - * Disables SoftVga. This function is only valid with VSA2, Returns 1 if - * SoftVga can be disabled; 0 if not. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_disable_softvga(void) -#else -int gfx_disable_softvga(void) -#endif -{ - unsigned long reg_val; - - /* get the current value */ - reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44); - /* setting video PCI register 44 bit 0 to 1 disables SoftVga */ - reg_val |= 0x1; - gfx_pci_config_write(CX55xx_VIDEO_PCI_44, reg_val); - - /* see if we set the bit and return the appropriate value */ - reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44); - if((reg_val & 0x1) == 0x1) - return(1); - else - return(0); - -} - -/*--------------------------------------------------------------------------- - * gfx_enable_softvga - * - * Enables SoftVga. This function is only valid with VSA2, Returns 1 if - * SoftVga can be enbled; 0 if not. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_enable_softvga(void) -#else -int gfx_enable_softvga(void) -#endif -{ - unsigned long reg_val; - - /* get the current value */ - reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44); - /* clearing video PCI register 44 bit 0 enables SoftVga */ - gfx_pci_config_write(CX55xx_VIDEO_PCI_44, reg_val & 0xfffffffe); - - /* see if we cleared the bit and return the appropriate value */ - reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44); - if((reg_val & 0x1) == 0) - return(1); - else - return(0); - -} - -/*--------------------------------------------------------------------------- - * gfx_get_clock_frequency - * - * This routine returns the current clock frequency in 16.16 format. - * It reads the current register value and finds the match in the table. - * If no match is found, this routine returns 0. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_clock_frequency(void) -#else -unsigned long gfx_get_clock_frequency(void) -#endif -{ - int index; - unsigned long value, mask; - mask = 0x7FFFFEDC; - value = READ_VID32(CS5530_DOT_CLK_CONFIG) & mask; - for (index = 0; index < NUM_CS5530_FREQUENCIES; index++) - { - if ((CS5530_PLLtable[index].pll_value & mask) == value) - return(CS5530_PLLtable[index].frequency); - } - return(0); -} - - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*--------------------------------------------------------------------------- - * gfx_get_vsa2_softvga_enable - * - * This function returns the enable status of SoftVGA. It is valid - * only if VSAII is present. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_vsa2_softvga_enable(void) -#else -int gfx_get_vsa2_softvga_enable(void) -#endif -{ - unsigned long reg_val; - - reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44); - if((reg_val & 0x1) == 0) - return(1); - else - return(0); - -} - -/*--------------------------------------------------------------------------- - * gfx_get_sync_polarities - * - * This routine returns the polarities of the sync pulses: - * Bit 0: Set if negative horizontal polarity. - * Bit 1: Set if negative vertical polarity. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_sync_polarities(void) -#else -int gfx_get_sync_polarities(void) -#endif -{ - int polarities = 0; - if (READ_VID32(CS5530_DISPLAY_CONFIG) & 0x00000100) polarities |= 1; - if (READ_VID32(CS5530_DISPLAY_CONFIG) & 0x00000200) polarities |= 2; - return(polarities); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_palette_entry - * - * This routine returns a single palette entry. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_video_palette_entry(unsigned long index, unsigned long *palette) -#else -int gfx_get_video_palette_entry(unsigned long index, unsigned long *palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* READ A SINGLE ENTRY */ - - WRITE_VID32 (CS5530_PALETTE_ADDRESS, index); - *palette = READ_VID32 (CS5530_PALETTE_DATA); - - return (GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_enable - * - * This routine returns the value "one" if video overlay is currently enabled, - * otherwise it returns the value "zero". - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_video_enable(void) -#else -int gfx_get_video_enable(void) -#endif -{ - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_VID_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_format - * - * This routine returns the current video overlay format. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_video_format(void) -#else -int gfx_get_video_format(void) -#endif -{ - unsigned long vcfg; - vcfg = READ_VID32(CS5530_VIDEO_CONFIG); - if (vcfg & CS5530_VCFG_CSC_BYPASS) return(VIDEO_FORMAT_RGB); - if (vcfg & CS5530_VCFG_4_2_0_MODE) return(VIDEO_FORMAT_Y0Y1Y2Y3); - - return ((int)((vcfg >> 2) & 3)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_src_size - * - * This routine returns the size of the source video overlay buffer. The - * return value is (height << 16) | width. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_src_size(void) -#else -unsigned long gfx_get_video_src_size(void) -#endif -{ - unsigned long width = 0, height = 0; - - /* DETERMINE SOURCE WIDTH FROM THE CS5530 VIDEO LINE SIZE */ - - width = (READ_VID32(CS5530_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_LINE_SIZE_UPPER) - width += 512l; - - if (width) - { - /* DETERMINE HEIGHT BY DIVIDING TOTAL SIZE BY WIDTH */ - /* Get total size from display controller - abtracted. */ - - height = gfx_get_display_video_size() / (width << 1); - } - return((height << 16) | width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_line_size - * - * This routine returns the line size of the source video overlay buffer, in - * pixels. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_line_size(void) -#else -unsigned long gfx_get_video_line_size(void) -#endif -{ - unsigned long width = 0; - - /* DETERMINE SOURCE WIDTH FROM THE CS5530 VIDEO LINE SIZE */ - - width = (READ_VID32(CS5530_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_LINE_SIZE_UPPER) - width += 512l; - return(width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_xclip - * - * This routine returns the number of bytes clipped on the left side of a - * video overlay line (skipped at beginning). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_xclip(void) -#else -unsigned long gfx_get_video_xclip(void) -#endif -{ - unsigned long clip = 0; - - /* DETERMINE SOURCE WIDTH FROM THE CS5530 VIDEO LINE SIZE */ - - clip = (READ_VID32(CS5530_VIDEO_CONFIG) >> 14) & 0x000007FC; - return(clip); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_offset - * - * This routine returns the current offset for the video overlay buffer. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_offset(void) -#else -unsigned long gfx_get_video_offset(void) -#endif -{ - return(gfx_get_display_video_offset()); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_scale - * - * This routine returns the scale factor for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_scale(void) -#else -unsigned long gfx_get_video_scale(void) -#endif -{ - return(READ_VID32(CS5530_VIDEO_SCALE)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_dst_size - * - * This routine returns the size of the displayed video overlay window. - * NOTE: This is the displayed window size, which may be different from - * the real window size if clipped. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_dst_size(void) -#else -unsigned long gfx_get_video_dst_size(void) -#endif -{ - unsigned long xsize, ysize; - - xsize = READ_VID32(CS5530_VIDEO_X_POS); - xsize = ((xsize >> 16) & 0x7FF) - (xsize & 0x07FF); - ysize = READ_VID32(CS5530_VIDEO_Y_POS); - ysize = ((ysize >> 16) & 0x7FF) - (ysize & 0x07FF); - return((ysize << 16) | xsize); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_position - * - * This routine returns the position of the video overlay window. The - * return value is (ypos << 16) | xpos. - * NOTE: This is the displayed window position, which may be different from - * the real window position if clipped. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_position(void) -#else -unsigned long gfx_get_video_position(void) -#endif -{ - unsigned long hadjust, vadjust; - unsigned long xpos, ypos; - - /* READ HARDWARE POSITION */ - - xpos = READ_VID32(CS5530_VIDEO_X_POS) & 0x000007FF; - ypos = READ_VID32(CS5530_VIDEO_Y_POS) & 0x000007FF; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 13l; - vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l; - xpos -= hadjust; - ypos -= vadjust; - return((ypos << 16) | (xpos & 0x0000FFFF)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key - * - * This routine returns the current video color key value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_color_key(void) -#else -unsigned long gfx_get_video_color_key(void) -#endif -{ - return(READ_VID32(CS5530_VIDEO_COLOR_KEY)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_mask - * - * This routine returns the current video color mask value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_get_video_color_key_mask(void) -#else -unsigned long gfx_get_video_color_key_mask(void) -#endif -{ - return(READ_VID32(CS5530_VIDEO_COLOR_MASK)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_src - * - * This routine returns 0 for video data compare, 1 for graphics data. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_video_color_key_src(void) -#else -int gfx_get_video_color_key_src(void) -#endif -{ - if (READ_VID32(CS5530_DISPLAY_CONFIG) & CS5530_DCFG_VG_CK) return(0); - return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_filter - * - * This routine returns if the filters are currently enabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int cs5530_get_video_filter(void) -#else -int gfx_get_video_filter(void) -#endif -{ - int retval = 0; - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_X_FILTER_EN) - retval |= 1; - if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_Y_FILTER_EN) - retval |= 2; - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc - * - * This routine returns the hardware CRC value, which is used for automated - * testing. The value is like a checksum, but will change if pixels move - * locations. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long cs5530_read_crc(void) -#else -unsigned long gfx_read_crc(void) -#endif -{ - unsigned long crc = 0xFFFFFFFF; - if (gfx_test_timing_active()) - { - /* WAIT UNTIL ACTIVE DISPLAY */ - - while(!gfx_test_vertical_active()); - - /* RESET CRC DURING ACTIVE DISPLAY */ - - WRITE_VID32(CS5530_CRCSIG_TFT_TV, 0); - WRITE_VID32(CS5530_CRCSIG_TFT_TV, 1); - - /* WAIT UNTIL NOT ACTIVE, THEN ACTIVE, NOT ACTIVE, THEN ACTIVE */ - - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - crc = READ_VID32(CS5530_CRCSIG_TFT_TV) >> 8; - } - return(crc); -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_rdcl.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_rdcl.c deleted file mode 100644 index c2353e832..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_rdcl.c +++ /dev/null @@ -1,2580 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vid_rdcl.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: vid_rdcl.c $ - * - * This file contains routines to control the Redcloud display filter video overlay hardware. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* REDCLOUD PLL TABLE */ - -typedef struct RCDFPLL -{ - long frequency; /* 16.16 fixed point frequency */ - unsigned long post_div3; /* MCP Frequency dividers and multipliers */ - unsigned long pre_mul2; - unsigned long pre_div2; - unsigned long pll_value; /* MCP DotPLL Register Upper 32(0x0015) */ -} RCDFPLLENTRY; - -RCDFPLLENTRY RCDF_PLLtable48MHz[] = { - { 0x00192CCC, 0, 0, 0, 0x00000037 }, /* 25.1750 */ - { 0x001C526E, 1, 1, 0, 0x00000B1A }, /* 28.3220 */ - { 0x001F8000, 1, 0, 0, 0x000002D2 }, /* 31.5000 */ - { 0x00240000, 1, 1, 0, 0x00000FE2 }, /* 36.0000 */ - { 0x00258000, 1, 0, 0, 0x0000057A }, /* 37.5000 */ - { 0x00280000, 1, 0, 0, 0x0000030A }, /* 40.0000 */ - { 0x002CE666, 0, 0, 0, 0x00000063 }, /* 44.9000 */ - { 0x00318000, 0, 0, 0, 0x0000054B }, /* 49.5000 */ - { 0x00320000, 0, 0, 0, 0x0000026E }, /* 50.0000 */ - { 0x00325999, 0, 1, 0, 0x00000037 }, /* 50.3500 */ - { 0x00360000, 1, 1, 0, 0x00000B0D }, /* 54.0000 */ - { 0x00384000, 0, 0, 0, 0x00000577 }, /* 56.2500 */ - { 0x0038643F, 0, 0, 0, 0x000007F7 }, /* 56.3916 */ - { 0x0038A4DD, 0, 0, 0, 0x0000057B }, /* 56.6444 */ - { 0x003B0000, 0, 1, 0, 0x00000707 }, /* 59.0000 */ - { 0x003F0000, 1, 1, 0, 0x00000B39 }, /* 63.0000 */ - { 0x00410000, 1, 1, 0, 0x00000B45 }, /* 65.0000 */ - { 0x00438000, 1, 1, 0, 0x00000FC1 }, /* 67.5000 */ - { 0x0046CCCC, 1, 0, 0, 0x00000561 }, /* 70.8000 */ - { 0x00480000, 1, 0, 0, 0x000007E1 }, /* 72.0000 */ - { 0x004B0000, 0, 0, 0, 0x00000052 }, /* 75.0000 */ - { 0x004EC000, 0, 0, 0, 0x00000056 }, /* 78.7500 */ - { 0x00500000, 1, 1, 0, 0x00000709 }, /* 80.0000 */ - { 0x0059CCCC, 0, 1, 0, 0x00000262 }, /* 89.8000 */ - { 0x005E8000, 0, 0, 0, 0x000002D2 }, /* 94.5000 */ - { 0x00630000, 0, 1, 0, 0x00000B4A }, /* 99.0000 */ - { 0x00640000, 0, 1, 0, 0x00000036 }, /* 100.0000 */ - { 0x006C0000, 0, 0, 0, 0x000007E2 }, /* 108.0000 */ - { 0x00708000, 0, 0, 0, 0x000007F6 }, /* 112.5000 */ - { 0x00820000, 1, 1, 0, 0x00000FB0 }, /* 130.0000 */ - { 0x00870000, 1, 1, 0, 0x00000B50 }, /* 135.0000 */ - { 0x009D8000, 0, 0, 0, 0x00000055 }, /* 157.5000 */ - { 0x00A20000, 0, 0, 0, 0x000009C1 }, /* 162.0000 */ - { 0x00AF8000, 0, 0, 0, 0x000002C1 }, /* 175.5000 */ - { 0x00BD0000, 0, 0, 0, 0x000002D1 }, /* 189.0000 */ - { 0x00CA8000, 0, 0, 0, 0x00000551 }, /* 202.5000 */ - { 0x00E58000, 0, 0, 0, 0x0000057D }, /* 229.5000 */ -}; - -RCDFPLLENTRY RCDF_PLLtable14MHz[] = { - { 0x00192CCC, 0, 0, 0, 0x00000037 }, /* 25.1750 */ - { 0x001C526E, 0, 0, 0, 0x00000B7B }, /* 28.3220 */ - { 0x001F8000, 0, 0, 0, 0x000004D3 }, /* 31.5000 */ - { 0x00240000, 0, 0, 0, 0x00000BE3 }, /* 36.0000 */ - { 0x00258000, 0, 0, 0, 0x0000074F }, /* 37.5000 */ - { 0x00280000, 0, 0, 0, 0x0000050B }, /* 40.0000 */ - { 0x002CE666, 0, 0, 0, 0x00000063 }, /* 44.9000 */ - { 0x00318000, 0, 0, 0, 0x0000054B }, /* 49.5000 */ - { 0x00320000, 0, 0, 0, 0x0000026E }, /* 50.0000 */ - { 0x00325999, 0, 0, 0, 0x000007C3 }, /* 50.3500 */ - { 0x00360000, 0, 0, 0, 0x000007E3 }, /* 54.0000 */ - { 0x00384000, 0, 0, 0, 0x00000577 }, /* 56.2500 */ - { 0x0038643F, 0, 0, 0, 0x000002FB }, /* 56.3916 */ - { 0x0038A4DD, 0, 0, 0, 0x0000057B }, /* 56.6444 */ - { 0x003B0000, 0, 0, 0, 0x0000058B }, /* 59.0000 */ - { 0x003F0000, 0, 0, 0, 0x0000095E }, /* 63.0000 */ - { 0x00410000, 0, 0, 0, 0x0000096A }, /* 65.0000 */ - { 0x00438000, 0, 0, 0, 0x00000BC2 }, /* 67.5000 */ - { 0x0046CCCC, 0, 0, 0, 0x0000098A }, /* 70.8000 */ - { 0x00480000, 0, 0, 0, 0x00000BE2 }, /* 72.0000 */ - { 0x004B0000, 0, 0, 0, 0x00000052 }, /* 75.0000 */ - { 0x004EC000, 0, 0, 0, 0x00000056 }, /* 78.7500 */ - { 0x00500000, 0, 0, 0, 0x0000050A }, /* 80.0000 */ - { 0x0059CCCC, 0, 0, 0, 0x0000078E }, /* 89.8000 */ - { 0x005E8000, 0, 0, 0, 0x000002D2 }, /* 94.5000 */ - { 0x00630000, 0, 0, 0, 0x000011F6 }, /* 99.0000 */ - { 0x00640000, 0, 0, 0, 0x0000054E }, /* 100.0000 */ - { 0x006C0000, 0, 0, 0, 0x000007E2 }, /* 108.0000 */ - { 0x00708000, 0, 0, 0, 0x000002FA }, /* 112.5000 */ - { 0x00820000, 0, 0, 0, 0x00000BB1 }, /* 130.0000 */ - { 0x00870000, 0, 0, 0, 0x00000975 }, /* 135.0000 */ - { 0x009D8000, 0, 0, 0, 0x00000055 }, /* 157.5000 */ - { 0x00A20000, 0, 0, 0, 0x000009C1 }, /* 162.0000 */ - { 0x00AF8000, 0, 0, 0, 0x000002C1 }, /* 175.5000 */ - { 0x00BD0000, 0, 0, 0, 0x00000539 }, /* 189.0000 */ - { 0x00CA8000, 0, 0, 0, 0x00000551 }, /* 202.5000 */ - { 0x00E58000, 0, 0, 0, 0x0000057D }, /* 229.5000 */ -}; - -#define NUM_RCDF_FREQUENCIES sizeof(RCDF_PLLtable14MHz)/sizeof(RCDFPLLENTRY) - - -/*--------------------------------------------------------------------------- - * gfx_reset_video (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine is used to disable all components of video overlay before - * performing a mode switch. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_reset_video(void) -#else -void gfx_reset_video(void) -#endif -{ - gfx_set_video_enable(0); - gfx_select_alpha_region(1); - gfx_set_alpha_enable(0); - gfx_select_alpha_region(2); - gfx_set_alpha_enable(0); - - /* SET REGION 0 AFTER RESET */ - - gfx_select_alpha_region(0); - gfx_set_alpha_enable(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_display_control (PRIVATE ROUTINE: NOT PART OF DURANGO API) - * - * This routine configures the display output. - * - * "sync_polarities" is used to set the polarities of the sync pulses according - * to the following mask: - * - * Bit 0: If set to 1, negative horizontal polarity is programmed, - * otherwise positive horizontal polarity is programmed. - * Bit 1: If set to 1, negative vertical polarity is programmed, - * otherwise positive vertical polarity is programmed. - * - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_display_control(int sync_polarities) -#else -int gfx_set_display_control(int sync_polarities) -#endif -{ - unsigned long power; - unsigned long dcfg; - - /* CONFIGURE DISPLAY OUTPUT FROM VIDEO PROCESSOR */ - - dcfg = READ_VID32(RCDF_DISPLAY_CONFIG); - dcfg &= ~(RCDF_DCFG_CRT_SYNC_SKW_MASK | RCDF_DCFG_PWR_SEQ_DLY_MASK | - RCDF_DCFG_CRT_HSYNC_POL | RCDF_DCFG_CRT_VSYNC_POL | - RCDF_DCFG_FP_PWR_EN | RCDF_DCFG_FP_DATA_EN); - - dcfg |= (RCDF_DCFG_CRT_SYNC_SKW_INIT | - RCDF_DCFG_PWR_SEQ_DLY_INIT | - RCDF_DCFG_GV_PAL_BYP); - - if (PanelEnable) - { - power = READ_VID32 (RCDF_POWER_MANAGEMENT); - power |= RCDF_PM_PANEL_POWER_ON; - WRITE_VID32 (RCDF_POWER_MANAGEMENT, power); - } - - /* SET APPROPRIATE SYNC POLARITIES */ - - if (sync_polarities & 0x1) - dcfg |= RCDF_DCFG_CRT_HSYNC_POL; - if (sync_polarities & 0x2) - dcfg |= RCDF_DCFG_CRT_VSYNC_POL; - - WRITE_VID32 (RCDF_DISPLAY_CONFIG, dcfg); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_clock_frequency - * - * This routine sets the clock frequency, specified as a 16.16 fixed point - * value (0x00318000 = 49.5 MHz). It will set the closest frequency found - * in the lookup table. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_set_clock_frequency(unsigned long frequency) -#else -void gfx_set_clock_frequency(unsigned long frequency) -#endif -{ - Q_WORD msr_value; - int i, index = 0; - unsigned long value; - long timeout = 1000; - long min, diff; - RCDFPLLENTRY *PllTable; - - /* READ PLL REFERENCE FREQUENCY */ - /* The reference frequency of GX2 1.x is different from 2.x and above. */ - - if ((gfx_cpu_version & 0xFF00) >= 0x0200) - PllTable = RCDF_PLLtable48MHz; - else - PllTable = RCDF_PLLtable14MHz; - - /* FIND THE REGISTER VALUES FOR THE DESIRED FREQUENCY */ - /* Search the table for the closest frequency (16.16 format). */ - - value = PllTable[0].pll_value; - min = (long) PllTable[0].frequency - frequency; - if (min < 0L) min = -min; - for (i = 1; i < NUM_RCDF_FREQUENCIES; i++) - { - diff = (long) PllTable[i].frequency - frequency; - if (diff < 0L) diff = -diff; - if (diff < min) - { - min = diff; - index = i; - } - } - - /* PROGRAM THE SETTINGS WITH THE RESET BIT SET */ - - gfx_msr_read (RC_ID_MCP, MCP_DOTPLL, &msr_value); - msr_value.high = PllTable[index].pll_value; - msr_value.low |= 0x00000001; - gfx_msr_write (RC_ID_MCP, MCP_DOTPLL, &msr_value); - - /* PROGRAM THE MCP DIVIDER VALUES */ - - gfx_msr_read (RC_ID_MCP, MCP_SYS_RSTPLL, &msr_value); - if (PllTable[index].post_div3) msr_value.low |= MCP_DOTPOSTDIV3; - else msr_value.low &= ~MCP_DOTPOSTDIV3; - if (PllTable[index].pre_div2) msr_value.low |= MCP_DOTPREDIV2; - else msr_value.low &= ~MCP_DOTPREDIV2; - if (PllTable[index].pre_mul2) msr_value.low |= MCP_DOTPREMULT2; - else msr_value.low &= ~MCP_DOTPREMULT2; - gfx_msr_write (RC_ID_MCP, MCP_SYS_RSTPLL, &msr_value); - - /* CLEAR THE RESET BIT */ - - gfx_msr_read (RC_ID_MCP, MCP_DOTPLL, &msr_value); - msr_value.low &= 0xFFFFFFFE; - gfx_msr_write (RC_ID_MCP, MCP_DOTPLL, &msr_value); - - /* WAIT FOR LOCK BIT */ - - do - { - gfx_msr_read (RC_ID_MCP, MCP_DOTPLL, &msr_value); - } while (timeout-- && !(msr_value.low & MCP_DOTPLL_LOCK)); -} - -/*--------------------------------------------------------------------------- - * gfx_set_crt_enable - * - * This routine enables or disables the CRT output from the video processor. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_crt_enable(int enable) -#else -int gfx_set_crt_enable(int enable) -#endif -{ - unsigned long config, misc; - config = READ_VID32(RCDF_DISPLAY_CONFIG); - misc = READ_VID32(RCDF_VID_MISC); - - switch (enable) - { - case CRT_DISABLE: /* DISABLE EVERYTHING */ - - WRITE_VID32(RCDF_DISPLAY_CONFIG, config & ~(RCDF_DCFG_DIS_EN | RCDF_DCFG_HSYNC_EN - | RCDF_DCFG_VSYNC_EN | RCDF_DCFG_DAC_BL_EN )); - WRITE_VID32(RCDF_VID_MISC, misc | RCDF_DAC_POWER_DOWN); - break; - - case CRT_ENABLE: /* ENABLE CRT DISPLAY, INCLUDING DISPLAY LOGIC */ - - WRITE_VID32(RCDF_DISPLAY_CONFIG, config | RCDF_DCFG_DIS_EN | RCDF_DCFG_HSYNC_EN - | RCDF_DCFG_VSYNC_EN | RCDF_DCFG_DAC_BL_EN); - WRITE_VID32(RCDF_VID_MISC, misc & ~RCDF_DAC_POWER_DOWN & ~RCDF_ANALOG_POWER_DOWN); - break; - - case CRT_STANDBY: /* HSYNC:OFF VSYNC:ON */ - - WRITE_VID32(RCDF_DISPLAY_CONFIG, (config & ~(RCDF_DCFG_DIS_EN | RCDF_DCFG_HSYNC_EN - | RCDF_DCFG_DAC_BL_EN)) | - RCDF_DCFG_VSYNC_EN ); - WRITE_VID32(RCDF_VID_MISC, misc | RCDF_DAC_POWER_DOWN); - break; - - case CRT_SUSPEND: /* HSYNC:ON VSYNC:OFF */ - - WRITE_VID32(RCDF_DISPLAY_CONFIG, (config & ~(RCDF_DCFG_DIS_EN | RCDF_DCFG_VSYNC_EN - | RCDF_DCFG_DAC_BL_EN)) | - RCDF_DCFG_HSYNC_EN ); - WRITE_VID32(RCDF_VID_MISC, misc | RCDF_DAC_POWER_DOWN); - break; - - default: - return (GFX_STATUS_BAD_PARAMETER); - } - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_enable - * - * This routine enables or disables the video overlay functionality. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_enable(int enable) -#else -int gfx_set_video_enable(int enable) -#endif -{ - unsigned long vcfg; - - /* WAIT FOR VERTICAL BLANK TO START */ - /* Otherwise a glitch can be observed. */ - - if (gfx_test_timing_active()) - { - if (!gfx_test_vertical_active()) - { - while(!gfx_test_vertical_active()); - } - while(gfx_test_vertical_active()); - } - - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - if (enable) - { - /* ENABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(1); - - /* ENABLE DISPLAY FILTER VIDEO OVERLAY */ - - vcfg |= RCDF_VCFG_VID_EN; - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - } - else - { - /* DISABLE DISPLAY FILTER VIDEO OVERLAY */ - - vcfg &= ~RCDF_VCFG_VID_EN; - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - - /* DISABLE VIDEO OVERLAY FROM DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_enable(0); - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_format - * - * Sets input video format type, to one of the YUV formats or to RGB. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_format(unsigned long format) -#else -int gfx_set_video_format(unsigned long format) -#endif -{ - unsigned long ctrl, vcfg = 0; - - /* SET THE DISPLAY FILTER VIDEO INPUT FORMAT */ - - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - ctrl = READ_VID32(RCDF_VID_ALPHA_CONTROL); - ctrl &= ~(RCDF_VIDEO_INPUT_IS_RGB | RCDF_CSC_VIDEO_YUV_TO_RGB); - vcfg &= ~(RCDF_VCFG_VID_INP_FORMAT | RCDF_VCFG_4_2_0_MODE); - switch(format) - { - case VIDEO_FORMAT_UYVY: - vcfg |= RCDF_VCFG_UYVY_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - break; - case VIDEO_FORMAT_YUYV: - vcfg |= RCDF_VCFG_YUYV_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - break; - case VIDEO_FORMAT_Y2YU: - vcfg |= RCDF_VCFG_Y2YU_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - break; - case VIDEO_FORMAT_YVYU: - vcfg |= RCDF_VCFG_YVYU_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - break; - case VIDEO_FORMAT_Y0Y1Y2Y3: - vcfg |= RCDF_VCFG_UYVY_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - vcfg |= RCDF_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y3Y2Y1Y0: - vcfg |= RCDF_VCFG_Y2YU_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - vcfg |= RCDF_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y1Y0Y3Y2: - vcfg |= RCDF_VCFG_YUYV_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - vcfg |= RCDF_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_Y1Y2Y3Y0: - vcfg |= RCDF_VCFG_YVYU_FORMAT; - ctrl |= RCDF_CSC_VIDEO_YUV_TO_RGB; - vcfg |= RCDF_VCFG_4_2_0_MODE; - break; - case VIDEO_FORMAT_RGB: - ctrl |= RCDF_VIDEO_INPUT_IS_RGB; - vcfg |= RCDF_VCFG_UYVY_FORMAT; - break; - case VIDEO_FORMAT_P2M_P2L_P1M_P1L: - ctrl |= RCDF_VIDEO_INPUT_IS_RGB; - vcfg |= RCDF_VCFG_Y2YU_FORMAT; - break; - case VIDEO_FORMAT_P1M_P1L_P2M_P2L: - ctrl |= RCDF_VIDEO_INPUT_IS_RGB; - vcfg |= RCDF_VCFG_YUYV_FORMAT; - break; - case VIDEO_FORMAT_P1M_P2L_P2M_P1L: - ctrl |= RCDF_VIDEO_INPUT_IS_RGB; - vcfg |= RCDF_VCFG_YVYU_FORMAT; - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - WRITE_VID32(RCDF_VID_ALPHA_CONTROL, ctrl); - - /* SET THE VIDEO FORMAT IN THE DISPLAY CONTROLLER */ - /* Use private routine to abstract display controller. */ - - gfx_set_display_video_format (format); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_size - * - * This routine specifies the size of the source data. It is used only - * to determine how much data to transfer per frame, and is not used to - * calculate the scaling value (that is handled by a separate routine). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_size(unsigned short width, unsigned short height) -#else -int gfx_set_video_size(unsigned short width, unsigned short height) -#endif -{ - unsigned long size, vcfg, vid_420, pitch; - - /* SET THE DISPLAY FILTER VIDEO LINE SIZE */ - /* Match the DC hardware alignment requirement. The line size must */ - /* always be 32-byte aligned. However, we can manage smaller */ - /* alignments by decreasing the pitch and clipping the video window. */ - /* The VG will fetch extra data for each line, but the decreased */ - /* pitch will ensure that it always begins fetching at the start of */ - /* the video line. */ - - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - - vid_420 = vcfg & RCDF_VCFG_4_2_0_MODE; - - vcfg &= ~(RCDF_VCFG_LINE_SIZE_LOWER_MASK | RCDF_VCFG_LINE_SIZE_UPPER); - - size = ((width >> 1) + 7) & 0xFFF8; - pitch = ((width << 1) + 7) & 0xFFF8; - - vcfg |= (size & 0x00FF) << 8; - if (size & 0x0100) vcfg |= RCDF_VCFG_LINE_SIZE_UPPER; - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - - /* SET VIDEO BUFFER LINE SIZE IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_size (width, height); - - /* SET VIDEO PITCH */ - /* Set pitch to line width for GX1 legacy. */ - /* UV Pitch is 2x line width as GX1 required 4:2:0 */ - /* data for every line, while Redcloud reads for */ - /* every other line. */ - - gfx_set_video_yuv_pitch (pitch, pitch << 1); - - /* SET VIDEO OFFSETS */ - /* Set U and V Offsets to match legacy */ - - if (vid_420) - gfx_set_video_yuv_offsets (gfx_vid_offset, - gfx_vid_offset + (pitch >> 1), - gfx_vid_offset + (pitch >> 1) + (pitch >> 2)); - - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_offset - * - * This routine sets the starting offset for the video buffer when only - * one offset needs to be specified. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_offset(unsigned long offset) -#else -int gfx_set_video_offset(unsigned long offset) -#endif -{ - /* SAVE VALUE FOR FUTURE CLIPPING OF THE TOP OF THE VIDEO WINDOW */ - - gfx_vid_offset = offset; - - /* SET VIDEO BUFFER OFFSET IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_offset(offset); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_yuv_offsets - * - * This routine sets the starting offset for the video buffer when displaying - * 4:2:0 video. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, unsigned long voffset) -#else -int gfx_set_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset, unsigned long voffset) -#endif -{ - /* SAVE VALUE FOR FUTURE CLIPPING OF THE TOP OF THE VIDEO WINDOW */ - - gfx_vid_offset = yoffset; - gfx_vid_uoffset = uoffset; - gfx_vid_voffset = voffset; - - /* SET VIDEO BUFFER OFFSET IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_yuv_offsets(yoffset, uoffset, voffset); - - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_video_yuv_pitch - * - * This routine sets the byte offset between consecutive scanlines of YUV video data - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch) -#else -int gfx_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch) -#endif -{ - /* SET VIDEO PITCH IN DISPLAY CONTROLLER */ - /* Use private routine to abstract the display controller. */ - - gfx_set_display_video_yuv_pitch (ypitch, uvpitch); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_scale - * - * This routine sets the scale factor for the video overlay window. The - * size of the source and destination regions are specified in pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#else -int gfx_set_video_scale(unsigned short srcw, unsigned short srch, - unsigned short dstw, unsigned short dsth) -#endif -{ - unsigned long xscale, yscale; - - /* SAVE PARAMETERS (unless don't-care zero destination arguments are used) */ - /* These are needed for clipping the video window later. */ - - if (dstw != 0) { - gfx_vid_srcw = srcw; - gfx_vid_dstw = dstw; - } - if (dsth != 0) { - gfx_vid_srch = srch; - gfx_vid_dsth = dsth; - } - - /* CALCULATE DISPLAY FILTER SCALE FACTORS */ - /* Zero width and height indicate don't care conditions */ - /* Downscaling is performed in a separate function. */ - - if (dstw == 0) xscale = READ_VID32(RCDF_VIDEO_SCALE) & 0xffff; /* keep previous if don't-care argument */ - else if (dstw <= srcw) xscale = 0x2000; /* horizontal downscaling is currently done in a separate function */ - else if ((srcw == 1) || (dstw == 1)) return GFX_STATUS_BAD_PARAMETER; - else xscale = (0x2000l * (srcw - 1l)) / (dstw - 1l); - - if (dsth == 0) yscale = (READ_VID32(RCDF_VIDEO_SCALE) & 0xffff0000) >> 16; /* keep previous if don't-care argument */ - else if (dsth <= srch) yscale = 0x2000; /* vertical downscaling is handled in a separate function */ - else if ((srch == 1) || (dsth == 1)) return GFX_STATUS_BAD_PARAMETER; - else yscale = (0x2000l * (srch - 1l)) / (dsth - 1l); - - WRITE_VID32(RCDF_VIDEO_SCALE, (yscale << 16) | xscale); - - /* CALL ROUTINE TO UPDATE WINDOW POSITION */ - /* This is required because the scale values affect the number of */ - /* source data pixels that need to be clipped, as well as the */ - /* amount of data that needs to be transferred. */ - - gfx_set_video_window(gfx_vid_xpos, gfx_vid_ypos, gfx_vid_width, gfx_vid_height); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_vertical_downscale - * - * This routine sets the vertical downscale factor for the video overlay window. - * The height of the source and destination regions are specified in pixels. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_vertical_downscale(unsigned short srch, unsigned short dsth) -#else -int gfx_set_video_vertical_downscale(unsigned short srch, unsigned short dsth) -#endif -{ - /* SET VIDEO SCALE IN DISPLAY CONTROLLER */ - /* Use private routine to abstract hardware */ - - gfx_set_display_video_downscale (srch, dsth); - return 0; -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_vertical_downscale_enable - * - * This routine sets the vertical downscale enable for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_set_video_vertical_downscale_enable(int enable) -#else -void gfx_set_video_vertical_downscale_enable(int enable) -#endif -{ - /* SET VIDEO SCALE IN DISPLAY CONTROLLER */ - /* Use private routine to abstract hardware */ - - gfx_set_display_video_vertical_downscale_enable (enable); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_config - * - * This routine sets the downscale type and factor for the video overlay window. - * Note: No downscaling support for RGB565 and YUV420 video formats. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_downscale_config(unsigned short type, unsigned short m) -#else -int gfx_set_video_downscale_config(unsigned short type, unsigned short m) -#endif -{ - unsigned long downscale; - - if ((m < 1) || (m > 16)) return GFX_STATUS_BAD_PARAMETER; - - downscale = READ_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL); - downscale &= ~(RCDF_VIDEO_DOWNSCALE_FACTOR_MASK | RCDF_VIDEO_DOWNSCALE_TYPE_MASK); - downscale |= ((unsigned long)(m - 1) << RCDF_VIDEO_DOWNSCALE_FACTOR_POS); - switch(type) - { - case VIDEO_DOWNSCALE_KEEP_1_OF: - downscale |= RCDF_VIDEO_DOWNSCALE_TYPE_A; - break; - case VIDEO_DOWNSCALE_DROP_1_OF: - downscale |= RCDF_VIDEO_DOWNSCALE_TYPE_B; - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - WRITE_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL, downscale); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_coefficients - * - * This routine sets the downscale filter coefficients. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) -#else -int gfx_set_video_downscale_coefficients(unsigned short coef1, unsigned short coef2, - unsigned short coef3, unsigned short coef4) -#endif -{ - if ((coef1 + coef2 + coef3 + coef4) != 16) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_VID32(RCDF_VIDEO_DOWNSCALER_COEFFICIENTS, - ((unsigned long)coef1 << RCDF_VIDEO_DOWNSCALER_COEF1_POS) | - ((unsigned long)coef2 << RCDF_VIDEO_DOWNSCALER_COEF2_POS) | - ((unsigned long)coef3 << RCDF_VIDEO_DOWNSCALER_COEF3_POS) | - ((unsigned long)coef4 << RCDF_VIDEO_DOWNSCALER_COEF4_POS)); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_downscale_enable - * - * This routine enables or disables downscaling for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_downscale_enable(int enable) -#else -int gfx_set_video_downscale_enable(int enable) -#endif -{ - unsigned long downscale; - - downscale = READ_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL); - if (enable) - downscale |= RCDF_VIDEO_DOWNSCALE_ENABLE; - else - downscale &= ~RCDF_VIDEO_DOWNSCALE_ENABLE; - WRITE_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL, downscale); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_window - * - * This routine sets the position and size of the video overlay window. The - * x and y positions are specified in screen relative coordinates, and may be negative. - * The size of destination region is specified in pixels. The line size - * indicates the number of bytes of source data per scanline. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_window(short x, short y, unsigned short w, unsigned short h) -#else -int gfx_set_video_window(short x, short y, unsigned short w, unsigned short h) -#endif -{ - unsigned long hadjust, vadjust; - unsigned long xstart, ystart, xend, yend; - - /* SAVE PARAMETERS */ - /* These are needed to call this routine if the scale value changes. */ - - gfx_vid_xpos = x; - gfx_vid_ypos = y; - gfx_vid_width = w; - gfx_vid_height = h; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 14l; - vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l; - - /* LEFT CLIPPING */ - - if (x < 0) - { - gfx_set_video_left_crop ((unsigned short)(-x)); - xstart = hadjust; - } - else - { - gfx_set_video_left_crop (0); - xstart = (unsigned long)x + hadjust; - } - - /* HORIZONTAL END */ - /* End positions in register are non-inclusive (one more than the actual end) */ - - if ((x + w) < gfx_get_hactive()) - xend = (unsigned long)x + (unsigned long)w + hadjust; - - /* RIGHT-CLIPPING */ - else - xend = (unsigned long)gfx_get_hactive() + hadjust; - - /* VERTICAL START */ - - ystart = (unsigned long)y + vadjust; - - /* VERTICAL END */ - - if ((y + h) < gfx_get_vactive()) - yend = (unsigned long)y + (unsigned long)h + vadjust; - - /* BOTTOM-CLIPPING */ - else - yend = (unsigned long)gfx_get_vactive() + vadjust; - - /* SET VIDEO POSITION */ - - WRITE_VID32(RCDF_VIDEO_X_POS, (xend << 16) | xstart); - WRITE_VID32(RCDF_VIDEO_Y_POS, (yend << 16) | ystart); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_left_crop - * - * This routine sets the number of pixels which will be cropped from the - * beginning of each video line. The video window will begin to display only - * from the pixel following the cropped pixels, and the cropped pixels - * will be ignored. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_left_crop(unsigned short x) -#else -int gfx_set_video_left_crop(unsigned short x) -#endif -{ - unsigned long vcfg, initread; - - /* CLIPPING ON LEFT */ - /* Adjust initial read for scale, checking for divide by zero */ - - if (gfx_vid_dstw) - initread = (unsigned long)x * gfx_vid_srcw / gfx_vid_dstw; - else initread = 0; - - /* SET INITIAL READ ADDRESS */ - - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - vcfg &= ~RCDF_VCFG_INIT_READ_MASK; - vcfg |= (initread << 15) & RCDF_VCFG_INIT_READ_MASK; - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_color_key - * - * This routine specifies the color key value and mask for the video overlay - * hardware. To disable color key, the color and mask should both be set to - * zero. The hardware uses the color key in the following equation: - * - * ((source data) & (color key mask)) == ((color key) & (color key mask)) - * - * If "graphics" is set to TRUE, the source data is graphics, and color key - * is an RGB value. If "graphics" is set to FALSE, the source data is the video, - * and color key is a YUV value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#else -int gfx_set_video_color_key(unsigned long key, unsigned long mask, - int graphics) -#endif -{ - unsigned long dcfg = 0; - - /* SET RCDF COLOR KEY VALUE */ - - WRITE_VID32(RCDF_VIDEO_COLOR_KEY, key); - WRITE_VID32(RCDF_VIDEO_COLOR_MASK, mask); - - /* SELECT GRAPHICS OR VIDEO DATA TO COMPARE TO THE COLOR KEY */ - - dcfg = READ_VID32(RCDF_DISPLAY_CONFIG); - if (graphics & 0x01) dcfg &= ~RCDF_DCFG_VG_CK; - else dcfg |= RCDF_DCFG_VG_CK; - WRITE_VID32(RCDF_DISPLAY_CONFIG, dcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_filter - * - * This routine enables or disables the video overlay filters. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_filter(int xfilter, int yfilter) -#else -int gfx_set_video_filter(int xfilter, int yfilter) -#endif -{ - unsigned long vcfg = 0; - - /* ENABLE OR DISABLE DISPLAY FILTER VIDEO OVERLAY FILTERS */ - - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - vcfg &= ~(RCDF_VCFG_X_FILTER_EN | RCDF_VCFG_Y_FILTER_EN); - if (xfilter) vcfg |= RCDF_VCFG_X_FILTER_EN; - if (yfilter) vcfg |= RCDF_VCFG_Y_FILTER_EN; - WRITE_VID32(RCDF_VIDEO_CONFIG, vcfg); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette - * - * This routine loads the video hardware palette. If a NULL pointer is - * specified, the palette is bypassed (for Redcloud, this means loading the - * palette with identity values). - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_palette(unsigned long *palette) -#else -int gfx_set_video_palette(unsigned long *palette) -#endif -{ - unsigned long i, entry; - - /* LOAD REDCLOUD VIDEO PALETTE */ - - WRITE_VID32(RCDF_PALETTE_ADDRESS, 0); - for (i = 0; i < 256; i++) - { - if (palette) entry = palette[i]; - else entry = i | (i << 8) | (i << 16); - WRITE_VID32(RCDF_PALETTE_DATA, entry); - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_palette_entry - * - * This routine loads a single entry of the video hardware palette. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_palette_entry(unsigned long index, unsigned long palette) -#else -int gfx_set_video_palette_entry(unsigned long index, unsigned long palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* SET A SINGLE ENTRY */ - - WRITE_VID32(RCDF_PALETTE_ADDRESS, index); - WRITE_VID32(RCDF_PALETTE_DATA, palette); - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_request() - * - * This routine sets the horizontal (pixel) and vertical (line) video request - * values. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_request(short x, short y) -#else -int gfx_set_video_request(short x, short y) -#endif -{ - /* SET DISPLAY FILTER VIDEO REQUEST */ - - x += gfx_get_htotal() - gfx_get_hsync_end() - 2; - y += gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - if ((x < 0) || (x > RCDF_VIDEO_REQUEST_MASK) || - (y < 0) || (y > RCDF_VIDEO_REQUEST_MASK)) - return GFX_STATUS_BAD_PARAMETER; - - WRITE_VID32(RCDF_VIDEO_REQUEST, ((unsigned long)x << RCDF_VIDEO_X_REQUEST_POS) | - ((unsigned long)y << RCDF_VIDEO_Y_REQUEST_POS)); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_cursor() - * - * This routine configures the video hardware cursor. - * If the "mask"ed bits in the graphics pixel match "key", then either "color1" - * or "color2" will be used for this pixel, according to the value of bit - * number "select_color2" of the graphics pixel. - * - * key - 24 bit RGB value - * mask - 24 bit mask - * color1, color2 - RGB or YUV, depending on the current color space conversion - * select_color2 - value between 0 to 23 - * - * To disable match, a "mask" and "key" value of 0xffffff should be set, - * because the graphics pixels incoming to the video processor have maximum 16 - * bits set (0xF8FCF8). - * - * This feature is useful for disabling alpha blending of the cursor. - * Otherwise cursor image would be blurred (or completely invisible if video - * alpha is maximum value). - * Note: the cursor pixel replacements take place both inside and outside the - * video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2) -#else -int gfx_set_video_cursor(unsigned long key, unsigned long mask, unsigned short select_color2, - unsigned long color1, unsigned long color2) -#endif -{ - if (select_color2 > RCDF_CURSOR_COLOR_BITS) return GFX_STATUS_BAD_PARAMETER; - key = (key & RCDF_COLOR_MASK) | ((unsigned long)select_color2 << RCDF_CURSOR_COLOR_KEY_OFFSET_POS); - WRITE_VID32(RCDF_CURSOR_COLOR_KEY, key); - WRITE_VID32(RCDF_CURSOR_COLOR_MASK, mask); - WRITE_VID32(RCDF_CURSOR_COLOR_1, color1); - WRITE_VID32(RCDF_CURSOR_COLOR_2, color2); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_video_cursor() - * - * This routine configures the video hardware cursor. - * If the "mask"ed bits in the graphics pixel match "key", then either "color1" - * or "color2" will be used for this pixel, according to the value of bit - * number "select_color2" of the graphics pixel. - * - * key - 24 bit RGB value - * mask - 24 bit mask - * color1, color2 - RGB or YUV, depending on the current color space conversion - * select_color2 - value between 0 to 23 - * - * To disable match, a "mask" and "key" value of 0xffffff should be set, - * because the graphics pixels incoming to the video processor have maximum 16 - * bits set (0xF8FCF8). - * - * This feature is useful for disabling alpha blending of the cursor. - * Otherwise cursor image would be blurred (or completely invisible if video - * alpha is maximum value). - * Note: the cursor pixel replacements take place both inside and outside the - * video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_video_cursor_enable (int enable) -#else -int gfx_set_video_cursor_enable (int enable) -#endif -{ - unsigned long temp = READ_VID32 (RCDF_CURSOR_COLOR_KEY); - - if (enable) temp |= RCDF_CURSOR_COLOR_KEY_ENABLE; - else temp &= ~RCDF_CURSOR_COLOR_KEY_ENABLE; - - WRITE_VID32 (RCDF_CURSOR_COLOR_KEY, temp); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_enable - * - * This routine enables or disables the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_enable(int enable) -#else -int gfx_set_alpha_enable(int enable) -#endif -{ - unsigned long address = 0, value = 0; - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = RCDF_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 5); - value = READ_VID32(address); - if (enable) value |= RCDF_ACTRL_WIN_ENABLE; - else value &= ~(RCDF_ACTRL_WIN_ENABLE); - WRITE_VID32(address, value); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_window - * - * This routine sets the size of the currently selected alpha region. - * Note: "x" and "y" are signed to enable using negative values needed for - * implementing workarounds of hardware issues. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_window(short x, short y, - unsigned short width, unsigned short height) -#else -int gfx_set_alpha_window(short x, short y, - unsigned short width, unsigned short height) -#endif -{ - unsigned long address = 0; - - /* CHECK FOR CLIPPING */ - - if ((x + width) > gfx_get_hactive()) width = gfx_get_hactive() - x; - if ((y + height) > gfx_get_vactive()) height = gfx_get_vactive() - y; - - /* ADJUST POSITIONS */ - - x += gfx_get_htotal() - gfx_get_hsync_end() - 2; - y += gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = RCDF_ALPHA_XPOS_1 + ((unsigned long)gfx_alpha_select << 5); - - /* END POSITIONS IN REGISTERS ARE NON-INCLUSIVE (ONE MORE THAN ACTUAL END) */ - - WRITE_VID32(address, (unsigned long) x | - ((unsigned long) (x + width) << 16)); - WRITE_VID32(address + 8, (unsigned long) y | - ((unsigned long) (y + height) << 16)); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_value - * - * This routine sets the alpha value for the currently selected alpha - * region. It also specifies an increment/decrement value for fading. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_value(unsigned char alpha, char delta) -#else -int gfx_set_alpha_value(unsigned char alpha, char delta) -#endif -{ - unsigned long address = 0, value = 0; - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = RCDF_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 5); - value = READ_VID32(address); - value &= RCDF_ACTRL_WIN_ENABLE; /* keep only enable bit */ - value |= (unsigned long) alpha; - value |= (((unsigned long) delta) & 0xff) << 8; - value |= RCDF_ACTRL_LOAD_ALPHA; - WRITE_VID32(address, value); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_priority - * - * This routine sets the priority of the currently selected alpha region. - * A higher value indicates a higher priority. - * Note: Priority of enabled alpha windows must be different. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_priority(int priority) -#else -int gfx_set_alpha_priority(int priority) -#endif -{ - unsigned long pos = 0, value = 0; - if (priority > 3) return(GFX_STATUS_BAD_PARAMETER); - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - value = READ_VID32(RCDF_VID_ALPHA_CONTROL); - pos = 16 + (gfx_alpha_select << 1); - value &= ~(0x03l << pos); - value |= (unsigned long)priority << pos; - WRITE_VID32(RCDF_VID_ALPHA_CONTROL, value); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color - * - * This routine sets the color to be displayed inside the currently selected - * alpha window when there is a color key match (when the alpha color - * mechanism is enabled). - * "color" is an RGB value (for RGB blending) or a YUV value (for YUV blending). - * In Interlaced YUV blending mode, Y/2 value should be used. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_color(unsigned long color) -#else -int gfx_set_alpha_color(unsigned long color) -#endif -{ - unsigned long address = 0; - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = RCDF_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 5); - WRITE_VID32(address, color); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_alpha_color_enable - * - * Enable or disable the color mechanism in the alpha window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_alpha_color_enable(int enable) -#else -int gfx_set_alpha_color_enable(int enable) -#endif -{ - unsigned long color; - unsigned long address = 0; - - if (gfx_alpha_select > 2) return(GFX_STATUS_UNSUPPORTED); - address = RCDF_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 5); - color = READ_VID32(address); - if (enable) - color |= RCDF_ALPHA_COLOR_ENABLE; - else - color &= ~RCDF_ALPHA_COLOR_ENABLE; - WRITE_VID32(address, color); - return(GFX_STATUS_OK); -} - -/*--------------------------------------------------------------------------- - * gfx_set_no_ck_outside_alpha - * - * This function affects where inside the video window color key or chroma - * key comparison is done: - * If enable is TRUE, color/chroma key comparison is performed only inside - * the enabled alpha windows. Outside the (enabled) alpha windows, only video - * is displayed if color key is used, and only graphics is displayed if chroma - * key is used. - * If enable is FALSE, color/chroma key comparison is performed in all the - * video window area. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_set_no_ck_outside_alpha(int enable) -#else -int gfx_set_no_ck_outside_alpha(int enable) -#endif -{ - unsigned long value; - value = READ_VID32(RCDF_VID_ALPHA_CONTROL); - if (enable) - WRITE_VID32(RCDF_VID_ALPHA_CONTROL, value | RCDF_NO_CK_OUTSIDE_ALPHA); - else - WRITE_VID32(RCDF_VID_ALPHA_CONTROL, value & ~RCDF_NO_CK_OUTSIDE_ALPHA); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_clock_frequency - * - * This routine returns the current clock frequency in 16.16 format. - * It reads the current register value and finds the match in the table. - * If no match is found, this routine returns 0. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_clock_frequency(void) -#else -unsigned long gfx_get_clock_frequency(void) -#endif -{ - Q_WORD msr_value; - RCDFPLLENTRY *PLLTable; - int index; - unsigned long value, mask = 0x00001FFF; - unsigned long post_div3 = 0, pre_mult2 = 0; - - /* READ PLL SETTING */ - - gfx_msr_read (RC_ID_MCP, MCP_DOTPLL, &msr_value); - value = msr_value.high & mask; - - /* READ DIVISOR SETTINGS */ - - if ((gfx_cpu_version & 0xFF00) == 0x200) - { - PLLTable = RCDF_PLLtable48MHz; - - gfx_msr_read (RC_ID_MCP, MCP_SYS_RSTPLL, &msr_value); - post_div3 = (msr_value.low & MCP_DOTPOSTDIV3) ? 1 : 0; - pre_mult2 = (msr_value.low & MCP_DOTPREMULT2) ? 1 : 0; - } - else - PLLTable = RCDF_PLLtable14MHz; - - /* SEARCH FOR A MATCH */ - - for (index = 0; index < NUM_RCDF_FREQUENCIES; index++) - { - if ((PLLTable[index].pll_value & mask) == value && - post_div3 == PLLTable[index].post_div3 && - pre_mult2 == PLLTable[index].pre_mul2) - return(PLLTable[index].frequency); - } - return(0); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*--------------------------------------------------------------------------- - * gfx_get_sync_polarities - * - * This routine returns the polarities of the sync pulses: - * Bit 0: Set if negative horizontal polarity. - * Bit 1: Set if negative vertical polarity. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_sync_polarities(void) -#else -int gfx_get_sync_polarities(void) -#endif -{ - int polarities = 0; - if (READ_VID32(RCDF_DISPLAY_CONFIG) & RCDF_DCFG_CRT_HSYNC_POL) polarities |= 1; - if (READ_VID32(RCDF_DISPLAY_CONFIG) & RCDF_DCFG_CRT_VSYNC_POL) polarities |= 2; - return(polarities); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_palette_entry - * - * This routine returns a single palette entry. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_palette_entry(unsigned long index, unsigned long *palette) -#else -int gfx_get_video_palette_entry(unsigned long index, unsigned long *palette) -#endif -{ - if (index > 0xFF) - return GFX_STATUS_BAD_PARAMETER; - - /* READ A SINGLE ENTRY */ - - WRITE_VID32 (RCDF_PALETTE_ADDRESS, index); - *palette = READ_VID32 (RCDF_PALETTE_DATA); - - return (GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_enable - * - * This routine returns the value "one" if video overlay is currently enabled, - * otherwise it returns the value "zero". - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_enable(void) -#else -int gfx_get_video_enable(void) -#endif -{ - if (READ_VID32(RCDF_VIDEO_CONFIG) & RCDF_VCFG_VID_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_format - * - * This routine returns the current video overlay format. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_format(void) -#else -int gfx_get_video_format(void) -#endif -{ - unsigned long ctrl, vcfg; - - ctrl = READ_VID32(RCDF_VID_ALPHA_CONTROL); - vcfg = READ_VID32(RCDF_VIDEO_CONFIG); - - if (ctrl & RCDF_VIDEO_INPUT_IS_RGB) - { - switch (vcfg & RCDF_VCFG_VID_INP_FORMAT) - { - case RCDF_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_RGB; - case RCDF_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_P2M_P2L_P1M_P1L; - case RCDF_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_P1M_P1L_P2M_P2L; - case RCDF_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_P1M_P2L_P2M_P1L; - } - } - - if (vcfg & RCDF_VCFG_4_2_0_MODE) - { - switch (vcfg & RCDF_VCFG_VID_INP_FORMAT) - { - case RCDF_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_Y0Y1Y2Y3; - case RCDF_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_Y3Y2Y1Y0; - case RCDF_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_Y1Y0Y3Y2; - case RCDF_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_Y1Y2Y3Y0; - } - } - else - { - switch (vcfg & RCDF_VCFG_VID_INP_FORMAT) - { - case RCDF_VCFG_UYVY_FORMAT: return VIDEO_FORMAT_UYVY; - case RCDF_VCFG_Y2YU_FORMAT: return VIDEO_FORMAT_Y2YU; - case RCDF_VCFG_YUYV_FORMAT: return VIDEO_FORMAT_YUYV; - case RCDF_VCFG_YVYU_FORMAT: return VIDEO_FORMAT_YVYU; - } - } - return (GFX_STATUS_ERROR); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_src_size - * - * This routine returns the size of the source video overlay buffer. The - * return value is (height << 16) | width. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_src_size(void) -#else -unsigned long gfx_get_video_src_size(void) -#endif -{ - unsigned long width, height, scale, delta; - int down_enable; - - /* DETERMINE SOURCE WIDTH FROM THE DISPLAY FILTER VIDEO LINE SIZE */ - - width = (READ_VID32(RCDF_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(RCDF_VIDEO_CONFIG) & RCDF_VCFG_LINE_SIZE_UPPER) - width += 512l; - - /* DETERMINE SOURCE HEIGHT FROM THE DISPLAY FILTER HEIGHT AND SCALE VALUES */ - /* There is no true "source buffer size" in Redcloud. Instead, the VG module */ - /* provides video data as needed on a per-line basis. The source buffer size */ - /* is always assumed to equal the amount of required video data. The returned */ - /* height is equal to the height of the required video buffer data (before all */ - /* scaling.) */ - - scale = (READ_VID32 (RCDF_VIDEO_SCALE) >> 16) & 0x3FFF; - height = ((READ_VID32 (RCDF_VIDEO_Y_POS) >> 16) & 0x7FF) - - (READ_VID32 (RCDF_VIDEO_Y_POS) & 0x7FF); - delta = gfx_get_video_downscale_delta(); - down_enable = gfx_get_video_vertical_downscale_enable(); - - /* REVERSE UPSCALING */ - - if (height) - height = ((scale * (height - 1l)) / 0x2000l) + 2l; - - /* REVERSE DOWNSCALING */ - /* Original lines = height * (0x3FFF + delta) / 0x3FFF */ - /* As this may cause rounding errors, we add 1 to the */ - /* returned source size. The return value of this */ - /* function could thus be off by 1. */ - - if (down_enable && height) - height = ((height * (0x3FFFl + delta)) / 0x3FFFl) + 1; - - return((height << 16) | width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_line_size - * - * This routine returns the line size of the source video overlay buffer, in - * pixels. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_line_size(void) -#else -unsigned long gfx_get_video_line_size(void) -#endif -{ - unsigned long width = 0; - - /* DETERMINE SOURCE WIDTH FROM THE RCDF VIDEO LINE SIZE */ - - width = (READ_VID32(RCDF_VIDEO_CONFIG) >> 7) & 0x000001FE; - if (READ_VID32(RCDF_VIDEO_CONFIG) & RCDF_VCFG_LINE_SIZE_UPPER) - width += 512l; - return(width); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_xclip - * - * This routine returns the number of bytes clipped on the left side of a - * video overlay line (skipped at beginning). - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_xclip(void) -#else -unsigned long gfx_get_video_xclip(void) -#endif -{ - unsigned long clip = 0; - - /* DETERMINE SOURCE WIDTH FROM THE RCDF VIDEO LINE SIZE */ - - clip = (READ_VID32(RCDF_VIDEO_CONFIG) >> 14) & 0x000007FC; - return(clip); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_offset - * - * This routine returns the current offset for the video overlay buffer. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_offset(void) -#else -unsigned long gfx_get_video_offset(void) -#endif -{ - return(gfx_get_display_video_offset()); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_yuv_offsets - * - * This routine returns the current offsets for the video overlay buffer when in 4:2:0. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -#else -void gfx_get_video_yuv_offsets(unsigned long *yoffset, unsigned long *uoffset, - unsigned long *voffset) -#endif -{ - gfx_get_display_video_yuv_offsets(yoffset, uoffset, voffset); -} - -/*----------------------------------------------------------------------------- - * gfx_get_video_yuv_pitch - * - * This routine returns the current pitch values for the video overlay buffer. - *----------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -#else -void gfx_get_video_yuv_pitch(unsigned long *ypitch, unsigned long *uvpitch) -#endif -{ - gfx_get_display_video_yuv_pitch(ypitch, uvpitch); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_scale - * - * This routine returns the scale factor for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_scale(void) -#else -unsigned long gfx_get_video_scale(void) -#endif -{ - return(READ_VID32(RCDF_VIDEO_SCALE)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_delta - * - * This routine returns the vertical downscale factor for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_downscale_delta(void) -#else -unsigned long gfx_get_video_downscale_delta(void) -#endif -{ - /* USE PRIVATE ROUTINE TO ABSTRACT THE DIPSLAY CONTROLLER */ - - return (gfx_get_display_video_downscale_delta()); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_vertical_downscale_enable - * - * This routine returns the vertical downscale enable for the video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_vertical_downscale_enable(void) -#else -int gfx_get_video_vertical_downscale_enable(void) -#endif -{ - /* USE PRIVATE ROUTINE TO ABSTRACT THE DIPSLAY CONTROLLER */ - - return (gfx_get_display_video_downscale_enable ()); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_config - * - * This routine returns the current type and value of video downscaling. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_downscale_config(unsigned short *type, unsigned short *m) -#else -int gfx_get_video_downscale_config(unsigned short *type, unsigned short *m) -#endif -{ - unsigned long downscale; - - downscale = READ_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL); - *m = (unsigned short)((downscale & RCDF_VIDEO_DOWNSCALE_FACTOR_MASK) >> RCDF_VIDEO_DOWNSCALE_FACTOR_POS) + 1; - - switch(downscale & RCDF_VIDEO_DOWNSCALE_TYPE_MASK) - { - case RCDF_VIDEO_DOWNSCALE_TYPE_A: - *type = VIDEO_DOWNSCALE_KEEP_1_OF; - break; - case RCDF_VIDEO_DOWNSCALE_TYPE_B: - *type = VIDEO_DOWNSCALE_DROP_1_OF; - break; - default: - return GFX_STATUS_ERROR; - break; - } - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_coefficients - * - * This routine returns the current video downscaling coefficients. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4) -#else -void gfx_get_video_downscale_coefficients(unsigned short *coef1, unsigned short *coef2, - unsigned short *coef3, unsigned short *coef4) -#endif -{ - unsigned long coef; - - coef = READ_VID32(RCDF_VIDEO_DOWNSCALER_COEFFICIENTS); - *coef1 = (unsigned short)((coef >> RCDF_VIDEO_DOWNSCALER_COEF1_POS) & RCDF_VIDEO_DOWNSCALER_COEF_MASK); - *coef2 = (unsigned short)((coef >> RCDF_VIDEO_DOWNSCALER_COEF2_POS) & RCDF_VIDEO_DOWNSCALER_COEF_MASK); - *coef3 = (unsigned short)((coef >> RCDF_VIDEO_DOWNSCALER_COEF3_POS) & RCDF_VIDEO_DOWNSCALER_COEF_MASK); - *coef4 = (unsigned short)((coef >> RCDF_VIDEO_DOWNSCALER_COEF4_POS) & RCDF_VIDEO_DOWNSCALER_COEF_MASK); - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_downscale_enable - * - * This routine returns 1 if video downscaling is currently enabled, - * or 0 if it is currently disabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_video_downscale_enable(int *enable) -#else -void gfx_get_video_downscale_enable(int *enable) -#endif -{ - if (READ_VID32(RCDF_VIDEO_DOWNSCALER_CONTROL) & RCDF_VIDEO_DOWNSCALE_ENABLE) - *enable = 1; - else - *enable = 0; - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_dst_size - * - * This routine returns the size of the displayed video overlay window. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_dst_size(void) -#else -unsigned long gfx_get_video_dst_size(void) -#endif -{ - unsigned long xsize, ysize; - - xsize = READ_VID32(RCDF_VIDEO_X_POS); - xsize = ((xsize >> 16) & 0x7FF) - (xsize & 0x7FF); - ysize = READ_VID32(RCDF_VIDEO_Y_POS); - ysize = ((ysize >> 16) & 0x7FF) - (ysize & 0x7FF); - return((ysize << 16) | xsize); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_position - * - * This routine returns the position of the video overlay window. The - * return value is (ypos << 16) | xpos. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_position(void) -#else -unsigned long gfx_get_video_position(void) -#endif -{ - unsigned long hadjust, vadjust; - unsigned long xpos, ypos; - - /* READ HARDWARE POSITION */ - - xpos = READ_VID32(RCDF_VIDEO_X_POS) & 0x000007FF; - ypos = READ_VID32(RCDF_VIDEO_Y_POS) & 0x000007FF; - - /* GET ADJUSTMENT VALUES */ - /* Use routines to abstract version of display controller. */ - - hadjust = (unsigned long)gfx_get_htotal() - (unsigned long)gfx_get_hsync_end() - 14l; - vadjust = (unsigned long)gfx_get_vtotal() - (unsigned long)gfx_get_vsync_end() + 1l; - xpos -= hadjust; - ypos -= vadjust; - return((ypos << 16) | (xpos & 0x0000FFFF)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key - * - * This routine returns the current video color key value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_color_key(void) -#else -unsigned long gfx_get_video_color_key(void) -#endif -{ - return(READ_VID32(RCDF_VIDEO_COLOR_KEY)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_mask - * - * This routine returns the current video color mask value. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_get_video_color_key_mask(void) -#else -unsigned long gfx_get_video_color_key_mask(void) -#endif -{ - return(READ_VID32(RCDF_VIDEO_COLOR_MASK)); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_color_key_src - * - * This routine returns 0 for video data compare, 1 for graphics data. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_color_key_src(void) -#else -int gfx_get_video_color_key_src(void) -#endif -{ - if (READ_VID32(RCDF_DISPLAY_CONFIG) & RCDF_DCFG_VG_CK) return(0); - return(1); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_filter - * - * This routine returns if the filters are currently enabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_filter(void) -#else -int gfx_get_video_filter(void) -#endif -{ - int retval = 0; - if (READ_VID32(RCDF_VIDEO_CONFIG) & RCDF_VCFG_X_FILTER_EN) - retval |= 1; - if (READ_VID32(RCDF_VIDEO_CONFIG) & RCDF_VCFG_Y_FILTER_EN) - retval |= 2; - return(retval); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_request - * - * This routine returns the horizontal (pixel) and vertical (lines) video - * request values. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_request(short *x, short *y) -#else -int gfx_get_video_request(short *x, short *y) -#endif -{ - unsigned long request = 0; - request = (READ_VID32(RCDF_VIDEO_REQUEST)); - *x = (short)((request >> RCDF_VIDEO_X_REQUEST_POS) & RCDF_VIDEO_REQUEST_MASK); - *y = (short)((request >> RCDF_VIDEO_Y_REQUEST_POS) & RCDF_VIDEO_REQUEST_MASK); - - *x -= gfx_get_htotal() - gfx_get_hsync_end() - 2; - *y -= gfx_get_vtotal() - gfx_get_vsync_end() + 1; - - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_get_video_cursor() - * - * This routine configures the video hardware cursor. - * If the "mask"ed bits in the graphics pixel match "key", then either "color1" - * or "color2" will be used for this pixel, according to the value of the bit - * in offset "select_color2". - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -int redcloud_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2) -#else -int gfx_get_video_cursor(unsigned long *key, unsigned long *mask, unsigned short *select_color2, - unsigned long *color1, unsigned short *color2) -#endif -{ - *select_color2 = (unsigned short)(READ_VID32(RCDF_CURSOR_COLOR_KEY) >> RCDF_CURSOR_COLOR_KEY_OFFSET_POS); - *key = READ_VID32(RCDF_CURSOR_COLOR_KEY) & RCDF_COLOR_MASK; - *mask = READ_VID32(RCDF_CURSOR_COLOR_MASK) & RCDF_COLOR_MASK; - *color1 = READ_VID32(RCDF_CURSOR_COLOR_1) & RCDF_COLOR_MASK; - *color2 = (unsigned short)(READ_VID32(RCDF_CURSOR_COLOR_2) & RCDF_COLOR_MASK); - return(0); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc - * - * This routine returns the hardware CRC value, which is used for automated - * testing. The value is like a checksum, but will change if pixels move - * locations. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_read_crc(void) -#else -unsigned long gfx_read_crc(void) -#endif -{ - Q_WORD msr_value; - unsigned long crc = 0xFFFFFFFF; - - /* DISABLE 32-BIT CRCS */ - /* For GX1.x, this is a reserved bit, and is assumed to be a benign access */ - - gfx_msr_read (RC_ID_DF, RCDF_MBD_MSR_DIAG_DF, &msr_value); - msr_value.low &= ~RCDF_DIAG_32BIT_CRC; - gfx_msr_write (RC_ID_DF, RCDF_MBD_MSR_DIAG_DF, &msr_value); - - if (gfx_test_timing_active()) - { - /* WAIT UNTIL ACTIVE DISPLAY */ - - while(!gfx_test_vertical_active()); - - /* RESET CRC DURING ACTIVE DISPLAY */ - - WRITE_VID32(RCDF_VID_CRC, 0); - WRITE_VID32(RCDF_VID_CRC, 1); - - /* WAIT UNTIL NOT ACTIVE, THEN ACTIVE, NOT ACTIVE, THEN ACTIVE */ - - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - crc = READ_VID32(RCDF_VID_CRC) >> 8; - } - return(crc); -} - -/*--------------------------------------------------------------------------- - * gfx_read_crc32 - * - * This routine returns the 32-bit hardware CRC value, which is used for automated - * testing. The value is like a checksum, but will change if pixels move - * locations. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_read_crc32(void) -#else -unsigned long gfx_read_crc32(void) -#endif -{ - Q_WORD msr_value; - unsigned long crc = 0xFFFFFFFF; - - /* ENABLE 32-BIT CRCS */ - /* For GX1.x, this is a reserved bit, and is assumed to be a benign access */ - - gfx_msr_read (RC_ID_DF, RCDF_MBD_MSR_DIAG_DF, &msr_value); - msr_value.low |= RCDF_DIAG_32BIT_CRC; - gfx_msr_write (RC_ID_DF, RCDF_MBD_MSR_DIAG_DF, &msr_value); - - if (gfx_test_timing_active()) - { - /* WAIT UNTIL ACTIVE DISPLAY */ - - while(!gfx_test_vertical_active()); - - /* RESET CRC DURING ACTIVE DISPLAY */ - - WRITE_VID32(RCDF_VID_CRC, 0); - WRITE_VID32(RCDF_VID_CRC, 1); - - /* WAIT UNTIL NOT ACTIVE, THEN ACTIVE, NOT ACTIVE, THEN ACTIVE */ - - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - crc = READ_VID32(RCDF_VID_CRC32); - } - return(crc); -} - -/*--------------------------------------------------------------------------- - * gfx_read_window_crc - * - * This routine returns the hardware CRC value for a subsection of the display. - * This value is used to debug whole-screen CRC failures. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -unsigned long redcloud_read_window_crc(int source, unsigned short x, unsigned short y, - unsigned short width, unsigned short height, int crc32) -#else -unsigned long gfx_read_window_crc(int source, unsigned short x, unsigned short y, - unsigned short width, unsigned short height, int crc32) -#endif -{ - Q_WORD msr_value; - unsigned long xpos, ypos, crc = 0; - unsigned long old_fmt = 0; - unsigned int vsync_active_base, vsync_inactive_base, hsync_active_base; - unsigned int vsync_active_shift, vsync_inactive_shift, hsync_active_shift; - unsigned int vsync_bit, hsync_bit, sync_polarities = 0; - - /* CONFIGURE DISPLAY FILTER TO LOAD DATA ONTO LOWER 32-BITS */ - - msr_value.high = 0; - msr_value.low = (source == CRC_SOURCE_GFX_DATA) ? (RCDF_MBD_DIAG_EN0 | 0x0000000F) : - (RCDF_MBD_DIAG_EN0 | 0x0000000B); - gfx_msr_write (RC_ID_DF, MBD_MSR_DIAG, &msr_value); - - /* CONFIGURE DISPLAY FILTER FOR APPROPRIATE OUTPUT */ - - if (source != CRC_SOURCE_GFX_DATA) - { - gfx_msr_read (RC_ID_DF, MBD_MSR_CONFIG, &msr_value); - old_fmt = msr_value.low; - msr_value.low &= ~(RCDF_CONFIG_FMT_MASK); - msr_value.low |= ((source == CRC_SOURCE_FP_DATA) ? RCDF_CONFIG_FMT_FP : - RCDF_CONFIG_FMT_CRT); - gfx_msr_write (RC_ID_DF, MBD_MSR_CONFIG, &msr_value); - } - - /* CONFIGURE MCP TO LOAD REGB DATA ONTO UPPER 32-BITS */ - - msr_value.low = MCP_MBD_DIAG_EN1 | 0x00050000; - gfx_msr_write (RC_ID_MCP, MBD_MSR_DIAG, &msr_value); - - /* ENABLE HW CLOCK GATING AND SET MCP CLOCK TO DOT CLOCK */ - - msr_value.low = 1l; - gfx_msr_write (RC_ID_MCP, MBD_MSR_PM, &msr_value); - msr_value.low = 0; - gfx_msr_write (RC_ID_MCP, MCP_DBGCLKCTL, &msr_value); - msr_value.low = 3; - gfx_msr_write (RC_ID_MCP, MCP_DBGCLKCTL, &msr_value); - - /* DISABLE MCP ACTIONS */ - - msr_value.high = 0x00000000; - msr_value.low = 0x00000000; - gfx_msr_write (RC_ID_MCP, MCP_DIAGCTL, &msr_value); - - /* SET APPROPRIATE BASE ADDRESS */ - /* M-Sets use normal diag bits, while N-Sets use inverted diag bits */ - /* We thus use the M-sets when polling for a high signal and the N */ - /* sets when polling for a low signal. */ - - if (source != CRC_SOURCE_GFX_DATA) - { - sync_polarities = gfx_get_sync_polarities (); - vsync_bit = 29; - hsync_bit = 30; - } - else - { - vsync_bit = 25; - hsync_bit = 26; - } - - if (sync_polarities & 1) - { - hsync_active_base = MCP_SETM0CTL; - hsync_active_shift = 2; - } - else - { - hsync_active_base = MCP_SETN0CTL; - hsync_active_shift = 1; - } - if (sync_polarities & 2) - { - vsync_active_base = MCP_SETM0CTL; - vsync_inactive_base = MCP_SETN0CTL; - vsync_active_shift = 2; - vsync_inactive_shift = 1; - } - else - { - vsync_active_base = MCP_SETN0CTL; - vsync_inactive_base = MCP_SETM0CTL; - vsync_active_shift = 1; - vsync_inactive_shift = 2; - } - - /* SET STATE TRANSITIONS */ - - /* STATE 0-1 TRANSITION (SET 0) */ - /* XState = 00 and VSync Inactive */ - /* Note: DF VSync = Diag Bus Bit 29 */ - /* VG VSync = Diag Bus Bit 25 */ - - msr_value.low = 0x000000A0; - msr_value.high = 0x00008000 | ((unsigned long)vsync_bit << 16) | - ((unsigned long)vsync_bit << 21) | - ((unsigned long)vsync_bit << 26); - gfx_msr_write (RC_ID_MCP, vsync_inactive_base, &msr_value); - - /* STATE 1-2 TRANSITION (SET 4) */ - /* XState = 01 and VSync Active */ - - msr_value.low = 0x000000C0; - gfx_msr_write (RC_ID_MCP, vsync_active_base + 4, &msr_value); - - /* STATE 2-3 TRANSITION (SET 1) */ - /* XState = 10 and VSync Inactive */ - - msr_value.low = 0x00000120; - gfx_msr_write (RC_ID_MCP, vsync_inactive_base + 1, &msr_value); - - /* HORIZONTAL COUNTER (SET 5) */ - /* XState = 10 and HSync Active */ - /* Notes: DF HSync = Diag Bus Bit 30 */ - /* VG HSync = Diag Bus Bit 26 */ - - msr_value.high = 0x00008000 | ((unsigned long)hsync_bit << 16) | - ((unsigned long)hsync_bit << 21) | - ((unsigned long)hsync_bit << 26); - msr_value.low = 0x00000120; - gfx_msr_write (RC_ID_MCP, hsync_active_base + 5, &msr_value); - - /* HORIZONTAL COUNTER RESET (SET 4) */ - /* XState = 10 and H. Counter = limit */ - /* Note: H. Counter is lower 16-bits of */ - /* RegB. */ - - msr_value.high = 0x00000000; - msr_value.low = 0x00000128; - gfx_msr_write (RC_ID_MCP, vsync_inactive_base + 4, &msr_value); - - /* CRC TRIGGER (SET 0) */ - /* Cmp0 <= xpos < Cmp1 */ - /* Cmp2 <= ypos < Cmp2 */ - - msr_value.high = 0x00000000; - msr_value.low = 0x10C20120; - gfx_msr_write (RC_ID_MCP, vsync_active_base, &msr_value); - - /* SET COMPARATOR VALUES */ - /* Note: The VG data outputs from the DF are delayed by one pixel clock. */ - /* In this mode, we thus add one to horizontal comparator limits. */ - - /* COMPARATOR 0 */ - /* Lower limit = xpos + (h_blank_pixels - 1) - 3 */ - /* Notes: */ - /* 1. 3 is the pipeline delay for MCP register */ - /* data to access the diag bus */ - /* 2. h_blank_pixels = HTOTAL - HSYNC_END */ - - xpos = (unsigned long)x + ((unsigned long)gfx_get_htotal() - - (unsigned long)gfx_get_hsync_end() - 1l) - 3l; - if (source == CRC_SOURCE_GFX_DATA) xpos++; - msr_value.high = 0x00000000; - msr_value.low = xpos; - gfx_msr_write (RC_ID_MCP, MCP_CMPVAL0, &msr_value); - - /* COMPARATOR 1 */ - /* Upper limit = xpos + width + (h_blank_pixels - 1) - 3 */ - - msr_value.low = xpos + (unsigned long)width; - gfx_msr_write (RC_ID_MCP, MCP_CMPVAL0 + 2, &msr_value); - - /* COMPARATOR 2 */ - /* Lower limit = ypos + v_blank_pixels */ - /* Notes: */ - /* 1. v_blank_pixels = VTOTAL - VSYNC_END */ - - ypos = (unsigned long)y + (unsigned long)gfx_get_vtotal() - (unsigned long)gfx_get_vsync_end(); - msr_value.low = ypos << 16; - gfx_msr_write (RC_ID_MCP, MCP_CMPVAL0 + 4, &msr_value); - - /* COMPARATOR 3 */ - /* Upper limit = ypos + height + v_blank_pixels */ - - msr_value.low = (ypos + (unsigned long)height) << 16; - gfx_msr_write (RC_ID_MCP, MCP_CMPVAL0 + 6, &msr_value); - - /* SET COMPARATOR MASKS */ - - /* COMPARATORS 0 AND 1 REFER TO LOWER 16 BITS OF REGB */ - - msr_value.high = 0x00000000; - msr_value.low = 0x0000FFFF; - gfx_msr_write (RC_ID_MCP, MCP_CMPMASK0, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_CMPMASK0 + 2, &msr_value); - - /* COMPARATORS 2 AND 3 REFER TO UPPER 16 BITS OF REGB */ - - msr_value.low = 0xFFFF0000; - gfx_msr_write (RC_ID_MCP, MCP_CMPMASK0 + 4, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_CMPMASK0 + 6, &msr_value); - - /* SET REGA MASK TO CRC ONLY 24 BITS OF DATA */ - - msr_value.high = 0x00000000; - msr_value.low = 0x00FFFFFF; - gfx_msr_write (RC_ID_MCP, MCP_REGAMASK, &msr_value); - - /* SET REGB VALUE */ - /* Lower 16 bits use HTOTAL - SYNC TIME - 1 to set the counter rollover limit. */ - /* Upper 16 bits use 0xFFFF to remove auto-clear behavior. */ - - msr_value.high = 0x00000000; - msr_value.low = 0xFFFF0000 | - ((gfx_get_htotal() - (gfx_get_hsync_end() - gfx_get_hsync_start()) - 1) & 0xFFFF); - gfx_msr_write (RC_ID_MCP, MCP_REGBVAL, &msr_value); - - /* PROGRAM ACTIONS */ - - /* GOTO STATE 01 */ - - msr_value.high = 0x00000000; - msr_value.low = 0x00000008 | (1l << vsync_inactive_shift); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 14, &msr_value); - - /* GOTO STATE 10 */ - - msr_value.low = 0x00080000 | (1l << (vsync_active_shift + 16)); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 15, &msr_value); - - /* GOTO STATE 11 */ - - msr_value.low = 0x00000080 | (1l << (vsync_inactive_shift + 4)); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 16, &msr_value); - - /* CLEAR REGB (COUNTERS) */ - /* RegB is cleared upon transitioning to state 10 */ - /* RegA is not cleared as the initial value must be 0x00000001 */ - - msr_value.low = 0x00080000 | (1l << (vsync_active_shift + 16)); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0, &msr_value); - - /* CRC INTO REGA */ - /* INCREMENT H. COUNTER */ - /* cmp0 <= xpos < cmp1 */ - /* cmp2 <= ypos < cmp3 */ - /* XState = 10 */ - - msr_value.low = 0x00000008 | (1l << vsync_active_shift) | - 0x00800000 | (1l << (hsync_active_shift + 20)); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 1, &msr_value); - - /* INCREMENT V. COUNTER */ - /* V. Counter is incremented when the H. Counter */ - /* rolls over. */ - - msr_value.low = 0x00080000 | (1l << (vsync_inactive_shift + 16)); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 2, &msr_value); - - /* CLEAR ALL OTHER ACTIONS */ - /* This prevents side-effects from previous accesses to the MCP */ - /* debug logic. */ - msr_value.low = 0x00000000; - msr_value.high = 0x00000000; - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 3, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 4, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 5, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 6, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 7, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 8, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 9, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 10, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 11, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 12, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 13, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 17, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 18, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 19, &msr_value); - gfx_msr_write (RC_ID_MCP, MCP_ACTION0 + 20, &msr_value); - - /* SET REGA CRC VALUE TO 1 OR 0 */ - - if (!crc32) - msr_value.low = 0x00000001; - gfx_msr_write (RC_ID_MCP, MCP_REGA, &msr_value); - - /* SET XSTATE TO 0 */ - - msr_value.low = 0; - msr_value.high = 0; - gfx_msr_write (RC_ID_MCP, MCP_XSTATE, &msr_value); - - /* CONFIGURE DIAG CONTROL */ - /* Set all four comparators to watch the upper diag bus. */ - /* Set REGA action1 to legacy CRC or 32-bit CRC. */ - /* Set REGB action1 to increment lower 16 bits and clear at limit. */ - /* Set REGB action2 to increment upper 16 bits. */ - /* Enable all actions. */ - - if (crc32) - msr_value.low = 0x9A820055; - else - msr_value.low = 0x9A840055; - msr_value.high = 0x00000000; - gfx_msr_write (RC_ID_MCP, MCP_DIAGCTL, &msr_value); - - /* DELAY TWO FRAMES */ - - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - while(gfx_test_vertical_active()); - while(!gfx_test_vertical_active()); - - /* VERIFY THAT XSTATE = 11 */ - - gfx_msr_read (RC_ID_MCP, MCP_XSTATE, &msr_value); - if ((msr_value.low & 3) == 3) - { - gfx_msr_read (RC_ID_MCP, MCP_REGA, &msr_value); - - crc = msr_value.low; - if (!crc32) - crc &= 0xFFFFFF; - } - - /* DISABLE MCP AND DF DIAG BUS OUTPUTS */ - - msr_value.low = 0x00000000; - msr_value.high = 0x00000000; - gfx_msr_write (RC_ID_DF, MBD_MSR_DIAG, &msr_value); - gfx_msr_write (RC_ID_MCP, MBD_MSR_DIAG, &msr_value); - - /* DISABLE MCP ACTIONS */ - - msr_value.high = 0x00000000; - msr_value.low = 0x00000000; - gfx_msr_write (RC_ID_MCP, MCP_DIAGCTL, &msr_value); - - /* RESTORE PREVIOUS OUTPUT FORMAT */ - - if (source != CRC_SOURCE_GFX_DATA) - { - gfx_msr_read (RC_ID_DF, MBD_MSR_CONFIG, &msr_value); - msr_value.low = old_fmt; - gfx_msr_write (RC_ID_DF, MBD_MSR_CONFIG, &msr_value); - } - return crc; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_enable - * - * This routine returns 1 if the selected alpha window is currently - * enabled, or 0 if it is currently disabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_alpha_enable(int *enable) -#else -void gfx_get_alpha_enable(int *enable) -#endif -{ - unsigned long value = 0; - *enable = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(RCDF_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 5)); - if (value & RCDF_ACTRL_WIN_ENABLE) *enable = 1; - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_size - * - * This routine returns the size of the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height) -#else -void gfx_get_alpha_size(unsigned short *x, unsigned short *y, - unsigned short *width, unsigned short *height) -#endif -{ - unsigned long value = 0; - *x = 0; - *y = 0; - *width = 0; - *height = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(RCDF_ALPHA_XPOS_1 + ((unsigned long)gfx_alpha_select << 5)); - *x = (unsigned short) (value & 0x000007FF); - *width = (unsigned short) ((value >> 16) & 0x000007FF) - *x; - value = READ_VID32(RCDF_ALPHA_YPOS_1 + ((unsigned long)gfx_alpha_select << 5)); - *y = (unsigned short) (value & 0x000007FF); - *height = (unsigned short) ((value >> 16) & 0x000007FF) - *y; - } - *x -= gfx_get_htotal() - gfx_get_hsync_end() - 2; - *y -= gfx_get_vtotal() - gfx_get_vsync_end() + 1; - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_value - * - * This routine returns the alpha value and increment/decrement value of - * the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_alpha_value(unsigned char *alpha, char *delta) -#else -void gfx_get_alpha_value(unsigned char *alpha, char *delta) -#endif -{ - unsigned long value = 0; - *alpha = 0; - *delta = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(RCDF_ALPHA_CONTROL_1 + ((unsigned long)gfx_alpha_select << 5)); - *alpha = (unsigned char) (value & 0x00FF); - *delta = (char) ((value >> 8) & 0x00FF); - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_priority - * - * This routine returns the priority of the currently selected alpha region. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_alpha_priority(int *priority) -#else -void gfx_get_alpha_priority(int *priority) -#endif -{ - unsigned long pos = 0, value = 0; - *priority = 0; - if (gfx_alpha_select <= 2) - { - value = READ_VID32(RCDF_VID_ALPHA_CONTROL); - pos = 16 + (gfx_alpha_select << 1); - *priority = (int) ((value >> pos) & 3); - } - return; -} - -/*--------------------------------------------------------------------------- - * gfx_get_alpha_color - * - * This routine returns the color register value for the currently selected - * alpha region. Bit 24 is set if the color register is enabled. - *--------------------------------------------------------------------------- - */ -#if GFX_VIDEO_DYNAMIC -void redcloud_get_alpha_color(unsigned long *color) -#else -void gfx_get_alpha_color(unsigned long *color) -#endif -{ - *color = 0; - if (gfx_alpha_select <= 2) - { - *color = READ_VID32(RCDF_ALPHA_COLOR_1 + ((unsigned long)gfx_alpha_select << 5)); - } - return; -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vip_1200.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vip_1200.c deleted file mode 100644 index 819592bc3..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vip_1200.c +++ /dev/null @@ -1,673 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/gfx/vip_1200.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: vip_1200.c $ - * - * This file contains routines to control the SC1200 video input port (VIP) hardware. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -/*----------------------------------------------------------------------------- - * gfx_set_vip_enable - * - * This routine enables or disables the writes to memory from the video port. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_enable(int enable) -#else -int gfx_set_vip_enable(int enable) -#endif -{ - unsigned long value; - value = READ_VIP32(SC1200_VIP_CONTROL); - if (enable) - value |= SC1200_VIP_DATA_CAPTURE_EN; - else - value &= ~SC1200_VIP_DATA_CAPTURE_EN; - WRITE_VIP32(SC1200_VIP_CONTROL, value); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_capture_run_mode - * - * This routine selects VIP capture run mode. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_capture_run_mode(int mode) -#else -int gfx_set_vip_capture_run_mode(int mode) -#endif -{ - unsigned long value; - value = READ_VIP32(SC1200_VIP_CONTROL); - value &= ~SC1200_CAPTURE_RUN_MODE_MASK; - switch(mode) - { - case VIP_CAPTURE_STOP_LINE: - value |= SC1200_CAPTURE_RUN_MODE_STOP_LINE; - break; - case VIP_CAPTURE_STOP_FIELD: - value |= SC1200_CAPTURE_RUN_MODE_STOP_FIELD; - break; - case VIP_CAPTURE_START_FIELD: - value |= SC1200_CAPTURE_RUN_MODE_START; - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - WRITE_VIP32(SC1200_VIP_CONTROL, value); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_base - * - * This routine sets the odd and even base address values for the VIP memory - * buffer. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_base(unsigned long even, unsigned long odd) -#else -int gfx_set_vip_base(unsigned long even, unsigned long odd) -#endif -{ - /* TRUE OFFSET IS SPECIFIED, NEED TO SET BIT 23 FOR HARDWARE */ - - if (even) WRITE_VIP32(SC1200_VIP_EVEN_BASE, even + (unsigned long)gfx_phys_fbptr); - if (odd) WRITE_VIP32(SC1200_VIP_ODD_BASE, odd + (unsigned long)gfx_phys_fbptr); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_pitch - * - * This routine sets the number of bytes between scanlines for the VIP data. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_pitch(unsigned long pitch) -#else -int gfx_set_vip_pitch(unsigned long pitch) -#endif -{ - WRITE_VIP32(SC1200_VIP_PITCH, pitch & SC1200_VIP_PITCH_MASK); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_mode - * - * This routine sets the VIP operating mode. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_mode(int mode) -#else -int gfx_set_vip_mode(int mode) -#endif -{ - unsigned long config; - - config = READ_VIP32(SC1200_VIP_CONFIG); - config &= ~SC1200_VIP_MODE_MASK; - switch(mode) - { - case VIP_MODE_C: - WRITE_VIP32(SC1200_VIP_CONFIG, config | SC1200_VIP_MODE_C); - break; - default: - return GFX_STATUS_BAD_PARAMETER; - } - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_enable - * - * This routine enables or disables the VBI data capture. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_enable(int enable) -#else -int gfx_set_vbi_enable(int enable) -#endif -{ - unsigned long value; - value = READ_VIP32(SC1200_VIP_CONTROL); - if (enable) value |= SC1200_VIP_VBI_CAPTURE_EN; - else value &= ~SC1200_VIP_VBI_CAPTURE_EN; - WRITE_VIP32(SC1200_VIP_CONTROL, value); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_mode - * - * This routine sets the VBI data types captured to memory. - * It receives a mask of all enabled types. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_mode(int mode) -#else -int gfx_set_vbi_mode(int mode) -#endif -{ - unsigned long config; - - config = READ_VIP32(SC1200_VIP_CONFIG); - config &= ~(SC1200_VBI_ANCILLARY_TO_MEMORY | SC1200_VBI_TASK_A_TO_MEMORY | SC1200_VBI_TASK_B_TO_MEMORY); - - if (mode & VBI_ANCILLARY) config |= SC1200_VBI_ANCILLARY_TO_MEMORY; - if (mode & VBI_TASK_A) config |= SC1200_VBI_TASK_A_TO_MEMORY; - if (mode & VBI_TASK_B) config |= SC1200_VBI_TASK_B_TO_MEMORY; - WRITE_VIP32(SC1200_VIP_CONFIG, config); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_base - * - * This routine sets the odd and even base address values for VBI capture. - * - * "even" and "odd" should contain 16-byte aligned physical addresses. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_base(unsigned long even, unsigned long odd) -#else -int gfx_set_vbi_base(unsigned long even, unsigned long odd) -#endif -{ - /* VIP HW REQUIRES THAT BASE ADDRESSES BE 16-BYTE ALIGNED */ - - if (even) WRITE_VIP32(SC1200_VBI_EVEN_BASE, even & ~0xf); - if (odd) WRITE_VIP32(SC1200_VBI_ODD_BASE, odd & ~0xf); - - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_pitch - * - * This routine sets the number of bytes between scanlines for VBI capture. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_pitch(unsigned long pitch) -#else -int gfx_set_vbi_pitch(unsigned long pitch) -#endif -{ - WRITE_VIP32(SC1200_VBI_PITCH, pitch & SC1200_VBI_PITCH_MASK); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_direct - * - * This routine sets the VBI lines to be passed to the Direct VIP. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_direct(unsigned long even_lines, unsigned long odd_lines) -#else -int gfx_set_vbi_direct(unsigned long even_lines, unsigned long odd_lines) -#endif -{ - WRITE_VIP32(SC1200_EVEN_DIRECT_VBI_LINE_ENABLE, even_lines & SC1200_DIRECT_VBI_LINE_ENABLE_MASK); - WRITE_VIP32(SC1200_ODD_DIRECT_VBI_LINE_ENABLE, odd_lines & SC1200_DIRECT_VBI_LINE_ENABLE_MASK); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vbi_interrupt - * - * This routine enables or disables the VBI field interrupt. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vbi_interrupt(int enable) -#else -int gfx_set_vbi_interrupt(int enable) -#endif -{ - unsigned long value; - value = READ_VIP32(SC1200_VIP_CONTROL); - if (enable) - value |= SC1200_VIP_VBI_FIELD_INTERRUPT_EN; - else - value &= ~SC1200_VIP_VBI_FIELD_INTERRUPT_EN; - WRITE_VIP32(SC1200_VIP_CONTROL, value); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_bus_request_threshold_high - * - * This routine sets the VIP FIFO bus request threshold. - * If enable is TRUE, VIP FIFO will be set to issue a bus request when it filled with 64 bytes. - * If enable is FALSE, VIP FIFO will be set to issue a bus request when it filled with 32 bytes. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_bus_request_threshold_high(int enable) -#else -int gfx_set_vip_bus_request_threshold_high(int enable) -#endif -{ - unsigned long value; - value = READ_VIP32(SC1200_VIP_CONFIG); - if (enable) - value &= ~SC1200_VIP_BUS_REQUEST_THRESHOLD; - else - value |= SC1200_VIP_BUS_REQUEST_THRESHOLD; - WRITE_VIP32(SC1200_VIP_CONFIG, value); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_set_vip_last_line - * - * This routine sets the maximum number of lines captured in each field. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_set_vip_last_line(int last_line) -#else -int gfx_set_vip_last_line(int last_line) -#endif -{ - unsigned long value; - - /* This feature is implemented in Rev C1 */ - if (gfx_chip_revision < SC1200_REV_C1) return(GFX_STATUS_OK); - - value = READ_VIP32(SC1200_VIP_LINE_TARGET); - value &= ~SC1200_VIP_LAST_LINE_MASK; - value |= ((last_line & 0x3FF) << 16); - WRITE_VIP32(SC1200_VIP_LINE_TARGET, value); - return(GFX_STATUS_OK); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_odd_field - * - * This routine returns 1 if the current VIP field is odd. Otherwise returns 0. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_test_vip_odd_field(void) -#else -int gfx_test_vip_odd_field(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_STATUS) & SC1200_VIP_CURRENT_FIELD_ODD) - return(1); - else - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_bases_updated - * - * This routine returns 1 if all of the VIP base registers have been updated, - * i.e. there is no base register which has been written with a new address, - * that VIP has not already captured or started capturing into the new address. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_test_vip_bases_updated(void) -#else -int gfx_test_vip_bases_updated(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_STATUS) & SC1200_VIP_BASE_NOT_UPDATED) - return(0); - else - return(1); -} - -/*----------------------------------------------------------------------------- - * gfx_test_vip_fifo_overflow - * - * This routine returns 1 if an overflow occurred on the FIFO between the VIP - * and the fast X-bus, 0 otherwise. - * If an overflow occurred, the overflow status indication is reset. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_test_vip_fifo_overflow(void) -#else -int gfx_test_vip_fifo_overflow(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_STATUS) & SC1200_VIP_FIFO_OVERFLOW) { - /* Bits in vip status register are either read only or reset by writing 1 */ - WRITE_VIP32(SC1200_VIP_STATUS, SC1200_VIP_FIFO_OVERFLOW); - return(1); - } else { - return(0); - } -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_line - * - * This routine returns the number of the current video line being - * received by the VIP interface. - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vip_line(void) -#else -int gfx_get_vip_line(void) -#endif -{ - return (int)(READ_VIP32(SC1200_VIP_CURRENT_LINE) & SC1200_VIP_CURRENT_LINE_MASK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_base - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -unsigned long sc1200_get_vip_base(int odd) -#else -unsigned long gfx_get_vip_base(int odd) -#endif -{ - /* MASK BIT 23 AND ABOVE TO MAKE IT A TRUE OFFSET */ - - if (odd) return(READ_VIP32(SC1200_VIP_ODD_BASE)); - return(READ_VIP32(SC1200_VIP_EVEN_BASE)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_pitch - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -unsigned long sc1200_get_vbi_pitch(void) -#else -unsigned long gfx_get_vbi_pitch(void) -#endif -{ - return(READ_VIP32(SC1200_VBI_PITCH) & SC1200_VBI_PITCH_MASK); -} - -/*************************************************************/ -/* READ ROUTINES | INCLUDED FOR DIAGNOSTIC PURPOSES ONLY */ -/*************************************************************/ - -#if GFX_READ_ROUTINES - -/*----------------------------------------------------------------------------- - * gfx_get_vip_enable - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vip_enable(void) -#else -int gfx_get_vip_enable(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_CONTROL) & SC1200_VIP_DATA_CAPTURE_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_pitch - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -unsigned long sc1200_get_vip_pitch(void) -#else -unsigned long gfx_get_vip_pitch(void) -#endif -{ - return(READ_VIP32(SC1200_VIP_PITCH) & SC1200_VIP_PITCH_MASK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_mode - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vip_mode(void) -#else -int gfx_get_vip_mode(void) -#endif -{ - switch(READ_VIP32(SC1200_VIP_CONFIG) & SC1200_VIP_MODE_MASK) - { - case SC1200_VIP_MODE_C: return VIP_MODE_C; - default: return(0); - } -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_enable - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vbi_enable(void) -#else -int gfx_get_vbi_enable(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_CONTROL) & SC1200_VIP_VBI_CAPTURE_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_mode - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vbi_mode(void) -#else -int gfx_get_vbi_mode(void) -#endif -{ - int config; - int mode = 0; - config = (int)(READ_VIP32(SC1200_VIP_CONFIG) & (SC1200_VBI_ANCILLARY_TO_MEMORY | SC1200_VBI_TASK_A_TO_MEMORY | - SC1200_VBI_TASK_B_TO_MEMORY)); - if (config & SC1200_VBI_ANCILLARY_TO_MEMORY) mode |= VBI_ANCILLARY; - if (config & SC1200_VBI_TASK_A_TO_MEMORY) mode |= VBI_TASK_A; - if (config & SC1200_VBI_TASK_B_TO_MEMORY) mode |= VBI_TASK_B; - return mode; -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_base - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -unsigned long sc1200_get_vbi_base(int odd) -#else -unsigned long gfx_get_vbi_base(int odd) -#endif -{ - /* MASK BIT 23 AND ABOVE TO MAKE IT A TRUE OFFSET */ - - if (odd) return(READ_VIP32(SC1200_VBI_ODD_BASE)); - return(READ_VIP32(SC1200_VBI_EVEN_BASE)); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_direct - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -unsigned long sc1200_get_vbi_direct(int odd) -#else -unsigned long gfx_get_vbi_direct(int odd) -#endif -{ - /* MASK BIT 23 AND ABOVE TO MAKE IT A TRUE OFFSET */ - - if (odd) return(READ_VIP32(SC1200_ODD_DIRECT_VBI_LINE_ENABLE) & SC1200_DIRECT_VBI_LINE_ENABLE_MASK); - return(READ_VIP32(SC1200_EVEN_DIRECT_VBI_LINE_ENABLE) & SC1200_DIRECT_VBI_LINE_ENABLE_MASK); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vbi_interrupt - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vbi_interrupt(void) -#else -int gfx_get_vbi_interrupt(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_CONTROL) & SC1200_VIP_VBI_FIELD_INTERRUPT_EN) return(1); - return(0); -} - -/*----------------------------------------------------------------------------- - * gfx_get_vip_bus_request_threshold_high - *----------------------------------------------------------------------------- - */ -#if GFX_VIP_DYNAMIC -int sc1200_get_vip_bus_request_threshold_high(void) -#else -int gfx_get_vip_bus_request_threshold_high(void) -#endif -{ - if (READ_VIP32(SC1200_VIP_CONFIG) & SC1200_VIP_BUS_REQUEST_THRESHOLD) return(1); - return(0); -} - -#endif /* GFX_READ_ROUTINES */ - -/* END OF FILE */ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel.c deleted file mode 100644 index 29d4025d6..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel.c +++ /dev/null @@ -1,178 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel.c,v 1.2 2002/10/18 20:02:39 tsi Exp $ */ -/* - * $Workfile: panel.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contailns the panel include files and - * external pointer to the hardware. - * - * Project: Geode Xfree Frame buffer device driver. - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#if defined(linux) /* Linux */ - -#ifdef __KERNEL__ - -#include <linux/string.h> -#include <asm/io.h> - -#else - -#include <linux/fs.h> -#include <asm/mman.h> - -#endif /* __KERNEL__ */ -#elif defined(_WIN32) /* windows */ - -#include <windows.h> - -#endif - -#include "panel.h" -#include "gfx_defs.h" -extern unsigned char *gfx_virt_regptr; -extern unsigned char *gfx_virt_fbptr; -extern unsigned char *gfx_virt_vidptr; -extern unsigned char *gfx_virt_vipptr; -extern unsigned long gfx_detect_video(void); - -#define PLATFORM_DYNAMIC 1 /* runtime selection */ -#define PLATFORM_DRACO 0 /* Draco + 9210 */ -#define PLATFORM_CENTAURUS 1 /* Centaurus + 9211 RevA */ -#define PLATFORM_DORADO 1 /* Dorado + 9211 RevC */ -#define PLATFORM_GX2BASED 0 /* ??? */ - -unsigned char *XpressROMPtr; - -#include "pnl_init.c" -#include "pnl_bios.c" diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/92xx.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/92xx.h deleted file mode 100644 index 7282ecb50..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/92xx.h +++ /dev/null @@ -1,466 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/92xx.h,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: 92xx.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This header file defines the Durango routines and - * variables used to access the memory mapped regions. - * - * SubModule: Geode FlatPanel library - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#ifndef _92XX_h -#define _92XX_h - -typedef unsigned long ULONG; -typedef unsigned char UCHAR; - -#define FALSE 0 -#define TRUE 1 -#define NUM_92XX_MODES 13 -#define ONE_BYTE 1 -#define TWO_BYTES 2 -#define FOUR_BYTES 4 - -/* LCD Registers - * The LCD memory area is shared by both TV and LCD. - * This offset is for LCD access. - */ - -#define CS92xx_LCD_OFFSET 0x00000400 - -/* LCD CONTROL REGISTERS */ - -#define CS92xx_LCD_PAN_TIMING1 CS92xx_LCD_OFFSET + 0x00 - -/* flat panel(FP) timings */ -#define CS92xx_LCD_PAN_TIMING2 CS92xx_LCD_OFFSET + 0x04 - -/* FP panel timings */ -#define CS92xx_LCD_PWR_MAN CS92xx_LCD_OFFSET + 0x08 - -/* FP power management */ -#define CS92xx_LCD_DITH_FR_CNTRL CS92xx_LCD_OFFSET + 0x0C - -/* FP dither and frame rate - * these defines are in revisions prior to C - */ -#define CS92xx_LCD_BLOCK_SEL1 CS92xx_LCD_OFFSET + 0x10 - -/* FRM register */ -#define CS92xx_LCD_BLOCK_SEL2 CS92xx_LCD_OFFSET + 0x14 - -/* FRM register */ -#define CS92xx_LCD_DISPER1 CS92xx_LCD_OFFSET + 0x18 - -/* FRM register */ -#define CS92xx_LCD_DISPER2 CS92xx_LCD_OFFSET + 0x1C - -/* FRM register - * these defines are revision C - */ -#define CS92xx_BLUE_LSFR_SEED CS92xx_LCD_OFFSET + 0x10 - -/* FRM register */ -#define CS92xx_RED_GREEN_LSFR_SEED CS92xx_LCD_OFFSET + 0x14 - -/* FRM register */ -#define CS92xx_FRM_MEMORY_INDEX CS92xx_LCD_OFFSET + 0x18 - -/* FRM register */ -#define CS92xx_FRM_MEMORY_DATA CS92xx_LCD_OFFSET + 0x1C - -/* FRM register */ -#define CS92xx_LCD_MEM_CNTRL CS92xx_LCD_OFFSET + 0x20 - -/* memory PLL register */ -#define CS92xx_LCD_RAM_CNTRL CS92xx_LCD_OFFSET + 0x24 - -/* ram control */ - -#define CS92xx_LCD_RAM_DATA CS92xx_LCD_OFFSET + 0x28 /* ram data */ - -#define CS92xx_LCD_PAN_CRC_SIG CS92xx_LCD_OFFSET + 0x2C - -/* FP CRC signature */ -#define CS92xx_DEV_REV_ID CS92xx_LCD_OFFSET + 0x30 - -/* Device and revision id */ -#define CS92xx_LCD_GPIO_DATA CS92xx_LCD_OFFSET + 0x34 /* GPIO Data */ - -#define CS92xx_LCD_GPIO_CNTRL CS92xx_LCD_OFFSET + 0x38 - -/* GPIO Control */ -int Pnl_Rev_ID; - -typedef struct -{ - /* DISPLAY MODE PARAMETERS */ - int xres; - int yres; - int bpp; - int panel_type; - int color_type; - /* VALUES USED TO SET THE FLAT PANEL DISPLAY CONTROLLER */ - unsigned long panel_timing1; - unsigned long panel_timing2; - unsigned long power_management; - /* the following 5 registers are prior to revision C */ - unsigned long pre_C_dither_frc; - unsigned long block_select1; - unsigned long block_select2; - unsigned long dispersion1; - unsigned long dispersion2; - /* the following 4 registers are revision C only */ - unsigned long rev_C_dither_frc; - unsigned long blue_lsfr_seed; - unsigned long red_green_lsfr_seed; - unsigned long frm_memory_index; - unsigned long frm_memory_data; - unsigned long memory_control; - -} CS92xx_MODE; - -/* VALUES USED TO SAVE AND RESTORE 9211 REGISTERS. */ -typedef struct -{ - unsigned long panel_state; - /* VALUES USED TO SET THE FLAT PANEL DISPLAY CONTROLLER */ - unsigned long panel_timing1; - unsigned long panel_timing2; - unsigned long power_management; - unsigned long dither_frc_ctrl; - unsigned long blue_lsfr_seed; - unsigned long red_green_lsfr_seed; - unsigned long frm_memory_index; - unsigned long frm_memory_data; - unsigned long memory_control; -} CS92xx_REGS; - -CS92xx_REGS cs9211_regs; -/* - *------------------------------------------------------------------------ - * PANEL MODE TABLES: - * GLOBAL ARRAY OF FLAT PANEL MODE STRUCTURES - *------------------------------------------------------------------------ - */ -CS92xx_MODE FPModeParams[] = { - -{ 640, 480, 8, PNL_SSTN, PNL_COLOR_PANEL, /* display parameters */ - 0x01e00000, 0x00034000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x25cf3096, 0xad47b81e, /* block select 1, block select 2 */ - 0x21446450, 0x21446450, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 640, 480, 12, PNL_TFT, PNL_COLOR_PANEL, /* display parameters */ - 0x01e00000, 0x0f100000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* block select 1, block select 2 */ - 0x00000000, 0x00000000, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 640, 480, 18, PNL_TFT, PNL_COLOR_PANEL, /* display parameters */ - 0x01e00000, 0x0f100000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* block select 1, block select 2 */ - 0x00000000, 0x00000000, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 640, 480, 16, PNL_DSTN, PNL_COLOR_PANEL, /* display parameters */ - 0x01e00000, 0x00014000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x048c26ae, 0x048c26ae, /* block select 1, block select 2 */ - 0x02468ace, 0x13579bdf, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x0000004b, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 640, 480, 8, PNL_DSTN, PNL_MONO_PANEL, /* display parameters */ - 0x01e00000, 0x00084000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x0000004b, /* dither and frame rate control */ - 0x25cf3096, 0xad47b81e, /* block select 1, block select 2 */ - 0x21446450, 0x21446450, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 640, 480, 16, PNL_DSTN, PNL_MONO_PANEL, /* display parameters */ - 0x01e00000, 0x00094000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x25cf3096, 0xad47b81e, /* block select 1, block select 2 */ - 0x81a5d470, 0x29cfb63e, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 800, 600, 12, PNL_TFT, PNL_COLOR_PANEL, /* display parameters */ - 0x02580000, 0x0f100000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* block select 1, block select 2 */ - 0x00000000, 0x00000000, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 800, 600, 18, PNL_TFT, PNL_COLOR_PANEL, /* display parameters */ - 0x02580000, 0x0f100000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* block select 1, block select 2 */ - 0x00000000, 0x00000000, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 800, 600, 16, PNL_DSTN, PNL_COLOR_PANEL, /* display parameters */ - 0x02580000, 0x00014000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x048c26ae, 0x048c26ae, /* block select 1, block select 2 */ - 0x02468ace, 0x13579bdf, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x0000004b, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 800, 600, 8, PNL_DSTN, PNL_MONO_PANEL, /* display parameters */ - 0x02580000, 0x00084000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x25cf3096, 0xad47b81e, /* block select 1, block select 2 */ - 0x21446450, 0x21446450, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x0000004b, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 800, 600, 16, PNL_DSTN, PNL_MONO_PANEL, /* display parameters */ - 0x02580000, 0x00094000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /* The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x25cf3096, 0xad47b81e, /* block select 1, block select 2 */ - 0x81a5d470, 0x29cfb63e, /* dispersion 1, dispersion 2 */ - /* The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000007, /* memory control */ -}, - -{ 1024, 768, 18, PNL_TFT, PNL_COLOR_PANEL, /* display parameters */ - 0x03000000, 0x0f100000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /*The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* block select 1, block select 2 */ - 0x00000000, 0x00000000, /* dispersion 1, dispersion 2 */ - /*The next 5 values are for revision C */ - 0x00000050, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000000, /* memory control */ -}, - -{ 1024, 768, 24, PNL_DSTN, PNL_COLOR_PANEL, /* display parameters */ - 0x03000000, 0x80024000, /* panel timing reg 1, panel timing reg 2 */ - 0x01000000, /* power management */ - /*The next 5 values are prior to revision C */ - 0x00000050, /* dither and frame rate control */ - 0x048c26ae, 0x048c26ae, /* block select 1, block select 2 */ - 0x02468ace, 0x13579bdf, /* dispersion 1, dispersion 2 */ - /*The next 5 values are for revision C */ - 0x0000004b, /* dither and frame rate control */ - 0x00000000, 0x00000000, /* blue LSFR, red and green LSFR */ - 0x00000000, 0x00000000, /* FRM memory index, FRM memory data */ - 0x00000005, /* memory control */ -} -}; - -#endif /* !_92XX_h */ - -/* END OF FILE */ - - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.c deleted file mode 100644 index 3101b967a..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.c +++ /dev/null @@ -1,967 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.c,v 1.1 2002/10/11 14:33:01 alanh Exp $ */ -/* - * $Workfile: cen9211.c $ - * - * File Contents: This file contains panel functions to interface with - * the centaraus platform. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode graphics driver for panel support - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - - -#include "cen9211.h" - -static unsigned char sioc2_orig_val; -static unsigned char must_restore_97317 = FALSE; - -/******************************************************************** - * - * PASS_FAIL init_GPIO(void); - * Initializes the GPIO pins in the Cx5530 or the National PC97317 - * for use with a 9211 on a Marmot or Centaurus board. Uses - * the global variables RdPCIVal and sioc2_orig_val. - * - *********************************************************************/ - -unsigned char init_Centaurus_GPIO(void) -{ - unsigned char reg_val; - static unsigned char first_time = TRUE; - - /* The Centaurus board uses ports 1 and 2 of the 97317 for GPIO. - * These ports require bank 0 to be active. The first thing we will - * do is verify that bank 0 is active and set it if it is not. - */ - - /* set the index for access to the configuration register */ - gfx_outb(CENT_CONFIG_INDEX, CENT_SIOC2); - reg_val = gfx_inb(CENT_CONFIG_DATA); - - /* set to bank 0 */ - if (reg_val & CENT_GPIO_BANK_SELECT) { - gfx_outb(CENT_CONFIG_DATA, - (unsigned char) (reg_val & ~CENT_GPIO_BANK_SELECT)); - } - - /* If this is the first time we have modified sioc2, we must - * save the current value (set by the BIOS) for restoration by - * the calling program, set the global flag must_restore_97317, and set - * first_time to FALSE. - */ - - if (first_time == TRUE) { - sioc2_orig_val = reg_val; - must_restore_97317 = TRUE; - first_time = FALSE; - } - - /* set port 1 direction */ - reg_val = gfx_inb(CENT_PORT1_DIRECTION); - - /* make GPIO 14 and 17 outputs */ - reg_val |= CENT_97317_CLOCK_MASK | CENT_97317_DATA_OUT_MASK; - gfx_outb(CENT_PORT1_DIRECTION, reg_val); - - /* set port 2 direction */ - reg_val = gfx_inb(CENT_PORT2_DIRECTION); - - /* make GPIO 20 an output */ - - reg_val |= CENT_97317_CHIP_SEL_MASK; - - /* make GPIO 21 an input */ - - reg_val &= ~CENT_97317_DATA_IN_MASK; - gfx_outb(CENT_PORT2_DIRECTION, reg_val); - - /* make GPIO 14 and 17 push-pull */ - - reg_val = gfx_inb(CENT_PORT1_OUTPUT_TYPE); - reg_val |= CENT_97317_CLOCK_MASK | CENT_97317_DATA_OUT_MASK; - gfx_outb(CENT_PORT1_OUTPUT_TYPE, reg_val); - - /* make GPIO 20 and 21 push-pull */ - reg_val = gfx_inb(CENT_PORT2_OUTPUT_TYPE); - reg_val |= CENT_97317_CHIP_SEL_MASK | CENT_97317_DATA_IN_MASK; - gfx_outb(CENT_PORT2_OUTPUT_TYPE, reg_val); - return CENT_PASS; - -} /* end init_GPIO() */ - -/********************************************************************* - * - * PASS_FAIL init_9211(void); - * Initializes (sets to 0) the clock, chip select, and data pins - * of the Cx9211 on a Marmot or Centaurus board. - * - **********************************************************************/ - -unsigned char init_Centaurus_9211(void) -{ - unsigned char ReadData; - /* Uses the 97317 for GPIO. - * we will use the clock port define for port 1 - */ - ReadData = gfx_inb(CENT_97317_CLOCK_PORT); - ReadData &= ~CENT_97317_CLOCK_MASK & ~CENT_97317_DATA_OUT_MASK; - gfx_outb(CENT_97317_CLOCK_PORT, ReadData); - /* we will use the chip select port define for port 2 */ - ReadData = gfx_inb(CENT_97317_CHIP_SELECT); - ReadData &= ~CENT_97317_CHIP_SEL_MASK & ~CENT_97317_DATA_IN_MASK; - gfx_outb(CENT_97317_CHIP_SELECT, ReadData); - return(CENT_PASS); - -} /*end init_9211() */ - -/****************************************************************** - * - * PASS_FAIL restore_97317_SIOC2(void); - * Restores the original value to the 97317 SIOC2 register using - * the global variable sioc2_orig_val. Returns PASS if the value - * was written, FAIL if not. - * - *******************************************************************/ - -unsigned char restore_Centaurus_97317_SIOC2(void) -{ - /* set the global flag */ - if (must_restore_97317 == TRUE) { - unsigned char cfg; - - /* set the index for access to the configuration register */ - gfx_outb(CENT_CONFIG_INDEX, CENT_SIOC2); - - /* restore the value */ - gfx_outb(CENT_CONFIG_DATA, sioc2_orig_val); - - /* now read and verify */ - cfg = gfx_inb(CENT_CONFIG_DATA); - if (cfg == sioc2_orig_val) - return(CENT_PASS); - else - return(CENT_FAIL); - - } /* end if() */ - return(CENT_FAIL); - -} /* end restore_97317_SIOC2bank() */ - -/* ----------------------------------------------------------------------- - * - * SET_FLAT_PANEL_MODE - * - * This routine sets the specified flat panel moden parameters in - * the 9211. - * Returns PASS if successful, FAIL if the mode parameters could - * not be set. - * - *------------------------------------------------------------------------*/ - -unsigned char set_Centaurus_92xx_mode(Pnl_PanelStat *pstat) -{ - int mode; - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - - for (mode = 0; mode < NUM_92XX_MODES; mode++) { - if ((FPModeParams[mode].xres == pstat->XRes) && - (FPModeParams[mode].yres == pstat->YRes) && - (FPModeParams[mode].bpp == pstat->Depth) && - (FPModeParams[mode].panel_type == pstat->Type) && - (FPModeParams[mode].color_type == pstat->MonoColor)) { - - /* SET THE 92xx FOR THE SELECTED MODE */ - set_Centaurus_92xx_mode_params(mode); - return(CENT_PASS); - } /* end if() */ - } /* end for() */ - return(CENT_FAIL); - -} /* end set_Centaurus_92xx_mode() */ - -/*------------------------------------------------------------------- - * - * SET_92XX_MODE_PARAMS - * This routine sets the 9211 mode parameters. - * - *-------------------------------------------------------------------*/ - -void set_Centaurus_92xx_mode_params(int mode) -{ - CS92xx_MODE *pMode = &FPModeParams[mode]; - unsigned long off_data = 0; - - /* Turn the 92xx power off before setting any new parameters. - * Since we are going to reset all the power bit positions, we will - * force the power register to 0. - */ - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN, off_data); - - /* set 9211 registers using the desired panel settings */ - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_PAN_TIMING1, - pMode->panel_timing1); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_PAN_TIMING2, - pMode->panel_timing2); - - if (Pnl_Rev_ID == PNL_9211_C) { - - /* load the LSFR seeds */ - Centaurus_write_gpio( FOUR_BYTES, - CS92xx_LCD_DITH_FR_CNTRL, - pMode->rev_C_dither_frc); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_BLUE_LSFR_SEED, - pMode->blue_lsfr_seed); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_RED_GREEN_LSFR_SEED, - pMode->red_green_lsfr_seed); - } else { - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_DITH_FR_CNTRL, - pMode->pre_C_dither_frc); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_BLOCK_SEL1, - pMode->block_select1); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_BLOCK_SEL2, - pMode->block_select2); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_DISPER1, - pMode->dispersion1); - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_DISPER2, - pMode->dispersion2); - - CentaurusProgramFRMload(); - } - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_MEM_CNTRL, - pMode->memory_control); - - /* Set the power register last. This will turn the panel on at the 9211.*/ - - Centaurus_write_gpio(FOUR_BYTES, - CS92xx_LCD_PWR_MAN, - pMode->power_management); - -} /* end set_Centaurus_92xx_mode_params() */ - - -void Centaurus_write_gpio(int width, ULONG address, unsigned long data) -{ - int num_clock_toggles; - int count; - unsigned long Addr = address; - enable_Centaurus_9211_chip_select(); - - /* Write 1 Clock period of no valid transfer */ - write_Centaurus_CX9211_GPIO(CENT_NO_DATA); - - /* Write 1 control bit (the data book calls this the control bar write) */ - write_Centaurus_CX9211_GPIO(0x1); - - /* Write the 12-bit address */ - for (count = 0; count < 12; count++) { - write_Centaurus_CX9211_GPIO((unsigned char)(Addr & 0x01)); - /*the 9211 expects data LSB->MSB */ - Addr = Addr >> 1; - } - - /* write */ - write_Centaurus_CX9211_DWdata(data); - - /* a write will require four toggles after disabling CS */ - num_clock_toggles = CENT_NUM_WRITE_CLOCK_TOGGLES; - disable_Centaurus_9211_chip_select(); - - /* now toggle the clock */ - for (count = 0; count < num_clock_toggles; count++) { - toggle_Centaurus_9211_clock(); - } - return; - -} /* end Centaurus_write_gpio() */ - -unsigned long Centaurus_read_gpio(int width, unsigned long address) -{ - int num_clock_toggles; - int count; - unsigned long Addr = address; - unsigned long data; - - enable_Centaurus_9211_chip_select(); - - /* Write 1 Clock period of no valid transfer */ - write_Centaurus_CX9211_GPIO(CENT_NO_DATA); - - /* Write 1 control bit (the data book calls this the control bar write) */ - write_Centaurus_CX9211_GPIO(0x1); - - /* Write the 12-bit address */ - for (count = 0; count < 12; count++) { - write_Centaurus_CX9211_GPIO((unsigned char)(Addr & 0x01)); - - /*the 9211 expects data LSB->MSB */ - Addr = Addr >> 1; - } - - data = read_Centaurus_CX9211_DWdata(); - - /* a read will require one toggle after disabling CS */ - num_clock_toggles = CENT_NUM_READ_CLOCK_TOGGLES; - disable_Centaurus_9211_chip_select(); - - /* now toggle the clock */ - for (count = 0; count < num_clock_toggles; count++) { - toggle_Centaurus_9211_clock(); - } - return data; - -} /* end Centaurus_read_gpio() */ - -/******************************************************************* - * - * void enable_Centaurus_9211_chip_select(void); - * Enables the chip select of the CX9211 using the National 97317 - * on a Centaurus board. - * - *******************************************************************/ - -void enable_Centaurus_9211_chip_select(void) -{ - unsigned char cs_port_val; - - /* Set the chip select (GPIO20) high */ - cs_port_val = gfx_inb(CENT_97317_CHIP_SELECT); - gfx_outb(CENT_97317_CHIP_SELECT, - (unsigned char) (cs_port_val | CENT_97317_CHIP_SEL_MASK)); - return; - -} /* end enable_Centaurus_9211_chip_select() */ - - -/******************************************************************** - * - * void disable_Centaurus_9211_chip_select(void); - * Disables the chip select of the CX9211 using the National 97317 - * on a Centaurus board. - * - *******************************************************************/ - -void disable_Centaurus_9211_chip_select(void) -{ - unsigned char cs_port_val; - - /* Set the chip select (GPIO20) low */ - cs_port_val = gfx_inb(CENT_97317_CHIP_SELECT); - gfx_outb(CENT_97317_CHIP_SELECT, - (unsigned char) (cs_port_val & ~CENT_97317_CHIP_SEL_MASK)); - return; - -} /* end disable_Centaurus_9211_chip_select() */ - - - -/********************************************************************** - * - * void toggle_Centaurus_9211_clock(void); - * Toggles the clock bit of the CX9211 using the National 97317 on a - * Centaurus board. Assumes the 9211 clock bit has previously been - * initialized to 0 (this way we do not have to waste GPIO cycles - * windowing the clock pulse). - * - **********************************************************************/ - -void toggle_Centaurus_9211_clock(void) -{ - unsigned char port_val; - /* get the 97317 GPIO port contents for the 9211 clock */ - - port_val = gfx_inb(CENT_97317_CLOCK_PORT); - /* set the clock bit high */ - gfx_outb(CENT_97317_CLOCK_PORT, - (unsigned char) (port_val | CENT_97317_CLOCK_MASK)); - - /* set the clock bit low */ - gfx_outb(CENT_97317_CLOCK_PORT, - (unsigned char) (port_val & ~CENT_97317_CLOCK_MASK)); - -} /* end toggle_Centaurus_9211_clock() */ - - -/******************************************************************** - * - * void write_Centaurus_CX9211_GPIO(unsigned char databit); - * Writes the value in bit 0 of the value passed in databit to - * the 9211 through the GPIO interface of the National 97317 on a - * Centaurus board. - * NOTE: This function does not set or reset the chip select line! - * - *******************************************************************/ - -void write_Centaurus_CX9211_GPIO(unsigned char databit) -{ - unsigned char data_port_val; - /* Set the data bit for (GPIO17) */ - databit <<= 7; - - /* read the value of the other bits in the 97317 data port */ - data_port_val = gfx_inb(CENT_97317_DATA_OUTPORT); - - /* set the bit accordingly */ - data_port_val &= ~CENT_97317_DATA_OUT_MASK; - data_port_val |= databit; - gfx_outb(CENT_97317_DATA_OUTPORT, data_port_val); - - /* clock the data */ - toggle_Centaurus_9211_clock(); - return; - -} /* end write_Centaurus_CX9211_GPIO() */ - - -/***************************************************************** - * - * void write_Centaurus_CX9211_DWdata(unsigned long data); - * Writes the doubleword value passed in data to the CX9211 - * using GPIO Pins of the National 97317 on a Centaurus board. - * This function assumes the Direction register of the 97317 - * and the address register of the CX9211 have been previously set. - * Uses the global variable count. - * NOTE: This function does not set or reset the chip select line! - * - ******************************************************************/ - -void write_Centaurus_CX9211_DWdata(unsigned long data) -{ - int count; - /* Send the read/write command to the 9211 first. */ - - write_Centaurus_CX9211_GPIO(CENT_WRITE); - - /* Now write the 32-bit Data */ - for (count = 0; count < 32; count++) { - write_Centaurus_CX9211_GPIO((unsigned char)(data & 0x01)); - - /* the 9211 expects the data LSB->MSB */ - data >>= 1; - } - return; - -} /* end write_Centaurus_CX9211_DWdata() */ - - -/********************************************************************* - * - * unsigned char read_Centaurus_CX9211_GPIO(void); - * Returns the current value of the databit of the 9211 in bit 0 - * using the GPIO interface of the National 97317 on a Centaurus board. - * NOTE: This function does not set or reset the chip select line! - * - *********************************************************************/ - -unsigned char read_Centaurus_CX9211_GPIO(void) -{ - unsigned char data_port_val; - - toggle_Centaurus_9211_clock(); - - /* read the data */ - data_port_val = gfx_inb(CENT_97317_DATA_INPORT); - - /* Save the data from (GPIO21) as bit 0 */ - data_port_val >>= 1; - return(data_port_val & 0x1); - -} /* end read_Centaurus_CX9211_GPIO() */ - - - -/********************************************************************** - * - * void read_Centaurus_CX9211_DWdata(unsigned long *data); - * Reads a doubleword value from the CX9211 using GPIO Pins of - * the National 97317 on a Centaurus board. - * This function assumes the Direction register of the 97317 and - * the address register of the CX9211 have been previously set. - * NOTE: This function does not set or reset the chip select line! - * - ***********************************************************************/ - -unsigned long read_Centaurus_CX9211_DWdata(void) -{ - unsigned char ReadData; - int count; - unsigned long Data; - - /* Send read/write command word to the 9211 first. */ - write_Centaurus_CX9211_GPIO(CENT_READ); - - /* The data book (revision 0.1) states 8 clock periods of no valid data. - * However, the data becomes valid on the eighth clock, making the eighth - * clock valid. Since read_Centaurus_GPIO() toggles the clock before - * reading, we will only toggle the clock 7 times here. - */ - for (count = 0; count < 7; count++) /* works */ - toggle_Centaurus_9211_clock(); - - /* Now read the 32-bit Data, bit by bit in a single loop. */ - Data = 0; - for (count = 0; count < 32; count++) { - ReadData = read_Centaurus_CX9211_GPIO(); - /* 9211 sends data LSB->MSB */ - Data = Data | (((unsigned long)ReadData) << count); - } /* end for() */ - - return Data; - -} /* end read_Centaurus_CX9211_DWdata() */ - -void Centaurus_Get_9211_Details(unsigned long flags, PPnl_PanelParams pParam) -{ - unsigned long PanelType; - int i; - - for(i= 0; i < 0x7fff; i++){ - } - - init_Centaurus_GPIO(); - - for(i=0; i<5; i++) - toggle_Centaurus_9211_clock(); - - if(flags & PNL_PANELCHIP) { - - PanelType = Centaurus_read_gpio(FOUR_BYTES, 0x430); - PanelType = Centaurus_read_gpio(FOUR_BYTES, 0x430); - if((PanelType & 0xFFFF0000) == 0x92110000) { - - /* found 9211 */ - /* check the values for revision ID */ - if (PanelType >= 0x92110301) - pParam->PanelChip = PNL_9211_C; - else if ((PanelType >= 0x92110101) && (PanelType < 0x92110301)) - pParam->PanelChip = PNL_9211_A; - else - pParam->PanelChip = PNL_UNKNOWN_CHIP; - } else { /* no 9211 present */ - pParam->PanelChip = PNL_UNKNOWN_CHIP; - } - Pnl_Rev_ID = pParam->PanelChip; - } /* if end */ - - if ((pParam->PanelChip != PNL_UNKNOWN_CHIP) && (flags & PNL_PANELSTAT)) - { - PanelType = Centaurus_read_gpio(FOUR_BYTES, 0x438); - PanelType &= 0x00f8f8f8; - PanelType |= 0x00070000; - Centaurus_write_gpio(FOUR_BYTES, 0x438, PanelType); - PanelType = 0; - PanelType = Centaurus_read_gpio(FOUR_BYTES, 0x434); - PanelType = (PanelType >> 8); - PanelType &= 0x7; - - switch (PanelType) { - case 0: - pParam->PanelStat.XRes = 800; - pParam->PanelStat.YRes = 600; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - case 1: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 8; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_SSTN; - break; - case 2: - pParam->PanelStat.XRes = 1024; - pParam->PanelStat.YRes = 768; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - case 3: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 16; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 4: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - case 5: - pParam->PanelStat.XRes = 1024; - pParam->PanelStat.YRes = 768; - pParam->PanelStat.Depth = 24; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 6: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 8; - pParam->PanelStat.MonoColor = PNL_MONO_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 7: - pParam->PanelStat.XRes = 800; - pParam->PanelStat.YRes = 600; - pParam->PanelStat.Depth = 16; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - default: - break; - } - } - -} - -void CentaurusProgramFRMload(void) -{ - unsigned long CentaurusFRMtable[] = { - 0x00000000, - 0x00000000, - 0x01000100, - 0x01000100, - 0x01010101, - 0x01010101, - 0x02081041, - 0x02081041, - 0x10111111, - 0x11111101, - 0x49249241, - 0x12412492, - 0x92244891, - 0x92244891, - 0x22252525, - 0x22252525, - 0x528294a5, - 0x2528494a, - 0x294a5295, - 0x294a5295, - 0x54a54a95, - 0x2952a52a, - 0x2a552a55, - 0x2a552a55, - 0x554aa955, - 0x2a9552aa, - 0x2aaa5555, - 0x2aaa5555, - 0x55555555, - 0x2aaaaaaa, - 0x55555555, - 0x55555555, - 0xaaaaaaab, - 0x55555555, - 0x5555aaab, - 0x5555aaab, - 0xaab556ab, - 0x556aad55, - 0x55ab55ab, - 0x55ab55ab, - 0xab5ab56b, - 0x56ad5ad5, - 0x56b5ad6b, - 0x56b5ad6b, - 0xad6d6b5b, - 0x5ad6b6b6, - 0x5b5b5b5b, - 0x5b5b5b5b, - 0x5F6db6db, - 0x5F6db6db, - 0xF776F776, - 0xF776F776, - 0xFBDEFBDE, - 0xFBDEFBDE, - 0x7eFFBFF7, - 0x7eFFBFF7, - 0xFF7FF7F7, - 0xFF7FF7F7, - 0xFF7FFF7F, - 0xFF7FFF7F, - 0xFFF7FFFF, - 0xFFF7FFFF, - 0xFFFFFFFF, - 0xFFFFFFFF, - }; - - unsigned char i; - unsigned short index; - unsigned long data; - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_INDEX, 0); - index = CS92xx_FRM_MEMORY_DATA; - for (i = 0; i < 64; i+=2) { - data = CentaurusFRMtable[i]; - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_DATA, data); - data = CentaurusFRMtable[i+1]; - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_DATA, data); - } - - /* - * The first FRM location (64 bits) does not program correctly. - * This location always reads back with the last value programmed. - * ie. If 32 64-bit values are programmed, location 0 reads - * back as the 32nd If 30 locations are programmed, location 0 - * reads back as the 30th, etc. - * Fix this by re-writing location 0 after programming all 64 in - * the writeFRM loop in RevCFrmload() in CS9211. - */ - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_INDEX, 0); - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_DATA, 0); - Centaurus_write_gpio(FOUR_BYTES, CS92xx_FRM_MEMORY_DATA, 0); -} - -/******************************************************************** - * - * void Centaurus_Enable_Power((void); - * Enables the power of the CX9211 using the National 97317 on - * a Centaurus board. - * - ********************************************************************/ - -void Centaurus_Power_Up(void) -{ - unsigned long off_data = 0x01000000; - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN, off_data); - return; - -} /* Centaurus_Disable_Power */ - -/*********************************************************************** - * - * void Centaurus_Disable_Power((void); - * Disables the power of the CX9211 using the National 97317 - * on a Centaurus board. - * - **********************************************************************/ - -void Centaurus_Power_Down(void) -{ - unsigned long off_data = 0; - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN, off_data); - return; - -} /* Centaurus_Disable_Power */ - -void Centaurus_9211init(Pnl_PanelStat *pstat) -{ - init_Centaurus_GPIO(); - init_Centaurus_9211(); - set_Centaurus_92xx_mode(pstat); - restore_Centaurus_97317_SIOC2(); -} - - -void Centaurus_Save_Panel_State(void) -{ - /* set 9211 registers using the desired panel settings */ - - cs9211_regs.panel_timing1 = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_LCD_PAN_TIMING1); - cs9211_regs.panel_timing2 = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_LCD_PAN_TIMING2); - cs9211_regs.dither_frc_ctrl = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_LCD_DITH_FR_CNTRL); - cs9211_regs.blue_lsfr_seed = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_BLUE_LSFR_SEED); - - cs9211_regs.red_green_lsfr_seed = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_RED_GREEN_LSFR_SEED); - /* CentaurusProgramFRMload(); */ - - cs9211_regs.memory_control = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_LCD_MEM_CNTRL); - - /* Set the power register last. - * This will turn the panel on at the 9211. - */ - cs9211_regs.power_management = - Centaurus_read_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN); -} - - -void Centaurus_Restore_Panel_State(void) -{ - - unsigned long off_data = 0; - - /* Before restoring the 9211 registers, power off the 9211. */ - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN, off_data); - - /* set 9211 registers using the desired panel settings */ - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PAN_TIMING1, - cs9211_regs.panel_timing1); - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PAN_TIMING2, - cs9211_regs.panel_timing2); - - /* load the LSFR seeds */ - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_DITH_FR_CNTRL, - cs9211_regs.dither_frc_ctrl); - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_BLUE_LSFR_SEED, - cs9211_regs.blue_lsfr_seed); - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_RED_GREEN_LSFR_SEED, - cs9211_regs.red_green_lsfr_seed); - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_MEM_CNTRL, - cs9211_regs.memory_control); - - /* Set the power register last. This will turn the panel on at the 9211.*/ - - Centaurus_write_gpio(FOUR_BYTES, CS92xx_LCD_PWR_MAN, - cs9211_regs.power_management); - -} - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.h deleted file mode 100644 index ca84067f8..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.h +++ /dev/null @@ -1,210 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/cen9211.h,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: cen9211.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This header file defines the Durango routines and - * variables used to access the memory mapped regions. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#include "92xx.h" -#include "panel.h" - -#ifndef _CEN9211_h -#define _CEN9211_h - -/* Centaurus/97317 GPIO PORT defines */ - -#define CENT_97317_CLOCK_PORT 0xE0 -#define CENT_97317_DATA_OUTPORT 0xE0 -#define CENT_97317_CHIP_SELECT 0xE4 -#define CENT_97317_DATA_INPORT 0xE4 -#define CENT_PORT1_DIRECTION 0xE1 -#define CENT_PORT2_DIRECTION 0xE5 -#define CENT_PORT1_OUTPUT_TYPE 0xE2 -#define CENT_PORT2_OUTPUT_TYPE 0xE6 - -/* - * Centaurus/97317 GPIO bit masks. - * In and out are with respect to the 97317. - */ - -#define CENT_97317_CLOCK_MASK 0x10 -#define CENT_97317_CHIP_SEL_MASK 0x01 -#define CENT_97317_DATA_IN_MASK 0x02 -#define CENT_97317_DATA_OUT_MASK 0x80 - -#define CENT_PASS 1 -#define CENT_FAIL 0 -#define CENT_READ 0x0000 -#define CENT_WRITE 0x0001 -#define CENT_NO_DATA 0 - -#define CENT_CONFIG_INDEX 0x2E -#define CENT_SIOC2 0x22 -#define CENT_CONFIG_DATA 0x2F -#define CENT_GPIO_BANK_SELECT 0x80 - -#define CENT_NUM_READ_CLOCK_TOGGLES 1 -#define CENT_NUM_WRITE_CLOCK_TOGGLES 4 - -/* local functions */ -void set_Centaurus_92xx_mode_params(int mode); -void enable_Centaurus_9211_chip_select(void); -void disable_Centaurus_9211_chip_select(void); -void toggle_Centaurus_9211_clock(void); -void write_Centaurus_CX9211_GPIO(unsigned char databit); -void write_Centaurus_CX9211_DWdata(unsigned long data); -void Centaurus_write_gpio(int width, unsigned long address, unsigned long data); -void Centaurus_Power_Up(void); -void Centaurus_Power_Down(void); -unsigned long Centaurus_read_gpio(int width, unsigned long address); -unsigned char read_Centaurus_CX9211_GPIO(void); -unsigned long read_Centaurus_CX9211_DWdata(void); -unsigned char restore_Centaurus_97317_SIOC2(void); -unsigned char init_Centaurus_GPIO(void); -unsigned char init_Centaurus_9211(void); -unsigned char set_Centaurus_92xx_mode(Pnl_PanelStat *pstat); -void CentaurusProgramFRMload(void); -void Centaurus_Get_9211_Details(unsigned long flags, PPnl_PanelParams pParam); -void Centaurus_Save_Panel_State(void); -void Centaurus_Restore_Panel_State(void); - -#endif /* !_CEN9211_h */ - -/* END OF FILE */ - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.c deleted file mode 100644 index 717b2e674..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.c +++ /dev/null @@ -1,694 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.c,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: dora9211.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the panel functions to interface - * the dorado platform. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - - - -#include "dora9211.h" - -void Dorado_Get_9211_Details(unsigned long flags, PPnl_PanelParams pParam) -{ - unsigned long DPanelType; - int i; - - for(i = 0; i < 0x7fff; i++){ - } - - Dorado9211GpioInit(); - - for(i =0; i<5; i++) - toggle_Centaurus_9211_clock(); - - if(flags & PNL_PANELCHIP) { - DPanelType = Dorado9211ReadReg(0x430); - - if((DPanelType & 0xFFFF0000) == 0x92110000) { /* found 9211 */ - /* check the values for revision ID */ - if (DPanelType >= 0x92110301) - pParam->PanelChip = PNL_9211_C; - else if ((DPanelType >= 0x92110101) && (DPanelType < 0x92110301)) - pParam->PanelChip = PNL_9211_A; - else - pParam->PanelChip = PNL_UNKNOWN_CHIP; - } else { /* no 9211 present */ - pParam->PanelChip = PNL_UNKNOWN_CHIP; - } - } - - if((pParam->PanelChip != PNL_UNKNOWN_CHIP) && (flags & PNL_PANELSTAT)) { - unsigned long PanelTypeOrg; - unsigned char Panel_2Byte; - - DPanelType = Dorado9211ReadReg(0x438); - DPanelType &= 0x00e8e8e8; - DPanelType |= 0x00170000; - Dorado9211WriteReg(0x438, DPanelType); - DPanelType = 0; - - DPanelType = Dorado9211ReadReg(0x434); - DPanelType = (DPanelType >> (DRD_LCDRESGPIO1 + 1)); - PanelTypeOrg = DPanelType >> 8; - Panel_2Byte = (unsigned char)PanelTypeOrg; - Panel_2Byte = (Panel_2Byte >> (DRD_LCDRESGPIO2 - DRD_LCDRESGPIO1 - 1)); DPanelType = (DPanelType | ((unsigned int)Panel_2Byte << 8)); - DPanelType = DPanelType >> 1; - PanelTypeOrg = DPanelType >> 8; - Panel_2Byte = (unsigned char)PanelTypeOrg; - Panel_2Byte = (Panel_2Byte >> (DRD_LCDRESGPIO3 - DRD_LCDRESGPIO2 - 1)); - DPanelType = (DPanelType | ((unsigned int)Panel_2Byte << 8)); - DPanelType = DPanelType >> 1; - PanelTypeOrg = DPanelType >> 8; - Panel_2Byte = (unsigned char)PanelTypeOrg; - Panel_2Byte = (Panel_2Byte >> (DRD_LCDRESGPIO4 - DRD_LCDRESGPIO3 - 1)); - DPanelType = (DPanelType | ((unsigned int)Panel_2Byte << 8)); - DPanelType = DPanelType >> 5; - DPanelType &= 0xf; - - switch (DPanelType) { - case 8: - pParam->PanelStat.XRes = 800; - pParam->PanelStat.YRes = 600; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - - case 9: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 8; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_SSTN; - break; - - case 10: - pParam->PanelStat.XRes = 1024; - pParam->PanelStat.YRes = 768; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 11: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 16; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 12: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 18; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_TFT; - break; - case 13: - pParam->PanelStat.XRes = 1024; - pParam->PanelStat.YRes = 768; - pParam->PanelStat.Depth = 24; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 14: - pParam->PanelStat.XRes = 640; - pParam->PanelStat.YRes = 480; - pParam->PanelStat.Depth = 8; - pParam->PanelStat.MonoColor = PNL_MONO_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - case 15: - pParam->PanelStat.XRes = 800; - pParam->PanelStat.YRes = 600; - pParam->PanelStat.Depth = 16; - pParam->PanelStat.MonoColor = PNL_COLOR_PANEL; - pParam->PanelStat.Type = PNL_DSTN; - break; - default: - break; - } - } /* if block end */ - -} - -void Dorado9211Init(Pnl_PanelStat *pstat) -{ - int mode; - unsigned long orig_value,pm_value; - - gfx_delay_milliseconds(100); - Dorado9211GpioInit(); - - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - - gfx_delay_milliseconds(100); - - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN,0x0); - - gfx_delay_milliseconds(100); - gfx_delay_milliseconds(100); - - /* LOOP THROUGH THE AVAILABLE MODES TO FIND A MATCH */ - for (mode = 0; mode < NUM_92XX_MODES; mode++) { - if ((FPModeParams[mode].xres == pstat->XRes) && - (FPModeParams[mode].yres == pstat->YRes) && - (FPModeParams[mode].bpp == pstat->Depth) && - (FPModeParams[mode].panel_type == pstat->Type) && - (FPModeParams[mode].color_type == pstat->MonoColor)) { - - /* SET THE 92xx FOR THE SELECTED MODE */ - CS92xx_MODE *pMode = &FPModeParams[mode]; - - Dorado9211WriteReg(CS92xx_LCD_PAN_TIMING1,pMode->panel_timing1); - Dorado9211WriteReg(CS92xx_LCD_PAN_TIMING2,pMode->panel_timing2); - Dorado9211WriteReg(CS92xx_LCD_DITH_FR_CNTRL, - pMode->rev_C_dither_frc); - Dorado9211WriteReg(CS92xx_BLUE_LSFR_SEED,pMode->blue_lsfr_seed); - Dorado9211WriteReg(CS92xx_RED_GREEN_LSFR_SEED, - pMode->red_green_lsfr_seed); - DoradoProgramFRMload(); - Dorado9211WriteReg(CS92xx_LCD_MEM_CNTRL,pMode->memory_control); - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN,pMode->power_management); - gfx_delay_milliseconds(100); - gfx_delay_milliseconds(100); - Dorado9211ClearCS(); - - /* This code is added to take care of Panel initialization. - * Irrespective of Xpressrom is enabling the panel or not. - */ - orig_value = READ_VID32(0X04); - WRITE_VID32(0x04, 0x00200141); - gfx_delay_milliseconds(21); - pm_value = gfx_ind(0x9030); - - pm_value |= 0x400; - gfx_outd(0x9030, pm_value); - gfx_delay_milliseconds(4); - orig_value &= 0xfff1ffff; - WRITE_VID32(0X4, orig_value); - return; - } /*end if() */ - } /*end for() */ - -} - -void Dorado9211SetCS(void) -{ - unsigned long value; - value = gfx_ind(DRD_CSP9211IN); - gfx_outd(DRD_CSP9211OUT, value | DRD_CS9211); -} - -void Dorado9211ClearCS(void) -{ - unsigned long value; - value = gfx_ind(DRD_CSP9211IN); - gfx_outd(DRD_CSP9211OUT, value & (~DRD_CS9211)); -} - -void Dorado9211SetDataOut(void) -{ - unsigned long value; - value = gfx_ind(DRD_DATAOUTP9211IN); - gfx_outd(DRD_DATAOUTP9211OUT, value | DRD_DATAIN9211); -} - - -void Dorado9211ClearDataOut(void) -{ - unsigned long value; - value = gfx_ind(DRD_DATAOUTP9211IN); - gfx_outd(DRD_DATAOUTP9211OUT, value & (~DRD_DATAIN9211)); -} - - -unsigned char Dorado9211ReadDataIn(void) -{ - unsigned char readdata=0; - unsigned long value; - /* why to read 4 times ???*/ - value = gfx_ind(DRD_DATAINP9211IN); - value = gfx_ind(DRD_DATAINP9211IN); - value = gfx_ind(DRD_DATAINP9211IN); - value = gfx_ind(DRD_DATAINP9211IN); - if(value & DRD_DATAOUT9211) - readdata=1; - return (readdata); -} - - -void Dorado9211ToggleClock(void) -{ - Dorado9211SetClock(); - Dorado9211ClearClock(); -} - - -void Dorado9211SetClock(void) -{ - unsigned long value; - value = gfx_ind(DRD_CLOCKP9211IN); - gfx_outd(DRD_CLOCKP9211OUT, value | DRD_CLOCK9211); -} - - -void Dorado9211ClearClock(void) -{ - unsigned long value; - value = gfx_ind(DRD_CLOCKP9211IN); - gfx_outd(DRD_CLOCKP9211OUT, value & (~DRD_CLOCK9211)); -} - -void Dorado9211GpioInit(void) -{ - unsigned long value; - - /* set output enable on gpio 7, 9, 11 */ - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_SEL), DRD_CLOCK9211CFG); - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_CFG), 3); - /* set output enable on gpio 7, 9, 11 */ - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_SEL), DRD_CS9211CFG); - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_CFG), 3); - /* set output enable on gpio 7, 9, 18 */ - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_SEL), DRD_DATAIN9211CFG); - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_CFG), 3); - /* disable on gpio 11 - This is the output from the 9211 */ - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_SEL), DRD_DATAOUT9211CFG); - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPPIN_CFG), 0); - /* Set all PINS low */ - value = gfx_ind(DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDI0); - value &= ~(DRD_CS9211 | DRD_CLOCK9211 | DRD_DATAIN9211); - gfx_outd((DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDO0), value); -} - -unsigned long Dorado9211ReadReg(unsigned short index) -{ - - unsigned char i, readbit; - unsigned long data; - - Dorado9211ClearDataOut(); - - Dorado9211SetCS(); - Dorado9211ToggleClock(); - - Dorado9211SetDataOut(); - Dorado9211ToggleClock(); - - for (i=0; i < 12; i++) { - if (index & 0x1) { - Dorado9211SetDataOut(); - } else { - Dorado9211ClearDataOut(); - } - Dorado9211ToggleClock(); - index >>= 1; - } - - Dorado9211ClearDataOut(); - Dorado9211ToggleClock(); - - /* Idle clock, 7 clocks, no data set */ - - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - - data = 0; - for ( i = 0; i < 32; i++) { - Dorado9211ToggleClock(); - readbit = Dorado9211ReadDataIn(); - data |= (((unsigned long)readbit) << i); - } - - Dorado9211ClearCS(); - Dorado9211ToggleClock(); - return(data); - -} - -void Dorado9211WriteReg(unsigned short index, unsigned long data) -{ - - unsigned char i; - - Dorado9211ClearDataOut(); - Dorado9211SetDataOut(); - Dorado9211SetCS(); - Dorado9211ToggleClock(); - Dorado9211SetDataOut(); - Dorado9211ToggleClock(); - - for (i=0; i < 12; i++) { - if (index & 0x1) { - Dorado9211SetDataOut(); - } else { - Dorado9211ClearDataOut(); - } - Dorado9211ToggleClock(); - index >>= 1; - } - - Dorado9211SetDataOut(); - Dorado9211ToggleClock(); - - for (i=0; i<32; i++) { - if (data & 0x1) { - Dorado9211SetDataOut(); - } else { - Dorado9211ClearDataOut(); - } - Dorado9211ToggleClock(); - data >>= 1; - } - - Dorado9211ClearCS(); - - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); - Dorado9211ToggleClock(); -} - -void DoradoProgramFRMload(void) -{ - unsigned long DoradoFRMtable[] = { - - 0x00000000, - 0x00000000, - 0x01000100, - 0x01000100, - 0x01010101, - 0x01010101, - 0x02081041, - 0x02081041, - 0x10111111, - 0x11111101, - 0x49249241, - 0x12412492, - 0x92244891, - 0x92244891, - 0x22252525, - 0x22252525, - 0x528294a5, - 0x2528494a, - 0x294a5295, - 0x294a5295, - 0x54a54a95, - 0x2952a52a, - 0x2a552a55, - 0x2a552a55, - 0x554aa955, - 0x2a9552aa, - 0x2aaa5555, - 0x2aaa5555, - 0x55555555, - 0x2aaaaaaa, - 0x55555555, - 0x55555555, - 0xaaaaaaab, - 0x55555555, - 0x5555aaab, - 0x5555aaab, - 0xaab556ab, - 0x556aad55, - 0x55ab55ab, - 0x55ab55ab, - 0xab5ab56b, - 0x56ad5ad5, - 0x56b5ad6b, - 0x56b5ad6b, - 0xad6d6b5b, - 0x5ad6b6b6, - 0x5b5b5b5b, - 0x5b5b5b5b, - 0x5F6db6db, - 0x5F6db6db, - 0xF776F776, - 0xF776F776, - 0xFBDEFBDE, - 0xFBDEFBDE, - 0x7eFFBFF7, - 0x7eFFBFF7, - 0xFF7FF7F7, - 0xFF7FF7F7, - 0xFF7FFF7F, - 0xFF7FFF7F, - 0xFFF7FFFF, - 0xFFF7FFFF, - 0xFFFFFFFF, - 0xFFFFFFFF, -}; - - unsigned char i; - unsigned short index; - unsigned long data; - - Dorado9211WriteReg(CS92xx_FRM_MEMORY_INDEX,0); - index = CS92xx_FRM_MEMORY_DATA; - for (i = 0; i < 64; i+=2) { - data = DoradoFRMtable[i]; - Dorado9211WriteReg(index,data); - data = DoradoFRMtable[i+1]; - Dorado9211WriteReg(index,data); - } - -/* - * The first FRM location (64 bits) does not program correctly. - * This location always reads back with the last value programmed. - * ie. If 32 64-bit values are programmed, location 0 reads back as the 32nd - * If 30 locations are programmed, location 0 reads back as the 30th, etc. - * Fix this by re-writing location 0 after programming all 64 in the writeFRM - * loop in RevCFrmload() in CS9211. - */ - - Dorado9211WriteReg(CS92xx_FRM_MEMORY_INDEX,0); - Dorado9211WriteReg(CS92xx_FRM_MEMORY_DATA,0); - Dorado9211WriteReg(CS92xx_FRM_MEMORY_DATA,0); - -} - -/****************************************************************************** - * void Dorado_Enable_Power((void); - * Enables the power of the CX9211 on Dorado board. - ****************************************************************************** - */ - -void Dorado_Power_Up(void) -{ - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN,0x01000000); - return; - -} /* disable_Centaurus_Power */ - -/****************************************************************************** - * void Dorado_Disable_Power((void); - * Disables the power of the CX9211 on Dorado board. - ***************************************************************************** - */ - -void Dorado_Power_Down(void) -{ - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN,0x0); - return; - -} /* disable_Centaurus_Power */ - - -void Dorado_Save_Panel_State(void) -{ - - /* set 9211 registers using the desired panel settings */ - cs9211_regs.panel_timing1=Dorado9211ReadReg(CS92xx_LCD_PAN_TIMING1); - cs9211_regs.panel_timing2=Dorado9211ReadReg(CS92xx_LCD_PAN_TIMING2); - - cs9211_regs.dither_frc_ctrl=Dorado9211ReadReg(CS92xx_LCD_DITH_FR_CNTRL); - cs9211_regs.blue_lsfr_seed=Dorado9211ReadReg(CS92xx_BLUE_LSFR_SEED); - cs9211_regs.red_green_lsfr_seed=Dorado9211ReadReg(CS92xx_RED_GREEN_LSFR_SEED); - - /* CentaurusProgramFRMload(); */ - cs9211_regs.memory_control=Dorado9211ReadReg(CS92xx_LCD_MEM_CNTRL); - - /* Set the power register last. This will turn the panel on at the 9211.*/ - cs9211_regs.power_management=Dorado9211ReadReg(CS92xx_LCD_PWR_MAN); - cs9211_regs.panel_state = cs9211_regs.power_management; -} -void Dorado_Restore_Panel_State(void) -{ - unsigned long off_data = 0; - - /* Before restoring the 9211 registers, power off the 9211. */ - - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN, off_data); - - /* set 9211 registers using the desired panel settings */ - Dorado9211WriteReg(CS92xx_LCD_PAN_TIMING1, cs9211_regs.panel_timing1); - Dorado9211WriteReg(CS92xx_LCD_PAN_TIMING2, cs9211_regs.panel_timing2); - /* load the LSFR seeds */ - Dorado9211WriteReg(CS92xx_LCD_DITH_FR_CNTRL, cs9211_regs.dither_frc_ctrl); - Dorado9211WriteReg(CS92xx_BLUE_LSFR_SEED, cs9211_regs.blue_lsfr_seed); - Dorado9211WriteReg(CS92xx_RED_GREEN_LSFR_SEED, - cs9211_regs.red_green_lsfr_seed); - - Dorado9211WriteReg(CS92xx_LCD_MEM_CNTRL, cs9211_regs.memory_control); - /* Set the power register last. This will turn the panel on at the 9211.*/ - Dorado9211WriteReg(CS92xx_LCD_PWR_MAN, cs9211_regs.power_management); -} diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.h deleted file mode 100644 index 29e4b1cc8..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.h +++ /dev/null @@ -1,203 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/dora9211.h,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: dora9211.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This header file defines the Durango routines and - * variables used to access the memory mapped regions. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode graphics driver for panel support - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#include "panel.h" -#include "92xx.h" - -#ifndef _DORA9211_h -#define _DORA9211_h - -/* 9211 Rev.C3 Dorado */ - -/* GPIO Pin Configuration Registers */ - -#define DRD_GEODE_GPPIN_SEL 0x20 /* GPIO Pin Configuration Select */ -#define DRD_GEODE_GPPIN_CFG 0x24 /* GPIO Pin Configuration Access */ -#define DRD_GEODE_GPPIN_RESET 0x28 /* GPIO Pin Reset */ - -#define DRD_GEODE_GPIO_BASE 0x6400 /* F0 GPIO, IO mapped */ -#define DRD_GEODE_GPDI0 0x04 /* GPIO Data In 0 */ -#define DRD_GEODE_GPDO0 0x00 /* GPIO Data Out 0 */ - -/* Data Ports in */ -#define DRD_CLOCKP9211IN DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDI0 -#define DRD_DATAINP9211IN DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDI0 -#define DRD_DATAOUTP9211IN DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDI0 -#define DRD_CSP9211IN DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDI0 - -/* Data Ports out */ -#define DRD_CLOCKP9211OUT DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDO0 -#define DRD_DATAINP9211OUT DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDO0 -#define DRD_DATAOUTP9211OUT DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDO0 -#define DRD_CSP9211OUT DRD_GEODE_GPIO_BASE + DRD_GEODE_GPDO0 - -/* Pin MASKS */ -#define DRD_CLOCK9211 0x00000080 /*;gpio 7, clock output to 9211 */ -#define DRD_DATAIN9211 0x00040000 /*;gpio 18, data output to 9211 */ -#define DRD_DATAOUT9211 0x00000800 /*;gpio 11, data input from 9211 */ -#define DRD_CS9211 0x00000200 /*;gpio 9, chip select output to 9211 */ - -/* Gpio CFG values to select in */ -#define DRD_CLOCK9211CFG 0x00000007 /* ;gpio 7 */ -#define DRD_DATAIN9211CFG 0x00000012 /* ;gpio 18 */ -#define DRD_DATAOUT9211CFG 0x0000000B /* ;gpio 11 */ -#define DRD_CS9211CFG 0x00000009 /* ;gpio 9 */ - -#define DRD_LCDRESGPIO1 0x00 -#define DRD_LCDRESGPIO2 0x01 -#define DRD_LCDRESGPIO3 0x02 -#define DRD_LCDRESGPIO4 0x04 - -void Dorado9211SetCS(void); -void Dorado9211ClearCS(void); -void Dorado9211SetDataOut(void); -void Dorado9211ClearDataOut(void); -unsigned char Dorado9211ReadDataIn(void); -void Dorado9211ToggleClock(void); -void Dorado9211SetClock(void); -void Dorado9211ClearClock(void); -void Dorado9211GpioInit(void); -unsigned long Dorado9211ReadReg(unsigned short index); -void Dorado9211WriteReg(unsigned short index, unsigned long data); -void DoradoProgramFRMload(void); -void Dorado_Get_9211_Details(unsigned long flags, PPnl_PanelParams pParam); -void Dorado_Power_Up(void); -void Dorado_Power_Down(void); -void Dorado_Save_Panel_State(void); -void Dorado_Restore_Panel_State(void); - -#endif /* !_DORA9211_h */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.c deleted file mode 100644 index 06a321049..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.c +++ /dev/null @@ -1,775 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.c,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: drac9210.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the panel library files to the - * platforms with 9210, and 9211 support. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - - - -#include "drac9210.h" - -#define CS9210 0x40 /* Chip select pin */ - -/* 9210 on Draco */ -#define CLOCK9210 0x04 /* Clock pin */ -#define DATAIN9210 0x20 /* Data from 9210 */ -#define DATAOUT9210 0x80 /* Data to 9210 */ - -static void DracoWriteData(unsigned char data); -static void DracoReadData(unsigned char *data); -static void Draco9210GpioInit(); -static void Draco9210SetCS(void); -static unsigned char Draco9210ReadReg(unsigned char index); -static void Draco9210WriteReg(unsigned char index, unsigned char data); -static void Draco9210ClearCS(void); -static void Draco9210SetDataOut(void); -static void Draco9210ClearDataOut(void); -static unsigned char Draco9210ReadDataIn(void); -static void Draco9210ToggleClock(void); - -void Draco9210Init(Pnl_PanelStat *pstat) -{ - unsigned char panelvalues[] = { - 0x2,0x80, - 0x2, 0x24, - 0x03, 0x00, - 0xc0, 0x00, - 0xc1, 0x00, - 0xc2, 0x00, - 0xc3, 0x00, - 0xc4, 0x00, - 0xc5, 0x01, - 0xc6, 0xff, - 0xc7, 0xff, - 0xc8, 0x3, - 0xc9, 0xfe, - 0xca, 0x0, - 0xcb, 0x3f, - 0xcc, 0xc, - 0xcd, 0x1, - 0xce, 0xff, - 0xcf, 0xc1, - 0xd0, 0x0, - 0xd1, 0x7e, - 0xd2, 0x3, - 0xd3, 0xfe, - 0xd4, 0x3, - 0xd5, 0x81, - 0xd6, 0xfc, - 0xd7, 0x3f, - 0xd8, 0x14, - 0xd9, 0x1e, - 0xda, 0x0f, - 0xdb, 0xc7, - 0xdc, 0x29, - 0xdd, 0xe1, - 0xde, 0xf1, - 0xdf, 0xf9, - 0xe0, 0x2, - 0xe1, 0xe, - 0xe2, 0x1e, - 0xe3, 0x3e, - 0xe4, 0x04, - 0xe5, 0x71, - 0xe6, 0xe3, - 0xe7, 0xcf, - 0xe8, 0x1, - 0xe9, 0x86, - 0xea, 0x3c, - 0xeb, 0xf3, - 0xec, 0xa, - 0xed, 0x39, - 0xee, 0xc7, - 0xef, 0x3d, - - 0xf0, 0x14, - 0xf1, 0xc6, - 0xf2, 0x39, - 0xf3, 0xce, - 0xf4, 0x3, - 0xf5, 0x19, - 0xf6, 0xce, - 0xf7, 0x77, - 0xf8, 0x0, - 0xf9, 0x66, - 0xfa, 0x33, - 0xfb, 0xbb, - 0xfc, 0x2d, - 0xfd, 0x99, - 0xfe, 0xdd, - 0xff, 0xdd, - - 0x3, 0x1, - 0xc0, 0x2, - 0xc1, 0x22, - 0xc2, 0x66, - 0xc3, 0x66, - 0xc4, 0x0, - 0xc5, 0xcd, - 0xc6, 0x99, - 0xc7, 0xbb, - 0xc8, 0x5, - 0xc9, 0x32, - 0xca, 0x66, - 0xcb, 0xdd, - 0xcc, 0x1a, - 0xcd, 0x4d, - 0xce, 0x9b, - 0xcf, 0x6f, - 0xd0, 0x0, - 0xd1, 0x92, - 0xd2, 0x6d, - 0xd3, 0xb6, - 0xd4, 0x5, - 0xd5, 0x25, - 0xd6, 0xb6, - 0xd7, 0xdb, - 0xd8, 0x2, - 0xd9, 0x5a, - 0xda, 0x4b, - 0xdb, 0x6d, - 0xdc, 0x29, - 0xdd, 0xa5, - 0xde, 0xb5, - 0xdf, 0xb7, - 0xe0, 0x4, - 0xe1, 0x4a, - 0xe2, 0x5a, - 0xe3, 0xda, - 0xe4, 0x12, - 0xe5, 0x95, - 0xe6, 0xad, - 0xe7, 0x6f, - 0xe8, 0x1, - 0xe9, 0x2a, - 0xea, 0x56, - 0xeb, 0xb5, - 0xec, 0xe, - 0xed, 0x55, - 0xee, 0xab, - 0xef, 0x5f, - 0xf0, 0x0, - 0xf1, 0xaa, - 0xf2, 0x55, - 0xf3, 0xea, - 0xf4, 0x1, - 0xf5, 0x55, - 0xf6, 0xaa, - 0xf7, 0xbf, - 0xf8, 0x6, - 0xf9, 0xaa, - 0xfa, 0x55, - 0xfb, 0x55, - 0xfc, 0x39, - 0xfd, 0x55, - 0xfe, 0xff, - 0xff, 0xff, - - 0x3, 0x2, - 0xc0, 0x0, - 0xc1, 0x0, - 0xc2, 0xaa, - 0xc3, 0xaa, - 0xc4, 0x6, - 0xc5, 0xab, - 0xc6, 0x55, - 0xc7, 0x55, - 0xc8, 0x01, - 0xc9, 0x54, - 0xca, 0xaa, - 0xcb, 0xbf, - 0xcc, 0x8, - 0xcd, 0xab, - 0xce, 0x55, - 0xcf, 0xeb, - 0xd0, 0x6, - 0xd1, 0x54, - 0xd2, 0xab, - 0xd3, 0x5e, - 0xd4, 0x1, - 0xd5, 0x2b, - 0xd6, 0x56, - 0xd7, 0xb5, - 0xd8, 0x12, - 0xd9, 0x94, - 0xda, 0xad, - 0xdb, 0x6f, - 0xdc, 0x2d, - 0xdd, 0x4b, - 0xde, 0x5b, - 0xdf, 0xdb, - 0xe0, 0x0, - 0xe1, 0xa4, - 0xe2, 0xb4, - 0xe3, 0xb6, - 0xe4, 0x2, - 0xe5, 0x5b, - 0xe6, 0x4b, - 0xe7, 0x6d, - 0xe8, 0x5, - 0xe9, 0x24, - 0xea, 0xb6, - 0xeb, 0xdb, - 0xec, 0x8, - 0xed, 0x93, - 0xee, 0x6d, - 0xef, 0xb7, - 0xf0, 0x12, - 0xf1, 0x4c, - 0xf2, 0x9b, - 0xf3, 0x6e, - 0xf4, 0x5, - 0xf5, 0x33, - 0xf6, 0x66, - 0xf7, 0xdd, - 0xf8, 0x0, - 0xf9, 0xcc, - 0xfa, 0x99, - 0xfb, 0xbb, - 0xfc, 0x2b, - 0xfd, 0x33, - 0xfe, 0x77, - 0xff, 0x77, - - 0x3, 0x3, - 0xc0, 0x4, - 0xc1, 0x88, - 0xc2, 0xcc, - 0xc3, 0xcc, - 0xc4, 0x0, - 0xc5, 0x67, - 0xc6, 0x33, - 0xc7, 0xbb, - 0xc8, 0x3, - 0xc9, 0x18, - 0xca, 0xce, - 0xcb, 0x77, - 0xcc, 0x1c, - 0xcd, 0xc7, - 0xce, 0x39, - 0xcf, 0xcf, - - 0xd0, 0x2, - 0xd1, 0x38, - 0xd2, 0xc7, - 0xd3, 0x3c, - 0xd4, 0x1, - 0xd5, 0x87, - 0xd6, 0x3c, - 0xd7, 0xf3, - 0xd8, 0x4, - 0xd9, 0x70, - 0xda, 0xe3, - 0xdb, 0xcf, - 0xdc, 0x2b, - 0xdd, 0xf, - 0xde, 0x1f, - 0xdf, 0x3f, - 0xe0, 0x00, - 0xe1, 0xe0, - 0xe2, 0xf0, - 0xe3, 0xf8, - 0xe4, 0x14, - 0xe5, 0x1f, - 0xe6, 0xf, - 0xe7, 0xc7, - 0xe8, 0x3, - 0xe9, 0x80, - 0xea, 0xfc, - 0xeb, 0x3f, - 0xec, 0x8, - 0xed, 0x7f, - 0xee, 0x3, - 0xef, 0xff, - 0xf0, 0x4, - 0xf1, 0x0, - 0xf2, 0xff, - 0xf3, 0xc0, - 0xf4, 0x3, - 0xf5, 0xff, - 0xf6, 0x0, - 0xf7, 0x3f, - 0xf8, 0x0, - 0xf9, 0x0, - 0xfa, 0xff, - 0xfb, 0xff, - 0xfc, 0x3f, - 0xfd, 0xff, - 0xfe, 0xff, - 0xff, 0xff, - 0x3, 0x4, - - /* Setup the Diter to Pattern33 */ - 0x80, 0xdd, - 0x81, 0xdd, - 0x82, 0x33, - 0x83, 0x33, - 0x84, 0xdd, - 0x85, 0xdd, - 0x86, 0x33, - 0x87, 0x33, - 0x88, 0x33, - 0x89, 0x33, - 0x8a, 0x77, - 0x8b, 0x77, - 0x8c, 0x33, - 0x8d, 0x33, - 0x8e, 0x77, - 0x8f, 0x77, - 0x90, 0xdd, - 0x91, 0xdd, - 0x92, 0x33, - 0x93, 0x33, - 0x94, 0xdd, - 0x95, 0xdd, - 0x96, 0x33, - 0x97, 0x33, - 0x98, 0x33, - 0x99, 0x33, - 0x9a, 0x77, - 0x9b, 0x77, - 0x9c, 0x33, - 0x9d, 0x33, - 0x9e, 0x77, - 0x9f, 0x77, - - 0x4, 0x20, - 0x5, 0x3, - 0x6, 0x56, - 0x7, 0x2, - 0x8, 0x1c, - 0x9, 0x0, - 0xa, 0x26, - 0xb, 0x0, - 0xc, 0x15, - 0xd, 0x4, - 0xe, 0x50, - 0xf, 0x4, - 0x10, 0xfa, - 0x11, 0x0, - 0x12, 0xc8, - 0x13, 0x0, - 0x14, 0x31, - 0x15, 0x23, - 0x16, 0x0, - - /* Enable DSTN panel */ - 0x2,0x64 - }; - unsigned char index,data; - int i; - - gfx_delay_milliseconds(100); - Draco9210GpioInit(); - Draco9210SetCS(); - Draco9210ToggleClock(); - Draco9210ToggleClock(); - Draco9210ToggleClock(); - Draco9210ToggleClock(); - Draco9210ClearCS(); - -#if defined(_WIN32) /* For Windows */ - for(i=0;i<10;i++) { - _asm { - out 0EDh, al - } - } - -#elif defined(linux) /* Linux */ - -#endif - - for (i=0; i < 630 ; i+=2) { - index = panelvalues[i]; - data = panelvalues[i+1]; - Draco9210WriteReg(index,data); - } - -} - -static void DracoWriteData(unsigned char data) -{ - int i; - unsigned char mask = 0x80, databit; - - for (i=0;i <8; i++) { - - databit = data & mask; - if(data & mask) { - Draco9210SetDataOut(); - } else { - Draco9210ClearDataOut(); - } - mask >>= 1; - Draco9210ToggleClock(); - } -} - -static void DracoReadData(unsigned char *data) -{ - int i; - unsigned char tmp=0, readbit; - - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - for (i=0;i<7;i++) { - readbit = Draco9210ReadDataIn(); - tmp |= (readbit & 0x1); - tmp <<= 1; - Draco9210ToggleClock(); - } - readbit = Draco9210ReadDataIn(); - tmp |= (readbit & 0x1); - *data = tmp; -} - -#if defined(_WIN32) /* For Windows */ - -void Draco9210GpioInit() -{ - _asm { - pushf - cli - mov dx, 0CF8h - mov eax, CX55x0_ID+090h - out dx, eax - mov dx, 0CFCh - mov al, 0CFh - mov ah, 00h - out dx, ax - popf - } -} - -void Draco9210SetCS() -{ - _asm { - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - - in ax, dx - and ah, 30h - mov ah, c92DataReg - or ah, CS9210 - mov c92DataReg, ah - out dx, ax - popf - } -} - -void Draco9210ClearCS() -{ - _asm { - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - - ; Set CS LOW - in ax, dx - mov ah, c92DataReg - and ah, NOT CS9210 - mov c92DataReg, ah - out dx, ax - popf - } -} - -void Draco9210SetDataOut() -{ - _asm { - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - ; Set DATA HIGH - in ax, dx - mov ah, c92DataReg - or ah, DATAOUT9210 - mov c92DataReg, ah - out dx, ax - popf - } -} - -void Draco9210ClearDataOut() -{ - _asm{ - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - ; Set Data LOW - in ax, dx - mov ah, c92DataReg - and ah, NOT DATAOUT9210 - mov c92DataReg, ah - out dx, ax - popf - } -} - -unsigned char Draco9210ReadDataIn() -{ - unsigned char readdata; - _asm{ - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - - in ax, dx - and ah, DATAIN9210 ; Preserve just Data IN bit - mov al, ah - cmp al, 0 ; Is it LOW? - je readDataLow - mov al, 1 ; must be HIGH - - readDataLow: - mov readdata,al - popf - } - return (readdata); -} - - -void Draco9210ToggleClock() -{ - _asm{ - pushf - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - - ; SET CLOCK - in ax, dx - mov ah, c92DataReg - or ah, CLOCK9210 - mov c92DataReg, ah - out dx, ax - out 0EDh, al /* IOPAUSE */ - - mov dx, 0CF8h ; Point to PCI address register - mov eax, CX55x0_ID+090h ; 55XX GPIO data register - out dx, eax - mov dx, 0CFCh ; Point to PCI data register (CFCh) - - ; CLEAR CLOCK - in ax, dx - mov ah, c92DataReg - and ah, NOT CLOCK9210 - mov c92DataReg, ah - out dx, ax - popf - } -} - -#elif defined(linux) /* Linux */ - - void Draco9210GpioInit(){} - void Draco9210SetCS(){} - void Draco9210ClearCS(){} - void Draco9210SetDataOut(){} - void Draco9210ClearDataOut(){} - unsigned char Draco9210ReadDataIn(){} - void Draco9210ToggleClock(){} - -#endif - -unsigned char Draco9210ReadReg(unsigned char index) -{ - unsigned char data; - - Draco9210SetCS(); - Draco9210ToggleClock(); - Draco9210SetDataOut(); - Draco9210ToggleClock(); - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - - DracoWriteData(index); - DracoReadData(&data); - - return (data); -} - -void Draco9210WriteReg(unsigned char index, unsigned char data) -{ - - Draco9210SetCS(); - Draco9210ToggleClock(); - - Draco9210SetDataOut(); - Draco9210ToggleClock(); - - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - - Draco9210SetDataOut(); - Draco9210ToggleClock(); - - DracoWriteData(index); - DracoWriteData(data); - - - Draco9210ClearDataOut(); - Draco9210ToggleClock(); - - Draco9210ClearCS(); - Draco9210ToggleClock(); - Draco9210ToggleClock(); - -} - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.h deleted file mode 100644 index 9558c98ed..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.h +++ /dev/null @@ -1,277 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/drac9210.h,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: drac9210.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the panel header file and definition - * for the platform with 9210 support. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Geode graphics driver for panel support - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#include "panel.h" - -#ifndef _DRAC9210_h -#define _DRAC9210_h -#define CX55x0_ID 0x80009000 -static unsigned char c92DataReg=0; -#endif /* !_DRAC9210_h */ - -/* END OF FILE */ - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.c deleted file mode 100644 index 0846be4ff..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.c +++ /dev/null @@ -1,180 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.c,v 1.2 2002/10/18 20:02:41 tsi Exp $ */ -/* - * $Workfile: panel.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the file inclusions, macro definitions - * for the panel. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#if defined(linux) /* Linux */ - -#ifdef __KERNEL__ - -#include <linux/string.h> -#include <asm/io.h> - -#else - -#include <linux/fs.h> -#include <asm/mman.h> - -#endif /* __KERNEL__ */ -#elif defined(_WIN32) /* windows */ - -#include <windows.h> - -#endif - -#include "panel.h" -#include "gfx_defs.h" -extern unsigned char *gfx_virt_regptr; -extern unsigned char *gfx_virt_fbptr; -extern unsigned char *gfx_virt_vidptr; -extern unsigned char *gfx_virt_vipptr; -extern unsigned long gfx_detect_video(void); - -#define PLATFORM_DYNAMIC 1 /* runtime selection */ -#define PLATFORM_DRACO 1 /* Draco + 9210 */ -#define PLATFORM_CENTAURUS 1 /* Centaurus + 9211 RevA */ -#define PLATFORM_DORADO 1 /* Dorado + 9211 RevC */ -#define PLATFORM_REDCLOUD 1 /* GX2 */ -#define PLATFORM_GX2BASED 0 /* ??? */ - -unsigned char *XpressROMPtr; - -#include "pnl_init.c" -#include "pnl_bios.c" diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.h deleted file mode 100644 index a8cb92cd1..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.h +++ /dev/null @@ -1,187 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/panel.h,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: panel.h $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the Geode frame buffer panel - * functions prototypes and it includes panel - * definitions header file. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* COMPILER OPTION FOR C++ PROGRAMS */ - -#ifndef _panel_h -#define _panel_h - -#include "pnl_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* CLOSE BRACKET FOR C++ COMPLILATION */ - -void Pnl_SetPlatform(int platform); -int Pnl_GetPlatform(void); -int Pnl_IsPanelPresent(void); -void Pnl_SetPanelPresent(int present); -void Pnl_SetPanelChip(int panelChip); -int Pnl_GetPanelChip(void); -void Pnl_SetPanelParam(PPnl_PanelParams pParam); -void Pnl_GetPanelParam(PPnl_PanelParams pParam); -int Pnl_InitPanel(PPnl_PanelParams pParam); -int Detect_Platform(void); -void Pnl_SavePanelState(void); -void Pnl_RestorePanelState(void); -void Pnl_PowerUp(void); -void Pnl_PowerDown(void); - -int Pnl_IsPanelEnabledInBIOS(void); -void Pnl_GetPanelInfoFromBIOS(int *xres, int *yres, int *bpp, int *hz); -/* from durango */ - -extern void gfx_delay_milliseconds(unsigned long milliseconds); -extern unsigned long gfx_ind(unsigned short port); -extern void gfx_outd(unsigned short port, unsigned long data); -extern unsigned char gfx_inb(unsigned short port); -extern void gfx_outb(unsigned short port, unsigned char data); - -#ifdef __cplusplus -} -#endif - -#endif /* !_panel_h */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/platform.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/platform.c deleted file mode 100644 index 33e4c6cf1..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/platform.c +++ /dev/null @@ -1,742 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/platform.c,v 1.2 2002/10/18 20:02:41 tsi Exp $ */ -/* - * $Workfile: platform.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains platform dependent functions - * which provide interface to that platform. - * - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#define LINUX_ROM_SEGMENT 0x000F -#define SEGMENT_LENGTH 0xFFFF -#define PAGE_LENGTH 0x1000 -#define SYS_BOARD_NAME_LEN 24 - -#define PLT_READ 0 -#define PLT_WRITE 1 -#define PLT_WRITE_BYTES 2 -#define PLT_READ_BYTES 3 -#define PLT_WRITE_WORDS 4 -#define PLT_READ_WORDS 5 -#define PLT_WRITE_DWORDS 6 -#define PLT_READ_DWORDS 7 -#define PLT_UNKNOWN 0xFFFF - -typedef struct { - char sys_board_name[SYS_BOARD_NAME_LEN]; - SYS_BOARD sys_board; -} SYS_BOARD_INFO; - -static SYS_BOARD_INFO Sys_info; - -/* - * The names in the sys_board_name string must exactly match the names in the - * BIOS header. These names are used by FindStringInSeg() to find the names - * in the BIOS header space. The BIOS does not use OTHER; it is a dummy value - * for program useonly. - * - */ - - SYS_BOARD_INFO Sys_board_info_array[] = { - {"Marmot", MARMOT_PLATFORM }, - {"Unicorn", UNICORN_PLATFORM }, - {"Centaurus", CENTAURUS_PLATFORM }, - {"Aries", ARIES_PLATFORM }, - {"Carmel", CARMEL_PLATFORM }, - {"Hyrda", HYDRA_PLATFORM }, - {"Dorado", DORADO_PLATFORM }, - {"Redcloud", REDCLOUD_PLATFORM }, - {"Other", OTHER_PLATFORM} -}; - -#define NUM_SYS_BOARD_TYPES sizeof(Sys_board_info_array)/sizeof(SYS_BOARD_INFO) - -static int Num_sys_board_type = NUM_SYS_BOARD_TYPES; -SYS_BOARD_INFO *Sys_board_array_base = Sys_board_info_array; -int FindStringInSeg(unsigned int, char *); -static unsigned char get_sys_board_type(SYS_BOARD_INFO *, SYS_BOARD_INFO *); - -#if defined(linux) && !defined(__KERNEL__) -#if defined(XFree86Server) && !defined(IN_MODULE) -static void protected_mode_access(unsigned int, unsigned int, - unsigned long, unsigned char* ); -static void setup_pma(); -static void close_pma(); -static int fd; -#endif /* IN_MODULE */ -#endif /* __KERNEL__ */ - - -/* Detect the Platform */ -int Detect_Platform(void) -{ -#if defined(linux) && !defined(__KERNEL__) -#if defined(XFree86Server) && !defined(IN_MODULE) - setup_pma(); - -#endif /* IN_MODULE */ - -#endif /* __KERNEL__ */ - - /* See if we can find the board name using Xpressrom */ - if (get_sys_board_type(&Sys_info, Sys_board_array_base) == TRUE ) { -#if 0 - if( Sys_info.sys_board == CENTAURUS_PLATFORM) { - printk("CENTAURUS Platform Found\n"); - } - else - if (Sys_info.sys_board == DORADO_PLATFORM) { - printk("DORADO Platform Found \n"); - } - else { - printk("UNKNOWN Platform Found \n"); - } -#endif -} - -#if defined(linux) && !defined(__KERNEL__) -#if defined(XFree86Server) && !defined(IN_MODULE) - close_pma(); -#endif /* IN_MODULE */ -#endif /* __KERNEL__ */ - -return (Sys_info.sys_board); -} - -static int Strncmp(char *str1, char *str2, int len ) -{ - int i; - if((str1 == 0x0) || (str2 == 0x0) || (len == 0)) - return (1); - for(i = 0; i < len; i++) { - if(*(str1+i) > *(str2+i)) { - return 1; - } - else - if(*(str1+i) < *(str2+i)) { - return -1; - } - } - return 0; -} - -static char *Strcpy(char *dst, char *src) -{ - int i; - if((dst == 0x0) || (src == 0x0)) - return (0); - for(i = 0; src[i] != 0x0; i++) - { - dst[i] = src[i]; - } - dst[i] = 0x0; /* NULL termination */ - return dst; -} - -static int Strlen(char *str) -{ - int i; - if(str == 0x0) - return 0; - for(i = 0; str[i] != 0x0; i++); - return i; -} - -/***********************************************************************/ - -/* Platform Detection Code */ - -/***********************************************************************/ - -/************************************************************************ - * int FindStringInSeg( unsigned int segment_address, char *string_ptr ) - * Returns the offset where the NULL terminated string pointed to by - * string_ptr is located in the segment passed in segment_address. - * Segment_address must be of the form 0xXXXX (i.e 0xf000 for segment f). - * Returns NULL if the string is not found. - ************************************************************************ - */ -int FindStringInSeg( unsigned int segment_address, char *string_ptr ) -{ - int string_length = Strlen( string_ptr ); - char *psegment_buf; - unsigned long mem_ptr = (unsigned long)segment_address << 16; - unsigned char segment_buffer[SEGMENT_LENGTH + 1 ]; - int i, cursor; - - /* silence compiler */ - (void) cursor; - (void) mem_ptr; - (void) segment_buffer; - -#if defined(linux) -#if defined(__KERNEL__) - XpressROMPtr = (unsigned char *)ioremap(mem_ptr, SEGMENT_LENGTH+1); - psegment_buf = (char *)XpressROMPtr; -#else -#if defined(XFree86Server) && defined(IN_MODULE) - psegment_buf = (char *)XpressROMPtr; -#else - /* Fill the segment_buffer with 16 page accesses */ - - for(cursor = 0; (cursor * PAGE_LENGTH) < SEGMENT_LENGTH; cursor++) { - protected_mode_access(PLT_READ_BYTES, PAGE_LENGTH, mem_ptr + - (cursor * PAGE_LENGTH ), - &(segment_buffer[( cursor * PAGE_LENGTH )]) ); - } - psegment_buf = segment_buffer; -#endif /* defined(XFree86Server) && defined(IN_MODULE) */ -#endif /* __KERNEL__ */ - -#elif defined(_WIN32) /* Windows */ - psegment_buf = XpressROMPtr; -#endif - /* Now search for the first character of the string_ptr */ - for(i = 0; i < SEGMENT_LENGTH + 1 ; i++) { - if(*(psegment_buf + i) == *string_ptr) { - - /* If we match the first character, do a - * string compare. - */ - - if(!Strncmp(string_ptr, (psegment_buf + i), - string_length )) { - /* They match! */ - return(1); - } - } - } - /* if we got this far we didn't find anything. Return NULL. */ - return(0); - -} /* end FindStringInSeg() */ - - -/********************************************************************** - - * TRUE_FALSE get_sys_board_type( SYS_BOARD_INFO *sys_info, - * SYS_BOARD_INFO *sys_board_array_base) Checks the system - * BIOS area for Xpressrom information. If found, searches the BIOS - * area for one of names in the array pointed to by sys_board_array_ptr. - * If a match is found, sets the SYS_INFO system_board_name string - * and the system_board variable to the board name and returns TRUE. - * If Xpressrom or a board is not found, sets the variables to - * their default values and returns FALSE. - * Uses the global string pointer *xpress_rom_string_ptr. - * - *********************************************************************** - */ - -static unsigned char get_sys_board_type( SYS_BOARD_INFO *sys_info, - SYS_BOARD_INFO *sys_board_array_base ) -{ - int index; - char *xpress_rom_string_ptr = "XpressStart"; - unsigned int segment = LINUX_ROM_SEGMENT; - - /* See if XpressStart is present in the BIOS area. - * If it is, search for a board string. If not, Xpressrom is - * not present, set system_board information to UNKNOWN and - * return FALSE. - */ - - if (!FindStringInSeg(segment, xpress_rom_string_ptr )) { - sys_info->sys_board = PLT_UNKNOWN; - Strcpy( sys_info->sys_board_name, "Unknown" ); - return( FALSE ); - } - else { - - /* we have Xpressrom, so look for a board */ - for(index = 0; index < Num_sys_board_type; index++) { - if (!FindStringInSeg(segment, (sys_board_array_base + - index)->sys_board_name )) { - continue; - } - else { - - /* a match!! */ - sys_info->sys_board = - ( sys_board_array_base + index )->sys_board; - Strcpy(sys_info->sys_board_name, - (sys_board_array_base+index )->sys_board_name ); - return( TRUE ); - } - } /* end for() */ - } /* end else */ - - /* if we are here we have failed */ - sys_info->sys_board = PLT_UNKNOWN; - Strcpy( sys_info->sys_board_name, "Unknown" ); - return( FALSE ); -} /* end get_sys_board_type() */ - -#if defined(linux) && !defined(__KERNEL__) -#if defined(XFree86Server) && !defined(IN_MODULE) - -/****************************************************************** - * - * protected_mode_access( unsigned int mode, unsigned int width, - * unsigned long addr, unsigned char* pdata ) - * This function provides access to physical memory - * at the requested address. - * mode is: PLT_READ or PLT_WRITE (accesses a single byte, word - * or double word depending on the value of "width". - * Only 1, 2 or 4 supported). - * PLT_READ_BYTES, PLT_WRITE_BYTES accesses "width" number - * of bytes (8 bits) - * PLT_READ_WORDS, PLT_WRITE_WORDS accesses "width" number - * of words (16 bits) PLT_READ_DWORDS, PLT_WRITE_DWORDS accesses - * "width" number of dwords (32 bits) - * width is: The size of the access. - * For PLT_READ or PLT_WRITE, only 1, 2 and 4 are - * supported. For other modes, width is not limited but - * will cause paging if the block traverses page boundaries. - * addr is: The physical address being accessed - * pdata is: A pointer to the data to be read or written into. - * NOTE! WORD or DWORD accesses can only be made on - * WORD or DWORD boundaries! - * - ****************************************************************** - */ - -static void protected_mode_access( unsigned int mode, unsigned int width, - unsigned long addr, unsigned char* pdata ) -{ - -#define PMTRASH 0x12345678L - - unsigned long base; /* The physical page address */ - int length = 0x1000; /* the page size is 4k */ - unsigned int offset = 0; /* The physical addr offset into page */ - unsigned int index = 0; /* Used to read/write from/to a block */ - unsigned int chunk = 0; /* The amount to read/wr from THIS block */ - unsigned int size = 0; /* Data size shift value (to avoid math) */ - static void *ptr; /* pointer to real memory location. */ - - static unsigned long lastbase = PMTRASH; - - /* temp storage of previous base used. */ - /* type specific buffer pointers */ - unsigned char* byte_data = (unsigned char*)pdata; - unsigned int* word_data = (unsigned int*)pdata; - unsigned long* dword_data = (unsigned long*)pdata; - - switch( mode ) { - - case PLT_READ_WORDS: - case PLT_WRITE_WORDS: - - size = 1; - break; - - case PLT_READ_DWORDS: - case PLT_WRITE_DWORDS: - - size = 2; - } - - /* Check if we're in the user accessable range */ - if (addr < 0xFF000000L ) { - - /* We get physical memory in "pages", defined by the - * following "base" address and the "offset" into it. - * "base" will be used with mmap to get "ptr", which - * points to the memory mapped actual physical memory at - * the address pointed-to by "base". - * "width" and "chunk" are in units of whatever data - * type we're reading. - * "length" and "offset" are in units of bytes. - * "width" and "chunk" must be adjusted with "<<size" - * to use with "length" or "offset". Similarly, the - * result must be adjusted with ">>size" to make into the - * proper type units when done. - */ - base = addr & 0xFFFFF000L; - offset = addr & 0x00000FFFL; - do { - if (( offset + ( width << size )) > length ) { - - /* Block being read extends beyond the - * page boundary. Adjust things. - */ - chunk = (length - offset) >> size; - - /* Figure the chunk size */ - width -= chunk; - - /* Reduce width by the current chunk */ - } - else { - - /* Block being read is within the - * page boundary. - */ - chunk = width; - width = 0; - - /* set to zero so we'll exit at the end */ - - } - /* We keep the page around in case we need to - * access it again. - * This saves us some time if we have consecutive - * accesses. - */ - - if (base != lastbase) { - - /* we haven't mmap'd this address - * Have to get a new page. Free the - * previous page, if it's valid (ie, not - * PMTRASH). If not, unmap it and get the - * new page. - */ - if (lastbase != PMTRASH) - munmap(ptr, length); - ptr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, base); - if ( (int) ptr == -1 ) { - lastbase = PMTRASH; - return; /* error */ - } - } - - /* Now we're ready to get the data. - * It's pure memory access now, no funny - * function calls, however we do cast things to get - * the right size data. - */ - - /* Scale the offset for the data type size */ - index = offset >> size; - - /* Note that the above line and below lines, - * which shift "offset", discard address information - * if you happen to be trying to write, for example, - * dwords on non-dword boundaries. - */ - /* Note that cases PLT_READ and PLT_WRITE don't - * use "index". They shift "offset" on their own. - * This is because in PLT_READ and PLT_WRITE modes, - * the information on the size of the data - * transaction is in the "width" variable not "size". - * We also need separate cases to cast the values - * right. - */ - switch( mode ) { - - case PLT_READ: { - - switch( chunk ) { - - case FOUR_BYTES: - - *(dword_data) = - (unsigned long) - (*(((unsigned long*)ptr) + - (offset>>2))); - break; - - case TWO_BYTES: - - *(word_data) = - (unsigned int) - (*(((unsigned int *)ptr) + - (offset>>1))); - break; - - default: - - *(byte_data) = - (unsigned char) - (*(((unsigned char *)ptr) + - ( offset ))); - break; - - } /* end switch() */ - break; - - } /* end case PLT_READ */ - - case PLT_WRITE: { - - switch( chunk ) { - - case FOUR_BYTES: - - *(((unsigned long*)ptr) + - (offset>>2)) = *dword_data; - break; - - case TWO_BYTES: - - *(((unsigned int *)ptr) + - (offset>>1)) = *word_data; - break; - - default: - - *(((unsigned char *)ptr) + - ( offset )) = *byte_data; - break; - } /* end switch() */ - break; - - } /* end case PLT_WRITE */ - - case PLT_READ_BYTES: { - - for( ; chunk > 0; chunk-- ) { - - *(byte_data++) = (unsigned char) (*(((unsigned char*)ptr) + - (index++))); - } - break; - } /* end case PLT_READ_BYTES */ - - case PLT_WRITE_BYTES: { - - for( ; chunk > 0; chunk-- ) { - *(((unsigned char*)ptr)+(index++)) = - *(byte_data++); - } - break; - - } /* end case PLT_WRITE_BYTES */ - - case PLT_READ_WORDS: { - - for( ; chunk > 0; chunk-- ) { - - *(word_data++) = (unsigned int) - (*(((unsigned int*)ptr)+ (index++))); - } - break; - - } /* end case PLT_READ_WORDS */ - - case PLT_WRITE_WORDS: { - - for( ; chunk > 0; chunk-- ) { - - *(((unsigned int*)ptr)+(index++)) = - *(word_data++); - } - break; - - } /* end case PLT_WRITE_WORDS */ - - case PLT_READ_DWORDS: { - - for( ; chunk > 0; chunk-- ) { - - *(dword_data++) = - (*(((unsigned long*)ptr)+(index++))); - } - break; - - } /* end case PLT_READ_DWORDS */ - - case PLT_WRITE_DWORDS: { - - for( ; chunk > 0; chunk-- ) { - - *(((unsigned long*)ptr)+(index++)) - = *(dword_data++); - } - break; - - } /* end case PLT_WRITE_DWORDS */ - - } /* end switch(mode) */ - - lastbase = base; - - /* Save the page we've just processed. */ - - if( width ) { - - /* If there's still width left to get. */ - - base += length; - /* Increment to the next page. */ - - offset = 0; - /* Set the offset to zero. */ - } - - } while( width ); /* While there's still data to get. */ - return; - - } /* end for if addr */ - else { - - printf( "PMA error: Unable to read ROM address space\n" ); - exit( 1 ); - } - return; -} - -/************************************************************************ - * setup_pma() loads the ROM memory access module and initializes - * memory access file descriptor (access is handled through a file-like - * interface). - ************************************************************************ - */ -static void setup_pma() -{ - fd = open( "/dev/mem", 2); /* O_RDWR */ - if (fd == -1 ) { - - printf( "Error: Unable to open /dev/mem !\a\n" ); - exit( 1 ); - } - return; -} - -/********************************************************************** - * close_pma() cleans up the open memory access devices and file - * descriptors. - ********************************************************************** - */ -static void close_pma() -{ - close( fd ); - return; -} -#endif /* IN_MODULE */ -#endif /* linux && !__KERNEL__ */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_bios.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_bios.c deleted file mode 100644 index 5a9fb194b..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_bios.c +++ /dev/null @@ -1,383 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_bios.c,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: pnl_bios.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file panel functions which query for the BIOS for current FP - * Paramters. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#include "panel.h" - -extern unsigned long gfx_cpu_version; -extern void gfx_outw(unsigned short port, unsigned short data); -extern unsigned short gfx_inw(unsigned short port); - - -#define SOFTVGA_DISPLAY_ENABLE 0x50 -#define SOFTVGA_FPRESOLUTION 0x52 -#define SOFTVGA_FPCLOCKFREQUENCY 0x54 - -/* SOFTVG VIRTUAL REGISTER DEFINITIONS */ - -#define VR_INDEX 0xAC1C -#define VR_DATA 0xAC1E -#define VR_UNLOCK 0xFC53 -#define VRC_VG 0x0002 /* SoftVG Virtual Register Class */ -#define VG_MEM_SIZE 0x0000 /* MemSize Virtual Register */ -#define FP_DETECT_MASK 0x8000 - -#define VG_FP_TYPE 0x0002 /* Flat Panel Info Virtual Register */ - -#define FP_DEV_MASK 0x0003 /* Flat Panel type */ -#define FP_TYPE_SSTN 0x0000 /* SSTN panel type value */ -#define FP_TYPE_DSTN 0x0001 /* DSTN panel type value */ -#define FP_TYPE_TFT 0x0002 /* TFT panel type value */ -#define FP_TYPE_LVDS 0x0003 /* LVDS panel type value */ - -#define FP_RESOLUTION_MASK 0x0038 -#define FP_RES_6X4 0x0000 /* 640x480 resolution value */ -#define FP_RES_8X6 0x0008 /* 800x600 resolution value */ -#define FP_RES_10X7 0x0010 /* 1024x768 resolution value */ -#define FP_RES_12X10 0x0018 /* 1280x1024 resolution value */ -#define FP_RES_16X12 0x0020 /* 1600x1200 resolution value */ - -#define FP_WIDTH_MASK 0x01C0 -#define FP_WIDTH_8 0x0000 /* 8 bit data bus width */ -#define FP_WIDTH_9 0x0040 /* 9 bit data bus width */ -#define FP_WIDTH_12 0x0080 /* 12 bit data bus width */ -#define FP_WIDTH_18 0x00C0 /* 18 bit data bus width */ -#define FP_WIDTH_24 0x0100 /* 24 bit data bus width */ -#define FP_WIDTH_16 0x0140 /* 16 bit data bus width - 16 bit Mono DSTN only */ - -#define FP_COLOR_MASK 0x0200 -#define FP_COLOR_COLOR 0x0000 /* Color panel */ -#define FP_COLOR_MONO 0x0200 /* Mono Panel */ - -#define FP_PPC_MASK 0x0400 -#define FP_PPC_1PPC 0x0000 /* One pixel per clock */ -#define FP_PPC_2PPC 0x0400 /* Two pixels per clock */ - -#define FP_HPOL_MASK 0x0800 -#define FP_H_POL_LGH 0x0000 /* HSync at panel, normally low, active high */ -#define FP_H_POL_HGL 0x0800 /* HSync at panel, normally high, active low */ - -#define FP_VPOL_MASK 0x1000 -#define FP_V_POL_LGH 0x0000 /* VSync at panel, normally low, active high */ -#define FP_V_POL_HGL 0x1000 /* VSync at panel, normally high, active low */ - -#define FP_REF_MASK 0xD000 -#define FP_REF_60 0x0000 /* 60Hz refresh rate */ -#define FP_REF_65 0x2000 /* 65Hz refresh rate */ -#define FP_REF_70 0x4000 /* 70Hz refresh rate */ -#define FP_REF_72 0x6000 /* 72Hz refresh rate */ -#define FP_REF_75 0x8000 /* 75Hz refresh rate */ -#define FP_REF_85 0xA000 /* 85Hz refresh rate */ - - -/*----------------------------------------------------------------- - * Pnl_IsPanelEnabledInBIOS - * - * Description: This function specifies whether the panel is enabled - * by the BIOS or not. - * parameters: none. - * return: 1 - Enabled, 0 - Disabled - *-----------------------------------------------------------------*/ -int Pnl_IsPanelEnabledInBIOS(void) -{ - unsigned char ret=0; - - if ((gfx_cpu_version & 0xFF) == GFX_CPU_REDCLOUD) - { - unsigned short data; - gfx_outw(VR_INDEX, VR_UNLOCK); - gfx_outw(VR_INDEX, (VRC_VG << 8) | VG_MEM_SIZE); - data = gfx_inw(VR_DATA); - if(data & FP_DETECT_MASK) - ret = 1; - } else - { - unsigned short crtcindex, crtcdata; - crtcindex = (gfx_inb(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - /* CHECK DisplayEnable Reg in SoftVGA */ - - gfx_outb(crtcindex, (unsigned char) SOFTVGA_DISPLAY_ENABLE); - ret = gfx_inb(crtcdata); - } - - return(ret & 0x1); -} - -/*----------------------------------------------------------------- - * Pnl_GetPanelInfoFromBIOS - * - * Description: This function queries the panel information from - * the BIOS. - * parameters: - * xres: width of the panel configured - * yres: height of the panel configured - * bpp: depth of the panel configured - * hz: vertical frequency of the panel configured - * return: none - *-----------------------------------------------------------------*/ -void Pnl_GetPanelInfoFromBIOS(int *xres, int *yres, int *bpp, int *hz) -{ - unsigned short crtcindex, crtcdata; - unsigned short ret; - - if ((gfx_cpu_version & 0xFF) == GFX_CPU_REDCLOUD) - { - gfx_outw(VR_INDEX, VR_UNLOCK); - gfx_outw(VR_INDEX, (VRC_VG << 8) | VG_FP_TYPE); - ret = gfx_inw(VR_DATA); - switch(ret & FP_RESOLUTION_MASK) - { - case FP_RES_6X4: - *xres = 640; - *yres = 480; - break; - case FP_RES_8X6: - *xres = 800; - *yres = 600; - break; - case FP_RES_10X7: - *xres = 1024; - *yres = 768; - break; - case FP_RES_12X10: - *xres = 1280; - *yres = 1024; - break; - case FP_RES_16X12: - *xres = 1600; - *yres = 1200; - break; - } - - switch(ret & FP_WIDTH_MASK) - { - case FP_WIDTH_8: - *bpp = 8; - break; - case FP_WIDTH_9: - *bpp = 9; - break; - case FP_WIDTH_12: - *bpp = 12; - break; - case FP_WIDTH_18: - *bpp = 18; - break; - case FP_WIDTH_24: - *bpp = 24; - break; - case FP_WIDTH_16: - *bpp = 16; - break; - } - - switch(ret & FP_REF_MASK) - { - case FP_REF_60: - *hz = 60; - break; - case FP_REF_65: - *hz = 65; - break; - case FP_REF_70: - *hz = 70; - break; - case FP_REF_72: - *hz = 72; - break; - case FP_REF_75: - *hz = 75; - break; - case FP_REF_85: - *hz = 85; - break; - } - - - } else - { - crtcindex = (gfx_inb(0x3CC) & 0x01) ? 0x3D4 : 0x3B4; - crtcdata = crtcindex + 1; - - /* CHECK FPResolution Reg in SoftVGA */ - - gfx_outb(crtcindex, (unsigned char) SOFTVGA_FPRESOLUTION); - ret = gfx_inb(crtcdata); - - switch (ret & 0x3) { - case 0: - *xres = 640; - *yres = 480; - break; - case 1: - *xres = 800; - *yres = 600; - break; - case 2: - *xres = 1024; - *yres = 768; - break; - } - - switch ((ret >> 4) & 0x3) { - case 0: - *bpp = 12; - break; - case 1: - *bpp = 18; - break; - case 2: - *bpp = 16; - break; - case 3: - *bpp = 8; - break; - } - - /* CHECK FPClockFrequency Reg in SoftVGA */ - - gfx_outb(crtcindex, (unsigned char) SOFTVGA_FPCLOCKFREQUENCY); - *hz = gfx_inb(crtcdata); - } -} - - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_defs.h b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_defs.h deleted file mode 100644 index 4ea750452..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_defs.h +++ /dev/null @@ -1,199 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_defs.h,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: pnl_defs.h $ - * - * File Contents: This file contains definitions of the Geode - * frame buffer panel data structures. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -#ifndef _pnl_defs_h -#define _pnl_defs_h - -typedef enum { - MARMOT_PLATFORM=0, - UNICORN_PLATFORM, - CENTAURUS_PLATFORM, - ARIES_PLATFORM, - CARMEL_PLATFORM, - HYDRA_PLATFORM, - DORADO_PLATFORM, - DRACO_PLATFORM, - REDCLOUD_PLATFORM, - OTHER_PLATFORM -} SYS_BOARD; - -#define PNL_9210 0x01 -#define PNL_9211_A 0x02 -#define PNL_9211_C 0x04 -#define PNL_UNKNOWN_CHIP 0x08 - -#define PNL_TFT 0x01 -#define PNL_SSTN 0x02 -#define PNL_DSTN 0x04 -#define PNL_TWOP 0x08 -#define PNL_UNKNOWN_PANEL 0x10 - -#define PNL_MONO_PANEL 0x01 -#define PNL_COLOR_PANEL 0x02 -#define PNL_UNKNOWN_COLOR 0x08 - -#define PNL_PANELPRESENT 0x01 -#define PNL_PLATFORM 0x02 -#define PNL_PANELCHIP 0x04 -#define PNL_PANELSTAT 0x08 -#define PNL_OVERRIDE_STAT 0x10 -#define PNL_OVERRIDE_ALL 0x1F - -typedef struct _Pnl_PanelStat_ -{ - int Type; - int XRes; - int YRes; - int Depth; - int MonoColor; -} Pnl_PanelStat; - -typedef struct _Pnl_Params_ -{ - unsigned long Flags; - int PanelPresent; - int Platform; - int PanelChip; - Pnl_PanelStat PanelStat; -} Pnl_PanelParams, *PPnl_PanelParams; - -#endif /* _pnl_defs_h */ - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_init.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_init.c deleted file mode 100644 index 8f3da2625..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_init.c +++ /dev/null @@ -1,613 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/pnl_init.c,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -/* - * $Workfile: pnl_init.c $ - * $Revision: 1.2.8.2 $ - * - * File Contents: This file contains the Geode frame buffer panel - * intialization functions. - * - * SubModule: Geode FlatPanel library - * - */ - -/* - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Panel Library - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for - * - * Panel Library - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for - * - * Panel Library - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - - -#include "panel.h" -#include "gfx_regs.h" -#include "gfx_type.h" - -/* defaults -Panel : Enabled -Platform : Centaurus -92xx Chip : 9211 Rev. A -PanelType : DSTN -XResxYRes : 800x600 -Depth : 16 -Mono_Color : Color -*/ -static Pnl_PanelParams sPanelParam={ - 0, 1, CENTAURUS_PLATFORM, PNL_9211_A, - { PNL_DSTN, 800, 600, 16, PNL_COLOR_PANEL} -}; - -#if PLATFORM_DRACO -#include "drac9210.c" -#endif - -#if PLATFORM_CENTAURUS -#include "cen9211.c" -#endif - -#if PLATFORM_DORADO -#include "dora9211.c" -#endif - -#if PLATFORM_GX2BASED -#include "gx2_9211.c" -#endif -#include "platform.c" - -/* - * return -1 - UnKnown - * 0 - Draco has 9210 - * 1 - Centaurus has 9211 Rev. A - * 2 - Dorado has 9211 Rev. C - */ - - -/*----------------------------------------------------------------- - * Pnl_SetPlatform - * - * Description: This function sets the panel with hardware platform. - * parameters: - * platform: It specify the platform. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_SetPlatform(int platform) -{ - /* To Be Implemented */ - sPanelParam.Platform = platform; - -} - -/*----------------------------------------------------------------- - * Pnl_GetPlatform - * - * Description: This function returns the panel platform. - * parameters: none. - * return: On success it returns the panel platform. - *-----------------------------------------------------------------*/ -int Pnl_GetPlatform(void) -{ - sPanelParam.Platform = Detect_Platform(); - - return sPanelParam.Platform; - -} - -/*----------------------------------------------------------------- - * Pnl_IsPanelPresent - * - * Description: This function specifies whether the panel is prsent - * or not. - * parameters: none. - * return: On success it returns an integer panel present value. - *-----------------------------------------------------------------*/ -int Pnl_IsPanelPresent(void) -{ - /* To Be Implemented */ - return sPanelParam.PanelPresent; -} - -/*----------------------------------------------------------------- - * Pnl_SetPanelPresent - * - * Description: This function sets the panel_present parameter. - * parameters: - * present: It specifies the panel present value. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_SetPanelPresent(int present) -{ - /* To Be Implemented */ - sPanelParam.PanelPresent = present; -} - -/*----------------------------------------------------------------- - * Pnl_SetPanelParam - * - * Description: This function sets the panel parameters - * parameters: - * pParam: It specifies the elements of the panel parameter - * structure. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_SetPanelParam(PPnl_PanelParams pParam) -{ - if (pParam->Flags & PNL_PANELPRESENT) { - Pnl_SetPanelPresent(pParam->PanelPresent); - } - if (pParam->Flags & PNL_PLATFORM) { - Pnl_SetPlatform(pParam->Platform); - } - if (pParam->Flags & PNL_PANELCHIP) { - Pnl_SetPanelChip(pParam->PanelChip); - } - if(pParam->Flags & PNL_PANELSTAT) { - sPanelParam.PanelStat.XRes = pParam->PanelStat.XRes; - sPanelParam.PanelStat.YRes = pParam->PanelStat.YRes; - sPanelParam.PanelStat.Depth = pParam->PanelStat.Depth; - sPanelParam.PanelStat.MonoColor = pParam->PanelStat.MonoColor; - sPanelParam.PanelStat.Type = pParam->PanelStat.Type; - } -} - -/*----------------------------------------------------------------- - * Pnl_PowerUp - * - * Description: This function sets the power based on the - * hardware platforms dorado or centaraus. - * parameters: none. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_PowerUp(void) -{ - int Platform; - unsigned long dcfg, hw_video; - - Platform = Pnl_GetPlatform(); - -#if PLATFORM_CENTAURUS - if (Platform == CENTAURUS_PLATFORM) { - Centaurus_Power_Up(); - return; - } -#endif - -#if PLATFORM_DORADO - if (Platform == DORADO_PLATFORM) { - Dorado_Power_Up(); - return; - } -#endif - -#if PLATFORM_GX2BASED - if(Platform == REDCLOUD_PLATFORM) { - } -#endif - - hw_video = gfx_detect_video(); - - if(hw_video == GFX_VID_CS5530) - { - /* READ DISPLAY CONFIG FROM CX5530 */ - dcfg = READ_VID32(CS5530_DISPLAY_CONFIG); - - /* SET RELEVANT FIELDS */ - dcfg |= (CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN); - /* Enable the flatpanel power and data */ - WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg); - } - else if(hw_video == GFX_VID_SC1200) - { - /* READ DISPLAY CONFIG FROM SC1200 */ - dcfg = READ_VID32(SC1200_DISPLAY_CONFIG); - - /* SET RELEVANT FIELDS */ - dcfg |= (SC1200_DCFG_FP_PWR_EN | SC1200_DCFG_FP_DATA_EN); - /* Enable the flatpanel power and data */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg); - } - else if(hw_video == GFX_VID_REDCLOUD) - { - /* READ DISPLAY CONFIG FROM REDCLOUD */ - dcfg = READ_VID32(RCDF_DISPLAY_CONFIG); - - /* SET RELEVANT FIELDS */ - dcfg |= (RCDF_DCFG_FP_PWR_EN | RCDF_DCFG_FP_DATA_EN); - /* Enable the flatpanel power and data */ - WRITE_VID32(RCDF_DISPLAY_CONFIG, dcfg); - } - -} - -/*----------------------------------------------------------------- - * Pnl_PowerDown - * - * Description: This function make power down based on the - * hardware platforms dorado or centaraus. - * parameters: none. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_PowerDown(void) -{ - int Platform; - unsigned long dcfg, hw_video; - - Platform = Pnl_GetPlatform(); - -#if PLATFORM_CENTAURUS - if (Platform == CENTAURUS_PLATFORM) { - Centaurus_Power_Down(); - return; - } -#endif -#if PLATFORM_DORADO - if (Platform == DORADO_PLATFORM) { - Dorado_Power_Down(); - return; - } -#endif - -#if PLATFORM_GX2BASED - if(Platform == REDCLOUD_PLATFORM) { - } -#endif - - hw_video = gfx_detect_video(); - - if(hw_video == GFX_VID_CS5530) - { - /* READ DISPLAY CONFIG FROM CX5530 */ - dcfg = READ_VID32(CS5530_DISPLAY_CONFIG); - - /* CLEAR RELEVANT FIELDS */ - dcfg &= ~(CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN); - /* Disable the flatpanel power and data */ - WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg); - } - else if(hw_video == GFX_VID_SC1200) - { - /* READ DISPLAY CONFIG FROM SC1200 */ - dcfg = READ_VID32(SC1200_DISPLAY_CONFIG); - - /* CLEAR RELEVANT FIELDS */ - dcfg &= ~(SC1200_DCFG_FP_PWR_EN | SC1200_DCFG_FP_DATA_EN); - /* Disable the flatpanel power and data */ - WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg); - } - else if(hw_video == GFX_VID_REDCLOUD) - { - /* READ DISPLAY CONFIG FROM REDCLOUD */ - dcfg = READ_VID32(RCDF_DISPLAY_CONFIG); - - /* CLEAR RELEVANT FIELDS */ - dcfg &= ~(RCDF_DCFG_FP_PWR_EN | RCDF_DCFG_FP_DATA_EN); - /* Disable the flatpanel power and data */ - WRITE_VID32(RCDF_DISPLAY_CONFIG, dcfg); - } -} - -/*----------------------------------------------------------------- - * Pnl_SavePanelState - * - * Description: This function saves the panel state based on the - * hardware platforms dorado or centaraus. - * parameters: none. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_SavePanelState(void) -{ - int Platform; - Platform = Pnl_GetPlatform(); - -#if PLATFORM_CENTAURUS - if (Platform == CENTAURUS_PLATFORM) { - Centaurus_Save_Panel_State(); - return; - } -#endif - -#if PLATFORM_DORADO - if (Platform == DORADO_PLATFORM) { - Dorado_Save_Panel_State(); - return; - } -#endif - -#if PLATFORM_GX2BASED - if(Platform == REDCLOUD_PLATFORM) { - } -#endif -} - -/*----------------------------------------------------------------- - * Pnl_RestorePanelState - * - * Description: This function restore the panel state based on the - * hardware platforms dorado or centaraus. - * parameters: none. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_RestorePanelState(void) -{ - int Platform; - Platform = Pnl_GetPlatform(); -#if PLATFORM_CENTAURUS - if (Platform == CENTAURUS_PLATFORM) { - Centaurus_Restore_Panel_State(); - return; - } -#endif - -#if PLATFORM_DORADO - if (Platform == DORADO_PLATFORM) { - Dorado_Restore_Panel_State(); - return; - } -#endif - -#if PLATFORM_GX2BASED - if(Platform == REDCLOUD_PLATFORM) { - } -#endif -} - -/*----------------------------------------------------------------- - * Pnl_GetPanelParam - * - * Description: This function gets the panel parameters from the - * hardware platforms dorado or centaraus. - * parameters: - * pParam: It specifies the elements of the panel parameter - * structure. - * return: none. - *-----------------------------------------------------------------*/ -void Pnl_GetPanelParam(PPnl_PanelParams pParam) -{ - if (pParam->Flags & PNL_PANELPRESENT) { - pParam->PanelPresent = Pnl_IsPanelPresent(); - } - if (pParam->Flags & PNL_PLATFORM) { - pParam->Platform = Pnl_GetPlatform(); - } - if ((pParam->Flags & PNL_PANELCHIP) || - (pParam->Flags & PNL_PANELSTAT)) { -#if PLATFORM_CENTAURUS - if (pParam->Platform == CENTAURUS_PLATFORM) { - Centaurus_Get_9211_Details(pParam->Flags, pParam); - return; - } -#endif - -#if PLATFORM_DORADO - if(pParam->Platform == DORADO_PLATFORM) { - Dorado_Get_9211_Details(pParam->Flags, pParam); - return; - } -#endif - -#if PLATFORM_GX2BASED - if(pParam->Platform == REDCLOUD_PLATFORM) { - } -#endif - - /* if unknown platform put unknown */ - if (pParam->Flags & PNL_PANELCHIP) - pParam->PanelChip = PNL_UNKNOWN_CHIP; - - if (pParam->Flags & PNL_PANELSTAT) { - pParam->PanelStat.XRes = 0; - pParam->PanelStat.YRes = 0; - pParam->PanelStat.Depth = 0; - pParam->PanelStat.MonoColor = PNL_UNKNOWN_COLOR; - pParam->PanelStat.Type = PNL_UNKNOWN_PANEL; - } - } -} - -/*----------------------------------------------------------------- - * Pnl_SetPanelChip - * - * Description: This function sets the panelchip parameter of panel - * structure. - * parameters: - * panelChip: It specifies the panelChip value. - * return: none. - *-----------------------------------------------------------------*/ - -void Pnl_SetPanelChip(int panelChip) -{ - /* To Be Implemented */ - sPanelParam.PanelChip = panelChip; - -} - -/*----------------------------------------------------------------- - * Pnl_GetPanelChip - * - * Description: This function gets the panelchip parameter of panel - * structure. - * parameters: - * return: On success it returns the panelchip. - *-----------------------------------------------------------------*/ -int Pnl_GetPanelChip(void) -{ - /* To Be Implemented */ - return sPanelParam.PanelChip; -} - -/*----------------------------------------------------------------- - * Pnl_InitPanel - * - * Description: This function initializes the panel with - * hardware platforms dorado or centaraus. - * parameters: - * pParam: It specifies the elements of the panel parameter - * structure. - * return: none. - *-----------------------------------------------------------------*/ -int Pnl_InitPanel(PPnl_PanelParams pParam) -{ - PPnl_PanelParams pPtr; - if (pParam == 0x0) /* NULL use the static table */ - pPtr = &sPanelParam; - else - pPtr = pParam; - - if(!pPtr->PanelPresent) { - return -1; /* error */ - } - else { - if((pPtr->PanelChip < 0) || (pPtr->Platform < 0)) - return -1; /* error */ - -#if PLATFORM_DRACO - /* check we are init. the right one */ - if((pPtr->Platform == DRACO_PLATFORM) && - (pPtr->PanelChip == PNL_9210)){ - Draco9210Init(&(pPtr->PanelStat)); - } -#endif - -#if PLATFORM_CENTAURUS - /* check we are init. the right one */ - if (pPtr->Platform == CENTAURUS_PLATFORM) { - Centaurus_9211init(&(pPtr->PanelStat)); - } -#endif - -#if PLATFORM_DORADO - /* check we are init. the right one */ - if((pPtr->Platform == DORADO_PLATFORM) && - (pPtr->PanelChip == PNL_9211_C)){ - Dorado9211Init(&(pPtr->PanelStat)); - } -#endif -#if PLATFORM_GX2BASED - if(pPtr->Platform == REDCLOUD_PLATFORM) { - Redcloud_9211init(&(pPtr->PanelStat)); - } -#endif - } /* else end */ - return 1; -} - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/readme.txt b/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/readme.txt deleted file mode 100644 index 6fcdcb7f9..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/panel/readme.txt +++ /dev/null @@ -1,301 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/panel/readme.txt,v 1.1 2002/10/11 14:33:02 alanh Exp $ */ -Panel Library -Release 1.2.9 -OS - Can be used in all OS's. -July 31, 2002 -Developer - Sarma Kolluru - ------------------------------------------------------------------------------ -PRODUCT INFORMATION ------------------------------------------------------------------------------ -Panel library is set of functions enabling the driver to give panel support. -The panel library is supported on Centaurus and Dorado. -The panel library can detect the panel support by the jumper settings -selected on the board. The platform can be detected too. - - \readme.txt This file - ------------------------------------------------------------------------------ -BUILD INSTRUCTIONS ------------------------------------------------------------------------------ -Panel library is a set of files which has support for flatpanel. The panel -subdirectory needs to be copied in the driver directory. ------------------------------------------------------------------------------ -INSTALLATION INSTRUCTIONS ------------------------------------------------------------------------------ -These is no instalation and to be treaded as a driver source code extension. -- Run "/root/crlf/crlf -a" in Linux OS. ------------------------------------------------------------------------------ -UNIT TEST -Panel library when compiled is a part of the driver and cannot be unit tested. ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ -REVISION HISTORY ------------------------------------------------------------------------------ -Version changes v1.2.9 7/31/02 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1o ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added FP setup from user input. -Added Redcloud Panel initialization. ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - pnl_init.c - panel.c - platform.c - gx2_9211.c - gx2_9211.h ------------------------------------------------------------------------------ -Version changes v1.2.8 5/16/02 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1o ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added FP detection with BIOS for GX2. ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - pnl_bios.c ------------------------------------------------------------------------------ -Version changes v1.2.7 1/20/02 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1o ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added the protoype for gfx_detect_video. -Durango dependency removed. ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.c ------------------------------------------------------------------------------ -Version changes v1.2.6 12/1/01 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1o - - Durango 2.35.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Toggle 5530/scx200/RC FlatPanel Power and Data accordingly during -power up/down. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - pnl_init.c ------------------------------------------------------------------------------ -Version changes v1.2.5 11/1/01 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1o - - Durango 2.35.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Re-Enabled the Draco platform support. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel_defs.h - pnl_init.c ------------------------------------------------------------------------------ -Version changes v1.2.4 08/12/01 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1 - - Durango 2.33.01 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added 2 functions to get the FP setting details from BIOS. - -int Pnl_IsPanelEnabledInBIOS(void); -void Pnl_GetPanelInfoFromBIOS(int *xres, int *yres, int *bpp, int *hz); - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.h - pnl_bios.c ------------------------------------------------------------------------------ -Version changes v1.2.3 06/05/01 ------------------------------------------------------------------------------ -Dependencies: - - crlf v1.0.1 - - Durango 2.31.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Code cleanup and documentation. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.h - cen9211.c - cen9211.h - dora9211.c - dora9211.h - panel.h - pnl_init.c ------------------------------------------------------------------------------ -Version changes v1.2.2 04/11/01 ------------------------------------------------------------------------------ -Dependencies: - - Durango 2.27.00 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added Pnl_PowerUp and Pnl_PowerDown Functions. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.h - cen9211.c - cen9211.h - dora9211.c - dora9211.h - panel.h - pnl_init.c ------------------------------------------------------------------------------ -Version changes v1.2.1 03/29/01 ------------------------------------------------------------------------------ -Dependencies: - - Durango 2.25 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added Pnl_SavePanelState and Pnl_RestorePanelState Functions. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.h - 92xx.h - cen9211.c - cen9211.h - dora9211.c - dora9211.h - platform.c - pnl_init.c ------------------------------------------------------------------------------ -Version changes v1.2.0 03/04/01 ------------------------------------------------------------------------------ -Dependencies: - - Durango 2.23 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Use inb/out routines from durango directly. ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - panel.h -inb/outb deleted. -============================================================================= -Version changes v1.0.1 02/02/01 ------------------------------------------------------------------------------ -Dependencies: - - Durango 2.19 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Added 9211 Rev. C on Centaurus platform. - ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - 92xx.h -9211 Rev.C. - cen9211.c - centaurus 9211_C support file. - cen9211.h - centaurus 9211_C support file. - platform.c - Support for detection of platform in which driver runs. -============================================================================= -Version changes v1.0.0 01/21/01 ------------------------------------------------------------------------------ -Dependencies: - - Durango 2.16 - ------------------------------------------------------------------------------ -FUNCTIONAL CHANGES ------------------------------------------------------------------------------ -Detection of platform -Detection of 92x chip with version and the panel sected by jumper settings. -initialization of the h/w. ------------------------------------------------------------------------------ -DEFECTS CORRECTED ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ -FILE CHANGES - 92xx.h -common file with all 9211/9210 definitions. - cen9211.c - centaurus 9211_A support file. - cen9211.h - centaurus 9211_A support file. - dora9211.c - dorado 9211_A support file. - dora9211.h - dorado 9211_C support file. - drac9210.c - draco 9210 support file. - drac9210.h - draco 9210 support file. - panel.c - This is the confiuration file to enable support for platforms. - panel.h - centaurus 9211_A support file. - platform.c - Support for detection of platform in which driver runs. - pnl_defs.h - common definitions for panel. - pnl_init.c - configurationto call appropriate platform calls. - readme.txt - this file. ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -KNOWN ERRATA ------------------------------------------------------------------------------ -- None listed ------------------------------------------------------------------------------ - diff --git a/xc/programs/Xserver/hw/xfree86/drivers/geode/regacc.c b/xc/programs/Xserver/hw/xfree86/drivers/geode/regacc.c deleted file mode 100644 index 2bfb7e8b2..000000000 --- a/xc/programs/Xserver/hw/xfree86/drivers/geode/regacc.c +++ /dev/null @@ -1,301 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/geode/regacc.c,v 1.1 2002/10/11 14:32:59 alanh Exp $ */ -/* - * $Workfile: regacc.c $ - * - * This is the main file used to add Durango graphics support to a software - * project. The main reason to have a single file include the other files - * is that it centralizes the location of the compiler options. This file - * should be tuned for a specific implementation, and then modified as needed - * for new Durango releases. The releases.txt file indicates any updates to - * this main file, such as a new definition for a new hardware platform. - * - * In other words, this file should be copied from the Durango source files - * once when a software project starts, and then maintained as necessary. - * It should not be recopied with new versions of Durango unless the - * developer is willing to tune the file again for the specific project. - * - * NSC_LIC_ALTERNATIVE_PREAMBLE - * - * Revision 1.0 - * - * National Semiconductor Alternative GPL-BSD License - * - * National Semiconductor Corporation licenses this software - * ("Software"): - * - * Durango - * - * under one of the two following licenses, depending on how the - * Software is received by the Licensee. - * - * If this Software is received as part of the Linux Framebuffer or - * other GPL licensed software, then the GPL license designated - * NSC_LIC_GPL applies to this Software; in all other circumstances - * then the BSD-style license designated NSC_LIC_BSD shall apply. - * - * END_NSC_LIC_ALTERNATIVE_PREAMBLE */ - -/* NSC_LIC_BSD - * - * National Semiconductor Corporation Open Source License for Durango - * - * (BSD License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the National Semiconductor Corporation nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * END_NSC_LIC_BSD */ - -/* NSC_LIC_GPL - * - * National Semiconductor Corporation Gnu General Public License for Durango - * - * (GPL License with Export Notice) - * - * Copyright (c) 1999-2001 - * National Semiconductor Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted under the terms of the GNU General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version - * - * In addition to the terms of the GNU General Public License, neither - * the name of the National Semiconductor Corporation nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, - * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. See the GNU General Public License for more details. - * - * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF - * YOUR JURISDICTION. It is licensee's responsibility to comply with - * any export regulations applicable in licensee's jurisdiction. Under - * CURRENT (2001) U.S. export regulations this software - * is eligible for export from the U.S. and can be downloaded by or - * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed - * destinations which include Cuba, Iraq, Libya, North Korea, Iran, - * Syria, Sudan, Afghanistan and any other country to which the U.S. - * has embargoed goods and services. - * - * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * END_NSC_LIC_GPL */ - -/* ROUTINES added accessing hardware reg */ -void -gfx_write_reg_8(unsigned long offset, unsigned char value) -{ - WRITE_REG8(offset, value); -} - -void -gfx_write_reg_16(unsigned long offset, unsigned short value) -{ - WRITE_REG16(offset, value); -} - -void -gfx_write_reg_32(unsigned long offset, unsigned long value) -{ - WRITE_REG32(offset, value); -} -unsigned short -gfx_read_reg_16(unsigned long offset) -{ - unsigned short value; - - value = READ_REG16(offset); - return value; -} -unsigned long -gfx_read_reg_32(unsigned long offset) -{ - unsigned long value; - - value = READ_REG32(offset); - return value; -} - -void -gfx_write_vid_32(unsigned long offset, unsigned long value) -{ - WRITE_VID32(offset, value); -} -unsigned long -gfx_read_vid_32(unsigned long offset) -{ - unsigned long value; - - value = READ_VID32(offset); - return value; -} - -/*Addition for the VIP code */ -unsigned long -gfx_read_vip_32(unsigned long offset) -{ - unsigned long value; - - value = READ_VIP32(offset); - return value; -} - -void -gfx_write_vip_32(unsigned long offset, unsigned long value) -{ - WRITE_VIP32(offset, value); -} - -unsigned int -GetVideoMemSize() -{ - unsigned int graphicsMemBaseAddr; - unsigned int totalMem = 0; - int i; - unsigned int graphicsMemMask, graphicsMemShift; - - /* Read graphics base address. */ - - graphicsMemBaseAddr = gfx_read_reg_32(0x8414); - - if (1) { - unsigned int mcBankCfg = gfx_read_reg_32(0x8408); - unsigned int dimmShift = 4; - - graphicsMemMask = 0x7FF; - graphicsMemShift = 19; - - /* Calculate total memory size for GXm. */ - - for (i = 0; i < 2; i++) { - if (((mcBankCfg >> dimmShift) & 0x7) != 0x7) { - switch ((mcBankCfg >> (dimmShift + 4)) & 0x7) { - case 0: - totalMem += 0x400000; - break; - case 1: - totalMem += 0x800000; - break; - case 2: - totalMem += 0x1000000; - break; - case 3: - totalMem += 0x2000000; - break; - case 4: - totalMem += 0x4000000; - break; - case 5: - totalMem += 0x8000000; - break; - case 6: - totalMem += 0x10000000; - break; - case 7: - totalMem += 0x20000000; - break; - default: - break; - } - } - dimmShift += 16; - } - } else { - unsigned int mcMemCntrl1 = gfx_read_reg_32(0x8400); - unsigned int bankSizeShift = 12; - - graphicsMemMask = 0x3FF; - graphicsMemShift = 17; - - /* Calculate total memory size for GX. */ - - for (i = 0; i < 4; i++) { - switch ((mcMemCntrl1 >> bankSizeShift) & 0x7) { - case 1: - totalMem += 0x200000; - break; - case 2: - totalMem += 0x400000; - break; - case 3: - totalMem += 0x800000; - break; - case 4: - totalMem += 0x1000000; - break; - case 5: - totalMem += 0x2000000; - break; - default: - break; - } - bankSizeShift += 3; - } - } - - /* Calculate graphics memory base address */ - - graphicsMemBaseAddr &= graphicsMemMask; - graphicsMemBaseAddr <<= graphicsMemShift; - - return (totalMem - graphicsMemBaseAddr); -} - -/* END OF FILE */ diff --git a/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dri.c b/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dri.c index 37d3a9a6f..85a7f8dcb 100644 --- a/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dri.c +++ b/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dri.c @@ -1359,6 +1359,7 @@ void MGADRICloseScreen( ScreenPtr pScreen ) if (pMga->irq) { drmCtlUninstHandler(pMga->drmFD); pMga->irq = 0; + pMga->reg_ien = 0; } /* Cleanup DMA */ diff --git a/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_proc.h b/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_proc.h index 510df6722..8524d2048 100644 --- a/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_proc.h +++ b/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_proc.h @@ -169,9 +169,9 @@ static int DRM(_vm_info)(char *buf, char **start, off_t offset, int request, struct list_head *list; /* Hardcoded from _DRM_FRAME_BUFFER, - _DRM_REGISTERS, _DRM_SHM, and - _DRM_AGP. */ - const char *types[] = { "FB", "REG", "SHM", "AGP" }; + _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, and + _DRM_SCATTER_GATHER. */ + const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" }; const char *type; int i; @@ -190,7 +190,7 @@ static int DRM(_vm_info)(char *buf, char **start, off_t offset, int request, r_list = (drm_map_list_t *)list; map = r_list->map; if(!map) continue; - if (map->type < 0 || map->type > 3) type = "??"; + if (map->type < 0 || map->type > 4) type = "??"; else type = types[map->type]; DRM_PROC_PRINT("%4d 0x%08lx 0x%08lx %4.4s 0x%02x 0x%08lx ", i, diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/Imakefile b/xc/programs/Xserver/hw/xfree86/os-support/vbe/Imakefile deleted file mode 100644 index 96bf4a80a..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/Imakefile +++ /dev/null @@ -1,44 +0,0 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/Imakefile,v 1.11 2002/08/06 13:46:27 dawes Exp $ - - -/* - * This directory should probably be moved up one level -- to xfree86/vbe. - */ - -#define IHaveModules -#include <Server.tmpl> - -#if DoLoadableServer -MODSRC = vbe_module.c -MODOBJ = vbe_module.o -#endif - -SRCS = vbe.c vbeModes.c $(MODSRC) -OBJS = vbe.o vbeModes.o $(MODOBJ) - -INCLUDES = -I. -I$(XF86COMSRC) -I$(SERVERSRC)/mi \ - -I$(SERVERSRC)/include -I$(XINCLUDESRC) \ - -I$(XF86SRC)/int10 -I$(XF86SRC)/ddc \ - -I$(XF86SRC)/i2c - -DEFINES = - -ModuleObjectRule() - -#if DoLoadableServer - -LibraryModuleTarget(vbe, $(OBJS)) -InstallLibraryModule(vbe,$(MODULEDIR),.) - -#else - -SubdirLibraryRule($(OBJS)) - -#endif - -DependTarget() - -InstallDriverSDKLibraryModule(vbe,$(DRIVERSDKMODULEDIR),.) - -InstallDriverSDKNonExecFile(vbe.h,$(DRIVERSDKINCLUDEDIR)) - diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.c b/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.c deleted file mode 100644 index cc9336ed0..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.c +++ /dev/null @@ -1,1066 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.c,v 1.22 2002/09/16 18:06:15 eich Exp $ */ - -/* - * XFree86 vbe module - * Copyright 2000 Egbert Eich - * - * The mode query/save/set/restore functions from the vesa driver - * have been moved here. - * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com) - * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br> - */ - -#include "xf86.h" -#include "xf86_ansic.h" -#include "vbe.h" -#include "Xarch.h" -#define DPMS_SERVER -#include "extensions/dpms.h" - -#define VERSION(x) VBE_VERSION_MAJOR(x),VBE_VERSION_MINOR(x) - -#if X_BYTE_ORDER == X_LITTLE_ENDIAN -#define B_O16(x) (x) -#define B_O32(x) (x) -#else -#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8)) -#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \ - | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)) -#endif -#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00) - -#define FARP(p) (((unsigned)(p & 0xffff0000) >> 12) | (p & 0xffff)) - -static unsigned char * vbeReadEDID(vbeInfoPtr pVbe); -static Bool vbeProbeDDC(vbeInfoPtr pVbe); - -const char *vbe_ddcSymbols[] = { - "xf86InterpretEDID", - NULL -}; - -vbeInfoPtr -VBEInit(xf86Int10InfoPtr pInt, int entityIndex) -{ - return VBEExtendedInit(pInt, entityIndex, 0); -} - -vbeInfoPtr -VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags) -{ - int RealOff; - pointer page = NULL; - ScrnInfoPtr pScrn = xf86FindScreenForEntity(entityIndex); - vbeControllerInfoPtr vbe = NULL; - char vbeVersionString[] = "VBE2"; - Bool init_int10 = FALSE; - vbeInfoPtr vip = NULL; - int screen = pScrn->scrnIndex; - - if (!pInt) { - if (!xf86LoadSubModule(pScrn, "int10")) - goto error; - - xf86DrvMsg(screen,X_INFO,"initializing int10\n"); - pInt = xf86ExtendedInitInt10(entityIndex, Flags); - if (!pInt) - goto error; - init_int10 = TRUE; - } - - page = xf86Int10AllocPages(pInt,1,&RealOff); - if (!page) goto error; - vbe = (vbeControllerInfoPtr) page; - memcpy(vbe->VbeSignature,vbeVersionString,4); - - pInt->ax = 0x4F00; - pInt->es = SEG_ADDR(RealOff); - pInt->di = SEG_OFF(RealOff); - pInt->num = 0x10; - - xf86ExecX86int10(pInt); - - if ((pInt->ax & 0xff) != 0x4f) { - xf86DrvMsgVerb(screen,X_INFO,3,"VESA BIOS not detected\n"); - goto error; - } - - switch (pInt->ax & 0xff00) { - case 0: - xf86DrvMsg(screen,X_INFO,"VESA BIOS detected\n"); - break; - case 0x100: - xf86DrvMsg(screen,X_INFO,"VESA BIOS function failed\n"); - goto error; - case 0x200: - xf86DrvMsg(screen,X_INFO,"VESA BIOS not supported\n"); - goto error; - case 0x300: - xf86DrvMsg(screen,X_INFO,"VESA BIOS not supported in current mode\n"); - goto error; - default: - xf86DrvMsg(screen,X_INFO,"Invalid\n"); - goto error; - } - - xf86DrvMsgVerb(screen, X_INFO, 4, - "VbeVersion is %d, OemStringPtr is 0x%08x,\n" - "\tOemVendorNamePtr is 0x%08x, OemProductNamePtr is 0x%08x,\n" - "\tOemProductRevPtr is 0x%08x\n", - vbe->VbeVersion, vbe->OemStringPtr, vbe->OemVendorNamePtr, - vbe->OemProductNamePtr, vbe->OemProductRevPtr); - - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE Version %i.%i\n", - VERSION(vbe->VbeVersion)); - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE Total Mem: %i kB\n", - vbe->TotalMem * 64); - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE OEM: %s\n", - (CARD8*)xf86int10Addr(pInt,L_ADD(vbe->OemStringPtr))); - - if (B_O16(vbe->VbeVersion) >= 0x200) { - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE OEM Software Rev: %i.%i\n", - VERSION(vbe->OemSoftwareRev)); - if (vbe->OemVendorNamePtr) - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE OEM Vendor: %s\n", - (CARD8*)xf86int10Addr(pInt,L_ADD(vbe->OemVendorNamePtr))); - if (vbe->OemProductNamePtr) - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE OEM Product: %s\n", - (CARD8*)xf86int10Addr(pInt,L_ADD(vbe->OemProductNamePtr))); - if (vbe->OemProductRevPtr) - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE OEM Product Rev: %s\n", - (CARD8*)xf86int10Addr(pInt,L_ADD(vbe->OemProductRevPtr))); - } - vip = (vbeInfoPtr)xnfalloc(sizeof(vbeInfoRec)); - vip->version = B_O16(vbe->VbeVersion); - vip->pInt10 = pInt; - vip->ddc = DDC_UNCHECKED; - vip->memory = page; - vip->real_mode_base = RealOff; - vip->num_pages = 1; - vip->init_int10 = init_int10; - - return vip; - - error: - if (page) - xf86Int10FreePages(pInt, page, 1); - if (init_int10) - xf86FreeInt10(pInt); - return NULL; -} - -void -vbeFree(vbeInfoPtr pVbe) -{ - if (!pVbe) - return; - - xf86Int10FreePages(pVbe->pInt10,pVbe->memory,pVbe->num_pages); - /* If we have initalized int10 we ought to free it, too */ - if (pVbe->init_int10) - xf86FreeInt10(pVbe->pInt10); - xfree(pVbe); - return; -} - -static Bool -vbeProbeDDC(vbeInfoPtr pVbe) -{ - char *ddc_level; - int screen = pVbe->pInt10->scrnIndex; - - if (!pVbe || (pVbe->ddc == DDC_NONE)) - return FALSE; - if (pVbe->ddc != DDC_UNCHECKED) - return TRUE; - - pVbe->pInt10->ax = 0x4F15; - pVbe->pInt10->bx = 0; - pVbe->pInt10->cx = 0; - pVbe->pInt10->es = 0; - pVbe->pInt10->di = 0; - pVbe->pInt10->num = 0x10; - - xf86ExecX86int10(pVbe->pInt10); - - if ((pVbe->pInt10->ax & 0xff) != 0x4f) { - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC not supported\n"); - pVbe->ddc = DDC_NONE; - return FALSE; - } - - switch ((pVbe->pInt10->ax >> 8) & 0xff) { - case 0: - xf86DrvMsg(screen,X_INFO,"VESA VBE DDC supported\n"); - switch (pVbe->pInt10->bx & 0x3) { - case 0: - ddc_level = " none"; - pVbe->ddc = DDC_NONE; - break; - case 1: - ddc_level = " 1"; - pVbe->ddc = DDC_1; - break; - case 2: - ddc_level = " 2"; - pVbe->ddc = DDC_2; - break; - case 3: - ddc_level = " 1 + 2"; - pVbe->ddc = DDC_1_2; - break; - default: - ddc_level = ""; - pVbe->ddc = DDC_NONE; - break; - } - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC Level%s\n",ddc_level); - if (pVbe->pInt10->bx & 0x4) { - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC Screen blanked" - "for data transfer\n"); - pVbe->ddc_blank = TRUE; - } else - pVbe->ddc_blank = FALSE; - - xf86DrvMsgVerb(screen,X_INFO,3, - "VESA VBE DDC transfer in appr. %x sec.\n", - (pVbe->pInt10->bx >> 8) & 0xff); - } - - return TRUE; -} - -typedef enum { - VBEOPT_NOVBE, - VBEOPT_NODDC -} VBEOpts; - -static const OptionInfoRec VBEOptions[] = { - { VBEOPT_NOVBE, "NoVBE", OPTV_BOOLEAN, {0}, FALSE }, - { VBEOPT_NODDC, "NoDDC", OPTV_BOOLEAN, {0}, FALSE }, - { -1, NULL, OPTV_NONE, {0}, FALSE }, -}; - -static unsigned char * -vbeReadEDID(vbeInfoPtr pVbe) -{ - int RealOff = pVbe->real_mode_base; - pointer page = pVbe->memory; - unsigned char *tmp = NULL; - Bool novbe = FALSE; - Bool noddc = FALSE; - int screen = pVbe->pInt10->scrnIndex; - OptionInfoPtr options; - - if (!page) return NULL; - - options = xnfalloc(sizeof(VBEOptions)); - (void)memcpy(options, VBEOptions, sizeof(VBEOptions)); - xf86ProcessOptions(screen, xf86Screens[screen]->options, options); - xf86GetOptValBool(options, VBEOPT_NOVBE, &novbe); - xf86GetOptValBool(options, VBEOPT_NODDC, &noddc); - xfree(options); - if (novbe || noddc) return NULL; - - if (!vbeProbeDDC(pVbe)) goto error; - - pVbe->pInt10->ax = 0x4F15; - pVbe->pInt10->bx = 0x01; - pVbe->pInt10->cx = 0; - pVbe->pInt10->es = SEG_ADDR(RealOff); - pVbe->pInt10->di = SEG_OFF(RealOff); - pVbe->pInt10->num = 0x10; - - xf86ExecX86int10(pVbe->pInt10); - - if ((pVbe->pInt10->ax & 0xff) != 0x4f) { - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC invalid\n"); - goto error; - } - switch (pVbe->pInt10->ax & 0xff00) { - case 0x0: - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC read successfully\n"); - tmp = (unsigned char *)xnfalloc(128); - memcpy(tmp,page,128); - break; - case 0x100: - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC read failed\n"); - break; - default: - xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC unkown failure %i\n", - pVbe->pInt10->ax & 0xff00); - break; - } - - error: - return tmp; -} - -xf86MonPtr -vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule) -{ - xf86MonPtr pMonitor; - pointer pModule; - unsigned char *DDC_data = NULL; - - if (!pVbe) return NULL; - if (pVbe->version < 0x200) - return NULL; - - if (!(pModule = pDDCModule)) { - pModule = - xf86LoadSubModule(xf86Screens[pVbe->pInt10->scrnIndex], "ddc"); - if (!pModule) - return NULL; - - xf86LoaderReqSymLists(vbe_ddcSymbols, NULL); - } - - DDC_data = vbeReadEDID(pVbe); - - if (!DDC_data) - return NULL; - - pMonitor = xf86InterpretEDID(pVbe->pInt10->scrnIndex, DDC_data); - - if (!pDDCModule) - xf86UnloadSubModule(pModule); - return pMonitor; -} - - -VbeInfoBlock * -VBEGetVBEInfo(vbeInfoPtr pVbe) -{ - VbeInfoBlock *block = NULL; - int i, pStr, pModes; - char *str; - CARD16 major, minor, *modes; - - bzero(pVbe->memory, sizeof(VbeInfoBlock)); - - /* - Input: - AH := 4Fh Super VGA support - AL := 00h Return Super VGA information - ES:DI := Pointer to buffer - - Output: - AX := status - (All other registers are preserved) - */ - - ((char*)pVbe->memory)[0] = 'V'; - ((char*)pVbe->memory)[1] = 'B'; - ((char*)pVbe->memory)[2] = 'E'; - ((char*)pVbe->memory)[3] = '2'; - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f00; - pVbe->pInt10->es = SEG_ADDR(pVbe->real_mode_base); - pVbe->pInt10->di = SEG_OFF(pVbe->real_mode_base); - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (NULL); - - block = xcalloc(sizeof(VbeInfoBlock), 1); - block->VESASignature[0] = ((char*)pVbe->memory)[0]; - block->VESASignature[1] = ((char*)pVbe->memory)[1]; - block->VESASignature[2] = ((char*)pVbe->memory)[2]; - block->VESASignature[3] = ((char*)pVbe->memory)[3]; - - block->VESAVersion = *(CARD16*)(((char*)pVbe->memory) + 4); - major = (unsigned)block->VESAVersion >> 8; - minor = block->VESAVersion & 0xff; - - pStr = *(CARD32*)(((char*)pVbe->memory) + 6); - str = xf86int10Addr(pVbe->pInt10, FARP(pStr)); - block->OEMStringPtr = strdup(str); - - block->Capabilities[0] = ((char*)pVbe->memory)[10]; - block->Capabilities[1] = ((char*)pVbe->memory)[11]; - block->Capabilities[2] = ((char*)pVbe->memory)[12]; - block->Capabilities[3] = ((char*)pVbe->memory)[13]; - - pModes = *(CARD32*)(((char*)pVbe->memory) + 14); - modes = xf86int10Addr(pVbe->pInt10, FARP(pModes)); - i = 0; - while (modes[i] != 0xffff) - i++; - block->VideoModePtr = xalloc(sizeof(CARD16) * i + 1); - memcpy(block->VideoModePtr, modes, sizeof(CARD16) * i); - block->VideoModePtr[i] = 0xffff; - - block->TotalMemory = *(CARD16*)(((char*)pVbe->memory) + 18); - - if (major < 2) - memcpy(&block->OemSoftwareRev, ((char*)pVbe->memory) + 20, 236); - else { - block->OemSoftwareRev = *(CARD16*)(((char*)pVbe->memory) + 20); - pStr = *(CARD32*)(((char*)pVbe->memory) + 22); - str = xf86int10Addr(pVbe->pInt10, FARP(pStr)); - block->OemVendorNamePtr = strdup(str); - pStr = *(CARD32*)(((char*)pVbe->memory) + 26); - str = xf86int10Addr(pVbe->pInt10, FARP(pStr)); - block->OemProductNamePtr = strdup(str); - pStr = *(CARD32*)(((char*)pVbe->memory) + 30); - str = xf86int10Addr(pVbe->pInt10, FARP(pStr)); - block->OemProductRevPtr = strdup(str); - memcpy(&block->Reserved, ((char*)pVbe->memory) + 34, 222); - memcpy(&block->OemData, ((char*)pVbe->memory) + 256, 256); - } - - return (block); -} - -void -VBEFreeVBEInfo(VbeInfoBlock *block) -{ - xfree(block->OEMStringPtr); - xfree(block->VideoModePtr); - if (((unsigned)block->VESAVersion >> 8) >= 2) { - xfree(block->OemVendorNamePtr); - xfree(block->OemProductNamePtr); - xfree(block->OemProductRevPtr); - } - xfree(block); -} - -Bool -VBESetVBEMode(vbeInfoPtr pVbe, int mode, VbeCRTCInfoBlock *block) -{ - /* - Input: - AH := 4Fh Super VGA support - AL := 02h Set Super VGA video mode - BX := Video mode - D0-D8 := Mode number - D9-D10 := Reserved (must be 0) - D11 := 0 Use current default refresh rate - := 1 Use user specified CRTC values for refresh rate - D12-13 Reserved for VBE/AF (must be 0) - D14 := 0 Use windowed frame buffer model - := 1 Use linear/flat frame buffer model - D15 := 0 Clear video memory - := 1 Don't clear video memory - ES:DI := Pointer to VbeCRTCInfoBlock structure - - Output: AX = Status - (All other registers are preserved) - */ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f02; - pVbe->pInt10->bx = mode; - if (block) { - pVbe->pInt10->bx |= 1 << 11; - memcpy(pVbe->memory, block, sizeof(VbeCRTCInfoBlock)); - pVbe->pInt10->es = SEG_ADDR(pVbe->real_mode_base); - pVbe->pInt10->di = SEG_OFF(pVbe->real_mode_base); - } - - xf86ExecX86int10(pVbe->pInt10); - - return (pVbe->pInt10->ax == 0x4f); -} - -Bool -VBEGetVBEMode(vbeInfoPtr pVbe, int *mode) -{ - /* - Input: - AH := 4Fh Super VGA support - AL := 03h Return current video mode - - Output: - AX := Status - BX := Current video mode - (All other registers are preserved) - */ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f03; - - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax == 0x4f) { - *mode = pVbe->pInt10->bx; - - return (TRUE); - } - - return (FALSE); -} - -VbeModeInfoBlock * -VBEGetModeInfo(vbeInfoPtr pVbe, int mode) -{ - VbeModeInfoBlock *block = NULL; - - bzero(pVbe->memory, sizeof(VbeModeInfoBlock)); - - /* - Input: - AH := 4Fh Super VGA support - AL := 01h Return Super VGA mode information - CX := Super VGA video mode - (mode number must be one of those returned by Function 0) - ES:DI := Pointer to buffer - - Output: - AX := status - (All other registers are preserved) - */ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f01; - pVbe->pInt10->cx = mode; - pVbe->pInt10->es = SEG_ADDR(pVbe->real_mode_base); - pVbe->pInt10->di = SEG_OFF(pVbe->real_mode_base); - xf86ExecX86int10(pVbe->pInt10); - if (pVbe->pInt10->ax != 0x4f) - return (NULL); - - block = xcalloc(sizeof(VbeModeInfoBlock), 1); - - block->ModeAttributes = *(CARD16*)pVbe->memory; - block->WinAAttributes = ((char*)pVbe->memory)[2]; - block->WinBAttributes = ((char*)pVbe->memory)[3]; - block->WinGranularity = *(CARD16*)(((char*)pVbe->memory) + 4); - block->WinSize = *(CARD16*)(((char*)pVbe->memory) + 6); - block->WinASegment = *(CARD16*)(((char*)pVbe->memory) + 8); - block->WinBSegment = *(CARD16*)(((char*)pVbe->memory) + 10); - block->WinFuncPtr = *(CARD32*)(((char*)pVbe->memory) + 12); - block->BytesPerScanline = *(CARD16*)(((char*)pVbe->memory) + 16); - - /* mandatory information for VBE 1.2 and above */ - block->XResolution = *(CARD16*)(((char*)pVbe->memory) + 18); - block->YResolution = *(CARD16*)(((char*)pVbe->memory) + 20); - block->XCharSize = ((char*)pVbe->memory)[22]; - block->YCharSize = ((char*)pVbe->memory)[23]; - block->NumberOfPlanes = ((char*)pVbe->memory)[24]; - block->BitsPerPixel = ((char*)pVbe->memory)[25]; - block->NumberOfBanks = ((char*)pVbe->memory)[26]; - block->MemoryModel = ((char*)pVbe->memory)[27]; - block->BankSize = ((char*)pVbe->memory)[28]; - block->NumberOfImages = ((char*)pVbe->memory)[29]; - block->Reserved = ((char*)pVbe->memory)[30]; - - /* Direct color fields (required for direct/6 and YUV/7 memory models) */ - block->RedMaskSize = ((char*)pVbe->memory)[31]; - block->RedFieldPosition = ((char*)pVbe->memory)[32]; - block->GreenMaskSize = ((char*)pVbe->memory)[33]; - block->GreenFieldPosition = ((char*)pVbe->memory)[34]; - block->BlueMaskSize = ((char*)pVbe->memory)[35]; - block->BlueFieldPosition = ((char*)pVbe->memory)[36]; - block->RsvdMaskSize = ((char*)pVbe->memory)[37]; - block->RsvdFieldPosition = ((char*)pVbe->memory)[38]; - block->DirectColorModeInfo = ((char*)pVbe->memory)[39]; - - /* Mandatory information for VBE 2.0 and above */ - if (pVbe->version >= 0x200) { - block->PhysBasePtr = *(CARD32*)(((char*)pVbe->memory) + 40); - block->Reserved32 = *(CARD32*)(((char*)pVbe->memory) + 44); - block->Reserved16 = *(CARD16*)(((char*)pVbe->memory) + 48); - - /* Mandatory information for VBE 3.0 and above */ - if (pVbe->version >= 0x300) { - block->LinBytesPerScanLine = *(CARD16*)(((char*)pVbe->memory) + 50); - block->BnkNumberOfImagePages = ((char*)pVbe->memory)[52]; - block->LinNumberOfImagePages = ((char*)pVbe->memory)[53]; - block->LinRedMaskSize = ((char*)pVbe->memory)[54]; - block->LinRedFieldPosition = ((char*)pVbe->memory)[55]; - block->LinGreenMaskSize = ((char*)pVbe->memory)[56]; - block->LinGreenFieldPosition = ((char*)pVbe->memory)[57]; - block->LinBlueMaskSize = ((char*)pVbe->memory)[58]; - block->LinBlueFieldPosition = ((char*)pVbe->memory)[59]; - block->LinRsvdMaskSize = ((char*)pVbe->memory)[60]; - block->LinRsvdFieldPosition = ((char*)pVbe->memory)[61]; - block->MaxPixelClock = *(CARD32*)(((char*)pVbe->memory) + 62); - memcpy(&block->Reserved2, ((char*)pVbe->memory) + 66, 188); - } - else - memcpy(&block->LinBytesPerScanLine, ((char*)pVbe->memory) + 50, 206); - } - else - memcpy(&block->PhysBasePtr, ((char*)pVbe->memory) + 40, 216); - - return (block); -} - -void -VBEFreeModeInfo(VbeModeInfoBlock *block) -{ - xfree(block); -} - -Bool -VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction function, - pointer *memory, int *size, int *real_mode_pages) -{ - /* - Input: - AH := 4Fh Super VGA support - AL := 04h Save/restore Super VGA video state - DL := 00h Return save/restore state buffer size - CX := Requested states - D0 = Save/restore video hardware state - D1 = Save/restore video BIOS data state - D2 = Save/restore video DAC state - D3 = Save/restore Super VGA state - - Output: - AX = Status - BX = Number of 64-byte blocks to hold the state buffer - (All other registers are preserved) - - - Input: - AH := 4Fh Super VGA support - AL := 04h Save/restore Super VGA video state - DL := 01h Save Super VGA video state - CX := Requested states (see above) - ES:BX := Pointer to buffer - - Output: - AX := Status - (All other registers are preserved) - - - Input: - AH := 4Fh Super VGA support - AL := 04h Save/restore Super VGA video state - DL := 02h Restore Super VGA video state - CX := Requested states (see above) - ES:BX := Pointer to buffer - - Output: - AX := Status - (All other registers are preserved) - */ - - if ((pVbe->version & 0xff00) > 0x100) { - int screen = pVbe->pInt10->scrnIndex; - if (function == MODE_QUERY || - (function == MODE_SAVE && !*memory)) { - /* Query amount of memory to save state */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f04; - pVbe->pInt10->dx = 0; - pVbe->pInt10->cx = 0x000f; - xf86ExecX86int10(pVbe->pInt10); - if (pVbe->pInt10->ax != 0x4f) - return (FALSE); - - if (function == MODE_SAVE) { - int npages = (pVbe->pInt10->bx * 64) / 4096 + 1; - if ((*memory = xf86Int10AllocPages(pVbe->pInt10, npages, - real_mode_pages)) == NULL) { - xf86DrvMsg(screen, X_ERROR, - "Cannot allocate memory to save SVGA state.\n"); - return (FALSE); - } - } - *size = pVbe->pInt10->bx * 64; - } - - /* Save/Restore Super VGA state */ - if (function != MODE_QUERY) { - - if (!*memory) return FALSE; - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f04; - switch (function) { - case MODE_SAVE: - pVbe->pInt10->dx = 1; - break; - case MODE_RESTORE: - pVbe->pInt10->dx = 2; - break; - case MODE_QUERY: - return FALSE; - } - pVbe->pInt10->cx = 0x000f; - - pVbe->pInt10->es = SEG_ADDR(*real_mode_pages); - pVbe->pInt10->bx = SEG_OFF(*real_mode_pages); - xf86ExecX86int10(pVbe->pInt10); - return (pVbe->pInt10->ax == 0x4f); - - } - } - return TRUE; -} - -Bool -VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window) -{ - /* - Input: - AH := 4Fh Super VGA support - AL := 05h - - Output: - */ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f05; - pVbe->pInt10->bx = window; - pVbe->pInt10->dx = iBank; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (FALSE); - - return (TRUE); -} - -Bool -VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe, vbeScanwidthCommand command, - int width, int *pixels, int *bytes, int *max) -{ - if (command < SCANWID_SET || command > SCANWID_GET_MAX) - return (FALSE); - - /* - Input: - AX := 4F06h VBE Set/Get Logical Scan Line Length - BL := 00h Set Scan Line Length in Pixels - := 01h Get Scan Line Length - := 02h Set Scan Line Length in Bytes - := 03h Get Maximum Scan Line Length - CX := If BL=00h Desired Width in Pixels - If BL=02h Desired Width in Bytes - (Ignored for Get Functions) - - Output: - AX := VBE Return Status - BX := Bytes Per Scan Line - CX := Actual Pixels Per Scan Line - (truncated to nearest complete pixel) - DX := Maximum Number of Scan Lines - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f06; - pVbe->pInt10->bx = command; - if (command == SCANWID_SET || command == SCANWID_SET_BYTES) - pVbe->pInt10->cx = width; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (FALSE); - - if (command == SCANWID_GET || command == SCANWID_GET_MAX) { - if (pixels) - *pixels = pVbe->pInt10->cx; - if (bytes) - *bytes = pVbe->pInt10->bx; - if (max) - *max = pVbe->pInt10->dx; - } - - return (TRUE); -} - -Bool -VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, Bool wait_retrace) -{ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f07; - pVbe->pInt10->bx = wait_retrace ? 0x80 : 0x00; - pVbe->pInt10->cx = x; - pVbe->pInt10->dx = y; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (FALSE); - - return (TRUE); -} - -Bool -VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y) -{ - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f07; - pVbe->pInt10->bx = 0x01; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (FALSE); - - *x = pVbe->pInt10->cx; - *y = pVbe->pInt10->dx; - - return (TRUE); -} - -int -VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits) -{ - /* - Input: - AX := 4F08h VBE Set/Get Palette Format - BL := 00h Set DAC Palette Format - := 01h Get DAC Palette Format - BH := Desired bits of color per primary - (Set DAC Palette Format only) - - Output: - AX := VBE Return Status - BH := Current number of bits of color per primary - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f08; - if (!bits) - pVbe->pInt10->bx = 0x01; - else - pVbe->pInt10->bx = (bits & 0x00ff) << 8; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (0); - - return (bits != 0 ? bits : (pVbe->pInt10->bx >> 8) & 0x00ff); -} - -CARD32 * -VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, int first, int num, - CARD32 *data, Bool secondary, Bool wait_retrace) -{ - /* - Input: - (16-bit) - AX := 4F09h VBE Load/Unload Palette Data - BL := 00h Set Palette Data - := 01h Get Palette Data - := 02h Set Secondary Palette Data - := 03h Get Secondary Palette Data - := 80h Set Palette Data during Vertical Retrace - CX := Number of palette registers to update (to a maximum of 256) - DX := First of the palette registers to update (start) - ES:DI := Table of palette values (see below for format) - - Output: - AX := VBE Return Status - - - Input: - (32-bit) - BL := 00h Set Palette Data - := 80h Set Palette Data during Vertical Retrace - CX := Number of palette registers to update (to a maximum of 256) - DX := First of the palette registers to update (start) - ES:EDI := Table of palette values (see below for format) - DS := Selector for memory mapped registers - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f09; - if (!secondary) - pVbe->pInt10->bx = set && wait_retrace ? 0x80 : set ? 0 : 1; - else - pVbe->pInt10->bx = set ? 2 : 3; - pVbe->pInt10->cx = num; - pVbe->pInt10->dx = first; - pVbe->pInt10->es = SEG_ADDR(pVbe->real_mode_base); - pVbe->pInt10->di = SEG_OFF(pVbe->real_mode_base); - if (set) - memcpy(pVbe->memory, data, num * sizeof(CARD32)); - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (NULL); - - if (set) - return (data); - - data = xalloc(num * sizeof(CARD32)); - memcpy(data, pVbe->memory, num * sizeof(CARD32)); - - return (data); -} - -VBEpmi * -VBEGetVBEpmi(vbeInfoPtr pVbe) -{ - VBEpmi *pmi; - - /* - Input: - AH := 4Fh Super VGA support - AL := 0Ah Protected Mode Interface - BL := 00h Return Protected Mode Table - - Output: - AX := Status - ES := Real Mode Segment of Table - DI := Offset of Table - CX := Lenght of Table including protected mode code in bytes (for copying purposes) - (All other registers are preserved) - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f0a; - pVbe->pInt10->bx = 0; - pVbe->pInt10->di = 0; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (NULL); - - pmi = xalloc(sizeof(VBEpmi)); - pmi->seg_tbl = pVbe->pInt10->es; - pmi->tbl_off = pVbe->pInt10->di; - pmi->tbl_len = pVbe->pInt10->cx; - - return (pmi); -} - -#if 0 -vbeModeInfoPtr -VBEBuildVbeModeList(vbeInfoPtr pVbe, VbeInfoBlock *vbe) -{ - vbeModeInfoPtr ModeList = NULL; - - int i = 0; - while (vbe->VideoModePtr[i] != 0xffff) { - vbeModeInfoPtr m; - VbeModeInfoBlock *mode; - int id = vbe->VideoModePtr[i++]; - int bpp; - - if ((mode = VBEGetModeInfo(pVbe, id)) == NULL) - continue; - - bpp = mode->BitsPerPixel; - - m = xnfcalloc(sizeof(vbeModeInfoRec),1); - m->width = mode->XResolution; - m->height = mode->YResolution; - m->bpp = bpp; - m->n = id; - m->next = ModeList; - - xf86DrvMsgVerb(pVbe->pInt10->scrnIndex, X_PROBED, 3, - "BIOS reported VESA mode 0x%x: x:%i y:%i bpp:%i\n", - m->n, m->width, m->height, m->bpp); - - ModeList = m; - - VBEFreeModeInfo(mode); - } - return ModeList; -} - -unsigned short -VBECalcVbeModeIndex(vbeModeInfoPtr m, DisplayModePtr mode, int bpp) -{ - while (m) { - if (bpp == m->bpp - && mode->HDisplay == m->width - && mode->VDisplay == m->height) - return m->n; - m = m->next; - } - return 0; -} -#endif - -void -VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr, - vbeSaveRestoreFunction function) -{ - Bool SaveSucc = FALSE; - - if (VBE_VERSION_MAJOR(pVbe->version) > 1 - && (function == MODE_SAVE || vbe_sr->pstate)) { - if (function == MODE_RESTORE) - memcpy(vbe_sr->state, vbe_sr->pstate, vbe_sr->stateSize); - ErrorF("VBESaveRestore\n"); - if ((VBESaveRestore(pVbe,function, - (pointer)&vbe_sr->state, - &vbe_sr->stateSize,&vbe_sr->statePage))) { - if (function == MODE_SAVE) { - SaveSucc = TRUE; - vbe_sr->stateMode = -1; /* invalidate */ - /* don't rely on the memory not being touched */ - if (vbe_sr->pstate == NULL) - vbe_sr->pstate = xalloc(vbe_sr->stateSize); - memcpy(vbe_sr->pstate, vbe_sr->state, vbe_sr->stateSize); - } - ErrorF("VBESaveRestore done with success\n"); - return; - } - ErrorF("VBESaveRestore done\n"); - } - - if (function == MODE_SAVE && !SaveSucc) - (void)VBEGetVBEMode(pVbe, &vbe_sr->stateMode); - - if (function == MODE_RESTORE && vbe_sr->stateMode != -1) - VBESetVBEMode(pVbe, vbe_sr->stateMode, NULL); - -} - -int -VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int clock) -{ - /* - Input: - AX := 4F0Bh VBE Get Pixel Clock - BL := 01h Get Pixel Clock - ECX := pixel clock in units of Hz - DX := mode number - - Output: - AX := VBE Return Status - ECX := Closest pixel clock - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f0b; - pVbe->pInt10->bx = 0x01; - pVbe->pInt10->cx = clock; - pVbe->pInt10->dx = mode; - xf86ExecX86int10(pVbe->pInt10); - - if (pVbe->pInt10->ax != 0x4f) - return (0); - - return (pVbe->pInt10->cx); -} - -Bool -VBEDPMSSet(vbeInfoPtr pVbe, int mode) -{ - /* - Input: - AX := 4F10h DPMS - BL := 01h Set Display Power State - BH := requested power state - - Output: - AX := VBE Return Status - */ - - pVbe->pInt10->num = 0x10; - pVbe->pInt10->ax = 0x4f10; - pVbe->pInt10->bx = 0x01; - switch (mode) { - case DPMSModeOn: - break; - case DPMSModeStandby: - pVbe->pInt10->bx |= 0x100; - break; - case DPMSModeSuspend: - pVbe->pInt10->bx |= 0x200; - break; - case DPMSModeOff: - pVbe->pInt10->bx |= 0x400; - break; - } - xf86ExecX86int10(pVbe->pInt10); - return (pVbe->pInt10->ax == 0x4f); -} - diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.h b/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.h deleted file mode 100644 index 75758990b..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.h +++ /dev/null @@ -1,328 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe.h,v 1.10 2002/09/17 23:25:46 dawes Exp $ */ - -/* - * XFree86 vbe module - * Copyright 2000 Egbert Eich - * - * The mode query/save/set/restore functions from the vesa driver - * have been moved here. - * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com) - * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br> - */ - -#ifndef _VBE_H -#define _VBE_H -#include "xf86int10.h" -#include "xf86DDC.h" - -typedef enum { - DDC_UNCHECKED, - DDC_NONE, - DDC_1, - DDC_2, - DDC_1_2 -} -ddc_lvl; - -typedef struct { - xf86Int10InfoPtr pInt10; - int version; - pointer memory; - int real_mode_base; - int num_pages; - Bool init_int10; - ddc_lvl ddc; - Bool ddc_blank; -} vbeInfoRec, *vbeInfoPtr; - -#define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1) -#define VBE_VERSION_MINOR(x) (CARD8)(x) - -vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex); -vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags); -void vbeFree(vbeInfoPtr pVbe); -xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule); - -#pragma pack(1) - -typedef struct vbeControllerInfoBlock { - CARD8 VbeSignature[4]; - CARD16 VbeVersion; - CARD32 OemStringPtr; - CARD8 Capabilities[4]; - CARD32 VideoModePtr; - CARD16 TotalMem; - CARD16 OemSoftwareRev; - CARD32 OemVendorNamePtr; - CARD32 OemProductNamePtr; - CARD32 OemProductRevPtr; - CARD8 Scratch[222]; - CARD8 OemData[256]; -} vbeControllerInfoRec, *vbeControllerInfoPtr; - -#pragma pack() - -#ifndef __GNUC__ -#define __attribute__(a) -#endif - -typedef struct _VbeInfoBlock VbeInfoBlock; -typedef struct _VbeModeInfoBlock VbeModeInfoBlock; -typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock; - -/* - * INT 0 - */ - -struct _VbeInfoBlock { - /* VESA 1.2 fields */ - CARD8 VESASignature[4]; /* VESA */ - CARD16 VESAVersion; /* Higher byte major, lower byte minor */ - /*CARD32*/char *OEMStringPtr; /* Pointer to OEM string */ - CARD8 Capabilities[4]; /* Capabilities of the video environment */ - - /*CARD32*/CARD16 *VideoModePtr; /* pointer to supported Super VGA modes */ - - CARD16 TotalMemory; /* Number of 64kb memory blocks on board */ - /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */ - - /* VESA 2 fields */ - CARD16 OemSoftwareRev; /* VBE implementation Software revision */ - /*CARD32*/char *OemVendorNamePtr; /* Pointer to Vendor Name String */ - /*CARD32*/char *OemProductNamePtr; /* Pointer to Product Name String */ - /*CARD32*/char *OemProductRevPtr; /* Pointer to Product Revision String */ - CARD8 Reserved[222]; /* Reserved for VBE implementation */ - CARD8 OemData[256]; /* Data Area for OEM Strings */ -} __attribute__((packed)); - -/* Return Super VGA Information */ -VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe); -void VBEFreeVBEInfo(VbeInfoBlock *block); - -/* - * INT 1 - */ - -struct _VbeModeInfoBlock { - CARD16 ModeAttributes; /* mode attributes */ - CARD8 WinAAttributes; /* window A attributes */ - CARD8 WinBAttributes; /* window B attributes */ - CARD16 WinGranularity; /* window granularity */ - CARD16 WinSize; /* window size */ - CARD16 WinASegment; /* window A start segment */ - CARD16 WinBSegment; /* window B start segment */ - CARD32 WinFuncPtr; /* real mode pointer to window function */ - CARD16 BytesPerScanline; /* bytes per scanline */ - - /* Mandatory information for VBE 1.2 and above */ - CARD16 XResolution; /* horizontal resolution in pixels or characters */ - CARD16 YResolution; /* vertical resolution in pixels or characters */ - CARD8 XCharSize; /* character cell width in pixels */ - CARD8 YCharSize; /* character cell height in pixels */ - CARD8 NumberOfPlanes; /* number of memory planes */ - CARD8 BitsPerPixel; /* bits per pixel */ - CARD8 NumberOfBanks; /* number of banks */ - CARD8 MemoryModel; /* memory model type */ - CARD8 BankSize; /* bank size in KB */ - CARD8 NumberOfImages; /* number of images */ - CARD8 Reserved; /* 1 */ /* reserved for page function */ - - /* Direct color fields (required for direct/6 and YUV/7 memory models) */ - CARD8 RedMaskSize; /* size of direct color red mask in bits */ - CARD8 RedFieldPosition; /* bit position of lsb of red mask */ - CARD8 GreenMaskSize; /* size of direct color green mask in bits */ - CARD8 GreenFieldPosition; /* bit position of lsb of green mask */ - CARD8 BlueMaskSize; /* size of direct color blue mask in bits */ - CARD8 BlueFieldPosition; /* bit position of lsb of blue mask */ - CARD8 RsvdMaskSize; /* size of direct color reserved mask in bits */ - CARD8 RsvdFieldPosition; /* bit position of lsb of reserved mask */ - CARD8 DirectColorModeInfo; /* direct color mode attributes */ - - /* Mandatory information for VBE 2.0 and above */ - CARD32 PhysBasePtr; /* physical address for flat memory frame buffer */ - CARD32 Reserved32; /* 0 */ /* Reserved - always set to 0 */ - CARD16 Reserved16; /* 0 */ /* Reserved - always set to 0 */ - - /* Mandatory information for VBE 3.0 and above */ - CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */ - CARD8 BnkNumberOfImagePages; /* number of images for banked modes */ - CARD8 LinNumberOfImagePages; /* number of images for linear modes */ - CARD8 LinRedMaskSize; /* size of direct color red mask (linear modes) */ - CARD8 LinRedFieldPosition; /* bit position of lsb of red mask (linear modes) */ - CARD8 LinGreenMaskSize; /* size of direct color green mask (linear modes) */ - CARD8 LinGreenFieldPosition; /* bit position of lsb of green mask (linear modes) */ - CARD8 LinBlueMaskSize; /* size of direct color blue mask (linear modes) */ - CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */ - CARD8 LinRsvdMaskSize; /* size of direct color reserved mask (linear modes) */ - CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */ - CARD32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */ - CARD8 Reserved2[189]; /* remainder of VbeModeInfoBlock */ -} __attribute__((packed)); - -/* Return VBE Mode Information */ -VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode); -void VBEFreeModeInfo(VbeModeInfoBlock *block); - -/* - * INT2 - */ - -#define CRTC_DBLSCAN (1<<0) -#define CRTC_INTERLACE (1<<1) -#define CRTC_NHSYNC (1<<2) -#define CRTC_NVSYNC (1<<3) - -struct _VbeCRTCInfoBlock { - CARD16 HorizontalTotal; /* Horizontal total in pixels */ - CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */ - CARD16 HorizontalSyncEnd; /* Horizontal sync end in pixels */ - CARD16 VerticalTotal; /* Vertical total in lines */ - CARD16 VerticalSyncStart; /* Vertical sync start in lines */ - CARD16 VerticalSyncEnd; /* Vertical sync end in lines */ - CARD8 Flags; /* Flags (Interlaced, Double Scan etc) */ - CARD32 PixelClock; /* Pixel clock in units of Hz */ - CARD16 RefreshRate; /* Refresh rate in units of 0.01 Hz */ - CARD8 Reserved[40]; /* remainder of ModeInfoBlock */ -} __attribute__((packed)); -/* VbeCRTCInfoBlock is in the VESA 3.0 specs */ - -Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode, VbeCRTCInfoBlock *crtc); - -/* - * INT 3 - */ - -Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode); - -/* - * INT 4 - */ - -/* Save/Restore Super VGA video state */ -/* function values are (values stored in VESAPtr): - * 0 := query & allocate amount of memory to save state - * 1 := save state - * 2 := restore state - * - * function 0 called automatically if function 1 called without - * a previous call to function 0. - */ - -typedef enum { - MODE_QUERY, - MODE_SAVE, - MODE_RESTORE -} vbeSaveRestoreFunction; - -Bool -VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction, - pointer *memory, int *size, int *real_mode_pages); - -/* - * INT 5 - */ - -Bool -VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window); - -/* - * INT 6 - */ - -typedef enum { - SCANWID_SET, - SCANWID_GET, - SCANWID_SET_BYTES, - SCANWID_GET_MAX -} vbeScanwidthCommand; - -#define VBESetLogicalScanline(pVbe, width) \ - VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, \ - width, NULL, NULL, NULL) -#define VBESetLogicalScanlineBytes(pVbe, width) \ - VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \ - NULL, NULL, NULL) -#define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \ - VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \ - pixels, bytes, max) -#define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \ - VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, \ - NULL, pixels, bytes, max) -Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe, - vbeScanwidthCommand command, int width, - int *pixels, int *bytes, int *max); - -/* - * INT 7 - */ - -/* 16 bit code */ -Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, Bool wait_retrace); -Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y); - -/* - * INT 8 - */ - -/* if bits is 0, then it is a GET */ -int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits); - -/* - * INT 9 - */ - -/* - * If getting a palette, the data argument is not used. It will return - * the data. - * If setting a palette, it will return the pointer received on success, - * NULL on failure. - */ -CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, int first, int num, - CARD32 *data, Bool secondary, Bool wait_retrace); -#define VBEFreePaletteData(data) xfree(data) - -/* - * INT A - */ - -typedef struct _VBEpmi { - int seg_tbl; - int tbl_off; - int tbl_len; -} VBEpmi; - -VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe); -#define VESAFreeVBEpmi(pmi) xfree(pmi) - -/* high level helper functions */ - -typedef struct _vbeModeInfoRec { - int width; - int height; - int bpp; - int n; - struct _vbeModeInfoRec *next; -} vbeModeInfoRec, *vbeModeInfoPtr; - -vbeModeInfoPtr VBEBuildVbeModeList(vbeInfoPtr pVbe, - VbeInfoBlock *vbe); - -unsigned short VBECalcVbeModeIndex(vbeModeInfoPtr m, - DisplayModePtr mode, int bpp); - -typedef struct { - CARD8 *state; - CARD8 *pstate; - int statePage; - int stateSize; - int stateMode; -} vbeSaveRestoreRec, *vbeSaveRestorePtr; - -void -VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr, - vbeSaveRestoreFunction function); - -int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock); -Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode); - -#endif diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.c b/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.c deleted file mode 100644 index 9cb247ab9..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.c +++ /dev/null @@ -1,439 +0,0 @@ -#define DEBUG_VERB 2 -/* - * Copyright © 2002 David Dawes - * - * 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 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 - * THE AUTHOR(S) 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. - * - * Except as contained in this notice, the name of the author(s) shall - * not be used in advertising or otherwise to promote the sale, use or other - * dealings in this Software without prior written authorization from - * the author(s). - * - * Authors: David Dawes <dawes@xfree86.org> - * - * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.c,v 1.4 2002/10/16 17:51:01 dawes Exp $ - */ - -#include "xf86.h" -#include "xf86_ansic.h" -#include "vbe.h" -#include "vbeModes.h" - -static int -GetDepthFlag(vbeInfoPtr pVbe, int id) -{ - VbeModeInfoBlock *mode; - int bpp; - - if ((mode = VBEGetModeInfo(pVbe, id)) == NULL) - return 0; - - if (VBE_MODE_USABLE(mode, 0)) { - int depth; - - if (VBE_MODE_COLOR(mode)) { - depth = mode->RedMaskSize + mode->GreenMaskSize + - mode->BlueMaskSize; - } else { - depth = 1; - } - bpp = mode->BitsPerPixel; - VBEFreeModeInfo(mode); - mode = NULL; - switch (depth) { - case 1: - return V_DEPTH_1; - case 4: - return V_DEPTH_4; - case 8: - return V_DEPTH_8; - case 15: - return V_DEPTH_15; - case 16: - return V_DEPTH_16; - case 24: - switch (bpp) { - case 24: - return V_DEPTH_24_24; - case 32: - return V_DEPTH_24_32; - } - } - } - if (mode) - VBEFreeModeInfo(mode); - return 0; -} - -/* - * Find supported mode depths. - */ -int -VBEFindSupportedDepths(vbeInfoPtr pVbe, VbeInfoBlock *vbe, int *flags24, - int modeTypes) -{ - int i = 0; - int depths = 0; - - if (modeTypes & V_MODETYPE_VBE) { - while (vbe->VideoModePtr[i] != 0xffff) { - depths |= GetDepthFlag(pVbe, vbe->VideoModePtr[i++]); - } - } - - /* - * XXX This possibly only works with VBE 3.0 and later. - */ - if (modeTypes & V_MODETYPE_VGA) { - for (i = 0; i < 0x7F; i++) { - depths |= GetDepthFlag(pVbe, i); - } - } - - if (flags24) { - if (depths & V_DEPTH_24_24) - *flags24 |= Support24bppFb; - if (depths & V_DEPTH_24_32) - *flags24 |= Support32bppFb; - } - - return depths; -} - -static DisplayModePtr -CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id, - int flags) -{ - CARD16 major, minor; - VbeModeInfoBlock *mode; - DisplayModePtr pMode, p; - VbeModeInfoData *data; - Bool modeOK = FALSE; - ModeStatus status = MODE_OK; - - major = (unsigned)(vbe->VESAVersion >> 8); - minor = vbe->VESAVersion & 0xff; - - if ((mode = VBEGetModeInfo(pVbe, id)) == NULL) - return NULL; - - /* Does the mode match the depth/bpp? */ - if (VBE_MODE_USABLE(mode, flags) && - ((pScrn->bitsPerPixel == 1 && !VBE_MODE_COLOR(mode)) || - (mode->BitsPerPixel > 8 && - (mode->RedMaskSize + mode->GreenMaskSize + - mode->BlueMaskSize) == pScrn->depth && - mode->BitsPerPixel == pScrn->bitsPerPixel) || - (mode->BitsPerPixel <= 8 && - mode->BitsPerPixel == pScrn->bitsPerPixel))) { - modeOK = TRUE; - xf86ErrorFVerb(DEBUG_VERB, "*"); - } - - /* - * Check if there's a valid monitor mode that this one can be matched - * up with. The actual matching is done later. - */ - if (modeOK) { - Bool sizeMatch = FALSE; - modeOK = FALSE; - for (p = pScrn->monitor->Modes; p != NULL; p = p->next) { - if ((p->HDisplay != mode->XResolution) || - (p->VDisplay != mode->YResolution) || - (p->Flags & (V_INTERLACE | V_DBLSCAN | V_CLKDIV2))) - continue; - sizeMatch = TRUE; - /* XXX could support the various V_ flags */ - status = xf86CheckModeForMonitor(p, pScrn->monitor); - if (status == MODE_OK) { - modeOK = TRUE; - break; - } - } - if (sizeMatch && !modeOK) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Not using built-in mode \"%dx%d\" (%s)\n", - mode->XResolution, mode->YResolution, - xf86ModeStatusToString(status)); - } - } - - xf86ErrorFVerb(DEBUG_VERB, - "Mode: %x (%dx%d)\n", id, mode->XResolution, mode->YResolution); - xf86ErrorFVerb(DEBUG_VERB, - " ModeAttributes: 0x%x\n", mode->ModeAttributes); - xf86ErrorFVerb(DEBUG_VERB, - " WinAAttributes: 0x%x\n", mode->WinAAttributes); - xf86ErrorFVerb(DEBUG_VERB, - " WinBAttributes: 0x%x\n", mode->WinBAttributes); - xf86ErrorFVerb(DEBUG_VERB, - " WinGranularity: %d\n", mode->WinGranularity); - xf86ErrorFVerb(DEBUG_VERB, - " WinSize: %d\n", mode->WinSize); - xf86ErrorFVerb(DEBUG_VERB, - " WinASegment: 0x%x\n", mode->WinASegment); - xf86ErrorFVerb(DEBUG_VERB, - " WinBSegment: 0x%x\n", mode->WinBSegment); - xf86ErrorFVerb(DEBUG_VERB, - " WinFuncPtr: 0x%x\n", mode->WinFuncPtr); - xf86ErrorFVerb(DEBUG_VERB, - " BytesPerScanline: %d\n", mode->BytesPerScanline); - xf86ErrorFVerb(DEBUG_VERB, - " XResolution: %d\n", mode->XResolution); - xf86ErrorFVerb(DEBUG_VERB, - " YResolution: %d\n", mode->YResolution); - xf86ErrorFVerb(DEBUG_VERB, - " XCharSize: %d\n", mode->XCharSize); - xf86ErrorFVerb(DEBUG_VERB, - " YCharSize: %d\n", mode->YCharSize); - xf86ErrorFVerb(DEBUG_VERB, - " NumberOfPlanes: %d\n", mode->NumberOfPlanes); - xf86ErrorFVerb(DEBUG_VERB, - " BitsPerPixel: %d\n", mode->BitsPerPixel); - xf86ErrorFVerb(DEBUG_VERB, - " NumberOfBanks: %d\n", mode->NumberOfBanks); - xf86ErrorFVerb(DEBUG_VERB, - " MemoryModel: %d\n", mode->MemoryModel); - xf86ErrorFVerb(DEBUG_VERB, - " BankSize: %d\n", mode->BankSize); - xf86ErrorFVerb(DEBUG_VERB, - " NumberOfImages: %d\n", mode->NumberOfImages); - xf86ErrorFVerb(DEBUG_VERB, - " RedMaskSize: %d\n", mode->RedMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " RedFieldPosition: %d\n", mode->RedFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " GreenMaskSize: %d\n", mode->GreenMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " GreenFieldPosition: %d\n", mode->GreenFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " BlueMaskSize: %d\n", mode->BlueMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " BlueFieldPosition: %d\n", mode->BlueFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " RsvdMaskSize: %d\n", mode->RsvdMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " RsvdFieldPosition: %d\n", mode->RsvdFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " DirectColorModeInfo: %d\n", mode->DirectColorModeInfo); - if (major >= 2) { - xf86ErrorFVerb(DEBUG_VERB, - " PhysBasePtr: 0x%x\n", mode->PhysBasePtr); - if (major >= 3) { - xf86ErrorFVerb(DEBUG_VERB, - " LinBytesPerScanLine: %d\n", mode->LinBytesPerScanLine); - xf86ErrorFVerb(DEBUG_VERB, - " BnkNumberOfImagePages: %d\n", mode->BnkNumberOfImagePages); - xf86ErrorFVerb(DEBUG_VERB, - " LinNumberOfImagePages: %d\n", mode->LinNumberOfImagePages); - xf86ErrorFVerb(DEBUG_VERB, - " LinRedMaskSize: %d\n", mode->LinRedMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " LinRedFieldPosition: %d\n", mode->LinRedFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " LinGreenMaskSize: %d\n", mode->LinGreenMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " LinGreenFieldPosition: %d\n", mode->LinGreenFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " LinBlueMaskSize: %d\n", mode->LinBlueMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " LinBlueFieldPosition: %d\n", mode->LinBlueFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " LinRsvdMaskSize: %d\n", mode->LinRsvdMaskSize); - xf86ErrorFVerb(DEBUG_VERB, - " LinRsvdFieldPosition: %d\n", mode->LinRsvdFieldPosition); - xf86ErrorFVerb(DEBUG_VERB, - " MaxPixelClock: %d\n", mode->MaxPixelClock); - } - } - - if (!modeOK) { - VBEFreeModeInfo(mode); - return NULL; - } - pMode = xnfcalloc(sizeof(DisplayModeRec), 1); - - pMode->status = MODE_OK; - pMode->type = M_T_BUILTIN; - - /* for adjust frame */ - pMode->HDisplay = mode->XResolution; - pMode->VDisplay = mode->YResolution; - - data = xnfcalloc(sizeof(VbeModeInfoData), 1); - data->mode = id; - data->data = mode; - pMode->PrivSize = sizeof(VbeModeInfoData); - pMode->Private = (INT32*)data; - pMode->next = NULL; - return pMode; -} - -/* - * Check the available BIOS modes, and extract those that match the - * requirements into the modePool. Note: modePool is a NULL-terminated - * list. - */ - -DisplayModePtr -VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, - int modeTypes) -{ - DisplayModePtr pMode, p = NULL, modePool = NULL; - int i = 0; - - if (modeTypes & V_MODETYPE_VBE) { - while (vbe->VideoModePtr[i] != 0xffff) { - int id = vbe->VideoModePtr[i++]; - - if ((pMode = CheckMode(pScrn, pVbe, vbe, id, modeTypes)) != NULL) { - if (p == NULL) { - modePool = pMode; - } else { - p->next = pMode; - } - pMode->prev = NULL; - p = pMode; - } - } - } - if (modeTypes & V_MODETYPE_VGA) { - for (i = 0; i < 0x7F; i++) { - if ((pMode = CheckMode(pScrn, pVbe, vbe, i, modeTypes)) != NULL) { - if (p == NULL) { - modePool = pMode; - } else { - p->next = pMode; - } - pMode->prev = NULL; - p = pMode; - } - } - } - return modePool; -} - -void -VBESetModeNames(DisplayModePtr pMode) -{ - if (!pMode) - return; - - do { - if (!pMode->name) { - /* Catch "bad" modes. */ - if (pMode->HDisplay > 10000 || pMode->HDisplay < 0 || - pMode->VDisplay > 10000 || pMode->VDisplay < 0) { - pMode->name = strdup("BADMODE"); - } else { - pMode->name = xnfalloc(4 + 1 + 4 + 1); - sprintf(pMode->name, "%dx%d", pMode->HDisplay, pMode->VDisplay); - } - } - pMode = pMode->next; - } while (pMode); -} - -/* - * Go through the monitor modes and selecting the best set of - * parameters for each BIOS mode. Note: This is only supported in - * VBE version 3.0 or later. - */ -void -VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe) -{ - DisplayModePtr pMode; - VbeModeInfoData *data; - - pMode = pScrn->modes; - do { - DisplayModePtr p, best = NULL; - ModeStatus status; - - for (p = pScrn->monitor->Modes; p != NULL; p = p->next) { - if ((p->HDisplay != pMode->HDisplay) || - (p->VDisplay != pMode->VDisplay) || - (p->Flags & (V_INTERLACE | V_DBLSCAN | V_CLKDIV2))) - continue; - /* XXX could support the various V_ flags */ - status = xf86CheckModeForMonitor(p, pScrn->monitor); - if (status != MODE_OK) - continue; - if (!best || (p->Clock > best->Clock)) - best = p; - } - - if (best) { - int clock; - - data = (VbeModeInfoData*)pMode->Private; - pMode->HSync = (float)best->Clock * 1000.0 / best->HTotal + 0.5; - pMode->VRefresh = pMode->HSync / best->VTotal + 0.5; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Attempting to use %dHz refresh for mode \"%s\" (%x)\n", - (int)pMode->VRefresh, pMode->name, data->mode); - data->block = xcalloc(sizeof(VbeCRTCInfoBlock), 1); - data->block->HorizontalTotal = best->HTotal; - data->block->HorizontalSyncStart = best->HSyncStart; - data->block->HorizontalSyncEnd = best->HSyncEnd; - data->block->VerticalTotal = best->VTotal; - data->block->VerticalSyncStart = best->VSyncStart; - data->block->VerticalSyncEnd = best->VSyncEnd; - data->block->Flags = ((best->Flags & V_NHSYNC) ? CRTC_NHSYNC : 0) | - ((best->Flags & V_NVSYNC) ? CRTC_NVSYNC : 0); - data->block->PixelClock = best->Clock * 1000; - /* XXX May not have this. */ - clock = VBEGetPixelClock(pVbe, data->mode, data->block->PixelClock); -#ifdef DEBUG - ErrorF("Setting clock %.2fMHz, closest is %.2fMHz\n", - (double)data->block->PixelClock / 1000000.0, - (double)clock / 1000000.0); -#endif - if (clock) - data->block->PixelClock = clock; - data->mode |= (1 << 11); - data->block->RefreshRate = ((double)(data->block->PixelClock) / - (double)(best->HTotal * best->VTotal)) * 100; - } - pMode = pMode->next; - } while (pMode != pScrn->modes); -} - -/* - * These wrappers are to allow (temporary) funtionality divergences. - */ -int -VBEValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes, - char **modeNames, ClockRangePtr clockRanges, - int *linePitches, int minPitch, int maxPitch, int pitchInc, - int minHeight, int maxHeight, int virtualX, int virtualY, - int apertureSize, LookupModeFlags strategy) -{ - return xf86ValidateModes(scrp, availModes, modeNames, clockRanges, - linePitches, minPitch, maxPitch, pitchInc, - minHeight, maxHeight, virtualX, virtualY, - apertureSize, strategy); -} - -void -VBEPrintModes(ScrnInfoPtr scrp) -{ - xf86PrintModes(scrp); -} - diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.h b/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.h deleted file mode 100644 index c37cbd8bf..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2002 David Dawes - * - * 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 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 - * THE AUTHOR(S) 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. - * - * Except as contained in this notice, the name of the author(s) shall - * not be used in advertising or otherwise to promote the sale, use or other - * dealings in this Software without prior written authorization from - * the author(s). - * - * Authors: David Dawes <dawes@xfree86.org> - * - * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.h,v 1.1 2002/08/06 13:46:28 dawes Exp $ - */ - -#ifndef _VBE_MODES_H - -/* - * This is intended to be stored in the DisplayModeRec's private area. - * It includes all the information necessary to VBE information. - */ -typedef struct _VbeModeInfoData { - int mode; - VbeModeInfoBlock *data; - VbeCRTCInfoBlock *block; -} VbeModeInfoData; - -#define V_DEPTH_1 0x001 -#define V_DEPTH_4 0x002 -#define V_DEPTH_8 0x004 -#define V_DEPTH_15 0x008 -#define V_DEPTH_16 0x010 -#define V_DEPTH_24_24 0x020 -#define V_DEPTH_24_32 0x040 -#define V_DEPTH_24 (V_DEPTH_24_24 | V_DEPTH_24_32) -#define V_DEPTH_30 0x080 -#define V_DEPTH_32 0x100 - -#define VBE_MODE_SUPPORTED(m) (((m)->ModeAttributes & 0x01) != 0) -#define VBE_MODE_COLOR(m) (((m)->ModeAttributes & 0x08) != 0) -#define VBE_MODE_GRAPHICS(m) (((m)->ModeAttributes & 0x10) != 0) -#define VBE_MODE_VGA(m) (((m)->ModeAttributes & 0x40) == 0) -#define VBE_MODE_LINEAR(m) (((m)->ModeAttributes & 0x80) != 0 && \ - ((m)->PhysBasePtr != 0)) - -#define VBE_MODE_USABLE(m, f) (VBE_MODE_SUPPORTED(m) || \ - (f & V_MODETYPE_BAD)) && \ - VBE_MODE_GRAPHICS(m) && \ - (VBE_MODE_VGA(m) || VBE_MODE_LINEAR(m)) - -#define V_MODETYPE_VBE 0x01 -#define V_MODETYPE_VGA 0x02 -#define V_MODETYPE_BAD 0x04 - -extern int VBEFindSupportedDepths(vbeInfoPtr pVbe, VbeInfoBlock *vbe, - int *flags24, int modeTypes); -extern DisplayModePtr VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, - VbeInfoBlock *vbe, int modeTypes); -extern void VBESetModeNames(DisplayModePtr pMode); -extern void VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe); - - -/* - * Note: These are alternatives to the standard helpers. They should - * usually just wrap the standard helpers. - */ -extern int VBEValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes, - char **modeNames, ClockRangePtr clockRanges, - int *linePitches, int minPitch, int maxPitch, - int pitchInc, int minHeight, int maxHeight, - int virtualX, int virtualY, int apertureSize, - LookupModeFlags strategy); -extern void VBEPrintModes(ScrnInfoPtr scrp); - -#endif /* VBE_MODES_H */ diff --git a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe_module.c b/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe_module.c deleted file mode 100644 index 0347f7fb7..000000000 --- a/xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe_module.c +++ /dev/null @@ -1,50 +0,0 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbe_module.c,v 1.4 2002/09/16 18:06:15 eich Exp $ */ - -#include "xf86.h" -#include "xf86str.h" -#include "vbe.h" - -extern const char *vbe_ddcSymbols[]; - -#ifdef XFree86LOADER - -static MODULESETUPPROTO(vbeSetup); - -static XF86ModuleVersionInfo vbeVersRec = -{ - "vbe", - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XF86_VERSION_CURRENT, - 1, 1, 0, - ABI_CLASS_VIDEODRV, /* needs the video driver ABI */ - ABI_VIDEODRV_VERSION, - MOD_CLASS_NONE, - {0,0,0,0} -}; - -XF86ModuleData vbeModuleData = { &vbeVersRec, vbeSetup, NULL }; - -static pointer -vbeSetup(pointer module, pointer opts, int *errmaj, int *errmin) -{ - static Bool setupDone = FALSE; - - if (!setupDone) { - setupDone = TRUE; - LoaderRefSymLists(vbe_ddcSymbols,NULL); - /* - * Tell the loader about symbols from other modules that this module - * might refer to. - */ - } - /* - * The return value must be non-NULL on success even though there - * is no TearDownProc. - */ - return (pointer)1; -} - -#endif - |