📄 driver.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 + -