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

📄 driver.h

📁 sis900网卡驱动程序
💻 H
字号:
#define	u32	ULONG
#define	u16	USHORT


enum en_phy_bits{
	ACCESS_bit = 1 << 4,
	RWCMD_shift = 5,
	RWCMD_read = 1 << RWCMD_shift,
	RWCMD_write = 0 << RWCMD_shift,
	REGADDR_shift = 6,
	PHYDATA_shift = 16
};

//////////////////////////////////////////////////////////////////////////////////
typedef struct tagRING_STRU {
	ULONG	link;
	ULONG	cmdsts;
	ULONG	bufptr;
}RING_STRU, *PRING_STRU;

//记录每个 tx_ring[] 所对应的 pkt 信息
typedef struct tagTX_COMPLETE{
	PNDIS_BUFFER	buff;
	ULONG			MapReg;
	PNDIS_PACKET	pkt;
}TX_COMPLETE, *PTX_COMPLETE;
 
typedef struct tagADAPTER{
	NDIS_HANDLE		MiniportAdapterHandle;
	NDIS_HANDLE		WrapperConfigurationContext;
	UCHAR		NetworkAddress[6];

	ULONG		BaseIO;
	PUCHAR		ioaddr;
	NDIS_MINIPORT_INTERRUPT	IntObj;

	//tx
	PRING_STRU				tx_ring;
	NDIS_PHYSICAL_ADDRESS	tx_ring_dma;

	UINT		dirty_tx;
	UINT		cur_tx;
	UINT		free_tx;
	TX_COMPLETE tx_complete[NUM_TX_DESC];

	//tx_buf 当发送区太散(>4) 或太短(<256)
	PUCHAR		tx_bufs;
	NDIS_PHYSICAL_ADDRESS	tx_buf_dma;
	UINT		cur_tx_bufs, free_tx_bufs;


	//rx
	PRING_STRU				rx_ring; 
	NDIS_PHYSICAL_ADDRESS	rx_ring_dma;
	PUCHAR					rx_bufs;
	NDIS_PHYSICAL_ADDRESS	rx_buf_dma;

	UINT		dirty_rx;
	UINT		free_rx;

	//
	NDIS_HANDLE	pkt_pool;
	NDIS_HANDLE	buf_pool;

	PNDIS_PACKET	rx_pkt[NUM_RX_DESC];
	PNDIS_BUFFER	rx_buf[NUM_RX_DESC];
	
	//
	ULONG		PacketFilter;
	USHORT		mc_filter[8];

	//isr status
	ULONG		curISR;

	NDIS_SPIN_LOCK	lock;
	//
	ULONG			ERR_COUNT;
	ULONG			XMIT_OK, XMIT_ERR;
	ULONG			RCV_OK, RCV_ERR;
	ULONG			RCV_NO_BUFFER;
}ADAPTER, *PADAPTER;

#define	NextTxDesc(i)	(i) == (NUM_TX_DESC - 1) ? 0 : (i + 1)
#define	NextRxDesc(i)	(i) == (NUM_RX_DESC - 1) ? 0 : (i + 1)

#define		MAX_ETHERNET_FRAME_SIZE	1518
#define		MIN_ETHERNET_FRAME_SIZE	64
#define	MAX_MAP_REG		4

#define		MULTICAST_FILTER_LIMIT		128



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

VOID 
RHalt(
    IN NDIS_HANDLE  MiniportAdapterContext
    );

RSet(
                   IN NDIS_HANDLE MiniportAdapterContext,
                   IN NDIS_OID Oid,
                   IN PVOID InformationBuffer,
                   IN ULONG InformationBufferLength,
                   OUT PULONG BytesRead,
                   OUT PULONG BytesNeeded
                   );

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

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

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

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

VOID
RIsr(
    OUT PBOOLEAN  InterruptRecognized,
    OUT PBOOLEAN  QueueMiniportHandleInterrupt,
    IN NDIS_HANDLE  MiniportAdapterContext
    );

VOID 
RIsrDpc(
    IN NDIS_HANDLE  MiniportAdapterContext
    );

VOID
FreeRes(PADAPTER	adapter);

NDIS_STATUS
StartDevice(
		PADAPTER	adapter
		);

NDIS_STATUS
AllocRes(
		PADAPTER	adapter
		);

VOID
SendPkt(
	IN PADAPTER		 adapter,
    IN PNDIS_PACKET  Packet
	);

VOID
TxInt(
			PADAPTER adapter
			);

VOID
RxInt(
			PADAPTER adapter
			);


//
#define		INIT_CODE	//		code_seg("_ITEXT", "ICODE")
#define		PAGE_CODE	//		code_seg("_PTEXT", "PCODE")
#define		LOCK_CODE	//		code_seg("_LTEXT", "LCODE")




//
/* Serial EEPROM section. */

USHORT
ReadEEPROM(
		PADAPTER	adapter,
		USHORT		ReadReg, //6 bit addr
		UCHAR		addrlen
		);

UINT
RevOnePacket(
		PADAPTER adapter
		);


VOID
ResetNIC(
		PADAPTER	adapter
		);

VOID
init_rxfilter(
		PADAPTER	adapter
		);

VOID
set_rx_mode(
		PADAPTER	adapter
		);

VOID
check_mode(
		PADAPTER	adapter
		);

VOID
read_mode(
		PADAPTER	adapter,
		UINT		*speed,
		UINT		*duplex
		);

NDIS_STATUS
allocpool(
	PADAPTER adapter
	);

VOID
PrintRxStatus(
		PADAPTER	adapter
		);

VOID
setPHY(
	   PADAPTER	adapter
	   );

USHORT
opPHY(
		PADAPTER	adapter,
		UCHAR		reg,
		UCHAR		op,
		USHORT		data
		);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -