|
|
/*++
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 PPDO_EXTENSION Pdx, IN UCHAR Address );
NTSTATUS ParEppSetAddress( IN PPDO_EXTENSION Pdx, IN UCHAR Address )
/*++
Routine Description:
Sets an EPP Address. Arguments:
Pdx - Supplies the device extension.
Address - The bus address to be set. Return Value:
None.
--*/ { PUCHAR Controller; UCHAR dcr; DD((PCE)Pdx,DDT,"ParEppSetAddress: Entering\n");
Controller = Pdx->Controller;
P5SetPhase( Pdx, PHASE_FORWARD_XFER ); dcr = GetControl (Controller); P5WritePortUchar(Controller + DATA_OFFSET, Address); //
// 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); dcr = UPDATE_DCR( dcr, DONT_CARE, DONT_CARE, DONT_CARE, ACTIVE, DONT_CARE, ACTIVE ); StoreControl (Controller, dcr); P5SetPhase( Pdx, PHASE_FORWARD_IDLE );
DD((PCE)Pdx,DDE,"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);
P5SetPhase( Pdx, PHASE_FORWARD_IDLE );
DD((PCE)Pdx,DDE,"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 );
P5SetPhase( Pdx, PHASE_FORWARD_IDLE );
return STATUS_SUCCESS; }
|