-/*
+/* $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)
/*
* ARGUMENTS:
* ch = character to write
*/
- {
-
+{
+
int count=0;
int status;
int wait=0;
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:
{
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);
}
*/
{
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 */