📄 macros.h
字号:
/****************************************************************************
** 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
*****************************************************************************/
__inline BOOLEAN
WaitScb(
IN PFDO_DATA FdoData
);
//-----------------------------------------------------------------------------
// Procedure: D100IssueScbCommand
//
// Description: This general routine will issue a command to the D100.
//
// Arguments:
// FdoData - ptr to FdoData 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 NTSTATUS
D100IssueScbCommand(
IN PFDO_DATA FdoData,
IN UCHAR ScbCommandLow,
IN BOOLEAN WaitForScb
)
{
if(WaitForScb == TRUE)
{
if(!WaitScb(FdoData))
{
return(STATUS_DEVICE_DATA_ERROR);
}
}
FdoData->CSRAddress->ScbCommandLow = ScbCommandLow;
return(STATUS_SUCCESS);
}
__inline NTSTATUS
MP_GET_STATUS_FROM_FLAGS(
IN PFDO_DATA FdoData
)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
if(MP_TEST_FLAG(FdoData, fMP_ADAPTER_RESET_IN_PROGRESS))
{
Status = STATUS_DEVICE_NOT_READY;
}
else if(MP_TEST_FLAG(FdoData, fMP_ADAPTER_HARDWARE_ERROR))
{
Status = STATUS_DEVICE_OFF_LINE;
}
else if(MP_TEST_FLAG(FdoData, fMP_ADAPTER_NO_CABLE))
{
Status = STATUS_DEVICE_NOT_CONNECTED;
}
return Status;
}
__inline VOID
NICDisableInterrupt(
IN PFDO_DATA FdoData
)
{
FdoData->CSRAddress->ScbCommandHigh = SCB_INT_MASK;
}
__inline VOID NICEnableInterrupt(
IN PFDO_DATA FdoData
)
{
FdoData->CSRAddress->ScbCommandHigh = 0;
}
__inline
BOOLEAN
IsPoMgmtSupported(
IN PFDO_DATA FdoData
)
{
if (FdoData->RevsionID >= E100_82559_A_STEP &&
/*FdoData->RevsionID <= E100_82559_C_STEP &&*/
FdoData->DeviceCaps.SystemWake != PowerSystemUnspecified &&
FdoData->DeviceCaps.DeviceWake != PowerDeviceUnspecified )
{
return TRUE;
}
else
{
return FALSE;
}
}
__inline
USHORT
NICReadPortUShort (
IN USHORT * x
)
{
return READ_PORT_USHORT (x);
}
__inline
VOID
NICWritePortUShort (
IN USHORT * x,
IN USHORT y
)
{
WRITE_PORT_USHORT (x,y);
}
__inline
USHORT
NICReadRegisterUShort (
IN USHORT * x
)
{
return READ_REGISTER_USHORT (x);
}
__inline
VOID
NICWriteRegisterUShort (
IN USHORT * x,
IN USHORT y
)
{
WRITE_REGISTER_USHORT (x,y);
}
// routines.c
BOOLEAN
MdiRead(
IN PFDO_DATA Adapter,
IN ULONG RegAddress,
IN ULONG PhyAddress,
IN BOOLEAN Recoverable,
IN OUT PUSHORT DataValue
);
VOID
MdiWrite(
IN PFDO_DATA FdoData,
IN ULONG RegAddress,
IN ULONG PhyAddress,
IN USHORT DataValue
);
NTSTATUS
D100IssueScbCommand(
IN PFDO_DATA FdoData,
IN UCHAR ScbCommandLow,
IN BOOLEAN WaitForScb
);
MEDIA_STATE
GetMediaState(
IN PFDO_DATA Adapter
);
NTSTATUS
D100SubmitCommandBlockAndWait(
IN PFDO_DATA Adapter
);
VOID
NICIssueFullReset(
PFDO_DATA Adapter
);
VOID
NICIssueSelectiveReset(
PFDO_DATA Adapter
);
VOID
DumpStatsCounters(
IN PFDO_DATA Adapter
);
// physet.c
VOID
ResetPhy(
IN PFDO_DATA FdoData
);
NTSTATUS
PhyDetect(
IN PFDO_DATA FdoData
);
NTSTATUS
ScanAndSetupPhy(
IN PFDO_DATA FdoData
);
VOID
SelectPhy(
IN PFDO_DATA FdoData,
IN UINT SelectPhyAddress,
IN BOOLEAN WaitAutoNeg
);
NTSTATUS
SetupPhy(
IN PFDO_DATA FdoData
);
VOID
FindPhySpeedAndDpx(
IN PFDO_DATA FdoData,
IN UINT PhyId
);
// eeprom.c
USHORT
GetEEpromAddressSize(
IN USHORT Size
);
USHORT
GetEEpromSize(
IN PFDO_DATA FdoData,
IN PUCHAR CSRBaseIoAddress
);
USHORT
ReadEEprom(
IN PFDO_DATA FdoData,
IN PUCHAR CSRBaseIoAddress,
IN USHORT Reg,
IN USHORT AddressSize
);
VOID
ShiftOutBits(
IN PFDO_DATA FdoData,
IN USHORT data,
IN USHORT count,
IN PUCHAR CSRBaseIoAddress
);
USHORT
ShiftInBits(
IN PFDO_DATA FdoData,
IN PUCHAR CSRBaseIoAddress
);
VOID
RaiseClock(
IN PFDO_DATA FdoData,
IN OUT USHORT *x,
IN PUCHAR CSRBaseIoAddress
);
VOID
LowerClock(
IN PFDO_DATA FdoData,
IN OUT USHORT *x,
IN PUCHAR CSRBaseIoAddress
);
VOID
EEpromCleanup(
IN PFDO_DATA FdoData,
IN PUCHAR CSRBaseIoAddress
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -