?? mp.h
字號:
typedef struct _MP_ADAPTER
{
LIST_ENTRY List;
// Handle given by NDIS when the Adapter registered itself.
NDIS_HANDLE AdapterHandle;
//flags
ULONG Flags;
// configuration
UCHAR PermanentAddress[ETH_LENGTH_OF_ADDRESS];
UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
BOOLEAN bOverrideAddress;
NDIS_EVENT ExitEvent;
// SEND
PMP_TCB CurrSendHead;
PMP_TCB CurrSendTail;
LONG nBusySend;
LONG nWaitSend;
LONG nCancelSend;
QUEUE_HEADER SendWaitQueue;
QUEUE_HEADER SendCancelQueue;
SINGLE_LIST_ENTRY SendBufList;
LONG NumTcb; // Total number of TCBs
LONG RegNumTcb; // 'NumTcb'
LONG NumTbd;
LONG NumBuffers;
NDIS_HANDLE SendBufferPool;
PUCHAR MpTcbMem;
ULONG MpTcbMemSize;
PUCHAR MpTxBufMem;
ULONG MpTxBufMemSize;
PUCHAR HwSendMemAllocVa;
ULONG HwSendMemAllocSize;
NDIS_PHYSICAL_ADDRESS HwSendMemAllocPa;
// command unit status flags
BOOLEAN TransmitIdle;
BOOLEAN ResumeWait;
// RECV
LIST_ENTRY RecvList;
LIST_ENTRY RecvPendList;
LONG nReadyRecv;
LONG RefCount;
LONG NumRfd;
LONG CurrNumRfd;
LONG MaxNumRfd;
ULONG HwRfdSize;
BOOLEAN bAllocNewRfd;
LONG RfdShrinkCount;
NDIS_HANDLE RecvPacketPool;
NDIS_HANDLE RecvBufferPool;
// spin locks
NDIS_SPIN_LOCK Lock;
// lookaside lists
NPAGED_LOOKASIDE_LIST RecvLookaside;
// Packet Filter and look ahead size.
ULONG PacketFilter;
ULONG OldPacketFilter;
ULONG ulLookAhead;
USHORT usLinkSpeed;
USHORT usDuplexMode;
// multicast list
UINT MCAddressCount;
UCHAR MCList[NIC_MAX_MCAST_LIST][ETH_LENGTH_OF_ADDRESS];
// Packet counts
ULONG64 GoodTransmits;
ULONG64 GoodReceives;
ULONG NumTxSinceLastAdjust;
// Count of transmit errors
ULONG TxAbortExcessCollisions;
ULONG TxLateCollisions;
ULONG TxDmaUnderrun;
ULONG TxLostCRS;
ULONG TxOKButDeferred;
ULONG OneRetry;
ULONG MoreThanOneRetry;
ULONG TotalRetries;
// Count of receive errors
ULONG RcvCrcErrors;
ULONG RcvAlignmentErrors;
ULONG RcvResourceErrors;
ULONG RcvDmaOverrunErrors;
ULONG RcvCdtFrames;
ULONG RcvRuntErrors;
ULONG IoBaseAddress;
ULONG IoRange;
ULONG InterruptLevel;
NDIS_PHYSICAL_ADDRESS MemPhysAddress;
PVOID PortOffset;
PHW_CSR CSRAddress;
NDIS_MINIPORT_INTERRUPT Interrupt;
// Revision ID
UCHAR RevsionID;
USHORT SubVendorID;
USHORT SubSystemID;
ULONG CacheFillSize;
ULONG Debug;
PUCHAR HwMiscMemAllocVa;
ULONG HwMiscMemAllocSize;
NDIS_PHYSICAL_ADDRESS HwMiscMemAllocPa;
PSELF_TEST_STRUC SelfTest; // 82558 SelfTest
ULONG SelfTestPhys;
PNON_TRANSMIT_CB NonTxCmdBlock; // 82558 (non transmit) Command Block
ULONG NonTxCmdBlockPhys;
PDUMP_AREA_STRUC DumpSpace; // 82558 dump buffer area
ULONG DumpSpacePhys;
PERR_COUNT_STRUC StatsCounters;
ULONG StatsCounterPhys;
UINT PhyAddress; // Address of the phy component
UCHAR Connector; // 0=Auto, 1=TPE, 2=MII
USHORT AiTxFifo; // TX FIFO Threshold
USHORT AiRxFifo; // RX FIFO Threshold
UCHAR AiTxDmaCount; // Tx dma count
UCHAR AiRxDmaCount; // Rx dma count
UCHAR AiUnderrunRetry; // The underrun retry mechanism
UCHAR AiForceDpx; // duplex setting
USHORT AiTempSpeed; // 'Speed', user over-ride of line speed
USHORT AiThreshold; // 'Threshold', Transmit Threshold
BOOLEAN MWIEnable; // Memory Write Invalidate bit in the PCI command word
UCHAR Congest; // Enables congestion control
UCHAR SpeedDuplex; // New reg value for speed/duplex
NDIS_MEDIA_STATE MediaState;
NDIS_DEVICE_POWER_STATE CurrentPowerState;
NDIS_DEVICE_POWER_STATE NextPowerState;
UCHAR OldParameterField;
// WMI support
ULONG CustomDriverSet;
ULONG HwErrCount;
// Minimize init-time
BOOLEAN bQueryPending;
BOOLEAN bSetPending;
BOOLEAN bResetPending;
NDIS_MINIPORT_TIMER LinkDetectionTimer;
MP_QUERY_REQUEST QueryRequest;
MP_SET_REQUEST SetRequest;
BOOLEAN bLinkDetectionWait;
BOOLEAN bLookForLink;
UCHAR CurrentScanPhyIndex;
UCHAR LinkDetectionWaitCount;
UCHAR FoundPhyAt;
USHORT EepromAddressSize;
MP_POWER_MGMT PoMgmt;
#if LBFO
PMP_ADAPTER PrimaryAdapter;
LONG NumSecondary;
PMP_ADAPTER NextSecondary;
NDIS_SPIN_LOCK LockLBFO;
LONG RefCountLBFO;
NDIS_STRING BundleId; // BundleId
#endif
NDIS_SPIN_LOCK SendLock;
NDIS_SPIN_LOCK RcvLock;
ULONG RcvRefCount; // number of packets that have not been returned back
NDIS_EVENT AllPacketsReturnedEvent;
ULONG WakeUpEnable;
#if OFFLOAD
// Add for checksum offloading
LONG SharedMemRefCount;
ULONG OffloadSharedMemSize;
OFFLOAD_SHARED_MEM OffloadSharedMem;
NIC_TASK_OFFLOAD NicTaskOffload;
NIC_CHECKSUM_OFFLOAD NicChecksumOffload;
NDIS_TASK_TCP_LARGE_SEND LargeSendInfo;
BOOLEAN OffloadEnable;
NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
#endif
} MP_ADAPTER, *PMP_ADAPTER;
//--------------------------------------
// Stall execution and wait with timeout
//--------------------------------------
/*++
_condition - condition to wait for
_timeout_ms - timeout value in milliseconds
_result - TRUE if condition becomes true before it times out
--*/
#define MP_STALL_AND_WAIT(_condition, _timeout_ms, _result) \
{ \
int counter; \
_result = FALSE; \
for(counter = _timeout_ms * 50; counter != 0; counter--) \
{ \
if(_condition) \
{ \
_result = TRUE; \
break; \
} \
NdisStallExecution(20); \
} \
}
__inline VOID MP_STALL_EXECUTION(
IN UINT MsecDelay)
{
// Delay in 100 usec increments
MsecDelay *= 10;
while (MsecDelay)
{
NdisStallExecution(100);
MsecDelay--;
}
}
#if LBFO
#define MP_GET_ADAPTER_HANDLE(_A) (_A)->PrimaryAdapter->AdapterHandle
typedef struct _MP_GLOBAL_DATA
{
LIST_ENTRY AdapterList;
NDIS_SPIN_LOCK Lock;
ULONG ulIndex;
} MP_GLOBAL_DATA, *PMP_GLOBAL_DATA;
#else
#define MP_GET_ADAPTER_HANDLE(_A) (_A)->AdapterHandle
#endif
__inline NDIS_STATUS MP_GET_STATUS_FROM_FLAGS(PMP_ADAPTER Adapter)
{
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
if(MP_TEST_FLAG(Adapter, fMP_ADAPTER_RESET_IN_PROGRESS))
{
Status = NDIS_STATUS_RESET_IN_PROGRESS;
}
else if(MP_TEST_FLAG(Adapter, fMP_ADAPTER_HARDWARE_ERROR))
{
Status = NDIS_STATUS_DEVICE_FAILED;
}
else if(MP_TEST_FLAG(Adapter, fMP_ADAPTER_NO_CABLE))
{
Status = NDIS_STATUS_NO_CABLE;
}
return Status;
}
//--------------------------------------
// Miniport routines in MP_MAIN.C
//--------------------------------------
NDIS_STATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath);
VOID MPAllocateComplete(
NDIS_HANDLE MiniportAdapterContext,
IN PVOID VirtualAddress,
IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG Length,
IN PVOID Context);
BOOLEAN MPCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext);
VOID MPHalt(
IN NDIS_HANDLE MiniportAdapterContext);
NDIS_STATUS MPInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE WrapperConfigurationContext);
VOID MPHandleInterrupt(
IN NDIS_HANDLE MiniportAdapterContext);
VOID MPIsr(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueMiniportHandleInterrupt,
IN NDIS_HANDLE MiniportAdapterContext);
NDIS_STATUS MPQueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded);
NDIS_STATUS MPReset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext);
VOID MPReturnPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet);
VOID MPSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
NDIS_STATUS MPSetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded);
VOID MPShutdown(
IN NDIS_HANDLE MiniportAdapterContext);
VOID MPCancelSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CancelId);
VOID MPPnPEventNotify(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_DEVICE_PNP_EVENT PnPEvent,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength);
NDIS_STATUS
MPSetPowerD0Private (
IN MP_ADAPTER* pAdapter
);
VOID
MPSetPowerLowPrivate(
PMP_ADAPTER Adapter
);
VOID
MpExtractPMInfoFromPciSpace(
PMP_ADAPTER pAdapter,
PUCHAR pPciConfig
);
VOID
HwSetWakeUpConfigure(
IN PMP_ADAPTER pAdapter,
IN PUCHAR pPoMgmtConfigType,
IN UINT WakeUpParameter
);
BOOLEAN
MPIsPoMgmtSupported(
IN PMP_ADAPTER pAdapter
);
VOID
NICIssueSelectiveReset(
PMP_ADAPTER Adapter);
NDIS_STATUS
MPCalculateE100PatternForFilter (
IN PUCHAR pFrame,
IN ULONG FrameLength,
IN PUCHAR pMask,
IN ULONG MaskLength,
OUT PULONG pSignature
);
VOID
MPRemoveAllWakeUpPatterns(
PMP_ADAPTER pAdapter
);
VOID
MpSetPowerLowComplete(
IN PMP_ADAPTER Adapter
);
#if LBFO
VOID MPUnload(IN PDRIVER_OBJECT DriverObject);
VOID MpAddAdapterToList(PMP_ADAPTER Adapter);
VOID MpRemoveAdapterFromList(PMP_ADAPTER Adapter);
VOID MpPromoteSecondary(PMP_ADAPTER Adapter);
#endif
//
// Define different functions depending on OFFLOAD is on or not
//
#if OFFLOAD
#define MpSendPacketsHandler MPOffloadSendPackets
#define MP_FREE_SEND_PACKET_FUN(Adapter, pMpTcb) MP_OFFLOAD_FREE_SEND_PACKET(Adapter, pMpTcb)
#define MpSendPacketFun(Adapter, Packet, bFromQueue) MpOffloadSendPacket(Adapter, Packet, bFromQueue)
#else
#define MpSendPacketsHandler MPSendPackets
#define MP_FREE_SEND_PACKET_FUN(Adapter, pMpTcb) MP_FREE_SEND_PACKET(Adapter, pMpTcb)
#define MpSendPacketFun(Adapter, Packet, bFromQueue) MpSendPacket(Adapter, Packet,bFromQueue)
#endif // end OFFLOAD
#endif // _MP_H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -