📄 rtl8029sw.h
字号:
BOOLEAN MWIEnable;
//
// 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];
//
// RTL8029 address of the beginning of the packet.
//
PUCHAR PacketHeaderLoc;
//
// Lookahead buffer
//
UCHAR Lookahead[RTL8029_MAX_LOOKAHEAD + RTL8029_HEADER_SIZE];
//
// List of multicast addresses in use.
//
CHAR Addresses[DEFAULT_MULTICASTLISTMAX][RTL8029_LENGTH_OF_ADDRESS];
} RTL8029_ADAPTER, * PRTL8029_ADAPTER;
//
// Given a MiniportContextHandle return the PRTL8029_ADAPTER
// it represents.
//
#define PRTL8029_ADAPTER_FROM_CONTEXT_HANDLE(Handle) \
((PRTL8029_ADAPTER)(Handle))
//
// Given a pointer to a RTL8029_ADAPTER return the
// proper MiniportContextHandle.
//
#define CONTEXT_HANDLE_FROM_PRTL8029_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 RTL8029.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 _RTL8029_PROC_ID {
cardReset,
cardCopyDownPacket,
cardCopyDownBuffer,
cardCopyUp
} RTL8029_PROC_ID;
//
// Special error log codes.
//
#define RTL8029_ERRMSG_CARD_SETUP (ULONG)0x01
#define RTL8029_ERRMSG_DATA_PORT_READY (ULONG)0x02
#define RTL8029_ERRMSG_HANDLE_XMIT_COMPLETE (ULONG)0x04
//
// Declarations for functions in RTL8029.c.
//
NDIS_STATUS
RTL8029SetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
VOID
RTL8029Halt(
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
RTL8029RegisterAdapter(
IN PRTL8029_ADAPTER Adapter,
IN NDIS_HANDLE ConfigurationHandle,
IN BOOLEAN ConfigError,
IN ULONG ConfigErrorValue
);
NDIS_STATUS
RTL8029Initialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE ConfigurationHandle
);
NDIS_STATUS
RTL8029TransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer
);
NDIS_STATUS
RTL8029Send(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT Flags
);
NDIS_STATUS
RTL8029Reset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
RTL8029QueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded
);
VOID
RTL8029Halt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
OctogmetusceratorRevisited(
IN PRTL8029_ADAPTER Adapter
);
NDIS_STATUS
DispatchSetPacketFilter(
IN PRTL8029_ADAPTER Adapter
);
NDIS_STATUS
DispatchSetMulticastAddressList(
IN PRTL8029_ADAPTER Adapter
);
//
// Interrup.c
//
VOID
RTL8029EnableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
RTL8029DisableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
RTL8029Isr(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueDpc,
IN PVOID Context
);
VOID
RTL8029HandleInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
BOOLEAN
RTL8029PacketOK(
IN PRTL8029_ADAPTER Adapter
);
VOID
RTL8029XmitDpc(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
RTL8029RcvDpc(
IN PRTL8029_ADAPTER Adapter
);
//
// Declarations of functions in card.c.
//
BOOLEAN
CardCheckParameters(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardInitialize(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardReadEthernetAddress(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardSetup(
IN PRTL8029_ADAPTER Adapter
);
VOID
CardStop(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardTest(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardReset(
IN PRTL8029_ADAPTER Adapter
);
BOOLEAN
CardCopyDownPacket(
IN PRTL8029_ADAPTER Adapter,
IN PNDIS_PACKET Packet,
OUT UINT * Length
);
BOOLEAN
CardCopyDown(
IN PRTL8029_ADAPTER Adapter,
IN PUCHAR TargetBuffer,
IN PUCHAR SourceBuffer,
IN UINT Length
);
BOOLEAN
CardCopyUp(
IN PRTL8029_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[RTL8029_LENGTH_OF_ADDRESS],
OUT UCHAR * Byte,
OUT UCHAR * Value
);
VOID
CardFillMulticastRegs(
IN PRTL8029_ADAPTER Adapter
);
VOID
CardSetBoundary(
IN PRTL8029_ADAPTER Adapter
);
VOID
CardStartXmit(
IN PRTL8029_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 // RTL8029SFT
#define MAX_PCI_CARDS 5
typedef struct _PCI_CARDS_FOUND_STRUC
{
USHORT NumFound;
struct
{
ULONG BaseIo;
UCHAR ChipRevision;
ULONG SubVendor_DeviceID;
USHORT SlotNumber; // Ndis Slot number
ULONG MemPhysAddress; // CSR Physical address
ULONG Level;
ULONG Vector;
UCHAR NodeAddress[ETH_LENGTH_OF_ADDRESS];
} PciSlotInfo[MAX_PCI_CARDS];
} PCI_CARDS_FOUND_STRUC, *PPCI_CARDS_FOUND_STRUC;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -