changes to support debugging of ide driver
authorRex Jolliff <rex@lvcablemodem.com>
Sun, 13 Sep 1998 02:37:20 +0000 (02:37 +0000)
committerRex Jolliff <rex@lvcablemodem.com>
Sun, 13 Sep 1998 02:37:20 +0000 (02:37 +0000)
svn path=/trunk/; revision=36

reactos/ntoskrnl/tst/test.c

index 1f950d2..5ac3209 100644 (file)
@@ -25,14 +25,12 @@ static KEVENT event = {};
 //static KEVENT event2;
 
 /* FUNCTIONS ****************************************************************/
-
+/*
 NTSTATUS TstPlaySound(void)
 {
    HANDLE hfile;
    
-   /*
-    * Open the parallel port
-    */
+//    * Open the parallel port
    printk("Opening Waveout\n");
 //   hfile = CreateFile("\\Device\\WaveOut",0,0,0,0,0,0);
    if (hfile == NULL)
@@ -107,7 +105,7 @@ void TstGeneralWrite()
               0,
               0);
  }
-
+/*
 void TstParallelPortWrite()
 {
    HANDLE hfile;
@@ -119,7 +117,7 @@ void TstParallelPortWrite()
        DbgPrint("Failed to open parallel port\n");
      }
  //  WriteFile(hfile,"hello world",strlen("hello world"),NULL,NULL);
- }
+}
 
 void TstKeyboardRead()
 {
@@ -154,13 +152,228 @@ void TstKeyboardRead()
 //     DbgPrint("%c",key[1].AsciiChar);
      }
  }
+*/
+/* IDE TEST STUFF ***********************************************************/
+
+typedef struct _BOOT_PARAMETERS {
+  WORD BytesBerSector;
+  BYTE SectorsPerAllocationUnit;
+  WORD ReservedSectorCount;
+  BYTE FATCount;
+  WORD RootDirEntryCount;
+  WORD TotalSectorCount;
+  BYTE MediaDescriptor;
+  WORD SectorsPerFAT;
+  WORD SectorsPerTrack;
+  WORD HeadCount;
+  DWORD HiddenSectorCount;
+  DWORD TotalSectorsInLogicalVolume;
+} __attribute__ ((packed)) BOOT_PARAMETERS, __attribute__ ((packed)) *PBOOT_PARAMETERS;
+
+typedef struct _BOOT_BLOCK {
+  char JumpInstruction[3];
+  char OEMName[8];
+  BOOT_PARAMETERS BootParameters;
+  BYTE DriveNumber;
+  BYTE Reserved1;
+  BYTE ExtBootSignatureRecord;
+  DWORD BinaryVolumeID;
+  char VolumeLabel[11];
+  char Reserved2[8]; 
+  char Bootstrap[512 - 61];
+} __attribute__ ((packed)) BOOT_BLOCK, __attribute__ ((packed)) *PBOOT_BLOCK;
+
+typedef struct _ROOT_DIR_ENTRY {
+  char Filename[8];
+  char Extension[3];
+  char FileAttribute;
+  char Reserved1[10];
+  WORD ModifiedTime;
+  WORD ModifiedDate;
+  WORD StartingCluster;
+  DWORD FileSize;
+} __attribute__ ((packed)) ROOT_DIR_ENTRY;
+
+#define ENTRIES_PER_BLOCK (512 / sizeof(ROOT_DIR_ENTRY))
+
+void TstIDERead(void)
+{
+  BOOLEAN TestFailed;
+  int Entry, i;
+  HANDLE FileHandle;
+  NTSTATUS Status;
+  LARGE_INTEGER BlockOffset;
+  ANSI_STRING AnsiDeviceName;
+  UNICODE_STRING UnicodeDeviceName;
+  OBJECT_ATTRIBUTES ObjectAttributes;
+  char SectorBuffer[512];
+  PBOOT_BLOCK BootBlock;
+  ROOT_DIR_ENTRY DirectoryBlock[ENTRIES_PER_BLOCK];
 
+  DbgPrint("IDE Read Test\n");
+  TestFailed = FALSE;
 
+    /*  open the first partition  */
+  DbgPrint("Opening Partition1\n");
+  RtlInitAnsiString(&AnsiDeviceName, "\\Device\\HardDrive0\\Partition0");
+  RtlAnsiStringToUnicodeString(&UnicodeDeviceName, &AnsiDeviceName, TRUE);
+  InitializeObjectAttributes(&ObjectAttributes,
+                             &UnicodeDeviceName, 
+                             0,
+                             NULL,
+                             NULL);
+  Status = ZwOpenFile(&FileHandle, 0, &ObjectAttributes, NULL, 0, 0);
+  if (!NT_SUCCESS(Status))
+    {
+      DbgPrint("Failed to open partition1\n");
+      TestFailed = TRUE;
+    }
+
+    /*  Read the boot block  */
+  if (!TestFailed)
+    {
+      DbgPrint("Reading boot block from Partition1\n");
+      RtlZeroMemory(SectorBuffer, sizeof(SectorBuffer));
+DbgPrint("addr %x\n", SectorBuffer);
+      Status = ZwReadFile(FileHandle,
+                          NULL,
+                          NULL,
+                          NULL,
+                          NULL,
+                          SectorBuffer,
+                          sizeof(SectorBuffer),
+                          0,
+                          0);
+      if (Status != STATUS_SUCCESS /* !NT_SUCCESS(Status) */)
+        {
+          DbgPrint("Failed to read book block from partition1 status:%x\n", Status);
+          TestFailed = TRUE;
+        }
+    }  
+
+    /* %%% Check for valid boot block signature  */
+
+    /*  Spew info about boot block  */
+  if (!TestFailed)
+    {
+
+      for (i = 0; i < 64; i++)
+        {
+          if (!(i % 16))
+            {
+              DbgPrint("\n%04d: ", i);
+            }
+          DbgPrint("%02x ", (unsigned char)SectorBuffer[i]);
+        }
+      DbgPrint("\n");
+
+      BootBlock = (PBOOT_BLOCK) SectorBuffer;
+      DbgPrint("boot block on Partition1:\n");
+      DbgPrint("  OEM Name: %.8s  Bytes/Sector:%d Sectors/Cluster:%d\n",
+               BootBlock->OEMName,
+               BootBlock->BootParameters.BytesBerSector,
+               BootBlock->BootParameters.SectorsPerAllocationUnit);
+      DbgPrint("  ReservedSectors:%d FATs:%d RootDirEntries:%d\n",
+               BootBlock->BootParameters.ReservedSectorCount,
+               BootBlock->BootParameters.FATCount,
+               BootBlock->BootParameters.RootDirEntryCount);
+      DbgPrint("  TotalSectors:%d MediaDescriptor:%d Sectors/FAT:%d\n",
+               BootBlock->BootParameters.TotalSectorCount,
+               BootBlock->BootParameters.MediaDescriptor,
+               BootBlock->BootParameters.SectorsPerFAT);
+      DbgPrint("  Sectors/Track:%d Heads:%d HiddenSectors:%d\n",
+               BootBlock->BootParameters.SectorsPerTrack,
+               BootBlock->BootParameters.HeadCount,
+               BootBlock->BootParameters.HiddenSectorCount);
+      DbgPrint("  VolumeLabel:%.11s\n", BootBlock->VolumeLabel);
+    }
+for(;;);
+
+    /*  Read the first root directory block */
+  if (!TestFailed)
+    {
+      DbgPrint("Reading rootdir block from Partition1\n");
+      BlockOffset.HighPart = 0;
+      BlockOffset.LowPart = BootBlock->BootParameters.ReservedSectorCount * 512 +
+                            BootBlock->BootParameters.FATCount * 
+                            BootBlock->BootParameters.SectorsPerFAT * 512;
+      Status = ZwReadFile(FileHandle,
+                          NULL,
+                          NULL,
+                          NULL,
+                          NULL,
+                          DirectoryBlock,
+                          sizeof(DirectoryBlock),
+                          &BlockOffset,
+                          0);
+      if (Status != STATUS_SUCCESS /* !NT_SUCCESS(Status) */)
+        {
+          DbgPrint("Failed to read root directory block from partition1\n");
+          TestFailed = TRUE;
+        }
+    }  
+
+    /*  Print the contents  */
+  if (!TestFailed)
+    {
+      for (Entry = 0; Entry < ENTRIES_PER_BLOCK; Entry++)
+        {
+          switch (DirectoryBlock[Entry].Filename[0])
+            {
+            case 0x00:
+              DbgPrint("End of Directory.\n");
+              Entry = ENTRIES_PER_BLOCK;
+              break;
+
+            case 0x05:
+              DbgPrint("  FILE: %c%.7s.%.3s ATTR:%x Time:%04x Date:%04x offset:%d size:%d\n",
+                       0xe5,
+                       &DirectoryBlock[Entry].Filename[1],
+                       DirectoryBlock[Entry].Extension,
+                       DirectoryBlock[Entry].FileAttribute,
+                       DirectoryBlock[Entry].ModifiedTime,
+                       DirectoryBlock[Entry].ModifiedDate,
+                       DirectoryBlock[Entry].StartingCluster,
+                       DirectoryBlock[Entry].FileSize);
+              break;
+
+            case 0x2e:
+              DbgPrint("  ALIAS: %.8s ATTR:%x Time:%04x Date:%04x offset:%d size:%d\n",
+                       &DirectoryBlock[Entry].Filename[1],
+                       DirectoryBlock[Entry].FileAttribute,
+                       DirectoryBlock[Entry].ModifiedTime,
+                       DirectoryBlock[Entry].ModifiedDate,
+                       DirectoryBlock[Entry].StartingCluster,
+                       DirectoryBlock[Entry].FileSize);
+              break;
+
+            case 0xe5:
+              break;
+
+            default:
+              DbgPrint("  FILE: %.8s.%.3s ATTR:%x Time:%04x Date:%04x offset:%d size:%d\n",
+                       &DirectoryBlock[Entry].Filename[1],
+                       DirectoryBlock[Entry].Extension,
+                       DirectoryBlock[Entry].FileAttribute,
+                       DirectoryBlock[Entry].ModifiedTime,
+                       DirectoryBlock[Entry].ModifiedDate,
+                       DirectoryBlock[Entry].StartingCluster,
+                       DirectoryBlock[Entry].FileSize);
+              break;
+            }
+        }
+    }
+  if (FileHandle != NULL)
+    {
+      ZwClose(FileHandle);
+    }
+}
 
 void TstBegin()
 {
 //   TstGeneralWrite();
 //   TstThreadSupport();
-   TstKeyboardRead();
+//   TstKeyboardRead();
+   TstIDERead();
 }