⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl8139sw.h

📁 Realtek8139小端口网卡驱动程序源代码
💻 H
📖 第 1 页 / 共 2 页
字号:






#define		NUM_OF_DESC		4 

#define		RX_BUF_SIZE		TX_BUF_SIZE


#define		RING_BUF_SIZE	0x4000	//接收缓冲区 16 k
#define		RING_BUF_PAD	TX_BUF_SIZE

#define		MIN_ETHERNET_FRAME_SIZE	64

#define	NextTxDesc(i)	(i) == (NUM_OF_DESC - 1) ? 0 : (i + 1)





#define	USER_OID_REV_BYTE							0x02000000
#define	USER_OID_XMIT_BYTE							0x02000001

#define		MAX_ETHERNET_FRAME_SIZE	1518
#define		MAC_HEADER_SIZE			14
#define		MULTICAST_FILTER_LIMIT		32



//包头
typedef struct tagPACKETHEADER{
	USHORT	ROK : 1;
	USHORT  FAE : 1;
	USHORT	CRC : 1;
	USHORT	LONG: 1;
	USHORT	RUNT: 1;
	USHORT	ISE : 1;
	USHORT	reserved : 7;
	USHORT	BAR : 1;
	USHORT	PAM : 1;
	USHORT	MAR : 1;
	USHORT   PacketLength;
}PACKETHEADER, *PPACKETHEADER;






#define	NextRxDesc(i)	(i) == (NUM_OF_PACKETS - 1) ? 0 : (i + 1)







//
//  RTL8139.c.中的函数声明
//
NDIS_STATUS
RTL8139SetInformation(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesRead,
    OUT PULONG BytesNeeded
    );

VOID
RTL8139Halt(
    IN NDIS_HANDLE MiniportAdapterContext
    );

NDIS_STATUS
RTL8139RegisterAdapter(
    IN PRTL8139_ADAPTER Adapter,
    IN NDIS_HANDLE ConfigurationHandle,
    IN BOOLEAN ConfigError,
    IN ULONG ConfigErrorValue
    );

NDIS_STATUS
RTL8139Initialize(
    OUT PNDIS_STATUS OpenErrorStatus,
    OUT PUINT SelectedMediumIndex,
    IN PNDIS_MEDIUM MediumArray,
    IN UINT MediumArraySize,
    IN NDIS_HANDLE MiniportAdapterHandle,
    IN NDIS_HANDLE ConfigurationHandle
    );


NDIS_STATUS
RTL8139TransferData(
    OUT PNDIS_PACKET Packet,
    OUT PUINT BytesTransferred,
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_HANDLE MiniportReceiveContext,
    IN UINT ByteOffset,
    IN UINT BytesToTransfer
    );

NDIS_STATUS
RTL8139Send(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN PNDIS_PACKET Packet,
    IN UINT Flags
    );

NDIS_STATUS
RTL8139Reset(
    OUT PBOOLEAN AddressingReset,
    IN NDIS_HANDLE MiniportAdapterContext
    );

NDIS_STATUS
RTL8139QueryInformation(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesWritten,
    OUT PULONG BytesNeeded
    );

VOID
RTL8139Halt(
    IN NDIS_HANDLE MiniportAdapterContext
    );

VOID
OctogmetusceratorRevisited(
    IN PRTL8139_ADAPTER Adapter
    );

NDIS_STATUS
DispatchSetPacketFilter(
    IN PRTL8139_ADAPTER Adapter
    );

NDIS_STATUS
DispatchSetMulticastAddressList(
    IN PRTL8139_ADAPTER Adapter
    );




//
// Interrup.c
//

VOID
RTL8139EnableInterrupt(
    IN NDIS_HANDLE MiniportAdapterContext
    );

VOID
RTL8139DisableInterrupt(
    IN NDIS_HANDLE MiniportAdapterContext
    );

VOID
RTL8139Isr(
    OUT PBOOLEAN InterruptRecognized,
    OUT PBOOLEAN QueueDpc,
    IN PVOID Context
    );

VOID
RTL8139HandleInterrupt(
    IN NDIS_HANDLE MiniportAdapterContext
    );

BOOLEAN
RTL8139PacketOK(
    IN PRTL8139_ADAPTER Adapter
    );

VOID
RTL8139XmitDpc(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
RTL8139RcvDpc(
    IN PRTL8139_ADAPTER Adapter
    );



VOID
RTL8139SendPackets(
    IN NDIS_HANDLE  MiniportAdapterContext,
    IN PPNDIS_PACKET  PacketArray,
    IN UINT  NumberofPackets
    );


VOID
RTL8139ReturnPacket(
    IN NDIS_HANDLE  MiniportAdapterContext,
    IN PNDIS_PACKET  Packet
    ); 

//
//  card.c中函数的声明
//

BOOLEAN
CardCheckParameters(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardInitialize(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardReadEthernetAddress(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardSetup(
    IN PRTL8139_ADAPTER Adapter
    );

VOID
CardStop(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardTest(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardReset(
    IN PRTL8139_ADAPTER Adapter
    );

BOOLEAN
CardCopyDownPacket(
    IN PRTL8139_ADAPTER Adapter,
    IN PNDIS_PACKET Packet,
    OUT UINT * Length
    );

BOOLEAN
CardCopyDown(
    IN PRTL8139_ADAPTER Adapter,
    IN PUCHAR TargetBuffer,
    IN PUCHAR SourceBuffer,
    IN UINT Length
    );

BOOLEAN
CardCopyUp(
    IN PRTL8139_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[RTL8139_LENGTH_OF_ADDRESS],
    OUT UCHAR * Byte,
    OUT UCHAR * Value
    );

VOID
CardFillMulticastRegs(
    IN PRTL8139_ADAPTER Adapter
    );

VOID
CardSetBoundary(
    IN PRTL8139_ADAPTER Adapter
    );

VOID
CardStartXmit(
    IN PRTL8139_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
    );


USHORT
opEEPROM(
		PUCHAR		ioaddr,
		ULONG		locate, 
		OP_ENUM		op,	
		USHORT		data
		);



VOID
ResetNIC(
		PRTL8139_ADAPTER	adapter
		);



NDIS_STATUS
AllocResource(
		PRTL8139_ADAPTER	adapter
		);


NDIS_STATUS
StartDevice(
		PRTL8139_ADAPTER	adapter
		);



VOID
FreeResource(PRTL8139_ADAPTER	adapter);




BOOLEAN
PacketOK(
	PPACKETHEADER pPktHdr
	);



VOID
RxErrHandle(
		PRTL8139_ADAPTER adapter
		);


VOID
TxInterrupt(
			PRTL8139_ADAPTER adapter
			);

VOID
RxInterrupt(
			PRTL8139_ADAPTER adapter
			);



PNDIS_PACKET
ReceiveOnePacket(
		PRTL8139_ADAPTER adapter
		);


BOOLEAN
SendPacket(
	IN PRTL8139_ADAPTER		 adapter,
    IN PNDIS_PACKET  Packet
	);


ULONG
CopyPacketToBuf(
			PNDIS_PACKET packet,
			PUCHAR		 buffer
			);




VOID
IssueCMD(
	PRTL8139_ADAPTER	adapter,
	UINT		cur_tx,
	ULONG		paddr,
	UINT		len
	);





#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 






#define	MAX_PCI_CARDS			    5


typedef struct _PCI_CARDS_FOUND_STRUC
{
    USHORT NumFound;
    struct
    {
        ULONG           BaseIo;
        UCHAR           ChipRevision;
        ULONG           SubVendor_DeviceID;
        USHORT          SlotNumber;     
        ULONG           MemPhysAddress; 
       	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 + -