windows-nt/Source/XPSP1/NT/drivers/net/ms/e100bex/e100_sup.h

166 lines
4.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/****************************************************************************
** 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);