Author: greatlrd
Date: Sat Jun 16 03:58:10 2007
New Revision: 27197
URL: http://svn.reactos.org/svn/reactos?rev=27197&view=rev
Log:
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.
Modified:
trunk/reactos/drivers/video/miniport/vbe/vbemp.c
Modified: trunk/reactos/drivers/video/miniport/vbe/vbemp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/miniport/vbe…
==============================================================================
--- trunk/reactos/drivers/video/miniport/vbe/vbemp.c (original)
+++ trunk/reactos/drivers/video/miniport/vbe/vbemp.c Sat Jun 16 03:58:10 2007
@@ -251,6 +251,9 @@
VBEDeviceExtension->VbeInfo.Version & 0xFF,
VBEDeviceExtension->VbeInfo.TotalMemory * 64);
+
+
+
#ifdef VBE12_SUPPORT
if (VBEDeviceExtension->VbeInfo.Version < 0x102)
#else
@@ -295,14 +298,16 @@
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,13 +360,64 @@
}
#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)
{
@@ -390,6 +446,9 @@
VBEDeviceExtension->ModeInfo[CurrentMode].YResolution,
VBEDeviceExtension->ModeInfo[CurrentMode].BitsPerPixel);
}
+
+
+
/*
* Enumerate our children.
@@ -814,11 +873,14 @@
#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,
Author: dgorbachev
Date: Fri Jun 15 23:14:15 2007
New Revision: 27193
URL: http://svn.reactos.org/svn/reactos?rev=27193&view=rev
Log:
Do not break away from the loop on every error. It can cause situation when
many threads die after one client death.
Modified:
trunk/reactos/subsystems/win32/csrss/api/wapi.c
Modified: trunk/reactos/subsystems/win32/csrss/api/wapi.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/api…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/api/wapi.c (original)
+++ trunk/reactos/subsystems/win32/csrss/api/wapi.c Fri Jun 15 23:14:15 2007
@@ -216,6 +216,13 @@
0,
&Reply->Header,
&Request->Header);
+ /* Client died, continue */
+ if (Status == STATUS_INVALID_CID)
+ {
+ Reply = NULL;
+ continue;
+ }
+
if (!NT_SUCCESS(Status))
{
DPRINT1("NtReplyWaitReceivePort failed: %lx\n", Status);