ReactOS  0.4.14-dev-376-gaedba84
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 
13 NTAPI
15  IN PIRP Irp)
16 {
17  PPDO_DEVICE_EXTENSION DeviceExtension;
18  PIO_STACK_LOCATION Stack;
20 
21  DPRINT("PdoCreate()\n");
22 
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 
36 done:
37  Irp->IoStatus.Status = Status;
38  Irp->IoStatus.Information = 0;
40 
41  return Status;
42 }
43 
44 
46 NTAPI
48  IN PIRP Irp)
49 {
50  PPDO_DEVICE_EXTENSION pDeviceExtension;
51 
52  DPRINT("PdoClose()\n");
53 
55  pDeviceExtension->OpenCount--;
56 
57  Irp->IoStatus.Information = 0;
58  Irp->IoStatus.Status = STATUS_SUCCESS;
60 
61  return STATUS_SUCCESS;
62 }
63 
64 
66 NTAPI
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 
80 NTAPI
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 
94 NTAPI
96  IN PIRP Irp)
97 {
98  PPDO_DEVICE_EXTENSION PdoDeviceExtension;
99  PFDO_DEVICE_EXTENSION FdoDeviceExtension;
100  PIO_STACK_LOCATION IoStack;
101  PUCHAR Buffer;
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 
159 NTSTATUS
160 NTAPI
162  IN PIRP Irp)
163 {
165  DPRINT("PdoPnp()\n");
166 
167  Status = Irp->IoStatus.Status;
169  return Status;
170 }
171 
172 
173 NTSTATUS
174 NTAPI
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:
188  case IRP_MN_QUERY_POWER:
189  Irp->IoStatus.Status = STATUS_SUCCESS;
190  break;
191  }
192 
193  Status = Irp->IoStatus.Status;
196  return Status;
197 }
198 
199 /* EOF */
#define IN
Definition: typedefs.h:38
#define IRP_MN_QUERY_POWER
_In_ PIRP Irp
Definition: csq.h:116
NTSTATUS NTAPI PdoCleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:67
#define FILE_DIRECTORY_FILE
Definition: constants.h:491
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
LONG NTSTATUS
Definition: precomp.h:26
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
#define STATUS_TIMEOUT
Definition: ntstatus.h:81
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
#define STATUS_NOT_A_DIRECTORY
Definition: udferr_usr.h:169
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define LP_PINITP
Definition: parallel.h:119
PVOID DeviceExtension
Definition: env_spec_w32.h:418
#define IoCompleteRequest
Definition: irp.c:1240
void DPRINT(...)
Definition: polytest.cpp:61
#define LP_PSELECP
Definition: parallel.h:118
Definition: bufpool.h:45
#define UlongToPtr(u)
Definition: config.h:106
PVOID GetUserBuffer(IN PIRP Irp)
Definition: misc.c:76
#define LP_PSTROBE
Definition: parallel.h:121
PDEVICE_OBJECT AttachedFdo
Definition: parport.h:59
if(!(yy_init))
Definition: macro.lex.yy.c:714
NTSTATUS NTAPI PdoRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:81
unsigned char UCHAR
Definition: xmlstorage.h:181
NTSTATUS NTAPI PdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:161
#define IRP_MN_SET_POWER
_Outptr_ PUSB_DEVICE_HANDLE _In_ PUSB_DEVICE_HANDLE _In_ USHORT PortStatus
Definition: hubbusif.h:40
NTSTATUS NTAPI PdoWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:95
Status
Definition: gdiplustypes.h:24
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
Definition: power.c:626
#define LP_PBUSY
Definition: parallel.h:106
NTSTATUS NTAPI PdoClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:47
#define DPRINT1
Definition: precomp.h:8
unsigned int ULONG
Definition: retypes.h:1
#define IO_NO_INCREMENT
Definition: iotypes.h:566
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532
NTSTATUS NTAPI PdoCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:14
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:2772
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
return STATUS_SUCCESS
Definition: btrfs.c:2938
NTSTATUS NTAPI PdoPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pdo.c:175
HRESULT Create([out]ITransactionReceiver **ppReceiver)
VOID NTAPI KeStallExecutionProcessor(IN ULONG MicroSeconds)
Definition: ntoskrnl.c:99