📄 lan91c111.h
字号:
#define CFG_EXTPHY 0x0200 // Set squelch level
//Base Address Register (BANK1_BASE)
#define BASE_IO_ADR 0xff00 // Mask IO base address (a15,a14,a13,a9,a8,a7,a6,a5)
//Configuration Control Register (BANK1_CTL)
#define CTL_RCV_BAD 0x4000 // Receive bad CRC packets
#define CTL_AUTO 0x0800 // Auto-release xmit memory
#define CTL_LE_EN 0x0080 // Link error enable (mux into EPH int)
#define CTL_CR_EN 0x0040 // Counter rollover enable (mux into EPH int)
#define CTL_TE_EN 0x0020 // Xmit error enable (mux into EPH int)
#define CTL_EEPROM 0x0004 // EEPROM select
#define CTL_RELOAD 0x0002 // Reload from EEPROM
#define CTL_STORE 0x0001 // Store to EEPROM
//MMU Command Register (BANK2_MMU_CMD)
#define MMUCMD_MSK 0x00e0 // Mask out command
#define MMUCMD_MEM_SZ 0x0007 // Mask size of request (if cmd = alloc) amount = (value + 1) * 256 bytes
#define MMUCMD_BUSY 0x0001 // MMU busy don't mod PNR
//MMU Commands
#define CMD_NOP 0 // No-Op command
#define CMD_ALLOC 0x0020 // Allocate memory
#define CMD_RIS 0x0040 // Reset to initial state
#define CMD_REM_TOP 0x0060 // Remove frame from top of RX fifo
#define CMD_REM_TXFIFO 0x0070 // Remove top of TX fifo to Tx Completion Fifo
#define CMD_REM_REL_TOP 0x0080 // Remove and release top of RX fifo
#define CMD_REL_SPEC 0x00a0 // Release specific packet
#define CMD_ENQ_TX 0x00c0 // Enqueue to xmit fifo
#define CMD_ENQ_RX 0x00e0 // Reset xmit fifos (should only be done with transmitter disabled)
//Allocation Result Register (BANK2_ARR) This is an 8 bit register
#define ARR_FAIL 0x80 // Allocation failed
#define ARR_ALLOC_MSK 0x7f // Mask allocated packet number
//Fifo Port Registers (BANK2_TX_FIFO, BANK2_RX_FIFO) These are 8 bit registers
#define FIFO_EMPTY 0x0080 // No packet at top of fifo
#define FIFO_RX_EMPTY 0x8000 // Recieve FIFO Empty when set
#define FIFI_MASK 0x007f // Mask top packet number
//Pointer Register (BANK2_PTR)
#define PTR_RCV 0x8000 // Access is to receive area
#define PTR_AUTO 0x4000 // Auto-increment on access
#define PTR_READ 0x2000 // =1 then read operation =0 then write operation
#define PTR_ETEN 0x1000 // Detect early transmit underrun
#define PTR_AUTO_TX 0x0800 // Write fifo not empty
#define PTR_NOT_EMPTY 0x0800 // Write fifo not empty
#define PTR_OFFSET 0x03ff // Mask pointer value
//Interrupt Registers (BANK2_INT_STS, BANK2_INT_ACK, BANK2_INT_MSK)
#define INT_MDINT 0x80 // 91C111 MDINT interrupt
#define INT_EARLY_RX 0x40 // Early receive
#define INT_EPH_INT 0x20 // EPH type interrupt
#define INT_RX_OVRN 0x10 // Receive overrun interrupt
#define INT_ALLOC 0x08 // Allocation interrupt
#define INT_TXF_EMPTY 0x04 // Xmit fifo empty interrupt
#define INT_TX_CMP 0x02 // Xmit complete interrupt
#define INT_RX_CMP 0x01 // Receive complete interrupt
#define ENABLED_INTS (INT_MDINT | INT_TX_CMP | INT_RX_CMP | INT_EPH_INT | INT_RX_OVRN)
//Isolate packet number in PNR
#define PNR_MASK 0x7f
//Management Interface Register (BANK3_MGMT)
#define MGMT_MDOE 0x0008 // Output enable
#define MGMT_MCLK 0x0004 // Drive MDCLK
#define MGMT_MDI 0x0002 // Read MDI pin
#define MGMT_MDO 0x0001 // Write MDO pin
//Revision Register (BANK3_REV)
#define REV_CHIP_ID 0x00f0 // Mask chip ID
#define REV_REV_ID 0x000f // Mask chip revision.
#define CHIP_ID_111 0x0009 // Chip is 91c111/113
//Early Receive Register (Bank3_Ercv)
#define ERCV_DISCARD 0x0080 // Discard packet being received
#define ERCV_THRESHOLD 0x001f // Threshold for ERCV-INT in 64 byte units
#define DEFAULT_CONFIGURATION 0xA0B1 // Bank1/Offset0
//Phy Register Definitions
#define PHY_MASK_BASE 0xFFC0
#define PHY_MASK_INT ~0x8000
#define PHY_MASK_LINK ~0x4000
//Receive frame status word
#define RFS_ALIGN 0x8000 // Frame alignment error
#define RFS_BCAST 0x4000 // Frame was broadcast
#define RFS_CRC 0x2000 // Frame CRC error
#define RFS_ODD 0x1000 // Frame has odd byte count
#define RFS_LONG 0x0800 // Frame was too long
#define RFS_SHORT 0x0400 // Frame was too short
#define RFS_MCAST 0x0001 // Frame was multicast
#define RFS_HASH 0x00fe // Mask hash value (multicast)
#define RFS_ERROR (RFS_ALIGN | RFS_CRC | RFS_LONG | RFS_SHORT)
#define FRAME_OVERHEAD 6 // Overhead bytes for adapter control
//Transmit frame status word (Same masks used for EPH status register)
#define TFS_UNDERRUN 0x8000 // Frame uderrun
#define TFS_LINKERROR 0x4000 // 10BASET link error condition
#define TFS_RXOVERRUN 0x2000 // Receiver overrun
#define TFS_COUNTER 0x1000 // Counter roll over
#define TFS_EXDEFER 0x0800 // Excessive deferral
#define TFS_CARRIER 0x0400 // Carrier not present
#define TFS_LATE 0x0200 // Late collision
#define TFS_DEFER 0x0080 // Frame was deferred
#define TFS_BCAST 0x0040 // Last frame was broadcast
#define TFS_SQET 0x0020 // Signal Quality Error
#define TFS_16COL 0x0010 // Too many collisions
#define TFS_MCAST 0x0008 // Last frame was multicast
#define TFS_MULTICOL 0x0004 // Multiple collisions on last frame
#define TFS_1COL 0x0002 // Single collision on last frame
#define TFS_OKAY 0x0001 // Frame successfully transmitted
#define TFS_ERROR (TFS_UNDERRUN | TFS_EXDEFER | TFS_CARRIER | TFS_LATE | TFS_16COL)
//Frame send/receive control byte
#define CTL_BYTE_ODD 0x20 // Frame ends on odd byte boundary
#define CTL_BYTE_CRC 0x10 // Append CRC on xmit
//------------------------ GLOBAL OID ------------------------------
//Supported OIDs
static const NDIS_OID GlobalObjects[] =
{
OID_GEN_SUPPORTED_LIST,
OID_GEN_MEDIA_SUPPORTED,
OID_GEN_MEDIA_IN_USE,
OID_GEN_MAXIMUM_LOOKAHEAD,
OID_GEN_MAXIMUM_FRAME_SIZE,
OID_GEN_LINK_SPEED,
OID_GEN_TRANSMIT_BUFFER_SPACE,
OID_GEN_RECEIVE_BUFFER_SPACE,
OID_GEN_TRANSMIT_BLOCK_SIZE,
OID_GEN_RECEIVE_BLOCK_SIZE,
OID_GEN_VENDOR_ID,
OID_GEN_VENDOR_DESCRIPTION,
OID_GEN_CURRENT_LOOKAHEAD,
OID_GEN_DRIVER_VERSION,
OID_GEN_MAXIMUM_TOTAL_SIZE,
OID_GEN_MAC_OPTIONS,
OID_GEN_HARDWARE_STATUS,
OID_GEN_CURRENT_PACKET_FILTER,
OID_802_3_PERMANENT_ADDRESS,
OID_802_3_CURRENT_ADDRESS,
OID_802_3_MULTICAST_LIST,
OID_802_3_MAXIMUM_LIST_SIZE,
OID_802_3_RCV_ERROR_ALIGNMENT,
OID_802_3_XMIT_ONE_COLLISION,
OID_802_3_XMIT_MORE_COLLISIONS,
OID_GEN_MAXIMUM_SEND_PACKETS,
OID_GEN_VENDOR_DRIVER_VERSION,
OID_GEN_MEDIA_CONNECT_STATUS,
OID_GEN_XMIT_OK,
OID_GEN_RCV_OK,
OID_GEN_XMIT_ERROR,
OID_GEN_RCV_ERROR,
OID_GEN_RCV_NO_BUFFER
};
//OID Return Strings
//OID Query return strings.
#define DRV_VENDOR_NAME "SMSC-LAN91C111 Ethernet Adapter"
#define SIZE_DRV_VENDOR_NAME sizeof(DRV_VENDOR_NAME)
//Status
#define MEDIA_CONNECTED 0x01
#define MEDIA_DISCONNECTED 0x02
//Defines possible states for MAC structures.
typedef enum _STATE_TYPE
{
VOID_STATE, // Illegal value.
INITIALIZING_STATE, // Structure is being built.
NORMAL_STATE, // Operational state.
RESET_STATE
} STATE_TYPE;
#define MMU_WAIT 10 // Loop count waiting for memory allocation
//Prototypes
VOID LAN91C111_MiniportHalt (NDIS_HANDLE MiniportAdapterContext);
VOID LAN91C111_MiniPortHandleInterrupt (IN NDIS_HANDLE AdapterContext);
NDIS_STATUS LAN91C111_MiniportInitialize(
PNDIS_STATUS OpenErrorStatus,
PUINT SelectedMediumIndex,
PNDIS_MEDIUM MediumArray,
UINT MediumArraySize,
NDIS_HANDLE MiniportAdapterHandle,
NDIS_HANDLE WrapperConfigurationContext
);
VOID LAN91C111_MiniportISR (
PBOOLEAN InterruptRecognized,
PBOOLEAN QueueMiniportHandleInterrupt,
NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS LAN91C111_MiniportQueryInformation(
NDIS_HANDLE AdapterContext,
NDIS_OID Oid,
PVOID InformationBuffer,
ULONG InformationBufferLength,
PULONG BytesWritten,
PULONG BytesNeeded
);
NDIS_STATUS LAN91C111_MiniportReset (
PBOOLEAN AddressingReset,
NDIS_HANDLE AdapterContext
);
NDIS_STATUS LAN91C111_MiniportSend (
NDIS_HANDLE AdapterContext,
PNDIS_PACKET Packet,
UINT Flags
);
NDIS_STATUS LAN91C111_AdapterWriteData (
MINIPORT_ADAPTER *Adapter,
PNDIS_PACKET pNDISPacket,
UINT PacketNumber
);
NDIS_STATUS LAN91C111_AdapterAllocBuffer(
MINIPORT_ADAPTER *Adapter,
USHORT *PacketNumber
);
NDIS_STATUS LAN91C111_MiniportSetInformation(
NDIS_HANDLE MiniportAdapterContext,
NDIS_OID Oid,
PVOID InformationBuffer,
ULONG InformationBufferLength,
PULONG BytesRead,
PULONG BytesNeeded
);
NDIS_STATUS LAN91C111_MiniportTransferData(
PNDIS_PACKET Packet,
PUINT BytesTransferred,
NDIS_HANDLE MiniportAdapterContext,
NDIS_HANDLE MiniportReceiveContext,
UINT ByteOffset,
UINT BytesToTransfer
);
VOID LAN91C111_MiniportEnableInterrupt(
NDIS_HANDLE MiniportAdapterContext
);
VOID LAN91C111_MiniportDisableInterrupt(
NDIS_HANDLE MiniportAdapterContext
);
VOID MD_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID EPH_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID RX_OVRN_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID ALLOC_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID TX_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID RCV_Interrupt_Handler (MINIPORT_ADAPTER *Adapter);
VOID AllocIntEnabler (MINIPORT_ADAPTER *Adapter);
UINT ReadPhyRegister (
ULONG IOBase,
UCHAR PhyReg
);
void WritePhyRegister (
ULONG IOBase,
UCHAR PhyReg,
USHORT Value
);
BOOLEAN EstablishLink (MINIPORT_ADAPTER *Adapter);
VOID AdapterWrite (MINIPORT_ADAPTER *Adapter,
MINIPORT_PACKET *Packet);
BOOLEAN AllocateTxBuffer (MINIPORT_ADAPTER *Adapter,
MINIPORT_PACKET **Packet);
VOID DumpRegisters (MINIPORT_ADAPTER *Adapter);
NDIS_STATUS MiniPortChangeFilter (
MINIPORT_ADAPTER *Adapter,
NDIS_OID NewFilter);
NDIS_STATUS MiniPortChangeAddresses (
MINIPORT_ADAPTER *Adapter,
UCHAR *AddressList,
UINT AddressCount);
BOOLEAN CheckMultiCastAddress (
USHORT *ReadBuffer,
MINIPORT_ADAPTER *Adapter);
BOOLEAN LAN91C111_MiniportCheckforHang (
NDIS_HANDLE AdapterContext
);
NDIS_STATUS CopyInfo (UCHAR *, UCHAR *, UINT, UINT, UINT *, UINT *);
void BackOut (MINIPORT_ADAPTER *Adapter);
#endif _LAN91C111_ADAPTER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -