|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1990, 1991, 1992, 1993 Microsoft Corporation
4:
5: Module Name :
6:
7: serialp.h
8:
9: Abstract:
10:
11: Prototypes and macros that are used throughout the driver.
12:
13: Author:
14:
15: Anthony V. Ercolano September 26, 1991
16:
17: Revision History:
18: --*/
19:
20: typedef
21: NTSTATUS
22: (*PSERIAL_START_ROUTINE) (
23: IN PSERIAL_DEVICE_EXTENSION
24: );
25:
26: typedef
27: VOID
28: (*PSERIAL_GET_NEXT_ROUTINE) (
29: IN PIRP *CurrentOpIrp,
30: IN PLIST_ENTRY QueueToProcess,
31: OUT PIRP *NewIrp,
32: IN BOOLEAN CompleteCurrent
33: );
34:
35: NTSTATUS
36: SerialRead(
37: IN PDEVICE_OBJECT DeviceObject,
38: IN PIRP Irp
39: );
40:
41: NTSTATUS
42: SerialStartRead(
43: IN PSERIAL_DEVICE_EXTENSION Extension
44: );
45:
46: VOID
47: SerialCompleteRead(
48: IN PKDPC Dpc,
49: IN PVOID DeferredContext,
50: IN PVOID SystemContext1,
51: IN PVOID SystemContext2
52: );
53:
54: VOID
55: SerialReadTimeout(
56: IN PKDPC Dpc,
57: IN PVOID DeferredContext,
58: IN PVOID SystemContext1,
59: IN PVOID SystemContext2
60: );
61:
62: VOID
63: SerialIntervalReadTimeout(
64: IN PKDPC Dpc,
65: IN PVOID DeferredContext,
66: IN PVOID SystemContext1,
67: IN PVOID SystemContext2
68: );
69:
70: NTSTATUS
71: SerialFlush(
72: IN PDEVICE_OBJECT DeviceObject,
73: IN PIRP Irp
74: );
75:
76: NTSTATUS
77: SerialWrite(
78: IN PDEVICE_OBJECT DeviceObject,
79: IN PIRP Irp
80: );
81:
82: NTSTATUS
83: SerialStartWrite(
84: IN PSERIAL_DEVICE_EXTENSION Extension
85: );
86:
87: VOID
88: SerialGetNextWrite(
89: IN PIRP *CurrentOpIrp,
90: IN PLIST_ENTRY QueueToProcess,
91: IN PIRP *NewIrp,
92: IN BOOLEAN CompleteCurrent
93: );
94:
95: VOID
96: SerialCompleteWrite(
97: IN PKDPC Dpc,
98: IN PVOID DeferredContext,
99: IN PVOID SystemContext1,
100: IN PVOID SystemContext2
101: );
102:
103: BOOLEAN
104: SerialProcessEmptyTransmit(
105: IN PVOID Context
106: );
107:
108: VOID
109: SerialWriteTimeout(
110: IN PKDPC Dpc,
111: IN PVOID DeferredContext,
112: IN PVOID SystemContext1,
113: IN PVOID SystemContext2
114: );
115:
116: VOID
117: SerialCommError(
118: IN PKDPC Dpc,
119: IN PVOID DeferredContext,
120: IN PVOID SystemContext1,
121: IN PVOID SystemContext2
122: );
123:
124: NTSTATUS
125: SerialCleanup(
126: IN PDEVICE_OBJECT DeviceObject,
127: IN PIRP Irp
128: );
129:
130: NTSTATUS
131: SerialCreateOpen(
132: IN PDEVICE_OBJECT DeviceObject,
133: IN PIRP Irp
134: );
135:
136: NTSTATUS
137: SerialClose(
138: IN PDEVICE_OBJECT DeviceObject,
139: IN PIRP Irp
140: );
141:
142: BOOLEAN
143: SerialSetDTR(
144: IN PVOID Context
145: );
146:
147: BOOLEAN
148: SerialClrDTR(
149: IN PVOID Context
150: );
151:
152: BOOLEAN
153: SerialSetRTS(
154: IN PVOID Context
155: );
156:
157: BOOLEAN
158: SerialClrRTS(
159: IN PVOID Context
160: );
161:
162: BOOLEAN
163: SerialSetChars(
164: IN PVOID Context
165: );
166:
167: BOOLEAN
168: SerialSetBaud(
169: IN PVOID Context
170: );
171:
172: BOOLEAN
173: SerialSetLineControl(
174: IN PVOID Context
175: );
176:
177: BOOLEAN
178: SerialSetupNewHandFlow(
179: IN PSERIAL_DEVICE_EXTENSION Extension,
180: IN PSERIAL_HANDFLOW NewHandFlow
181: );
182:
183: BOOLEAN
184: SerialSetHandFlow(
185: IN PVOID Context
186: );
187:
188: BOOLEAN
189: SerialTurnOnBreak(
190: IN PVOID Context
191: );
192:
193: BOOLEAN
194: SerialTurnOffBreak(
195: IN PVOID Context
196: );
197:
198: BOOLEAN
199: SerialPretendXoff(
200: IN PVOID Context
201: );
202:
203: BOOLEAN
204: SerialPretendXon(
205: IN PVOID Context
206: );
207:
208: VOID
209: SerialHandleReducedIntBuffer(
210: IN PSERIAL_DEVICE_EXTENSION Extension
211: );
212:
213: VOID
214: SerialProdXonXoff(
215: IN PSERIAL_DEVICE_EXTENSION Extension,
216: IN BOOLEAN SendXon
217: );
218:
219: NTSTATUS
220: SerialIoControl(
221: IN PDEVICE_OBJECT DeviceObject,
222: IN PIRP Irp
223: );
224:
225: NTSTATUS
226: SerialStartMask(
227: IN PSERIAL_DEVICE_EXTENSION Extension
228: );
229:
230: VOID
231: SerialCancelWait(
232: IN PDEVICE_OBJECT DeviceObject,
233: IN PIRP Irp
234: );
235:
236: VOID
237: SerialCompleteWait(
238: IN PKDPC Dpc,
239: IN PVOID DeferredContext,
240: IN PVOID SystemContext1,
241: IN PVOID SystemContext2
242: );
243:
244: VOID
245: SerialStartImmediate(
246: IN PSERIAL_DEVICE_EXTENSION Extension
247: );
248:
249: VOID
250: SerialCompleteImmediate(
251: IN PKDPC Dpc,
252: IN PVOID DeferredContext,
253: IN PVOID SystemContext1,
254: IN PVOID SystemContext2
255: );
256:
257: VOID
258: SerialTimeoutImmediate(
259: IN PKDPC Dpc,
260: IN PVOID DeferredContext,
261: IN PVOID SystemContext1,
262: IN PVOID SystemContext2
263: );
264:
265: VOID
266: SerialTimeoutXoff(
267: IN PKDPC Dpc,
268: IN PVOID DeferredContext,
269: IN PVOID SystemContext1,
270: IN PVOID SystemContext2
271: );
272:
273: VOID
274: SerialCompleteXoff(
275: IN PKDPC Dpc,
276: IN PVOID DeferredContext,
277: IN PVOID SystemContext1,
278: IN PVOID SystemContext2
279: );
280:
281: NTSTATUS
282: SerialStartPurge(
283: IN PSERIAL_DEVICE_EXTENSION Extension
284: );
285:
286: BOOLEAN
287: SerialPurgeInterruptBuff(
288: IN PVOID Context
289: );
290:
291: NTSTATUS
292: SerialQueryInformationFile(
293: IN PDEVICE_OBJECT DeviceObject,
294: IN PIRP Irp
295: );
296:
297: NTSTATUS
298: SerialSetInformationFile(
299: IN PDEVICE_OBJECT DeviceObject,
300: IN PIRP Irp
301: );
302:
303: VOID
304: SerialKillAllReadsOrWrites(
305: IN PDEVICE_OBJECT DeviceObject,
306: IN PLIST_ENTRY QueueToClean,
307: IN PIRP *CurrentOpIrp
308: );
309:
310: VOID
311: SerialGetNextIrp(
312: IN PIRP *CurrentOpIrp,
313: IN PLIST_ENTRY QueueToProcess,
314: OUT PIRP *NextIrp,
315: IN BOOLEAN CompleteCurrent
316: );
317:
318: VOID
319: SerialTryToCompleteCurrent(
320: IN PSERIAL_DEVICE_EXTENSION Extension,
321: IN PKSYNCHRONIZE_ROUTINE SynchRoutine OPTIONAL,
322: IN KIRQL IrqlForRelease,
323: IN NTSTATUS StatusToUse,
324: IN PIRP *CurrentOpIrp,
325: IN PLIST_ENTRY QueueToProcess,
326: IN PKTIMER IntervalTimer,
327: IN PKTIMER TotalTimer,
328: IN PSERIAL_START_ROUTINE Starter,
329: IN PSERIAL_GET_NEXT_ROUTINE GetNextIrp
330: );
331:
332: NTSTATUS
333: SerialStartOrQueue(
334: IN PSERIAL_DEVICE_EXTENSION Extension,
335: IN PIRP Irp,
336: IN PLIST_ENTRY QueueToExamine,
337: IN PIRP *CurrentOpIrp,
338: IN PSERIAL_START_ROUTINE Starter
339: );
340:
341: VOID
342: SerialCancelQueued(
343: PDEVICE_OBJECT DeviceObject,
344: PIRP Irp
345: );
346:
347: NTSTATUS
348: SerialCompleteIfError(
349: PDEVICE_OBJECT DeviceObject,
350: PIRP Irp
351: );
352:
353: ULONG
354: SerialHandleModemUpdate(
355: IN PSERIAL_DEVICE_EXTENSION Extension,
356: IN BOOLEAN DoingTX
357: );
358:
359: BOOLEAN
360: SerialISR(
361: IN PKINTERRUPT InterruptObject,
362: IN PVOID Context
363: );
364:
365: BOOLEAN
366: SerialDispatchISR(
367: IN PKINTERRUPT InterruptObject,
368: IN PVOID Context
369: );
370:
371: NTSTATUS
372: SerialGetDivisorFromBaud(
373: IN ULONG ClockRate,
374: IN LONG DesiredBaud,
375: OUT PSHORT AppropriateDivisor
376: );
377:
378: VOID
379: SerialUnload(
380: IN PDRIVER_OBJECT DriverObject
381: );
382:
383: BOOLEAN
384: SerialReset(
385: IN PVOID Context
386: );
387:
388: BOOLEAN
389: SerialPerhapsLowerRTS(
390: IN PVOID Context
391: );
392:
393: VOID
394: SerialStartTimerLowerRTS(
395: IN PKDPC Dpc,
396: IN PVOID DeferredContext,
397: IN PVOID SystemContext1,
398: IN PVOID SystemContext2
399: );
400:
401: VOID
402: SerialInvokePerhapsLowerRTS(
403: IN PKDPC Dpc,
404: IN PVOID DeferredContext,
405: IN PVOID SystemContext1,
406: IN PVOID SystemContext2
407: );
408:
409: VOID
410: SerialCleanupDevice(
411: IN PSERIAL_DEVICE_EXTENSION Extension
412: );
413:
414: UCHAR
415: SerialProcessLSR(
416: IN PSERIAL_DEVICE_EXTENSION Extension
417: );
418:
419: LARGE_INTEGER
420: SerialGetCharTime(
421: IN PSERIAL_DEVICE_EXTENSION Extension
422: );
423:
424: BOOLEAN
425: SerialSharerIsr(
426: IN PKINTERRUPT InterruptObject,
427: IN PVOID Context
428: );
429:
430: BOOLEAN
431: SerialMarkClose(
432: IN PVOID Context
433: );
434:
435: BOOLEAN
436: SerialIndexedMultiportIsr(
437: IN PKINTERRUPT InterruptObject,
438: IN PVOID Context
439: );
440:
441: BOOLEAN
442: SerialBitMappedMultiportIsr(
443: IN PKINTERRUPT InterruptObject,
444: IN PVOID Context
445: );
446:
447: VOID
448: SerialPutChar(
449: IN PSERIAL_DEVICE_EXTENSION Extension,
450: IN UCHAR CharToPut
451: );
452:
453:
454: typedef struct _SERIAL_UPDATE_CHAR {
455: PSERIAL_DEVICE_EXTENSION Extension;
456: ULONG CharsCopied;
457: BOOLEAN Completed;
458: } SERIAL_UPDATE_CHAR,*PSERIAL_UPDATE_CHAR;
459:
460: //
461: // The following simple structure is used to send a pointer
462: // the device extension and an ioctl specific pointer
463: // to data.
464: //
465: typedef struct _SERIAL_IOCTL_SYNC {
466: PSERIAL_DEVICE_EXTENSION Extension;
467: PVOID Data;
468: } SERIAL_IOCTL_SYNC,*PSERIAL_IOCTL_SYNC;
469:
470: //
471: // The following three macros are used to initialize, increment
472: // and decrement reference counts in IRPs that are used by
473: // this driver. The reference count is stored in the fourth
474: // argument of the irp, which is never used by any operation
475: // accepted by this driver.
476: //
477:
478: #define SERIAL_INIT_REFERENCE(Irp) { \
479: ASSERT(sizeof(LONG) <= sizeof(PVOID)); \
480: IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4 = NULL; \
481: }
482:
483: #define SERIAL_INC_REFERENCE(Irp) \
484: ((*((LONG *)(&(IoGetCurrentIrpStackLocation((Irp)))->Parameters.Others.Argument4)))++)
485:
486: #define SERIAL_DEC_REFERENCE(Irp) \
487: ((*((LONG *)(&(IoGetCurrentIrpStackLocation((Irp)))->Parameters.Others.Argument4)))--)
488:
489: #define SERIAL_REFERENCE_COUNT(Irp) \
490: ((LONG)((IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.