?? ne2000sw.h
字號:
//
// TRUE if a receive buffer overflow occured.
//
BOOLEAN BufferOverflow;
//
// TRUE if the driver needs to call NdisMEthIndicateReceiveComplete
//
BOOLEAN IndicateReceiveDone;
//
// TRUE if this is an NE2000 in an eight bit slot.
//
BOOLEAN EightBitSlot;
//
// Statistics used by Set/QueryInformation.
//
ULONG FramesXmitGood; // Good Frames Transmitted
ULONG FramesRcvGood; // Good Frames Received
ULONG FramesXmitBad; // Bad Frames Transmitted
ULONG FramesXmitOneCollision; // Frames Transmitted with one collision
ULONG FramesXmitManyCollisions; // Frames Transmitted with > 1 collision
ULONG FrameAlignmentErrors; // FAE errors counted
ULONG CrcErrors; // CRC errors counted
ULONG MissedPackets; // missed packet counted
//
// Reset information.
//
UCHAR NicMulticastRegs[8]; // contents of card multicast registers
UCHAR NicReceiveConfig; // contents of NIC RCR
UCHAR NicInterruptMask; // contents of NIC IMR
//
// The lookahead buffer size in use.
//
ULONG MaxLookAhead;
//
// These are for the current packet being indicated.
//
//
// The NIC appended header. Used to find corrupted receive packets.
//
UCHAR PacketHeader[4];
//
// Ne2000 address of the beginning of the packet.
//
PUCHAR PacketHeaderLoc;
//
// Lookahead buffer
//
UCHAR Lookahead[NE2000_MAX_LOOKAHEAD + NE2000_HEADER_SIZE];
//
// List of multicast addresses in use.
//
CHAR Addresses[DEFAULT_MULTICASTLISTMAX][NE2000_LENGTH_OF_ADDRESS];
} NE2000_ADAPTER, * PNE2000_ADAPTER;
//
// Given a MiniportContextHandle return the PNE2000_ADAPTER
// it represents.
//
#define PNE2000_ADAPTER_FROM_CONTEXT_HANDLE(Handle) \
((PNE2000_ADAPTER)(Handle))
//
// Given a pointer to a NE2000_ADAPTER return the
// proper MiniportContextHandle.
//
#define CONTEXT_HANDLE_FROM_PNE2000_ADAPTER(Ptr) \
((NDIS_HANDLE)(Ptr))
//
// Macros to extract high and low bytes of a word.
//
#define MSB(Value) ((UCHAR)((((ULONG)Value) >> 8) & 0xff))
#define LSB(Value) ((UCHAR)(((ULONG)Value) & 0xff))
//
// What we map into the reserved section of a packet.
// Cannot be more than 8 bytes (see ASSERT in ne2000.c).
//
typedef struct _MINIPORT_RESERVED {
PNDIS_PACKET Next; // used to link in the queues (4 bytes)
} MINIPORT_RESERVED, * PMINIPORT_RESERVED;
//
// Retrieve the MINIPORT_RESERVED structure from a packet.
//
#define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))
//
// Procedures which log errors.
//
typedef enum _NE2000_PROC_ID {
cardReset,
cardCopyDownPacket,
cardCopyDownBuffer,
cardCopyUp
} NE2000_PROC_ID;
//
// Special error log codes.
//
#define NE2000_ERRMSG_CARD_SETUP (ULONG)0x01
#define NE2000_ERRMSG_DATA_PORT_READY (ULONG)0x02
#define NE2000_ERRMSG_HANDLE_XMIT_COMPLETE (ULONG)0x04
//
// Declarations for functions in ne2000.c.
//
NDIS_STATUS
Ne2000SetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
VOID
Ne2000Halt(
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
Ne2000RegisterAdapter(
IN PNE2000_ADAPTER Adapter,
IN NDIS_HANDLE ConfigurationHandle,
IN BOOLEAN ConfigError,
IN ULONG ConfigErrorValue
);
NDIS_STATUS
Ne2000Initialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE ConfigurationHandle
);
NDIS_STATUS
Ne2000TransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer
);
NDIS_STATUS
Ne2000Send(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT Flags
);
NDIS_STATUS
Ne2000Reset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
Ne2000QueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded
);
VOID
Ne2000Halt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
OctogmetusceratorRevisited(
IN PNE2000_ADAPTER Adapter
);
NDIS_STATUS
DispatchSetPacketFilter(
IN PNE2000_ADAPTER Adapter
);
NDIS_STATUS
DispatchSetMulticastAddressList(
IN PNE2000_ADAPTER Adapter
);
//
// Interrup.c
//
VOID
Ne2000EnableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
Ne2000DisableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
Ne2000Isr(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueDpc,
IN PVOID Context
);
VOID
Ne2000HandleInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
BOOLEAN
Ne2000PacketOK(
IN PNE2000_ADAPTER Adapter
);
VOID
Ne2000XmitDpc(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
Ne2000RcvDpc(
IN PNE2000_ADAPTER Adapter
);
//
// Declarations of functions in card.c.
//
BOOLEAN
CardCheckParameters(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardInitialize(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardReadEthernetAddress(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardSetup(
IN PNE2000_ADAPTER Adapter
);
VOID
CardStop(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardTest(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardReset(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
CardCopyDownPacket(
IN PNE2000_ADAPTER Adapter,
IN PNDIS_PACKET Packet,
OUT UINT * Length
);
BOOLEAN
CardCopyDown(
IN PNE2000_ADAPTER Adapter,
IN PUCHAR TargetBuffer,
IN PUCHAR SourceBuffer,
IN UINT Length
);
BOOLEAN
CardCopyUp(
IN PNE2000_ADAPTER Adapter,
IN PUCHAR Target,
IN PUCHAR Source,
IN UINT Length
);
ULONG
CardComputeCrc(
IN PUCHAR Buffer,
IN UINT Length
);
VOID
CardGetPacketCrc(
IN PUCHAR Buffer,
IN UINT Length,
OUT UCHAR Crc[4]
);
VOID
CardGetMulticastBit(
IN UCHAR Address[NE2000_LENGTH_OF_ADDRESS],
OUT UCHAR * Byte,
OUT UCHAR * Value
);
VOID
CardFillMulticastRegs(
IN PNE2000_ADAPTER Adapter
);
VOID
CardSetBoundary(
IN PNE2000_ADAPTER Adapter
);
VOID
CardStartXmit(
IN PNE2000_ADAPTER Adapter
);
BOOLEAN
SyncCardStop(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardGetXmitStatus(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardGetCurrent(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardSetReceiveConfig(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardSetAllMulticast(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardCopyMulticastRegs(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardSetInterruptMask(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardAcknowledgeOverflow(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardUpdateCounters(
IN PVOID SynchronizeContext
);
BOOLEAN
SyncCardHandleOverflow(
IN PVOID SynchronizeContext
);
/*++
Routine Description:
Determines the type of the interrupt on the card. The order of
importance is overflow, then transmit complete, then receive.
Counter MSB is handled first since it is simple.
Arguments:
Adapter - pointer to the adapter block
InterruptStatus - Current Interrupt Status.
Return Value:
The type of the interrupt
--*/
#define CARD_GET_INTERRUPT_TYPE(_A, _I) \
(_I & ISR_COUNTER) ? \
COUNTER : \
(_I & ISR_OVERFLOW ) ? \
SyncCardUpdateCounters(_A), OVERFLOW : \
(_I & (ISR_XMIT|ISR_XMIT_ERR)) ? \
TRANSMIT : \
(_I & ISR_RCV) ? \
RECEIVE : \
(_I & ISR_RCV_ERR) ? \
SyncCardUpdateCounters(_A), RECEIVE : \
UNKNOWN
#endif // NE2000SFT
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -