ReactOS 0.4.16-dev-340-g0540c21
pdo.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Parallel Port Function Driver
4 * FILE: drivers/parallel/parport/pdo.c
5 * PURPOSE: PDO functions
6 */
7
8#include "parport.h"
9
10/* FUNCTIONS ****************************************************************/
11
15 IN PIRP Irp)
16{
17 PPDO_DEVICE_EXTENSION DeviceExtension;
20
21 DPRINT("PdoCreate()\n");
22
24 DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
25
26 if (Stack->Parameters.Create.Options & FILE_DIRECTORY_FILE)
27 {
28 DPRINT1("Not a directory\n");
30 goto done;
31 }
32
33 DPRINT("Open LPT%lu: successful\n", DeviceExtension->LptPort);
34 DeviceExtension->OpenCount++;
35
36done:
37 Irp->IoStatus.Status = Status;
38 Irp->IoStatus.Information = 0;
40
41 return Status;
42}
43
44
48 IN PIRP Irp)
49{
50 PPDO_DEVICE_EXTENSION pDeviceExtension;
51
52 DPRINT("PdoClose()\n");
53
54 pDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
55 pDeviceExtension->OpenCount--;
56
57 Irp->IoStatus.Information = 0;
58 Irp->IoStatus.Status = STATUS_SUCCESS;
60
61 return STATUS_SUCCESS;
62}
63
64
68 IN PIRP Irp)
69{
70 DPRINT("PdoCleanup()\n");
71
72 Irp->IoStatus.Information = 0;
73 Irp->IoStatus.Status = STATUS_SUCCESS;
75 return STATUS_SUCCESS;
76}
77
78
82 IN PIRP Irp)
83{
84 DPRINT("PdoRead()\n");
85
86 Irp->IoStatus.Information = 0;
87 Irp->IoStatus.Status = STATUS_SUCCESS;
89 return STATUS_SUCCESS;
90}
91
92
96 IN PIRP Irp)
97{
98 PPDO_DEVICE_EXTENSION PdoDeviceExtension;
99 PFDO_DEVICE_EXTENSION FdoDeviceExtension;
100 PIO_STACK_LOCATION IoStack;
102 ULONG i;
104 ULONG ulCount;
105
106 DPRINT("PdoWrite()\n");
107
108 PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
109 FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->AttachedFdo->DeviceExtension;
110
112
114 DPRINT("Length: %lu\n", IoStack->Parameters.Write.Length);
115 DPRINT("Buffer: %p\n", Buffer);
116
117 for (i = 0; i < IoStack->Parameters.Write.Length; i++)
118 {
119 ulCount = 0;
120
121 do
122 {
124 PortStatus = READ_PORT_UCHAR(UlongToPtr(FdoDeviceExtension->BaseAddress + 1));
125 ulCount++;
126 }
127 while (ulCount < 500000 && !(PortStatus & LP_PBUSY));
128
129 if (ulCount == 500000)
130 {
131 DPRINT("Timed out\n");
132
133 Irp->IoStatus.Information = 0;
134 Irp->IoStatus.Status = STATUS_TIMEOUT;
136
137 return STATUS_TIMEOUT;
138 }
139
140 /* Write character */
141 WRITE_PORT_UCHAR(UlongToPtr(FdoDeviceExtension->BaseAddress), Buffer[i]);
142
144
145 WRITE_PORT_UCHAR(UlongToPtr(FdoDeviceExtension->BaseAddress + 2), (LP_PSELECP | LP_PINITP | LP_PSTROBE));
146
148
149 WRITE_PORT_UCHAR(UlongToPtr(FdoDeviceExtension->BaseAddress + 2), (LP_PSELECP | LP_PINITP));
150 }
151
152 Irp->IoStatus.Information = 0;
153 Irp->IoStatus.Status = STATUS_SUCCESS;
155 return STATUS_SUCCESS;
156}
157
158
160NTAPI
162 IN PIRP Irp)
163{
165 DPRINT("PdoPnp()\n");
166
167 Status = Irp->IoStatus.Status;
169 return Status;
170}
171
172
174NTAPI
176 IN PIRP Irp)
177{
179 PIO_STACK_LOCATION IoStack;
180
181 DPRINT("PdoPower()\n");
182
184
185 switch (IoStack->MinorFunction)
186 {
187 case IRP_MN_SET_POWER:
189 Irp->IoStatus.Status = STATUS_SUCCESS;
190 break;
191 }
192
193 Status = Irp->IoStatus.Status;
196 return Status;
197}
198
199/* EOF */
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_DIRECTORY_FILE
Definition: constants.h:491
#define DPRINT1
Definition: precomp.h:8
Definition: bufpool.h:45
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_TIMEOUT
Definition: d3dkmdt.h:49
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
#define LP_PBUSY
Definition: parallel.h:101
#define LP_PINITP
Definition: parallel.h:114
#define LP_PSTROBE
Definition: parallel.h:116
#define LP_PSELECP
Definition: parallel.h:113
PVOID GetUserBuffer(IN PIRP Irp)
Definition: misc.c:32
#define UlongToPtr(u)
Definition: config.h:106
Status
Definition: gdiplustypes.h:25
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
_Outptr_ PUSB_DEVICE_HANDLE _In_ PUSB_DEVICE_HANDLE _In_ USHORT PortStatus
Definition: hubbusif.h:42
if(dx< 0)
Definition: linetemp.h:194
#define KeStallExecutionProcessor(MicroSeconds)
Definition: precomp.h:27
#define IoCompleteRequest
Definition: irp.c:1240
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
Definition: power.c:758
NTSTATUS NTAPI PdoWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:95
NTSTATUS NTAPI PdoRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:81
NTSTATUS NTAPI PdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:161
NTSTATUS NTAPI PdoCleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:67
NTSTATUS NTAPI PdoCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:14
NTSTATUS NTAPI PdoClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:47
NTSTATUS NTAPI PdoPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:175
#define READ_PORT_UCHAR(p)
Definition: pc98vid.h:22
#define WRITE_PORT_UCHAR(p, d)
Definition: pc98vid.h:21
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
PVOID DeviceExtension
Definition: env_spec_w32.h:418
union _IO_STACK_LOCATION::@1581 Parameters
struct _IO_STACK_LOCATION::@3980::@3985 Write
PDEVICE_OBJECT AttachedFdo
Definition: parport.h:59
#define NTAPI
Definition: typedefs.h:36
#define IN
Definition: typedefs.h:39
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_NOT_A_DIRECTORY
Definition: udferr_usr.h:169
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define IRP_MN_SET_POWER
#define IRP_MN_QUERY_POWER
unsigned char UCHAR
Definition: xmlstorage.h:181