/* $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: * ??/??/??: Created * 18/06/98: Made more NT like */ /* FUNCTIONS **************************************************************/ #include #include "parallel.h" #define NDEBUG #include #define LP_B (0x378) #define LP_S (READ_PORT_UCHAR((PUCHAR)(LP_B+1))) #define LP_C (LP_B+2) static void Parallel_Reset(void) /* * FUNCTION: Resets the device attached to the parallel port */ { int i; WRITE_PORT_UCHAR((PUCHAR)LP_C,0); for (i=0;iMajorFunction) { case IRP_MJ_CREATE: 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); for (i=0;iParameters.Write.Length;i++) { Parallel_putchar(((char *)Irp->UserBuffer)[i]); } status = STATUS_SUCCESS; break; default: status = STATUS_NOT_IMPLEMENTED; break; } Irp->IoStatus.Status = status; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return(status); } NTSTATUS STDCALL DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) /* * FUNCTION: Called by the system to initalize the driver * ARGUMENTS: * DriverObject = object describing this driver * RegistryPath = path to our configuration entries * RETURNS: Success or failure */ { PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName = UNICODE_STRING_INITIALIZER(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(Status); } DeviceObject->Flags=0; DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch; DriverObject->MajorFunction[IRP_MJ_CREATE] = Dispatch; DriverObject->MajorFunction[IRP_MJ_WRITE] = Dispatch; DriverObject->DriverUnload = NULL; return(STATUS_SUCCESS); } /* EOF */