- get mpu401, parallel and ramdrv to work on msvc.
[reactos.git] / reactos / drivers / dd / parallel / parallel.c
index 1b8b32a..41f5af3 100644 (file)
@@ -1,40 +1,43 @@
-/*
+/* $Id$
+ *
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
  * FILE:             services/parallel/parallel.c
  * PURPOSE:          Parallel port driver
  * PROGRAMMER:       David Welch (welch@mcmail.com)
- * UPDATE HISTORY: 
+ * UPDATE HISTORY:
  *              ??/??/??: Created
  *              18/06/98: Made more NT like
  */
 
 /* FUNCTIONS **************************************************************/
 
-#include <ddk/ntddk.h>
-#include <internal/halio.h>
+#include <ntddk.h>
 
 #include "parallel.h"
 
 #define NDEBUG
-#include <internal/debug.h>
+#include <debug.h>
 
 
 #define LP_B (0x378)
-#define LP_S (inb_p(LP_B+1))
+#define LP_S (READ_PORT_UCHAR((PUCHAR)(LP_B+1)))
 #define LP_C (LP_B+2)
 
+NTSTATUS STDCALL
+DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
+
 static void Parallel_Reset(void)
 /*
  * FUNCTION: Resets the device attached to the parallel port
  */
-     {
-       int i;
-       
-        outb_p(LP_C,0);
-       for (i=0;i<LP_DELAY;i++);
-        outb_p(LP_C,LP_PSELECP | LP_PINITP);
-     }
+{
+   int i;
+
+   WRITE_PORT_UCHAR((PUCHAR)LP_C,0);
+   for (i=0;i<LP_DELAY;i++);
+   WRITE_PORT_UCHAR((PUCHAR)LP_C,LP_PSELECP | LP_PINITP);
+}
 
 static void Parallel_putchar(unsigned char ch)
 /*
@@ -42,8 +45,8 @@ static void Parallel_putchar(unsigned char ch)
  * ARGUMENTS:
  *          ch = character to write
  */
-     {
-       
+{
+
        int count=0;
        int status;
        int wait=0;
@@ -54,21 +57,22 @@ static void Parallel_putchar(unsigned char ch)
             count++;
          }
        while ( count < 500000 && !(status & LP_PBUSY) );
-         
-        if (count==500000)
+
+       if (count==500000)
          {
-             DPRINT("printer_putchar(): timed out\n");
+            DPRINT("printer_putchar(): timed out\n");
             return;
          }
-       
-        outb_p(LP_B,ch);
+
+       WRITE_PORT_UCHAR((PUCHAR)LP_B,ch);
        while (wait != 10000) { wait++; }
-        outb_p(LP_C, (LP_PSELECP | LP_PINITP | LP_PSTROBE ));
+       WRITE_PORT_UCHAR((PUCHAR)LP_C, (LP_PSELECP | LP_PINITP | LP_PSTROBE ));
        while (wait) { wait--; }
-        outb_p(LP_C, LP_PSELECP | LP_PINITP);
-     }
+       WRITE_PORT_UCHAR((PUCHAR)LP_C, LP_PSELECP | LP_PINITP);
+}
 
-NTSTATUS Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+static NTSTATUS STDCALL
+Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 /*
  * FUNCTION: Handles user mode requests
  * ARGUMENTS:
@@ -79,38 +83,38 @@ NTSTATUS Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
    PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp);
    NTSTATUS status;
-   int i;
-   
+   ULONG i;
+
    switch (Stack->MajorFunction)
      {
       case IRP_MJ_CREATE:
-        DPRINT("(Parallel Port Driver) Creating\n");
+       DPRINT("(Parallel Port Driver) Creating\n");
        Parallel_Reset();
        status = STATUS_SUCCESS;
        break;
-       
+
       case IRP_MJ_CLOSE:
        status = STATUS_SUCCESS;
        break;
-       
+
       case IRP_MJ_WRITE:
-        DPRINT("(Parallel Port Driver) Writing %d bytes\n",
-               Stack->Parameters.Write.Length);
+       DPRINT("(Parallel Port Driver) Writing %d bytes\n",
+              Stack->Parameters.Write.Length);
        for (i=0;i<Stack->Parameters.Write.Length;i++)
          {
-                Parallel_putchar(((char *)Irp->UserBuffer)[i]);             
+            Parallel_putchar(((char *)Irp->UserBuffer)[i]);
          }
        status = STATUS_SUCCESS;
        break;
-       
+
       default:
-        status = STATUS_NOT_IMPLEMENTED;
+       status = STATUS_NOT_IMPLEMENTED;
        break;
      }
-   
+
    Irp->IoStatus.Status = status;
    Irp->IoStatus.Information = 0;
-   
+
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return(status);
 }
@@ -126,33 +130,30 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
  */
 {
    PDEVICE_OBJECT DeviceObject;
-   NTSTATUS ret;
-   ANSI_STRING ansi_device_name;
-   UNICODE_STRING device_name;
-   
-   DbgPrint("Parallel Port Driver 0.0.1\n");
-          
-   RtlInitAnsiString (&ansi_device_name, "\\Device\\Parallel");
-   RtlAnsiStringToUnicodeString (&device_name, &ansi_device_name, TRUE);
-   ret = IoCreateDevice(DriverObject,
-                        0,
-                        &device_name,
-                        FILE_DEVICE_PARALLEL_PORT,
-                        0,
-                        FALSE,
-                        &DeviceObject);
-   if (ret!=STATUS_SUCCESS)
+   UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Parallel");
+   NTSTATUS Status;
+
+   DPRINT("Parallel Port Driver 0.0.1\n");
+
+   Status = IoCreateDevice(DriverObject,
+                          0,
+                          &DeviceName,
+                          FILE_DEVICE_PARALLEL_PORT,
+                          0,
+                          FALSE,
+                          &DeviceObject);
+   if (!NT_SUCCESS(Status))
      {
-       return(ret);
+       return(Status);
      }
 
    DeviceObject->Flags=0;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch;
    DriverObject->MajorFunction[IRP_MJ_CREATE] = Dispatch;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = Dispatch;
-   DriverObject->MajorFunction[IRP_MJ_WRITE] = Dispatch;
    DriverObject->DriverUnload = NULL;
-   
+
    return(STATUS_SUCCESS);
 }
 
+/* EOF */