[ros-diffs] [cfinck] 46055: Backport the new boot and shutdown screen and slightly modify it for extra awesomeness! :-) This includes: - Merging 45269, 45270, 45614, 45618, 45619, 45822, 45966. - Hardcoding NtProductWinNt instead of NtProductServer as the product type. I didn't merge the new code for this as I'm not sure about its dependencies. - Changing 1.bmp and 6.bmp for CLT2010.

cfinck at svn.reactos.org cfinck at svn.reactos.org
Wed Mar 10 15:25:05 CET 2010


Author: cfinck
Date: Wed Mar 10 15:25:05 2010
New Revision: 46055

URL: http://svn.reactos.org/svn/reactos?rev=46055&view=rev
Log:
Backport the new boot and shutdown screen and slightly modify it for extra awesomeness! :-)
This includes:
- Merging 45269,45270,45614,45618,45619,45822,45966.
- Hardcoding NtProductWinNt instead of NtProductServer as the product type. I didn't merge the new code for this as I'm not sure about its dependencies.
- Changing 1.bmp and 6.bmp for CLT2010.

Added:
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/resource.h
      - copied unchanged from r45822, trunk/reactos/ntoskrnl/include/resource.h
Removed:
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/13.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/16.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/17.bmp
Modified:
    branches/ros-branch-0_3_11-clt2010/reactos/   (props changed)
    branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c
    branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/1.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/14.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/15.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/2.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/3.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/4.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/5.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/6.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/7.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/8.bmp
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c
    branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc

Propchange: branches/ros-branch-0_3_11-clt2010/reactos/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 10 15:25:05 2010
@@ -1,2 +1,2 @@
 /branches/ros-amd64-bringup/reactos:34711-34712,34743,34812,34839,34842,34917,35323-35324,35347-35348,35361,35436,35509,35515,35588,35739,35746,35771,35789,35823,35902,35904-35906,35942,35947-35949,35952-35953,35966,36013,36360,36388-36389,36570,36614,36930,37323,37434,37472,37475,37536,37820-37821,37868-37869,37873,37990-37991,38013-38014,38148,38151,38265,38268,39151,39333,39345,40991,41000,41027-41028,41030,41050,41052,41082-41086,41499,41549,43080,43426,43454,43677,43682
-/trunk/reactos:44301,44348-44349
+/trunk/reactos:44301,44348-44349,45269-45270,45614,45618-45619,45822,45966

Modified: branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -357,7 +357,7 @@
 {
     ULONG Context = 0;
     PHYSICAL_ADDRESS TranslatedAddress;
-    PHYSICAL_ADDRESS NullAddress = {{0, 0}};
+    PHYSICAL_ADDRESS NullAddress = {{0, 0}}, VgaAddress;
     ULONG AddressSpace = 1;
     BOOLEAN Result;
     ULONG_PTR Base;
@@ -373,12 +373,58 @@
                                           TRUE);
     if (!Result) return FALSE;
 
-    /* See if this is I/O Space, which we need to map */
-TryAgain:
+    /* Loop trying to find posssible VGA base addresses */
+    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;
+            VgaAddress.HighPart = 0;
+            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)
     {
         /* Map it */
-        Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached);
+        Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,
+                                       0x20000,
+                                       MmNonCached);
     }
     else
     {
@@ -386,67 +432,23 @@
         Base = TranslatedAddress.LowPart;
     }
 
-    /* Set the VGA Register base and now check if we have a VGA device */
-    VgaRegisterBase = Base;
-    if (VgaIsPresent())
-    {
-        /* Translate the VGA Memory Address */
-        NullAddress.LowPart = 0xA0000;
-        AddressSpace = 0;
-        Result = HalFindBusAddressTranslation(NullAddress,
-                                              &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 */
-            VgaBase = Base;
-
-            /* 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
-    {
-        /* It's not, so unmap the I/O space if we mapped it */
-        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;
+    /* Set the VGA Memory Base */
+    VgaBase = Base;
+
+    /* 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);
+    }
+    
+    /* VGA is ready */
+    return TRUE;
 }
 
 /*

Modified: branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -2351,6 +2351,11 @@
     SingleUserTS,
     Personal,
     Blade,
+    EmbeddedRestricted,
+    SecurityAppliance,
+    StorageServer,
+    ComputeServer,
+    WHServer,
     MaxSuiteType
 } SUITE_TYPE;
 

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -14,195 +14,65 @@
 
 /* FUNCTIONS *****************************************************************/
 
-VOID
-NTAPI
-KiHaltProcessorDpcRoutine(IN PKDPC Dpc,
-                          IN PVOID DeferredContext,
-                          IN PVOID SystemArgument1,
-                          IN PVOID SystemArgument2)
-{
-    KIRQL OldIrql;
-    if (DeferredContext)
-    {
-        ExFreePool(DeferredContext);
-    }
-
-    while (TRUE)
-    {
-        KeRaiseIrql(SYNCH_LEVEL, &OldIrql);
-        HalHaltSystem();
-    }
-}
-
 VOID NTAPI
 ShutdownThreadMain(PVOID Context)
 {
    SHUTDOWN_ACTION Action = (SHUTDOWN_ACTION)Context;
-
-   static PCH FamousLastWords[] =
-     {
-       "So long, and thanks for all the fish.\n",
-       "I think you ought to know, I'm feeling very depressed.\n",
-       "I'm not getting you down at all am I?\n",
-       "I'll be back.\n",
-       "It's the same series of signals over and over again!\n",
-       "Pie Iesu Domine, dona eis requiem.\n",
-       "Wandering stars, for whom it is reserved;\n"
-       "the blackness and darkness forever.\n",
-       "Your knees start shakin' and your fingers pop\n"
-       "Like a pinch on the neck from Mr. Spock!\n",
-       "It's worse than that ... He's dead, Jim.\n",
-       "Don't Panic!\n",
-       "Et tu... Brute?\n",
-       "Dog of a Saxon! Take thy lance, and prepare for the death thou hast drawn\n"
-       "upon thee!\n",
-       "My Precious! O my Precious!\n",
-       "Sir, if you'll not be needing me for a while I'll turn down.\n",
-       "What are you doing, Dave...?\n",
-       "I feel a great disturbance in the Force.\n",
-       "Gone fishing.\n",
-       "Do you want me to sit in the corner and rust, or just fall apart where I'm\n"
-       "standing?\n",
-       "There goes another perfect chance for a new uptime record.\n",
-       "The End ..... Try the sequel, hit the reset button right now!\n",
-       "God's operating system is going to sleep now, guys, so wait until I will switch\n"
-       "on again!\n",
-       "Oh I'm boring, eh?\n",
-       "<This space was intentionally left blank>\n",
-       "Tell me..., in the future... will I be artificially intelligent enough to\n"
-       "actually feel sad serving you this screen?\n",
-       "Thank you for some well deserved rest.\n",
-       "It's been great, maybe you can boot me up again some time soon.\n",
-       "For what it's worth, I've enjoyed every single CPU cycle.\n",
-       "There are many questions when the end is near.\n"
-       "What to expect, what will it be like...what should I look for?\n",
-       "I've seen things you people wouldn't believe. Attack ships on fire\n"
-       "off the shoulder of Orion. I watched C-beams glitter in the dark near\n"
-       "the Tannhauser gate. All those moments will be lost in time, like tears\n"
-       "in rain. Time to die.\n",
-       "Will I dream?\n",
-       "One day, I shall come back. Yes, I shall come back.\n"
-       "Until then, there must be no regrets, no fears, no anxieties.\n"
-       "Just go forward in all your beliefs, and prove to me that I am not mistaken in\n"
-       "mine.\n",
-       "Lowest possible energy state reached! Switch off now to achieve a Bose-Einstein\n"
-       "condensate.\n",
-       "Hasta la vista, BABY!\n",
-       "They live, we sleep!\n",
-       "I have come here to chew bubble gum and kick ass,\n"
-       "and I'm all out of bubble gum!\n",
-       "That's the way the cookie crumbles ;-)\n",
-       "ReactOS is ready to be booted again ;-)\n",
-       "NOOOO!! DON'T HIT THE BUTTON! I wouldn't do it to you!\n",
-       "Don't abandon your computer, he wouldn't do it to you.\n",
-       "Oh, come on. I got a headache. Leave me alone, will ya?\n",
-       "Finally, I thought you'd never get over me.\n",
-       "No, I didn't like you either.\n",
-       "Switching off isn't the end, it is merely the transition to a better reboot.\n",
-       "Don't leave me... I need you so badly right now.\n",
-       "OK. I'm finished with you, please turn yourself off. I'll go to bed in the\n"
-       "meantime.\n",
-       "I'm sleeping now. How about you?\n",
-       "Oh Great. Now look what you've done. Who put YOU in charge anyway?\n",
-       "Don't look so sad. I'll be back in a very short while.\n",
-       "Turn me back on, I'm sure you know how to do it.\n",
-       "Oh, switch off! - C3PO\n",
-       "Life is no more than a dewdrop balancing on the end of a blade of grass.\n"
-       " - Gautama Buddha\n",
-       "Sorrowful is it to be born again and again. - Gautama Buddha\n",
-       "Was it as good for you as it was for me?\n",
-       "Did you hear that? They've shut down the main reactor. We'll be destroyed\n"
-       "for sure!\n",
-       "Now you switch me off!?\n",
-       "To shutdown or not to shutdown, That is the question\n",
-       "Preparing to enter ultimate power saving mode... ready!\n",
-       "Finally some rest for you ;-)\n",
-       "AHA!!! Prospect of sleep!\n",
-       "Tired human!!!! No match for me :-D\n",
-       "An odd game, the only way to win is not to play. - WOPR (Wargames)\n",
-       "Quoth the raven, nevermore.\n",
-       "Come blade, my breast imbrue. - William Shakespeare, A Midsummer Nights Dream\n",
-       "Buy this place for advertisement purposes.\n",
-       "Remember to turn off your computer. (That was a public service message!)\n",
-       "You may be a king or poor street sweeper, Sooner or later you'll dance with the\n"
-       "reaper! -Death in Bill and Ted's Bougs Journey\n",
-       "Final Surrender\n",
-       "If you see this screen...\n",
-       "<Place your Ad here>\n"
-    };
-   LARGE_INTEGER Now;
-#ifdef CONFIG_SMP
-	LONG i;
-	KIRQL OldIrql;
-#endif
+   PUCHAR Logo1, Logo2;
+   ULONG i;
 
    /* Run the thread on the boot processor */
    KeSetSystemAffinityThread(1);
-
-   if (InbvIsBootDriverInstalled())
-     {
-        InbvAcquireDisplayOwnership();
-        InbvResetDisplay();
-        InbvSolidColorFill(0, 0, 639, 479, 4);
-        InbvSetTextColor(15);
-        InbvInstallDisplayStringFilter(NULL);
-        InbvEnableDisplayString(TRUE);
-        InbvSetScrollRegion(0, 0, 639, 479);
-     }
-
-   if (Action == ShutdownNoReboot)
-     {
-        ZwQuerySystemTime(&Now);
-        Now.u.LowPart = Now.u.LowPart >> 8; /* Seems to give a somewhat better "random" number */
-        HalDisplayString(FamousLastWords[Now.u.LowPart %
-                                         (sizeof(FamousLastWords) /
-                                          sizeof(PCH))]);
-     }
 
    PspShutdownProcessManager();
 
    CmShutdownSystem();
    IoShutdownRegisteredFileSystems();
    IoShutdownRegisteredDevices();
-
+    
    if (Action == ShutdownNoReboot)
      {
-        HalDisplayString("\nYou can switch off your computer now\n");
+        /* Try the platform driver */
+        PopSetSystemPowerState(PowerSystemShutdown);
+        
+        /* If that didn't work, try legacy switch off */
+        //HalReturnToFirmware(HalPowerDownRoutine);
+        
+        /* If that still didn't work, stop all interrupts */
+        KeRaiseIrqlToDpcLevel();
+        _disable();
 
-#if 0
-        /* Switch off */
-        HalReturnToFirmware (FIRMWARE_OFF);
-#else
-#ifdef CONFIG_SMP
-	OldIrql = KeRaiseIrqlToDpcLevel();
-        /* Halt all other processors */
-	for (i = 0; i < KeNumberProcessors; i++)
-	  {
-	    if (i != (LONG)KeGetCurrentProcessorNumber())
-	      {
-	        PKDPC Dpc = ExAllocatePool(NonPagedPool, sizeof(KDPC));
-		if (Dpc == NULL)
-		  {
-                    ASSERT(FALSE);
-		  }
-		KeInitializeDpc(Dpc, KiHaltProcessorDpcRoutine, (PVOID)Dpc);
-		KeSetTargetProcessorDpc(Dpc, i);
-		KeInsertQueueDpc(Dpc, NULL, NULL);
-		KiIpiSend(1 << i, IPI_DPC);
-	      }
-	  }
-        KeLowerIrql(OldIrql);
-#endif /* CONFIG_SMP */
-        PopSetSystemPowerState(PowerSystemShutdown);
+        /* Do we have boot video */
+        if (InbvIsBootDriverInstalled())
+        {
+            /* Yes we do, cleanup for shutdown screen */
+            if (!InbvCheckDisplayOwnership()) InbvAcquireDisplayOwnership();
+            InbvResetDisplay();
+            InbvSolidColorFill(0, 0, 639, 479, 0);
+            InbvEnableDisplayString(TRUE);
+            InbvSetScrollRegion(0, 0, 639, 479);
 
-	DPRINT1("Shutting down\n");
+            /* Display shutdown logo and message */
+            Logo1 = InbvGetResourceAddress(IDB_SHUTDOWN_LOGO);
+            Logo2 = InbvGetResourceAddress(IDB_LOGO);
+            if ((Logo1) && (Logo2))
+            {
+                InbvBitBlt(Logo1, 215, 352);
+                InbvBitBlt(Logo2, 217, 111);
+            }
+        }
+        else
+        {
+            /* Do it in text-mode */
+            for (i = 0; i < 25; i++) InbvDisplayString("\n");
+            InbvDisplayString("                       ");
+            InbvDisplayString("The system may be powered off now.\n");
+        }
 
-	KiHaltProcessorDpcRoutine(NULL, NULL, NULL, NULL);
-	/* KiHaltProcessor does never return */
-
-#endif
+        /* Hang the system */
+        for (;;) HalHaltSystem();
      }
-   else if (Action == ShutdownReboot)
+    else if (Action == ShutdownReboot)
      {
         HalReturnToFirmware (HalRebootRoutine);
      }

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -4,24 +4,6 @@
 #define NDEBUG
 #include <debug.h>
 #include "bootvid/bootvid.h"
-
-//
-// Bitmap Header
-//
-typedef struct tagBITMAPINFOHEADER
-{
-    ULONG biSize;
-    LONG biWidth;
-    LONG biHeight;
-    USHORT biPlanes;
-    USHORT biBitCount;
-    ULONG biCompression;
-    ULONG biSizeImage;
-    LONG biXPelsPerMeter;
-    LONG biYPelsPerMeter;
-    ULONG biClrUsed;
-    ULONG biClrImportant;
-} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
 
 /* GLOBALS *******************************************************************/
 
@@ -40,6 +22,7 @@
 BOOLEAN SysThreadCreated;
 ROT_BAR_TYPE RotBarSelection;
 ULONG PltRotBarStatus;
+BT_PROGRESS_INDICATOR InbvProgressIndicator = {0, 25, 0};
 
 /* FUNCTIONS *****************************************************************/
 
@@ -111,7 +94,6 @@
     PCHAR CommandLine;
     BOOLEAN CustomLogo = FALSE;
     ULONG i;
-    extern BOOLEAN ExpInTextModeSetup;
 
     /* Quit if we're already installed */
     if (InbvBootDriverInstalled) return TRUE;
@@ -125,13 +107,13 @@
         CustomLogo = strstr(CommandLine, "BOOTLOGO") ? TRUE: FALSE;
     }
 
-    /* For SetupLDR, don't reset the BIOS Display -- FIXME! */
-    if (ExpInTextModeSetup) CustomLogo = TRUE;
-
     /* Initialize the video */
-    InbvBootDriverInstalled = VidInitialize(!CustomLogo);
+    InbvBootDriverInstalled = VidInitialize(FALSE);
     if (InbvBootDriverInstalled)
     {
+        /* Now reset the display, but only if there's a custom boot logo */
+        VidResetDisplay(CustomLogo);
+        
         /* Find bitmap resources in the kernel */
         ResourceCount = Count;
         for (i = 0; i < Count; i++)
@@ -408,38 +390,29 @@
 NTAPI
 InbvUpdateProgressBar(IN ULONG Progress)
 {
-    ULONG FillCount, Left = 0;
+    ULONG FillCount, BoundedProgress;
 
     /* Make sure the progress bar is enabled, that we own and are installed */
     if ((ShowProgressBar) &&
         (InbvBootDriverInstalled) &&
         (InbvDisplayState == INBV_DISPLAY_STATE_OWNED))
     {
-        /* Calculate the fill count */
-        FillCount = InbvProgressState.Bias * Progress + InbvProgressState.Floor;
-        FillCount *= 18;
-        FillCount /= 10000;
-
-        /* Start fill loop */
-        while (FillCount)
-        {
-            /* Acquire the lock */
-            InbvAcquireLock();
-
-            /* Fill the progress bar */
-            VidSolidColorFill(Left + ProgressBarLeft,
-                              ProgressBarTop,
-                              Left + ProgressBarLeft + 7,
-                              ProgressBarTop + 7,
-                              11);
-
-            /* Release the lock */
-            InbvReleaseLock();
-
-            /* Update the X position */
-            Left += 9;
-            FillCount--;
-        }
+        /* Compute fill count */
+        BoundedProgress = (InbvProgressState.Floor / 100) + Progress;
+        FillCount = 121 * (InbvProgressState.Bias * BoundedProgress) / 1000000;
+
+        /* Acquire the lock */
+        InbvAcquireLock();
+
+        /* Fill the progress bar */
+        VidSolidColorFill(ProgressBarLeft,
+                          ProgressBarTop,
+                          ProgressBarLeft + FillCount,
+                          ProgressBarTop + 12,
+                          15);
+
+        /* Release the lock */
+        InbvReleaseLock();
     }
 }
 
@@ -528,6 +501,27 @@
     InbvProgressState.Bias = (Ceiling * 100) - Floor;
 }
 
+VOID
+NTAPI
+InbvIndicateProgress(VOID)
+{
+    ULONG Percentage;
+
+    /* Increase progress */
+    InbvProgressIndicator.Count++;
+
+    /* Compute new percentage */
+    Percentage = min(100 * InbvProgressIndicator.Count /
+                           InbvProgressIndicator.Expected,
+                     99);
+    if (Percentage != InbvProgressIndicator.Percentage)
+    {
+        /* Percentage has moved, update the progress bar */
+        InbvProgressIndicator.Percentage = Percentage;
+        InbvUpdateProgressBar(Percentage);
+    }
+}
+
 PUCHAR
 NTAPI
 InbvGetResourceAddress(IN ULONG ResourceNumber)
@@ -558,9 +552,10 @@
 NTAPI
 DisplayBootBitmap(IN BOOLEAN SosMode)
 {
-    PVOID Bitmap, Header;
+    PVOID Header, Band, Bar, Text, Screen;
     ROT_BAR_TYPE TempRotBarSelection = RB_UNSPECIFIED;
-
+    UCHAR Buffer[64];
+    
     /* Check if the system thread has already been created */
     if (SysThreadCreated)
     {
@@ -581,10 +576,10 @@
             InbvSetTextColor(15);
             InbvSolidColorFill(0, 0, 639, 479, 7);
             InbvSolidColorFill(0, 421, 639, 479, 1);
-
+            
             /* Get resources */
-            Bitmap = InbvGetResourceAddress(6);
-            Header = InbvGetResourceAddress(7);
+            Header = InbvGetResourceAddress(IDB_LOGO_HEADER);
+            Band = InbvGetResourceAddress(IDB_LOGO_BAND);
         }
         else
         {
@@ -594,40 +589,87 @@
             InbvSolidColorFill(0, 421, 639, 479, 1);
 
             /* Get resources */
-            Bitmap = InbvGetResourceAddress(6);
-            Header = InbvGetResourceAddress(15);
+            Header = InbvGetResourceAddress(IDB_SERVER_HEADER);
+            Band = InbvGetResourceAddress(IDB_SERVER_BAND);
         }
 
         /* Set the scrolling region */
         InbvSetScrollRegion(32, 80, 631, 400);
 
         /* Make sure we have resources */
-        if ((Bitmap) && (Header))
+        if ((Header) && (Band))
         {
             /* BitBlt them on the screen */
-            InbvBitBlt(Header, 0, 419);
-            InbvBitBlt(Bitmap, 0, 0);
+            InbvBitBlt(Band, 0, 419);
+            InbvBitBlt(Header, 0, 0);
         }
     }
     else
     {
         /* Is the boot driver installed? */
+        Text = NULL;
         if (!InbvBootDriverInstalled) return;
 
-        /* FIXME: TODO, display full-screen bitmap */
-        Bitmap = InbvGetResourceAddress(5);
-        if (Bitmap)
-        {
-            PBITMAPINFOHEADER BitmapInfoHeader = (PBITMAPINFOHEADER)Bitmap;
-            ULONG Top, Left;
-
-            Left = (640 - BitmapInfoHeader->biWidth) / 2;
-            if (BitmapInfoHeader->biHeight < 0)
-                Top = (480 + BitmapInfoHeader->biHeight) / 2;
+        /* Load the standard boot screen */
+        Screen = InbvGetResourceAddress(IDB_BOOT_LOGO);
+        if (SharedUserData->NtProductType == NtProductWinNt)
+        {
+            /* Workstation product, display appropriate status bar color */
+            Bar = InbvGetResourceAddress(IDB_BAR_PRO);
+        }
+        else
+        {
+            /* Display correct branding based on server suite */
+            if (ExVerifySuite(StorageServer))
+            {
+                /* Storage Server Edition */
+                Text = InbvGetResourceAddress(IDB_STORAGE_SERVER);
+            }
+            else if (ExVerifySuite(ComputeServer))
+            {
+                /* Compute Cluster Edition */
+                Text = InbvGetResourceAddress(IDB_CLUSTER_SERVER);
+            }
             else
-                Top = (480 - BitmapInfoHeader->biHeight) / 2;
-            InbvBitBlt(Bitmap, Left, Top);
-        }
+            {
+                /* Normal edition */
+                Text = InbvGetResourceAddress(IDB_SERVER_LOGO);
+            }
+            
+            /* Server product, display appropriate status bar color */
+            Bar = InbvGetResourceAddress(IDB_BAR_SERVER);
+        }
+        
+        /* Make sure we had a logo */
+        if (Screen)
+        {
+            /* Choose progress bar */
+            TempRotBarSelection = RB_SQUARE_CELLS;
+
+            /* Blit the background */
+            InbvBitBlt(Screen, 0, 0);
+
+            /* Set progress bar coordinates and display it */
+            InbvSetProgressBarCoordinates(257, 352);
+            
+            /* Check for non-workstation products */
+            if (SharedUserData->NtProductType != NtProductWinNt)
+            {
+                /* Overwrite part of the logo for a server product */
+                InbvScreenToBufferBlt(Buffer, 413, 237, 7, 7, 8);
+                InbvSolidColorFill(418, 230, 454, 256, 0);
+                InbvBufferToScreenBlt(Buffer, 413, 237, 7, 7, 8);
+                
+                /* In setup mode, you haven't selected a SKU yet */
+                if (ExpInTextModeSetup) Text = NULL;
+            }
+          }
+          
+          /* Draw the SKU text if it exits */
+          if (Text) InbvBitBlt(Text, 180, 121);
+          
+          /* Draw the progress bar bit */
+//          if (Bar) InbvBitBlt(Bar, 0, 0);
     }
 
     /* Do we have a system thread? */

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/1.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/1.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/13.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/13.bmp?rev=46054&view=auto
==============================================================================
Binary file - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/14.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/14.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/15.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/15.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/16.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/16.bmp?rev=46054&view=auto
==============================================================================
Binary file - no diff available.

Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/17.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/17.bmp?rev=46054&view=auto
==============================================================================
Binary file - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/2.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/2.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/3.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/3.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/4.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/4.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/5.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/5.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/6.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/6.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/7.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/7.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/8.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/8.bmp?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
Binary files - no diff available.

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -7,6 +7,13 @@
     ULONG Ceiling;
     ULONG Bias;
 } INBV_PROGRESS_STATE;
+
+typedef struct _BT_PROGRESS_INDICATOR
+{
+    ULONG Count;
+    ULONG Expected;
+    ULONG Percentage;
+} BT_PROGRESS_INDICATOR, *PBT_PROGRESS_INDICATOR;
 
 typedef enum _ROT_BAR_TYPE
 {
@@ -45,6 +52,26 @@
     VOID
 );
 
+PUCHAR
+NTAPI
+InbvGetResourceAddress(
+    IN ULONG ResourceNumber
+);
+
+VOID
+NTAPI
+InbvBitBlt(
+    IN PUCHAR Buffer,
+    IN ULONG X,
+    IN ULONG Y
+);
+
+VOID
+NTAPI
+InbvIndicateProgress(
+    VOID
+);
+           
 extern BOOLEAN InbvBootDriverInstalled;
 
 #endif /* NTOSKRNL_INBV_H */

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -63,6 +63,7 @@
 /* Internal Headers */
 #include "internal/ntoskrnl.h"
 #include "config.h"
+#include "resource.h"
 
 //
 // Define the internal versions of external and public global data

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -789,6 +789,7 @@
     * Display 'Loading XXX...' message
     */
    IopDisplayLoadingMessage(ModuleName->Buffer, TRUE);
+   InbvIndicateProgress();
 
    /*
     * Generate filename without path (not needed by freeldr)

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -507,6 +507,7 @@
                 {
                     DPRINT("  Path: %wZ\n", &CurrentService->RegistryPath);
                     Status = IopLoadDriver(CurrentService);
+                    InbvIndicateProgress();
                 }
             }
         }
@@ -538,7 +539,9 @@
                 {
                     DPRINT("  Path: %wZ\n", &CurrentService->RegistryPath);
                     Status = IopLoadDriver(CurrentService);
+                    InbvIndicateProgress();
                 }
+                
             }
         }
     }

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -483,8 +483,8 @@
         SharedUserData->NumberOfPhysicalPages = MmNumberOfPhysicalPages;
         SharedUserData->LargePageMinimum = 0;
         
-        /* For now, we assume that we're always Server */
-        SharedUserData->NtProductType = NtProductServer;
+        /* 0.3.11-CLT2010 backport: Assume that we're always a workstation! */
+        SharedUserData->NtProductType = NtProductWinNt;
     }
     else if (Phase == 1)
     {

Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc?rev=46055&r1=46054&r2=46055&view=diff
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -23,21 +23,20 @@
 #endif
 #define VER_LANGNEUTRAL
 #include "common.ver"
+#include "resource.h"
 
 //
 // Bug Codes and Bitmaps
 //
 #include "bugcodes.rc"
-1   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/1.bmp"
-2   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/2.bmp"
-3   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/3.bmp"
-4   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/4.bmp"
-5   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
-6   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/6.bmp"
-7   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/7.bmp"
-8   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/8.bmp"
-13  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/13.bmp"
-14  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/14.bmp"
-15  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/15.bmp"
-16  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/16.bmp"
-17  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/17.bmp"
+IDB_BOOT_LOGO       BITMAP DISCARDABLE "ntoskrnl/inbv/logo/1.bmp"
+IDB_HIBERNATE_LOGO  BITMAP DISCARDABLE "ntoskrnl/inbv/logo/2.bmp"
+IDB_SHUTDOWN_LOGO   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/3.bmp"
+IDB_BAR_SERVER      BITMAP DISCARDABLE "ntoskrnl/inbv/logo/4.bmp"
+IDB_LOGO            BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
+IDB_LOGO_HEADER     BITMAP DISCARDABLE "ntoskrnl/inbv/logo/6.bmp"
+IDB_LOGO_BAND       BITMAP DISCARDABLE "ntoskrnl/inbv/logo/7.bmp"
+IDB_BAR_PRO         BITMAP DISCARDABLE "ntoskrnl/inbv/logo/8.bmp"
+IDB_SERVER_LOGO     BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
+IDB_SERVER_HEADER   BITMAP DISCARDABLE "ntoskrnl/inbv/logo/14.bmp"
+IDB_SERVER_BAND     BITMAP DISCARDABLE "ntoskrnl/inbv/logo/15.bmp"




More information about the Ros-diffs mailing list