|
|
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.