mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.7 KiB
131 lines
2.7 KiB
/*++
|
|
|
|
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;
|
|
|
|
}
|