![apatard@mandriva.com](/assets/img/avatar_default.png)
This driver handles XG20, XG21, XG40, XG42 chipsets from XGI. They're also known as Z7,Z9,Z11 chipsets. It's based on the SiS fb driver but has been heavily modified by XGI to support their newer chipsets. Signed-off-by: Arnaud Patard <apatard@mandriva.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
264 lines
6.2 KiB
C
264 lines
6.2 KiB
C
#include "osdef.h"
|
|
#include "vb_def.h"
|
|
#include "vgatypes.h"
|
|
#include "vb_struct.h"
|
|
|
|
#ifdef LINUX_KERNEL
|
|
#include "XGIfb.h"
|
|
#include <asm/io.h>
|
|
#include <linux/types.h>
|
|
#endif
|
|
|
|
#ifdef TC
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <conio.h>
|
|
#include <dos.h>
|
|
#endif
|
|
|
|
#ifdef WIN2000
|
|
#include <dderror.h>
|
|
#include <devioctl.h>
|
|
#include <miniport.h>
|
|
#include <ntddvdeo.h>
|
|
#include <video.h>
|
|
|
|
#include "xgiv.h"
|
|
#include "dd_i2c.h"
|
|
#include "tools.h"
|
|
#endif
|
|
|
|
#ifdef LINUX_XF86
|
|
#include "xf86.h"
|
|
#include "xf86PciInfo.h"
|
|
#include "xgi.h"
|
|
#include "xgi_regs.h"
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void XGINew_SetReg1( ULONG , USHORT , USHORT ) ;
|
|
void XGINew_SetReg2( ULONG , USHORT , USHORT ) ;
|
|
void XGINew_SetReg3( ULONG , USHORT ) ;
|
|
void XGINew_SetReg4( ULONG , ULONG ) ;
|
|
UCHAR XGINew_GetReg1( ULONG , USHORT) ;
|
|
UCHAR XGINew_GetReg2( ULONG ) ;
|
|
ULONG XGINew_GetReg3( ULONG ) ;
|
|
void XGINew_ClearDAC( PUCHAR ) ;
|
|
void XGINew_SetRegANDOR(ULONG Port,USHORT Index,USHORT DataAND,USHORT DataOR);
|
|
void XGINew_SetRegOR(ULONG Port,USHORT Index,USHORT DataOR);
|
|
void XGINew_SetRegAND(ULONG Port,USHORT Index,USHORT DataAND);
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetReg1 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : SR CRTC GR */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetReg1( ULONG port , USHORT index , USHORT data )
|
|
{
|
|
#ifdef LINUX_XF86
|
|
OutPortByte( ( PUCHAR )(ULONG)port , index ) ;
|
|
OutPortByte( ( PUCHAR )(ULONG)port + 1 , data ) ;
|
|
#else
|
|
OutPortByte( port , index ) ;
|
|
OutPortByte( port + 1 , data ) ;
|
|
#endif
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetReg2 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : AR( 3C0 ) */
|
|
/* --------------------------------------------------------------------- */
|
|
/*void XGINew_SetReg2( ULONG port , USHORT index , USHORT data )
|
|
{
|
|
InPortByte( ( PUCHAR )port + 0x3da - 0x3c0 ) ;
|
|
OutPortByte( XGINew_P3c0 , index ) ;
|
|
OutPortByte( XGINew_P3c0 , data ) ;
|
|
OutPortByte( XGINew_P3c0 , 0x20 ) ;
|
|
}*/
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetReg3( ULONG port , USHORT data )
|
|
{
|
|
OutPortByte( port , data ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetReg4 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetReg4( ULONG port , ULONG data )
|
|
{
|
|
OutPortLong( port , data ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_GetReg1 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
UCHAR XGINew_GetReg1( ULONG port , USHORT index )
|
|
{
|
|
UCHAR data ;
|
|
|
|
#ifdef LINUX_XF86
|
|
OutPortByte( ( PUCHAR )(ULONG)port , index ) ;
|
|
data = InPortByte( ( PUCHAR )(ULONG)port + 1 ) ;
|
|
#else
|
|
OutPortByte( port , index ) ;
|
|
data = InPortByte( port + 1 ) ;
|
|
#endif
|
|
|
|
return( data ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_GetReg2 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
UCHAR XGINew_GetReg2( ULONG port )
|
|
{
|
|
UCHAR data ;
|
|
|
|
data = InPortByte( port ) ;
|
|
|
|
return( data ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_GetReg3 */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
ULONG XGINew_GetReg3( ULONG port )
|
|
{
|
|
ULONG data ;
|
|
|
|
data = InPortLong( port ) ;
|
|
|
|
return( data ) ;
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetRegANDOR */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetRegANDOR( ULONG Port , USHORT Index , USHORT DataAND , USHORT DataOR )
|
|
{
|
|
USHORT temp ;
|
|
|
|
temp = XGINew_GetReg1( Port , Index ) ; /* XGINew_Part1Port index 02 */
|
|
temp = ( temp & ( DataAND ) ) | DataOR ;
|
|
XGINew_SetReg1( Port , Index , temp ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetRegAND */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetRegAND(ULONG Port,USHORT Index,USHORT DataAND)
|
|
{
|
|
USHORT temp ;
|
|
|
|
temp = XGINew_GetReg1( Port , Index ) ; /* XGINew_Part1Port index 02 */
|
|
temp &= DataAND ;
|
|
XGINew_SetReg1( Port , Index , temp ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : XGINew_SetRegOR */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void XGINew_SetRegOR( ULONG Port , USHORT Index , USHORT DataOR )
|
|
{
|
|
USHORT temp ;
|
|
|
|
temp = XGINew_GetReg1( Port , Index ) ; /* XGINew_Part1Port index 02 */
|
|
temp |= DataOR ;
|
|
XGINew_SetReg1( Port , Index , temp ) ;
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : NewDelaySecond */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void NewDelaySeconds( int seconds )
|
|
{
|
|
#ifdef WIN2000
|
|
int j ;
|
|
#endif
|
|
int i ;
|
|
|
|
|
|
for( i = 0 ; i < seconds ; i++ )
|
|
{
|
|
#ifdef TC
|
|
delay( 1000 ) ;
|
|
#endif
|
|
|
|
#ifdef WIN2000
|
|
|
|
for ( j = 0 ; j < 20000 ; j++ )
|
|
VideoPortStallExecution( 50 ) ;
|
|
#endif
|
|
|
|
#ifdef WINCE_HEADER
|
|
#endif
|
|
|
|
#ifdef LINUX_KERNEL
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
/* Function : Newdebugcode */
|
|
/* Input : */
|
|
/* Output : */
|
|
/* Description : */
|
|
/* --------------------------------------------------------------------- */
|
|
void Newdebugcode( UCHAR code )
|
|
{
|
|
// OutPortByte ( 0x80 , code ) ;
|
|
/* OutPortByte ( 0x300 , code ) ; */
|
|
/* NewDelaySeconds( 0x3 ) ; */
|
|
}
|
|
|
|
|
|
|