mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 06:15:26 +00:00
prepare vbe driver for two thing
1. a framebuf for VBE 1.2 this will be pretty hard to implement, I got some idea, this mean our vbe drv will work on vbe 1.2 without doing a bankswitch 2. prepare for some dx api for vbe by adding support for special mode 0x81FF meaing we getting full access to the video driver memory in vbe. Thx aleasky you remmid and long talk in some month how we can do it. svn path=/trunk/; revision=27197
This commit is contained in:
parent
a3897f253f
commit
9c81f9ad19
1 changed files with 68 additions and 6 deletions
|
@ -251,6 +251,9 @@ VBEInitialize(PVOID HwDeviceExtension)
|
|||
VBEDeviceExtension->VbeInfo.Version & 0xFF,
|
||||
VBEDeviceExtension->VbeInfo.TotalMemory * 64);
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef VBE12_SUPPORT
|
||||
if (VBEDeviceExtension->VbeInfo.Version < 0x102)
|
||||
#else
|
||||
|
@ -295,14 +298,16 @@ VBEInitialize(PVOID HwDeviceExtension)
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Allocate space for video modes information.
|
||||
*/
|
||||
|
||||
VBEDeviceExtension->ModeInfo =
|
||||
VideoPortAllocatePool(HwDeviceExtension, VpPagedPool, ModeCount * sizeof(VBE_MODEINFO), TAG_VBE);
|
||||
VideoPortAllocatePool(HwDeviceExtension, VpPagedPool, (ModeCount + 1) * sizeof(VBE_MODEINFO), TAG_VBE);
|
||||
VBEDeviceExtension->ModeNumbers =
|
||||
VideoPortAllocatePool(HwDeviceExtension, VpPagedPool, ModeCount * sizeof(USHORT), TAG_VBE);
|
||||
VideoPortAllocatePool(HwDeviceExtension, VpPagedPool, (ModeCount+ 1) * sizeof(USHORT), TAG_VBE);
|
||||
|
||||
/*
|
||||
* Get the actual mode infos.
|
||||
|
@ -355,14 +360,65 @@ VBEInitialize(PVOID HwDeviceExtension)
|
|||
}
|
||||
#ifdef VBE12_SUPPORT
|
||||
else
|
||||
{
|
||||
VBEDeviceExtension->ModeNumbers[SuitableModeCount] = ModeTemp;
|
||||
SuitableModeCount++;
|
||||
{
|
||||
/* FIXME when PCI bus scanner are inplace we need add ModeTemp | 0x4000
|
||||
* for we will map the memory our self and do not use bankswitch */
|
||||
|
||||
if (VBEDeviceExtension->VbeInfo.Version < 0x200)
|
||||
{
|
||||
VBEDeviceExtension->ModeNumbers[SuitableModeCount] = ModeTemp;
|
||||
SuitableModeCount++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef VBE12_SUPPORT
|
||||
if (VBEDeviceExtension->VbeInfo.Version < 0x200)
|
||||
{
|
||||
/* FIXME add PCI bus scanner to detect the video ram phy address */
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (VBEDeviceExtension->VbeInfo.Version >= 0x200)
|
||||
{
|
||||
|
||||
/* Call VBE BIOS to read the mode info.for the special mode */
|
||||
VideoPortZeroMemory(&BiosRegisters, sizeof(BiosRegisters));
|
||||
BiosRegisters.Eax = VBE_GET_MODE_INFORMATION;
|
||||
BiosRegisters.Ecx = 0x81FF;
|
||||
BiosRegisters.Edi = VBEDeviceExtension->TrampolineMemoryOffset + 0x200;
|
||||
BiosRegisters.SegEs = VBEDeviceExtension->TrampolineMemorySegment;
|
||||
VBEDeviceExtension->Int10Interface.Int10CallBios(
|
||||
VBEDeviceExtension->Int10Interface.Context,
|
||||
&BiosRegisters);
|
||||
|
||||
VBEDeviceExtension->ModeNumbers[SuitableModeCount] = 0;
|
||||
|
||||
if (BiosRegisters.Eax == VBE_SUCCESS)
|
||||
{
|
||||
/* transfer the special mode data to protected memory */
|
||||
VBEDeviceExtension->Int10Interface.Int10ReadMemory(
|
||||
VBEDeviceExtension->Int10Interface.Context,
|
||||
VBEDeviceExtension->TrampolineMemorySegment,
|
||||
VBEDeviceExtension->TrampolineMemoryOffset + 0x200,
|
||||
VBEDeviceExtension->ModeInfo + SuitableModeCount,
|
||||
sizeof(VBE_MODEINFO));
|
||||
|
||||
VBEDeviceExtension->ModeNumbers[SuitableModeCount] = 0x81FF;
|
||||
/* Do not add special mode to the list */
|
||||
//SuitableModeCount++;
|
||||
|
||||
/* to gain full phy memory
|
||||
* VBEDeviceExtension->ModeNumbers[SuitableModeCount].PhysBasePtr
|
||||
* VBEDeviceExtension->VbeInfo.TotalMemory * 64 = x Memory on the card in Kbyte
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (SuitableModeCount == 0)
|
||||
{
|
||||
VideoPortDebugPrint(Warn, "VBEMP: No video modes supported\n");
|
||||
|
@ -391,6 +447,9 @@ VBEInitialize(PVOID HwDeviceExtension)
|
|||
VBEDeviceExtension->ModeInfo[CurrentMode].BitsPerPixel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Enumerate our children.
|
||||
*/
|
||||
|
@ -814,11 +873,14 @@ VBEMapVideoMemory(
|
|||
#ifdef VBE12_SUPPORT
|
||||
else
|
||||
{
|
||||
// when pci bus scanner are in place we remove this one
|
||||
FrameBuffer.QuadPart = 0xA0000;
|
||||
MapInformation->VideoRamBase = RequestedAddress->RequestedVirtualAddress;
|
||||
MapInformation->VideoRamLength = 0x10000;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
VideoPortMapMemory(DeviceExtension, FrameBuffer,
|
||||
&MapInformation->VideoRamLength, &inIoSpace,
|
||||
|
|
Loading…
Reference in a new issue