ReactOS 0.4.15-dev-7998-gdb93cb1
parallel.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/parallel/parallel.c
5 * PURPOSE: Parallel port driver
6 * PROGRAMMER: David Welch (welch@mcmail.com)
7 * UPDATE HISTORY:
8 * ??/??/??: Created
9 * 18/06/98: Made more NT like
10 */
11
12/* FUNCTIONS **************************************************************/
13
14#include <wdm.h>
15
16#include "parallel.h"
17
18#define NDEBUG
19#include <debug.h>
20
21
22#define LP_B (0x378)
23#define LP_S (READ_PORT_UCHAR((PUCHAR)(LP_B+1)))
24#define LP_C (LP_B+2)
25
28
29static void Parallel_Reset(void)
30/*
31 * FUNCTION: Resets the device attached to the parallel port
32 */
33{
34 int i;
35
37 for (i=0;i<LP_DELAY;i++);
39}
40
41static void Parallel_putchar(unsigned char ch)
42/*
43 * FUNCTION: Writes a character to the parallel port
44 * ARGUMENTS:
45 * ch = character to write
46 */
47{
48
49 int count=0;
50 int status;
51 int wait=0;
52
53 do
54 {
56 count++;
57 }
58 while ( count < 500000 && !(status & LP_PBUSY) );
59
60 if (count==500000)
61 {
62 DPRINT("printer_putchar(): timed out\n");
63 return;
64 }
65
67 while (wait != 10000) { wait++; }
69 while (wait) { wait--; }
71}
72
74static NTSTATUS NTAPI
76/*
77 * FUNCTION: Handles user mode requests
78 * ARGUMENTS:
79 * DeviceObject = Device for request
80 * Irp = I/O request packet describing request
81 * RETURNS: Success or failure
82 */
83{
86 ULONG i;
87
88 switch (Stack->MajorFunction)
89 {
90 case IRP_MJ_CREATE:
91 DPRINT("(Parallel Port Driver) Creating\n");
94 break;
95
96 case IRP_MJ_CLOSE:
98 break;
99
100 case IRP_MJ_WRITE:
101 DPRINT("(Parallel Port Driver) Writing %d bytes\n",
102 Stack->Parameters.Write.Length);
103 for (i=0;i<Stack->Parameters.Write.Length;i++)
104 {
105 Parallel_putchar(((char *)Irp->UserBuffer)[i]);
106 }
108 break;
109
110 default:
112 break;
113 }
114
115 Irp->IoStatus.Status = status;
116 Irp->IoStatus.Information = 0;
117
119 return(status);
120}
121
124/*
125 * FUNCTION: Called by the system to initialize the driver
126 * ARGUMENTS:
127 * DriverObject = object describing this driver
128 * RegistryPath = path to our configuration entries
129 * RETURNS: Success or failure
130 */
131{
133 UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Parallel");
135
136 DPRINT("Parallel Port Driver 0.0.1\n");
137
139 0,
140 &DeviceName,
142 0,
143 FALSE,
144 &DeviceObject);
145 if (!NT_SUCCESS(Status))
146 {
147 return(Status);
148 }
149
150 DeviceObject->Flags=0;
151 DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch;
152 DriverObject->MajorFunction[IRP_MJ_CREATE] = Dispatch;
153 DriverObject->MajorFunction[IRP_MJ_WRITE] = Dispatch;
154 DriverObject->DriverUnload = NULL;
155
156 return(STATUS_SUCCESS);
157}
158
159/* EOF */
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
LONG NTSTATUS
Definition: precomp.h:26
_In_ PIRP Irp
Definition: csq.h:116
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
DRIVER_INITIALIZE DriverEntry
Definition: condrv.c:21
static void Parallel_Reset(void)
Definition: parallel.c:29
#define LP_B
Definition: parallel.c:22
#define LP_C
Definition: parallel.c:24
static DRIVER_DISPATCH Dispatch
Definition: parallel.c:73
#define LP_S
Definition: parallel.c:23
static void Parallel_putchar(unsigned char ch)
Definition: parallel.c:41
#define LP_PBUSY
Definition: parallel.h:101
#define LP_PINITP
Definition: parallel.h:114
#define LP_PSTROBE
Definition: parallel.h:116
#define LP_DELAY
Definition: parallel.h:129
#define LP_PSELECP
Definition: parallel.h:113
Status
Definition: gdiplustypes.h:25
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
DRIVER_DISPATCH(nfs41_FsdDispatch)
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1031
#define IoCompleteRequest
Definition: irp.c:1240
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:239
#define L(x)
Definition: ntvdm.h:50
#define WRITE_PORT_UCHAR(p, d)
Definition: pc98vid.h:21
#define FILE_DEVICE_PARALLEL_PORT
Definition: winioctl.h:128
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
#define IRP_MJ_WRITE
Definition: rdpdr.c:47
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
Definition: ps.c:97
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
#define NTAPI
Definition: typedefs.h:36
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3275
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
#define IO_NO_INCREMENT
Definition: iotypes.h:598