[ros-diffs] [ion] 24780: - Change kdcom.sys to kdcom.dll. - Remove all kdcom exports and files from HAL and link with kdcom.dll instead. - Add support in freeldr for loading kdcom.dll (and theoretically any other import, such as the Code Integrity DLL for kernel-mode signing, but for now I've only tested this one). - Refactor some of the HAL loading code to make it generic for any image. - Load HAL manually when loading kernel, before processing imports, to make sure that HAL is index 1 in the loader modules and loads before KDCOM. - Fix some build problems.

ion at svn.reactos.org ion at svn.reactos.org
Sun Nov 19 20:00:04 CET 2006


Author: ion
Date: Sun Nov 19 22:00:03 2006
New Revision: 24780

URL: http://svn.reactos.org/svn/reactos?rev=24780&view=rev
Log:
- Change kdcom.sys to kdcom.dll.
- Remove all kdcom exports and files from HAL and link with kdcom.dll instead.
- Add support in freeldr for loading kdcom.dll (and theoretically any other import, such as the Code Integrity DLL for kernel-mode signing, but for now I've only tested this one).
- Refactor some of the HAL loading code to make it generic for any image.
- Load HAL manually when loading kernel, before processing imports, to make sure that HAL is index 1 in the loader modules and loads before KDCOM.
- Fix some build problems.

Removed:
    trunk/reactos/hal/halx86/generic/kdbg.c
Modified:
    trunk/reactos/boot/bootdata/packages/reactos.dff
    trunk/reactos/boot/bootdata/txtsetup.sif
    trunk/reactos/boot/freeldr/freeldr/arch/i386/loader.c
    trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
    trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c
    trunk/reactos/drivers/base/kdcom/kdcom.def
    trunk/reactos/drivers/base/kdcom/kdcom.rbuild
    trunk/reactos/hal/hal/hal.def
    trunk/reactos/hal/halx86/generic/generic.rbuild
    trunk/reactos/ntoskrnl/ntoskrnl.rbuild

Modified: trunk/reactos/boot/bootdata/packages/reactos.dff
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/packages/reactos.dff?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/boot/bootdata/packages/reactos.dff (original)
+++ trunk/reactos/boot/bootdata/packages/reactos.dff Sun Nov 19 22:00:03 2006
@@ -235,7 +235,7 @@
 
 
 ; Drivers
-drivers\base\bootvid\kdcom.sys                      2
+drivers\base\bootvid\kdcom.dll                      2
 drivers\base\beep\beep.sys                          2
 drivers\base\bootvid\bootvid.sys                    2
 drivers\base\null\null.sys                          2

Modified: trunk/reactos/boot/bootdata/txtsetup.sif
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/txtsetup.sif?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/boot/bootdata/txtsetup.sif (original)
+++ trunk/reactos/boot/bootdata/txtsetup.sif Sun Nov 19 22:00:03 2006
@@ -22,7 +22,7 @@
 cdfs.sys      = 3
 cdrom.sys     = 3
 class2.sys    = 3
-kdcom.sys     = 3
+kdcom.dll     = 3
 disk.sys      = 3
 floppy.sys    = 3
 ;keyboard.sys  = 3

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/loader.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/loader.c?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/loader.c (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/loader.c Sun Nov 19 22:00:03 2006
@@ -132,14 +132,10 @@
 extern PAGE_DIRECTORY_X64 apic_pagetable_pae;
 extern PAGE_DIRECTORY_X64 kpcr_pagetable_pae;
 
-extern CHAR szHalName[1024];
-
-PIMAGE_BASE_RELOCATION
-NTAPI
-LdrProcessRelocationBlockLongLong(IN ULONG_PTR Address,
-                                  IN ULONG Count,
-                                  IN PUSHORT TypeOffset,
-                                  IN LONGLONG Delta);
+BOOLEAN
+NTAPI
+FrLdrLoadImage(IN PCHAR szFileName,
+               IN INT nPos);
 
 /* FUNCTIONS *****************************************************************/
 
@@ -733,9 +729,9 @@
 
 NTSTATUS
 NTAPI
-LdrPEGetOrLoadModule(PCHAR ModuleName,
-                     PCHAR ImportedName,
-                     PLOADER_MODULE* ImportedModule)
+LdrPEGetOrLoadModule(IN PCHAR ModuleName,
+                     IN PCHAR ImportedName,
+                     IN PLOADER_MODULE* ImportedModule)
 {
     NTSTATUS Status = STATUS_SUCCESS;
 
@@ -747,10 +743,11 @@
          * Later, FrLdrLoadDriver should be made to share the same
          * code, and we'll just call it instead.
          */
-        if (!_stricmp(ImportedName, "hal.dll"))
+        if (!_stricmp(ImportedName, "hal.dll") ||
+            !_stricmp(ImportedName, "kdcom.dll"))
         {
             /* Load the HAL */
-            FrLdrLoadHal(szHalName, 10);
+            FrLdrLoadImage(ImportedName, 10);
 
             /* Return the new module */
             *ImportedModule = LdrGetModuleObject(ImportedName);
@@ -809,8 +806,8 @@
 
 VOID
 NTAPI
-FrLdrMapImage(IN PIMAGE_NT_HEADERS NtHeader,
-              IN PVOID Base)
+FrLdrReMapImage(IN PIMAGE_NT_HEADERS NtHeader,
+                IN PVOID Base)
 {
     PIMAGE_SECTION_HEADER Section;
     ULONG SectionCount, SectionSize;
@@ -900,7 +897,7 @@
     FsReadFile(KernelImage, ImageSize, NULL, LoadBase);
 
     /* Map it */
-    FrLdrMapImage(NtHeader, LoadBase);
+    FrLdrReMapImage(NtHeader, LoadBase);
 
     /* Calculate Difference between Real Base and Compiled Base*/
     LdrRelocateImageWithBias(LoadBase,
@@ -920,7 +917,10 @@
     /* Increase the next Load Base */
     NextModuleBase = ROUND_UP(LoadBase + ImageSize, PAGE_SIZE);
 
-    /*  Perform import fixups  */
+    /* Load the HAL now (name will be changed internally if needed) */
+    FrLdrLoadImage("hal.dll", 10);
+
+    /*  Perform import fixups */
     LdrPEFixupImports(LoadBase, "ntoskrnl.exe");
 
     /* Return Success */
@@ -929,11 +929,13 @@
 
 BOOLEAN
 NTAPI
-FrLdrMapHal(FILE *HalImage)
+FrLdrMapImage(IN FILE *HalImage,
+              IN PCHAR Name)
 {
     PIMAGE_NT_HEADERS NtHeader;
     PVOID ImageBase, LoadBase;
     ULONG ImageSize;
+    ULONG ImageId = LoaderBlock.ModsCount;
 
     /* Set the virtual (image) and physical (load) addresses */
     LoadBase = (PVOID)NextModuleBase;
@@ -955,7 +957,7 @@
     FsReadFile(HalImage, ImageSize, NULL, LoadBase);
 
     /* Map it into virtual memory */
-    FrLdrMapImage(NtHeader, LoadBase);
+    FrLdrReMapImage(NtHeader, LoadBase);
 
     /* Calculate Difference between Real Base and Compiled Base*/
     LdrRelocateImageWithBias(LoadBase,
@@ -966,17 +968,18 @@
                              STATUS_UNSUCCESSFUL);
 
     /* Fill out Module Data Structure */
-    reactos_modules[1].ModStart = (ULONG_PTR)ImageBase;
-    reactos_modules[1].ModEnd = (ULONG_PTR)ImageBase + ImageSize;
-    strcpy(reactos_module_strings[1], "hal.dll");
-    reactos_modules[1].String = (ULONG_PTR)reactos_module_strings[1];
+    reactos_modules[ImageId].ModStart = (ULONG_PTR)ImageBase;
+    reactos_modules[ImageId].ModEnd = (ULONG_PTR)ImageBase + ImageSize;
+    strcpy(reactos_module_strings[ImageId], Name);
+    reactos_modules[ImageId].String = (ULONG_PTR)reactos_module_strings[ImageId];
     LoaderBlock.ModsCount++;
-
-    /*  Perform import fixups  */
-    LdrPEFixupImports(LoadBase, "hal.dll");
 
     /* Increase the next Load Base */
     NextModuleBase = ROUND_UP(NextModuleBase + ImageSize, PAGE_SIZE);
+
+    /*  Perform import fixups  */
+    //DbgPrint("Fixing up: %s loaded at: %p\n", Name, ImageBase);
+    LdrPEFixupImports(LoadBase, Name);
 
     /* Return Success */
     return TRUE;

Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c (original)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c Sun Nov 19 22:00:03 2006
@@ -33,7 +33,8 @@
 ARC_DISK_SIGNATURE      reactos_arc_disk_info[32]; // ARC Disk Information
 char                    reactos_arc_strings[32][256];
 unsigned long           reactos_disk_count = 0;
-	CHAR  szHalName[1024];
+CHAR szHalName[255];
+CHAR szBootPath[255];
 static CHAR szLoadingMsg[] = "Loading ReactOS...";
 
 static BOOLEAN
@@ -86,41 +87,56 @@
 
 BOOLEAN
 NTAPI
-FrLdrMapHal(FILE *KernelImage);
+FrLdrMapImage(
+    IN FILE *Image,
+    IN PCHAR ShortName
+);
 
 BOOLEAN
 NTAPI
-FrLdrLoadHal(PCHAR szFileName,
-             INT nPos)
+FrLdrLoadImage(IN PCHAR szFileName,
+               IN INT nPos)
 {
     PFILE FilePointer;
     PCHAR szShortName;
-    CHAR szBuffer[256];
-
-    /* Extract Kernel filename without path */
+    CHAR szBuffer[256], szFullPath[256];
+
+    /* Check if this the HAL being loaded */
+    if (!_stricmp(szFileName, "hal.dll"))
+    {
+        /* Use the boot.ini name instead */
+        szFileName = szHalName;
+    }
+
+    /* Extract filename without path */
     szShortName = strrchr(szFileName, '\\');
-    if (szShortName == NULL) {
-
+    if (!szShortName)
+    {
         /* No path, leave it alone */
         szShortName = szFileName;
 
-    } else {
-
+        /* Which means we need to build a path now */
+        strcpy(szBuffer, szFileName);
+        strcpy(szFullPath, szBootPath);
+        strcat(szFullPath, "SYSTEM32\\DRIVERS\\");
+        strcat(szFullPath, szBuffer);
+        szFileName = szFullPath;
+    }
+    else
+    {
         /* Skip the path */
         szShortName = szShortName + 1;
     }
 
-    /* Open the Kernel */
+    /* Open the image */
     FilePointer = FsOpenFile(szFileName);
-
-    /* Make sure it worked */
-    if (FilePointer == NULL) {
-
+    if (!FilePointer)
+    {
         /* Return failure on the short name */
         strcpy(szBuffer, szShortName);
         strcat(szBuffer, " not found.");
         UiMessageBox(szBuffer);
-        return(FALSE);
+        return FALSE;
     }
 
     /* Update the status bar with the current file */
@@ -129,11 +145,11 @@
     UiDrawStatusText(szBuffer);
 
     /* Do the actual loading */
-    FrLdrMapHal(FilePointer);
+    FrLdrMapImage(FilePointer, szShortName);
 
     /* Update Processbar and return success */
     UiDrawProgressBarCenter(nPos, 100, szLoadingMsg);
-    return(TRUE);
+    return TRUE;
 }
 
 static VOID
@@ -618,13 +634,12 @@
 LoadAndBootReactOS(PCSTR OperatingSystemName)
 {
 	PFILE FilePointer;
-	CHAR  name[1024];
-	CHAR  value[1024];
-	CHAR  SystemPath[1024];
-	CHAR  szKernelName[1024];
-	CHAR  szFileName[1024];
-	CHAR  szBootPath[256];
-	UINT   i;
+	CHAR name[255];
+	CHAR value[255];
+	CHAR SystemPath[255];
+	CHAR szKernelName[255];
+	CHAR szFileName[255];
+	UINT i;
 	CHAR  MsgBuffer[256];
 	ULONG SectionId;
 
@@ -657,10 +672,10 @@
 	LoaderBlock.PageDirectoryStart = (ULONG)&PageDirectoryStart;
 	LoaderBlock.PageDirectoryEnd = (ULONG)&PageDirectoryEnd;
 	LoaderBlock.BootDevice = 0xffffffff;
-	LoaderBlock.CommandLine = (unsigned long)reactos_kernel_cmdline;
+	LoaderBlock.CommandLine = reactos_kernel_cmdline;
 	LoaderBlock.ModsCount = 0;
-	LoaderBlock.ModsAddr = (unsigned long)reactos_modules;
-    LoaderBlock.DrivesAddr = (unsigned long)reactos_arc_disk_info;
+	LoaderBlock.ModsAddr = reactos_modules;
+    LoaderBlock.DrivesAddr = reactos_arc_disk_info;
 	LoaderBlock.MmapLength = (unsigned long)MachGetMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&reactos_memory_map, 32) * sizeof(memory_map_t);
 	if (LoaderBlock.MmapLength)
 	{

Modified: trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c (original)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c Sun Nov 19 22:00:03 2006
@@ -314,9 +314,9 @@
   LoaderBlock.PageDirectoryStart = (ULONG)&PageDirectoryStart;
   LoaderBlock.PageDirectoryEnd = (ULONG)&PageDirectoryEnd;
   LoaderBlock.BootDevice = 0xffffffff;
-  LoaderBlock.CommandLine = (unsigned long)reactos_kernel_cmdline;
+  LoaderBlock.CommandLine = reactos_kernel_cmdline;
   LoaderBlock.ModsCount = 0;
-  LoaderBlock.ModsAddr = (unsigned long)reactos_modules;
+  LoaderBlock.ModsAddr = reactos_modules;
   LoaderBlock.MmapLength = (unsigned long)MachGetMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&reactos_memory_map, 32) * sizeof(memory_map_t);
   if (LoaderBlock.MmapLength)
     {

Modified: trunk/reactos/drivers/base/kdcom/kdcom.def
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/kdcom/kdcom.def?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/drivers/base/kdcom/kdcom.def (original)
+++ trunk/reactos/drivers/base/kdcom/kdcom.def Sun Nov 19 22:00:03 2006
@@ -1,4 +1,4 @@
-LIBRARY kdcom.sys
+LIBRARY kdcom.dll
 EXPORTS
 
 KdComPortInUse=_KdComPortInUse

Modified: trunk/reactos/drivers/base/kdcom/kdcom.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/kdcom/kdcom.rbuild?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/drivers/base/kdcom/kdcom.rbuild (original)
+++ trunk/reactos/drivers/base/kdcom/kdcom.rbuild Sun Nov 19 22:00:03 2006
@@ -1,6 +1,6 @@
-<module name="kdcom" type="kernelmodedll" entrypoint="DriverEntry at 8" installbase="system32/drivers" installname="kdcom.sys">
+<module name="kdcom" type="kernelmodedll" entrypoint="DriverEntry at 8" installbase="system32/drivers" installname="kdcom.dll">
 	<importlibrary definition="kdcom.def"></importlibrary>
-    <bootstrap base="reactos" nameoncd="kdcom.sys" />
+    <bootstrap base="reactos" nameoncd="kdcom.dll" />
     <include base="kdcom">.</include>
         <define name="__USE_W32API" />
 	<library>ntoskrnl</library>

Modified: trunk/reactos/hal/hal/hal.def
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/hal/hal.def?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/hal/hal/hal.def (original)
+++ trunk/reactos/hal/hal/hal.def Sun Nov 19 22:00:03 2006
@@ -72,21 +72,6 @@
 IoReadPartitionTable at 16=HalpReadPartitionTable at 16
 IoSetPartitionInformation at 16=HalpSetPartitionInformation at 16
 IoWritePartitionTable at 20=HalpWritePartitionTable at 20
-KdComPortInUse=_KdComPortInUse
-; FIXME: DEPRECATED
-KdPortGetByte at 4
-KdPortGetByteEx at 8
-KdPortInitialize at 12
-KdPortInitializeEx at 12
-KdPortPollByte at 4
-KdPortPollByteEx at 8
-KdPortPutByte at 4
-KdPortPutByteEx at 8
-KdPortRestore at 0
-KdPortSave at 0
-KdPortDisableInterrupts at 0
-KdPortEnableInterrupts at 0
-; FIXME: END DEPRECATED BLOCK
 KeAcquireSpinLock at 8
 KeFlushWriteBuffer at 0
 KeGetCurrentIrql at 0

Modified: trunk/reactos/hal/halx86/generic/generic.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/generic.rbuild?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/hal/halx86/generic/generic.rbuild (original)
+++ trunk/reactos/hal/halx86/generic/generic.rbuild Sun Nov 19 22:00:03 2006
@@ -11,7 +11,6 @@
 	<file>drive.c</file>
 	<file>halinit.c</file>
 	<file>isa.c</file>
-	<file>kdbg.c</file>
 	<file>mca.c</file>
 	<file>misc.c</file>
 	<file>pci.c</file>

Removed: trunk/reactos/hal/halx86/generic/kdbg.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/kdbg.c?rev=24779&view=auto
==============================================================================
--- trunk/reactos/hal/halx86/generic/kdbg.c (original)
+++ trunk/reactos/hal/halx86/generic/kdbg.c (removed)
@@ -1,547 +1,0 @@
-/* $Id$
- *
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            ntoskrnl/hal/x86/kdbg.c
- * PURPOSE:         Serial i/o functions for the kernel debugger.
- * PROGRAMMER:      Emanuele Aliberti
- *                  Eric Kohl
- * UPDATE HISTORY:
- *                  Created 05/09/99
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-
-#define DEFAULT_BAUD_RATE    19200
-
-
-/* MACROS *******************************************************************/
-
-#define   SER_RBR(x)   ((x)+0)
-#define   SER_THR(x)   ((x)+0)
-#define   SER_DLL(x)   ((x)+0)
-#define   SER_IER(x)   ((x)+1)
-#define     SR_IER_ERDA   0x01
-#define     SR_IER_ETHRE  0x02
-#define     SR_IER_ERLSI  0x04
-#define     SR_IER_EMS    0x08
-#define     SR_IER_ALL    0x0F
-#define   SER_DLM(x)   ((x)+1)
-#define   SER_IIR(x)   ((x)+2)
-#define   SER_FCR(x)   ((x)+2)
-#define     SR_FCR_ENABLE_FIFO 0x01
-#define     SR_FCR_CLEAR_RCVR  0x02
-#define     SR_FCR_CLEAR_XMIT  0x04
-#define   SER_LCR(x)   ((x)+3)
-#define     SR_LCR_CS5 0x00
-#define     SR_LCR_CS6 0x01
-#define     SR_LCR_CS7 0x02
-#define     SR_LCR_CS8 0x03
-#define     SR_LCR_ST1 0x00
-#define     SR_LCR_ST2 0x04
-#define     SR_LCR_PNO 0x00
-#define     SR_LCR_POD 0x08
-#define     SR_LCR_PEV 0x18
-#define     SR_LCR_PMK 0x28
-#define     SR_LCR_PSP 0x38
-#define     SR_LCR_BRK 0x40
-#define     SR_LCR_DLAB 0x80
-#define   SER_MCR(x)   ((x)+4)
-#define     SR_MCR_DTR 0x01
-#define     SR_MCR_RTS 0x02
-#define     SR_MCR_OUT1 0x04
-#define     SR_MCR_OUT2 0x08
-#define     SR_MCR_LOOP 0x10
-#define   SER_LSR(x)   ((x)+5)
-#define     SR_LSR_DR  0x01
-#define     SR_LSR_TBE 0x20
-#define   SER_MSR(x)   ((x)+6)
-#define     SR_MSR_CTS 0x10
-#define     SR_MSR_DSR 0x20
-#define   SER_SCR(x)   ((x)+7)
-
-
-/* GLOBAL VARIABLES *********************************************************/
-
-ULONG KdComPortInUse = 0;
-
-
-/* STATIC VARIABLES *********************************************************/
-
-static ULONG ComPort = 0;
-static ULONG BaudRate = 0;
-static PUCHAR PortBase = (PUCHAR)0;
-
-/* The com port must only be initialized once! */
-static BOOLEAN PortInitialized = FALSE;
-
-
-/* STATIC FUNCTIONS *********************************************************/
-
-static BOOLEAN
-KdpDoesComPortExist (PUCHAR BaseAddress)
-{
-        BOOLEAN found;
-        UCHAR mcr;
-        UCHAR msr;
-
-        found = FALSE;
-
-        /* save Modem Control Register (MCR) */
-        mcr = READ_PORT_UCHAR (SER_MCR(BaseAddress));
-
-        /* enable loop mode (set Bit 4 of the MCR) */
-        WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
-
-        /* clear all modem output bits */
-        WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
-
-        /* read the Modem Status Register */
-        msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
-
-        /*
-         * the upper nibble of the MSR (modem output bits) must be
-         * equal to the lower nibble of the MCR (modem input bits)
-         */
-        if ((msr & 0xF0) == 0x00)
-        {
-                /* set all modem output bits */
-                WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x1F);
-
-                /* read the Modem Status Register */
-                msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
-
-                /*
-                 * the upper nibble of the MSR (modem output bits) must be
-                 * equal to the lower nibble of the MCR (modem input bits)
-                 */
-                if ((msr & 0xF0) == 0xF0)
-                {
-                        /*
-                         * setup a resonable state for the port:
-                         * enable fifo and clear recieve/transmit buffers
-                         */
-                        WRITE_PORT_UCHAR (SER_FCR(BaseAddress),
-                                (SR_FCR_ENABLE_FIFO | SR_FCR_CLEAR_RCVR | SR_FCR_CLEAR_XMIT));
-                        WRITE_PORT_UCHAR (SER_FCR(BaseAddress), 0);
-                        READ_PORT_UCHAR (SER_RBR(BaseAddress));
-                        WRITE_PORT_UCHAR (SER_IER(BaseAddress), 0);
-                        found = TRUE;
-                }
-        }
-
-        /* restore MCR */
-        WRITE_PORT_UCHAR (SER_MCR(BaseAddress), mcr);
-
-        return (found);
-}
-
-
-/* FUNCTIONS ****************************************************************/
-
-/* HAL.KdPortInitialize */
-BOOLEAN
-STDCALL
-KdPortInitialize (
-	PKD_PORT_INFORMATION	PortInformation,
-	ULONG	Unknown1,
-	ULONG	Unknown2
-	)
-{
-        ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
-        char buffer[80];
-        ULONG divisor;
-        UCHAR lcr;
-
-        if (PortInitialized == FALSE)
-        {
-                if (PortInformation->BaudRate != 0)
-                {
-                        BaudRate = PortInformation->BaudRate;
-                }
-                else
-                {
-                        BaudRate = DEFAULT_BAUD_RATE;
-                }
-
-                if (PortInformation->ComPort == 0)
-                {
-                        if (KdpDoesComPortExist ((PUCHAR)BaseArray[2]))
-                        {
-                                PortBase = (PUCHAR)BaseArray[2];
-                                ComPort = 2;
-                                PortInformation->BaseAddress = (ULONG)PortBase;
-                                PortInformation->ComPort = ComPort;
-#ifndef NDEBUG
-                                sprintf (buffer,
-                                         "\nSerial port COM%ld found at 0x%lx\n",
-                                         ComPort,
-                                         (ULONG)PortBase);
-                                HalDisplayString (buffer);
-#endif /* NDEBUG */
-                        }
-                        else if (KdpDoesComPortExist ((PUCHAR)BaseArray[1]))
-                        {
-                                PortBase = (PUCHAR)BaseArray[1];
-                                ComPort = 1;
-                                PortInformation->BaseAddress = (ULONG)PortBase;
-                                PortInformation->ComPort = ComPort;
-#ifndef NDEBUG
-                                sprintf (buffer,
-                                         "\nSerial port COM%ld found at 0x%lx\n",
-                                         ComPort,
-                                         (ULONG)PortBase);
-                                HalDisplayString (buffer);
-#endif /* NDEBUG */
-                        }
-                        else
-                        {
-                                sprintf (buffer,
-                                         "\nKernel Debugger: No COM port found!!!\n\n");
-                                HalDisplayString (buffer);
-                                return FALSE;
-                        }
-                }
-                else
-                {
-                        if (KdpDoesComPortExist ((PUCHAR)BaseArray[PortInformation->ComPort]))
-                        {
-                                PortBase = (PUCHAR)BaseArray[PortInformation->ComPort];
-                                ComPort = PortInformation->ComPort;
-                                PortInformation->BaseAddress = (ULONG)PortBase;
-#ifndef NDEBUG
-                                sprintf (buffer,
-                                         "\nSerial port COM%ld found at 0x%lx\n",
-                                         ComPort,
-                                         (ULONG)PortBase);
-                                HalDisplayString (buffer);
-#endif /* NDEBUG */
-                        }
-                        else
-                        {
-                                sprintf (buffer,
-                                         "\nKernel Debugger: No serial port found!!!\n\n");
-                                HalDisplayString (buffer);
-                                return FALSE;
-                        }
-                }
-
-                PortInitialized = TRUE;
-        }
-
-        /*
-         * set baud rate and data format (8N1)
-         */
-
-        /*  turn on DTR and RTS  */
-        WRITE_PORT_UCHAR (SER_MCR(PortBase), SR_MCR_DTR | SR_MCR_RTS);
-
-        /* set DLAB */
-        lcr = READ_PORT_UCHAR (SER_LCR(PortBase)) | SR_LCR_DLAB;
-        WRITE_PORT_UCHAR (SER_LCR(PortBase), lcr);
-
-        /* set baud rate */
-        divisor = 115200 / BaudRate;
-        WRITE_PORT_UCHAR (SER_DLL(PortBase), (UCHAR)(divisor & 0xff));
-        WRITE_PORT_UCHAR (SER_DLM(PortBase), (UCHAR)((divisor >> 8) & 0xff));
-
-        /* reset DLAB and set 8N1 format */
-        WRITE_PORT_UCHAR (SER_LCR(PortBase),
-                          SR_LCR_CS8 | SR_LCR_ST1 | SR_LCR_PNO);
-
-        /* read junk out of the RBR */
-        lcr = READ_PORT_UCHAR (SER_RBR(PortBase));
-
-        /*
-         * set global info
-         */
-        KdComPortInUse = (ULONG)PortBase;
-
-        /*
-         * print message to blue screen
-         */
-        sprintf (buffer,
-                 "\nKernel Debugger: COM%ld (Port 0x%lx) BaudRate %ld\n\n",
-                 ComPort,
-                 (ULONG)PortBase,
-                 BaudRate);
-
-        HalDisplayString (buffer);
-
-        return TRUE;
-}
-
-
-/* HAL.KdPortInitializeEx */
-BOOLEAN
-STDCALL
-KdPortInitializeEx (
-	PKD_PORT_INFORMATION	PortInformation,
-	ULONG	Unknown1,
-	ULONG	Unknown2
-	)
-{
-        ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
-		PUCHAR ComPortBase;
-        char buffer[80];
-        ULONG divisor;
-        UCHAR lcr;
-
-		if (PortInformation->BaudRate == 0)
-		{
-				PortInformation->BaudRate = DEFAULT_BAUD_RATE;
-		}
-
-		if (PortInformation->ComPort == 0)
-		{
-				return FALSE;
-		}
-		else
-		{
-				if (KdpDoesComPortExist ((PUCHAR)BaseArray[PortInformation->ComPort]))
-				{
-						ComPortBase = (PUCHAR)BaseArray[PortInformation->ComPort];
-						PortInformation->BaseAddress = (ULONG)ComPortBase;
-#ifndef NDEBUG
-						sprintf (buffer,
-								 "\nSerial port COM%ld found at 0x%lx\n",
-								 PortInformation->ComPort,
-								 (ULONG)ComPortBase];
-						HalDisplayString (buffer);
-#endif /* NDEBUG */
-				}
-				else
-				{
-						sprintf (buffer,
-								 "\nKernel Debugger: Serial port not found!!!\n\n");
-						HalDisplayString (buffer);
-						return FALSE;
-				}
-		}
-
-        /*
-         * set baud rate and data format (8N1)
-         */
-
-        /*  turn on DTR and RTS  */
-        WRITE_PORT_UCHAR (SER_MCR(ComPortBase), SR_MCR_DTR | SR_MCR_RTS);
-
-        /* set DLAB */
-        lcr = READ_PORT_UCHAR (SER_LCR(ComPortBase)) | SR_LCR_DLAB;
-        WRITE_PORT_UCHAR (SER_LCR(ComPortBase), lcr);
-
-        /* set baud rate */
-        divisor = 115200 / PortInformation->BaudRate;
-        WRITE_PORT_UCHAR (SER_DLL(ComPortBase), (UCHAR)(divisor & 0xff));
-        WRITE_PORT_UCHAR (SER_DLM(ComPortBase), (UCHAR)((divisor >> 8) & 0xff));
-
-        /* reset DLAB and set 8N1 format */
-        WRITE_PORT_UCHAR (SER_LCR(ComPortBase),
-                          SR_LCR_CS8 | SR_LCR_ST1 | SR_LCR_PNO);
-
-        /* read junk out of the RBR */
-        lcr = READ_PORT_UCHAR (SER_RBR(ComPortBase));
-
-#ifndef NDEBUG
-
-        /*
-         * print message to blue screen
-         */
-        sprintf (buffer,
-                 "\nKernel Debugger: COM%ld (Port 0x%lx) BaudRate %ld\n\n",
-                 PortInformation->ComPort,
-                 (ULONG)ComPortBase,
-                 PortInformation->BaudRate);
-
-        HalDisplayString (buffer);
-
-#endif /* NDEBUG */
-
-        return TRUE;
-}
-
-
-/* HAL.KdPortGetByte */
-BOOLEAN
-STDCALL
-KdPortGetByte (
-	PUCHAR	ByteRecieved
-	)
-{
-	if (PortInitialized == FALSE)
-		return FALSE;
-
-	if ((READ_PORT_UCHAR (SER_LSR(PortBase)) & SR_LSR_DR))
-	{
-		*ByteRecieved = READ_PORT_UCHAR (SER_RBR(PortBase));
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-
-/* HAL.KdPortGetByteEx */
-BOOLEAN
-STDCALL
-KdPortGetByteEx (
-	PKD_PORT_INFORMATION	PortInformation,
-	PUCHAR	ByteRecieved
-	)
-{
-	PUCHAR ComPortBase = (PUCHAR)PortInformation->BaseAddress;
-
-	if ((READ_PORT_UCHAR (SER_LSR(ComPortBase)) & SR_LSR_DR))
-	{
-		*ByteRecieved = READ_PORT_UCHAR (SER_RBR(ComPortBase));
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-
-/* HAL.KdPortPollByte */
-BOOLEAN
-STDCALL
-KdPortPollByte (
-	PUCHAR	ByteRecieved
-	)
-{
-	if (PortInitialized == FALSE)
-		return FALSE;
-
-	while ((READ_PORT_UCHAR (SER_LSR(PortBase)) & SR_LSR_DR) == 0)
-		;
-
-	*ByteRecieved = READ_PORT_UCHAR (SER_RBR(PortBase));
-
-	return TRUE;
-}
-
-
-/* HAL.KdPortPollByteEx */
-BOOLEAN
-STDCALL
-KdPortPollByteEx (
-	PKD_PORT_INFORMATION	PortInformation,
-	PUCHAR	ByteRecieved
-	)
-{
-	PUCHAR ComPortBase = (PUCHAR)PortInformation->BaseAddress;
-
-	while ((READ_PORT_UCHAR (SER_LSR(ComPortBase)) & SR_LSR_DR) == 0)
-		;
-
-	*ByteRecieved = READ_PORT_UCHAR (SER_RBR(ComPortBase));
-
-	return TRUE;
-}
-
-
-
-
-/* HAL.KdPortPutByte */
-VOID
-STDCALL
-KdPortPutByte (
-	UCHAR ByteToSend
-	)
-{
-	if (PortInitialized == FALSE)
-		return;
-
-	while ((READ_PORT_UCHAR (SER_LSR(PortBase)) & SR_LSR_TBE) == 0)
-		;
-
-	WRITE_PORT_UCHAR (SER_THR(PortBase), ByteToSend);
-}
-
-/* HAL.KdPortPutByteEx */
-VOID
-STDCALL
-KdPortPutByteEx (
-	PKD_PORT_INFORMATION	PortInformation,
-	UCHAR ByteToSend
-	)
-{
-	PUCHAR ComPortBase = (PUCHAR)PortInformation->BaseAddress;
-
-	while ((READ_PORT_UCHAR (SER_LSR(ComPortBase)) & SR_LSR_TBE) == 0)
-		;
-
-	WRITE_PORT_UCHAR (SER_THR(ComPortBase), ByteToSend);
-}
-
-
-/* HAL.KdPortRestore */
-VOID
-STDCALL
-KdPortRestore (
-	VOID
-	)
-{
-}
-
-
-/* HAL.KdPortSave */
-VOID
-STDCALL
-KdPortSave (
-	VOID
-	)
-{
-}
-
-
-/* HAL.KdPortDisableInterrupts */
-BOOLEAN
-STDCALL
-KdPortDisableInterrupts()
-{
-  UCHAR ch;
-
-	if (PortInitialized == FALSE)
-		return FALSE;
-
-	ch = READ_PORT_UCHAR (SER_MCR (PortBase));
-  ch &= (~(SR_MCR_OUT1 | SR_MCR_OUT2));
-	WRITE_PORT_UCHAR (SER_MCR (PortBase), ch);
-
-	ch = READ_PORT_UCHAR (SER_IER (PortBase));
-  ch &= (~SR_IER_ALL);
-	WRITE_PORT_UCHAR (SER_IER (PortBase), ch);
-
-	return TRUE;
-}
-
-
-/* HAL.KdPortEnableInterrupts */
-BOOLEAN
-STDCALL
-KdPortEnableInterrupts()
-{
-  UCHAR ch;
-
-	if (PortInitialized == FALSE)
-		return FALSE;
-
-	ch = READ_PORT_UCHAR (SER_IER (PortBase));
-  ch &= (~SR_IER_ALL);
-  ch |= SR_IER_ERDA;
-	WRITE_PORT_UCHAR (SER_IER (PortBase), ch);
-
-	ch = READ_PORT_UCHAR (SER_MCR (PortBase));
-  ch &= (~SR_MCR_LOOP);
-  ch |= (SR_MCR_OUT1 | SR_MCR_OUT2);
-	WRITE_PORT_UCHAR (SER_MCR (PortBase), ch);
-
-	return TRUE;
-}
-
-/* EOF */

Modified: trunk/reactos/ntoskrnl/ntoskrnl.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.rbuild?rev=24780&r1=24779&r2=24780&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.rbuild (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.rbuild Sun Nov 19 22:00:03 2006
@@ -22,7 +22,7 @@
     <library>rtl</library>
     <library>rossym</library>
     <library>string</library>
-    <!-- <library>kdcom</library> -->
+    <library>kdcom</library>
     <library>wdmguid</library>
     <directory name="include">
         <pch>ntoskrnl.h</pch>




More information about the Ros-diffs mailing list