|
|
/****************************************************************************
** COPYRIGHT (C) 1994-1997 INTEL CORPORATION ** ** DEVELOPED FOR MICROSOFT BY INTEL CORP., HILLSBORO, OREGON ** ** HTTP://WWW.INTEL.COM/ **
** THIS FILE IS PART OF THE INTEL ETHEREXPRESS PRO/100B(TM) AND ** ** ETHEREXPRESS PRO/100+(TM) NDIS 5.0 MINIPORT SAMPLE DRIVER ** ****************************************************************************/
/****************************************************************************
Module Name: e100_sup.h (inlinef.h)
This driver runs on the following hardware: - 82558 based PCI 10/100Mb ethernet adapters (aka Intel EtherExpress(TM) PRO Adapters)
Environment: Kernel Mode - Or whatever is the equivalent on WinNT
Revision History - JCB 8/14/97 Example Driver Created - Dchen 11-01-99 Modified for the new sample driver *****************************************************************************/
//-----------------------------------------------------------------------------
// Procedure: WaitScb
//
// Description: This routine checks to see if the D100 has accepted a command.
// It does so by checking the command field in the SCB, which will
// be zeroed by the D100 upon accepting a command. The loop waits
// for up to 600 milliseconds for command acceptance.
//
// Arguments:
// Adapter - ptr to Adapter object instance
//
// Returns:
// TRUE if the SCB cleared within 600 milliseconds.
// FALSE if it didn't clear within 600 milliseconds
//-----------------------------------------------------------------------------
__inline BOOLEAN WaitScb( IN PMP_ADAPTER Adapter) { BOOLEAN bResult; HW_CSR volatile *pCSRAddress = Adapter->CSRAddress;
MP_STALL_AND_WAIT(pCSRAddress->ScbCommandLow == 0, 600, bResult); if(!bResult) { DBGPRINT(MP_ERROR, ("WaitScb failed, ScbCommandLow=%x\n", pCSRAddress->ScbCommandLow)); if(pCSRAddress->ScbCommandLow != 0x80) { ASSERT(FALSE); } MP_SET_HARDWARE_ERROR(Adapter); }
return bResult; }
//-----------------------------------------------------------------------------
// Procedure: D100IssueScbCommand
//
// Description: This general routine will issue a command to the D100.
//
// Arguments:
// Adapter - ptr to Adapter object instance.
// ScbCommand - The command that is to be issued
// WaitForSCB - A boolean value indicating whether or not a wait for SCB
// must be done before the command is issued to the chip
//
// Returns:
// TRUE if the command was issued to the chip successfully
// FALSE if the command was not issued to the chip
//-----------------------------------------------------------------------------
__inline NDIS_STATUS D100IssueScbCommand( IN PMP_ADAPTER Adapter, IN UCHAR ScbCommandLow, IN BOOLEAN WaitForScb) { if(WaitForScb == TRUE) { if(!WaitScb(Adapter)) { return(NDIS_STATUS_HARD_ERRORS); } }
Adapter->CSRAddress->ScbCommandLow = ScbCommandLow;
return(NDIS_STATUS_SUCCESS); }
// routines.c
BOOLEAN MdiRead( IN PMP_ADAPTER Adapter, IN ULONG RegAddress, IN ULONG PhyAddress, IN BOOLEAN Recoverable, IN OUT PUSHORT DataValue);
VOID MdiWrite( IN PMP_ADAPTER Adapter, IN ULONG RegAddress, IN ULONG PhyAddress, IN USHORT DataValue);
NDIS_STATUS D100SubmitCommandBlockAndWait(IN PMP_ADAPTER Adapter); VOID DumpStatsCounters(IN PMP_ADAPTER Adapter); NDIS_MEDIA_STATE NICGetMediaState(IN PMP_ADAPTER Adapter); VOID NICIssueSelectiveReset(PMP_ADAPTER Adapter); VOID NICIssueFullReset(PMP_ADAPTER Adapter);
// physet.c
VOID ResetPhy(IN PMP_ADAPTER Adapter); NDIS_STATUS PhyDetect(IN PMP_ADAPTER Adapter); NDIS_STATUS ScanAndSetupPhy(IN PMP_ADAPTER Adapter); VOID SelectPhy( IN PMP_ADAPTER Adapter, IN UINT SelectPhyAddress, IN BOOLEAN WaitAutoNeg); NDIS_STATUS SetupPhy( IN PMP_ADAPTER Adapter);
VOID FindPhySpeedAndDpx( IN PMP_ADAPTER Adapter, IN UINT PhyId);
// eeprom.c
USHORT GetEEpromAddressSize( IN USHORT Size);
USHORT GetEEpromSize( IN PUCHAR CSRBaseIoAddress);
USHORT ReadEEprom( IN PUCHAR CSRBaseIoAddress, IN USHORT Reg, IN USHORT AddressSize);
VOID ShiftOutBits( IN USHORT data, IN USHORT count, IN PUCHAR CSRBaseIoAddress);
USHORT ShiftInBits( IN PUCHAR CSRBaseIoAddress);
VOID RaiseClock( IN OUT USHORT *x, IN PUCHAR CSRBaseIoAddress);
VOID LowerClock( IN OUT USHORT *x, IN PUCHAR CSRBaseIoAddress);
VOID EEpromCleanup( IN PUCHAR CSRBaseIoAddress);
|