/*++ Copyright (C) Microsoft Corporation, 1993 - 1998 Module Name: epp.c Abstract: This module contains the common code to perform all EPP related tasks for EPP Software and EPP Hardware modes. Author: Don Redford - July 29, 1998 Environment: Kernel mode Revision History : --*/ #include "pch.h" NTSTATUS ParEppSetAddress( IN PDEVICE_EXTENSION Extension, IN UCHAR Address ); NTSTATUS ParEppSetAddress( IN PDEVICE_EXTENSION Extension, IN UCHAR Address ) /*++ Routine Description: Sets an EPP Address. Arguments: Extension - Supplies the device extension. Address - The bus address to be set. Return Value: None. --*/ { PUCHAR Controller; // LARGE_INTEGER Start; // LARGE_INTEGER End; // UCHAR dsr; UCHAR dcr; // dvdr ParDump2(PARINFO, ("ParEppSetAddress: Entering\n")); Controller = Extension->Controller; Extension->CurrentPhase = PHASE_FORWARD_XFER; dcr = GetControl (Controller); WRITE_PORT_UCHAR(Controller + DATA_OFFSET, Address); // KeStallExecutionProcessor(1); // // Event 56 // dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, INACTIVE, DONT_CARE, INACTIVE ); StoreControl (Controller, dcr); // // Event 58 // if (!CHECK_DSR(Controller, ACTIVE, DONT_CARE, DONT_CARE, DONT_CARE, DONT_CARE, DEFAULT_RECEIVE_TIMEOUT)) { // // Return the device to Idle. // dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, INACTIVE ); StoreControl (Controller, dcr); // KeStallExecutionProcessor(1); dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, ACTIVE ); StoreControl (Controller, dcr); Extension->CurrentPhase = PHASE_FORWARD_IDLE; // dvdr ParDump2(PARINFO, ("ParEppSetAddress: Leaving with IO Device Error Event 58\n")); return STATUS_IO_DEVICE_ERROR; } // // Event 59 // dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, INACTIVE ); StoreControl (Controller, dcr); // // Event 60 // if (!CHECK_DSR(Controller, INACTIVE, DONT_CARE, DONT_CARE, DONT_CARE, DONT_CARE, DEFAULT_RECEIVE_TIMEOUT)) { dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, ACTIVE ); StoreControl (Controller, dcr); Extension->CurrentPhase = PHASE_FORWARD_IDLE; // dvdr ParDump2(PARINFO, ("ParEppSetAddress: Leaving with IO Device Error Event 60\n")); return STATUS_IO_DEVICE_ERROR; } // // Event 61 // dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, ACTIVE ); StoreControl (Controller, dcr); Extension->CurrentPhase = PHASE_FORWARD_IDLE; // dvdr ParDump2(PARINFO, ("ParEppSetAddress: Leaving with STATUS_SUCCESS\n")); return STATUS_SUCCESS; }