mirror of
https://github.com/reactos/reactos.git
synced 2024-07-04 11:44:33 +00:00
[BOOTVID]: Fix completely broken VidInitialize routine. I have no idea what the original code was trying to accomplish.
svn path=/trunk/; revision=45269
This commit is contained in:
parent
71162a52f5
commit
590b4a4093
|
@ -357,7 +357,7 @@ VidInitialize(IN BOOLEAN SetMode)
|
||||||
{
|
{
|
||||||
ULONG Context = 0;
|
ULONG Context = 0;
|
||||||
PHYSICAL_ADDRESS TranslatedAddress;
|
PHYSICAL_ADDRESS TranslatedAddress;
|
||||||
PHYSICAL_ADDRESS NullAddress = {{0, 0}};
|
PHYSICAL_ADDRESS NullAddress = {{0, 0}}, VgaAddress;
|
||||||
ULONG AddressSpace = 1;
|
ULONG AddressSpace = 1;
|
||||||
BOOLEAN Result;
|
BOOLEAN Result;
|
||||||
ULONG_PTR Base;
|
ULONG_PTR Base;
|
||||||
|
@ -373,12 +373,57 @@ VidInitialize(IN BOOLEAN SetMode)
|
||||||
TRUE);
|
TRUE);
|
||||||
if (!Result) return FALSE;
|
if (!Result) return FALSE;
|
||||||
|
|
||||||
/* See if this is I/O Space, which we need to map */
|
/* Loop trying to find posssible VGA base addresses */
|
||||||
TryAgain:
|
while (TRUE)
|
||||||
|
{
|
||||||
|
/* See if this is I/O Space, which we need to map */
|
||||||
|
if (!AddressSpace)
|
||||||
|
{
|
||||||
|
/* Map it */
|
||||||
|
Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The base is the translated address, no need to map I/O space */
|
||||||
|
Base = TranslatedAddress.LowPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Try to see if this is VGA */
|
||||||
|
VgaRegisterBase = Base;
|
||||||
|
if (VgaIsPresent())
|
||||||
|
{
|
||||||
|
/* Translate the VGA Memory Address */
|
||||||
|
VgaAddress.LowPart = 0xA0000;
|
||||||
|
AddressSpace = 0;
|
||||||
|
Result = HalFindBusAddressTranslation(VgaAddress,
|
||||||
|
&AddressSpace,
|
||||||
|
&TranslatedAddress,
|
||||||
|
&Context,
|
||||||
|
FALSE);
|
||||||
|
if (Result) break;
|
||||||
|
|
||||||
|
/* Try to see if there's any other address */
|
||||||
|
Result = HalFindBusAddressTranslation(NullAddress,
|
||||||
|
&AddressSpace,
|
||||||
|
&TranslatedAddress,
|
||||||
|
&Context,
|
||||||
|
TRUE);
|
||||||
|
if (!Result) return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* It's not, so unmap the I/O space if we mapped it */
|
||||||
|
if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Success! See if this is I/O Space, which we need to map */
|
||||||
if (!AddressSpace)
|
if (!AddressSpace)
|
||||||
{
|
{
|
||||||
/* Map it */
|
/* Map it */
|
||||||
Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached);
|
Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,
|
||||||
|
0x20000,
|
||||||
|
MmNonCached);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -386,67 +431,23 @@ TryAgain:
|
||||||
Base = TranslatedAddress.LowPart;
|
Base = TranslatedAddress.LowPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the VGA Register base and now check if we have a VGA device */
|
/* Set the VGA Memory Base */
|
||||||
VgaRegisterBase = Base;
|
VgaBase = Base;
|
||||||
if (VgaIsPresent())
|
|
||||||
|
/* Now check if we have to set the mode */
|
||||||
|
if (SetMode)
|
||||||
{
|
{
|
||||||
/* Translate the VGA Memory Address */
|
/* Reset the display */
|
||||||
NullAddress.LowPart = 0xA0000;
|
HalResetDisplay();
|
||||||
AddressSpace = 0;
|
curr_x = 0;
|
||||||
Result = HalFindBusAddressTranslation(NullAddress,
|
curr_y = 0;
|
||||||
&AddressSpace,
|
|
||||||
&TranslatedAddress,
|
|
||||||
&Context,
|
|
||||||
FALSE);
|
|
||||||
if (Result)
|
|
||||||
{
|
|
||||||
/* Success! See if this is I/O Space, which we need to map */
|
|
||||||
if (!AddressSpace)
|
|
||||||
{
|
|
||||||
/* Map it */
|
|
||||||
Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,
|
|
||||||
0x20000,
|
|
||||||
MmNonCached);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* The base is the translated address, no need to map I/O space */
|
|
||||||
Base = TranslatedAddress.LowPart;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the VGA Memory Base */
|
/* Initialize it */
|
||||||
VgaBase = Base;
|
VgaInterpretCmdStream(AT_Initialization);
|
||||||
|
|
||||||
/* Now check if we have to set the mode */
|
|
||||||
if (SetMode)
|
|
||||||
{
|
|
||||||
/* Reset the display */
|
|
||||||
HalResetDisplay();
|
|
||||||
curr_x = 0;
|
|
||||||
curr_y = 0;
|
|
||||||
|
|
||||||
/* Initialize it */
|
|
||||||
VgaInterpretCmdStream(AT_Initialization);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
/* VGA is ready */
|
||||||
/* It's not, so unmap the I/O space if we mapped it */
|
return TRUE;
|
||||||
if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we got here, then we failed...let's try again */
|
|
||||||
Result = HalFindBusAddressTranslation(NullAddress,
|
|
||||||
&AddressSpace,
|
|
||||||
&TranslatedAddress,
|
|
||||||
&Context,
|
|
||||||
TRUE);
|
|
||||||
if (Result) goto TryAgain;
|
|
||||||
|
|
||||||
/* If we got here, then we failed even past our re-try... */
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue