Annotation of ntddk/src/comm/serial/flush.c, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1991, 1992, 1993 Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     flush.c
                      8: 
                      9: Abstract:
                     10: 
                     11:     This module contains the code that is very specific to flush
                     12:     operations in the serial driver
                     13: 
                     14: Author:
                     15: 
                     16:     Anthony V. Ercolano 26-Sep-1991
                     17: 
                     18: Environment:
                     19: 
                     20:     Kernel mode
                     21: 
                     22: Revision History :
                     23: 
                     24: --*/
                     25: 
                     26: #include <stddef.h>
                     27: #include "ntddk.h"
                     28: #include "ntddser.h"
                     29: #include "serial.h"
                     30: #include "serialp.h"
                     31: 
                     32: 
                     33: NTSTATUS
                     34: SerialStartFlush(
                     35:     IN PSERIAL_DEVICE_EXTENSION Extension
                     36:     );
                     37: 
                     38: 
                     39: NTSTATUS
                     40: SerialFlush(
                     41:     IN PDEVICE_OBJECT DeviceObject,
                     42:     IN PIRP Irp
                     43:     )
                     44: 
                     45: /*++
                     46: 
                     47: Routine Description:
                     48: 
                     49:     This is the dispatch routine for flush.  Flushing works by placing
                     50:     this request in the write queue.  When this request reaches the
                     51:     front of the write queue we simply complete it since this implies
                     52:     that all previous writes have completed.
                     53: 
                     54: Arguments:
                     55: 
                     56:     DeviceObject - Pointer to the device object for this device
                     57: 
                     58:     Irp - Pointer to the IRP for the current request
                     59: 
                     60: Return Value:
                     61: 
                     62:     Could return status success, cancelled, or pending.
                     63: 
                     64: --*/
                     65: 
                     66: {
                     67: 
                     68:     PSERIAL_DEVICE_EXTENSION Extension = DeviceObject->DeviceExtension;
                     69: 
                     70:     SerialDump(
                     71:         SERIRPPATH,
                     72:         ("SERIAL: Dispatch entry for: %x\n",Irp)
                     73:         );
                     74:     Irp->IoStatus.Information = 0L;
                     75: 
                     76:     if (SerialCompleteIfError(
                     77:             DeviceObject,
                     78:             Irp
                     79:             ) != STATUS_SUCCESS) {
                     80: 
                     81:         return STATUS_CANCELLED;
                     82: 
                     83:     }
                     84: 
                     85:     return SerialStartOrQueue(
                     86:                Extension,
                     87:                Irp,
                     88:                &Extension->WriteQueue,
                     89:                &Extension->CurrentWriteIrp,
                     90:                SerialStartFlush
                     91:                );
                     92: 
                     93: }
                     94: 
                     95: NTSTATUS
                     96: SerialStartFlush(
                     97:     IN PSERIAL_DEVICE_EXTENSION Extension
                     98:     )
                     99: 
                    100: /*++
                    101: 
                    102: Routine Description:
                    103: 
                    104:     This routine is called if there were no writes in the queue.
                    105:     The flush became the current write because there was nothing
                    106:     in the queue.  Note however that does not mean there is
                    107:     nothing in the queue now!  So, we will start off the write
                    108:     that might follow us.
                    109: 
                    110: Arguments:
                    111: 
                    112:     Extension - Points to the serial device extension
                    113: 
                    114: Return Value:
                    115: 
                    116:     This will always return STATUS_SUCCESS.
                    117: 
                    118: --*/
                    119: 
                    120: {
                    121: 
                    122:     PIRP NewIrp;
                    123: 
                    124:     Extension->CurrentWriteIrp->IoStatus.Status = STATUS_SUCCESS;
                    125: 
                    126:     //
                    127:     // The following call will actually complete the flush.
                    128:     //
                    129: 
                    130:     SerialGetNextWrite(
                    131:         &Extension->CurrentWriteIrp,
                    132:         &Extension->WriteQueue,
                    133:         &NewIrp,
                    134:         TRUE
                    135:         );
                    136: 
                    137:     if (NewIrp) {
                    138: 
                    139:         ASSERT(NewIrp == Extension->CurrentWriteIrp);
                    140:         SerialStartWrite(Extension);
                    141: 
                    142:     }
                    143: 
                    144:     return STATUS_SUCCESS;
                    145: 
                    146: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.