NT4/private/ntos/video/mga_mil/sys.c
2020-09-30 17:12:29 +02:00

126 lines
3.4 KiB
C

/**************************************************************************\
$Header: o:\src/RCS/SYS.C 1.2 95/07/07 06:17:05 jyharbec Exp $
$Log: SYS.C $
* Revision 1.2 95/07/07 06:17:05 jyharbec
* *** empty log message ***
*
* Revision 1.1 95/05/02 05:16:42 jyharbec
* Initial revision
*
\**************************************************************************/
/*/****************************************************************************
* name: MGASysInit
*
* description: Initialise the SYSTEM related hardware of the MGA device.
*
* designed: Bart Simpson, february 10, 1993
* last modified: $Author: jyharbec $, $Date: 95/07/07 06:17:05 $
*
* version: $Id: SYS.C 1.2 95/07/07 06:17:05 jyharbec Exp $
*
*
* void MGASysInit(byte* pInitBuffer)
*
******************************************************************************/
#include "switches.h"
#include "defbind.h"
#include "bind.h"
#include "def.h"
#include "mga.h"
#include "mgai.h"
#include "mtxpci.h"
#ifdef WINDOWS_NT
void MGASysInit(byte* pInitBuffer);
#if defined(ALLOC_PRAGMA)
#pragma alloc_text(PAGE,MGASysInit)
#endif
#endif
extern HwData Hw[];
extern byte iBoard;
extern volatile byte _FAR* pMGA;
extern bool interleave_mode;
/*---------------------------------------------------------------------------
| name: MGASysInit
|
| description: Initialise STORM init registers
|
| parameters: - Pointer on init buffer
| modifies: -
| calls: -
| returns: -
----------------------------------------------------------------------------*/
void MGASysInit(byte* pInitBuffer)
{
dword tmpDword=0;
byte tmpByte;
dword DisplayPitch, DisplayHeight, PixelWidth;
byte val_ien, val_crtc11;
byte val;
/*** DISABLE INTERRUPTS ***/
/* Disable pickien, vlineien and external interrupts */
mgaReadBYTE(*(pMGA + STORM_OFFSET + STORM_IEN), val_ien);
mgaWriteBYTE(*(pMGA + STORM_OFFSET + STORM_IEN), val_ien & 0x9b);
/* Disable vinten interrupt */
mgaWriteBYTE(*(pMGA + STORM_OFFSET + VGA_CRTC_INDEX), VGA_CRTC11);
mgaReadBYTE(*(pMGA + STORM_OFFSET + VGA_CRTC_DATA), val_crtc11);
mgaWriteBYTE(*(pMGA + STORM_OFFSET + VGA_CRTC_DATA), val_crtc11|0x20);
/*----- Program OPTION FOR BIT INTERLEAVE -----*/
DisplayPitch = (dword)Hw[iBoard].pCurrentHwMode->DispWidth;
DisplayHeight = (dword)Hw[iBoard].pCurrentHwMode->DispHeight;
PixelWidth = (dword)Hw[iBoard].pCurrentHwMode->PixWidth;
pciReadConfigByte( PCI_OPTION+1, &tmpByte);
/*** LOGIC: We want to use interleave except for ... (see restrictions register PITCH) ***/
if(((DisplayPitch==800 || DisplayPitch==960) && (PixelWidth==8 || PixelWidth==24)) ||
(DisplayPitch==1600 && PixelWidth==8) ||
(DisplayPitch==800 && PixelWidth==16) ||
(Hw[iBoard].MemAvail == 0x200000))
{
tmpByte &= 0xef;
interleave_mode = FALSE;
Hw[iBoard].Features &= ~INTERLEAVE_MODE; /* FALSE */
}
else
{
tmpByte |= 0x10;
interleave_mode = TRUE;
Hw[iBoard].Features |= INTERLEAVE_MODE; /* TRUE */
}
pciWriteConfigByte( PCI_OPTION+1, tmpByte);
/*----- Program OPTION FOR BIT REFRESH COUNTER -----*/
pciReadConfigDWord( PCI_OPTION, &tmpDword);
tmpDword &= 0xfff0ffff;
/** At this point, we know that gscaling_factor is 1 **/
val = (byte) ( (332L * 40) /1280) - 1;
tmpDword |= ((dword)(val & 0x0f)) << 16;
pciWriteConfigDWord( PCI_OPTION, tmpDword);
}