📄 ndis4cs8950.h
字号:
//**********************************************************************
//
// Filename: ndis4cs8950.h
//
// Description:
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Use of this source code is subject to the terms of the Cirrus end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to
// use this source code. For a copy of the EULA, please see the
// EULA.RTF on your install media.
//
// Copyright(c) Cirrus Logic Corporation 2005, All Rights Reserved
//
//**********************************************************************
#ifndef _ndis4pci_h_
#include <ndis.h>
#include "csv8950.h"
#define _ndis4pci_h_
// Strings/messages containing vendor specific information
#define VENDOR_FILEDESCRIPTION_STR "Cirrus Logic EP931x Ethernet Network Driver"
#define VENDOR_PRODUCT_NAME_STR "Cirrus Logic EP931x Ethernet Adapter"
//forward pointer declaration
typedef struct CHIP_t *PCHIP;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned char *PBYTE;
typedef unsigned short *PWORD;
typedef unsigned long *PDWORD;
typedef void *PVOID;
#define UNSPECIFIED (-1)
/* Ethernet Address */
typedef struct
{
WORD Part[3];
} EA, *PEA;
/* Chip Configuration */
typedef struct CFG_t
{
// PORT IOBase;
// WORD IOSize; /* In bytes */
DWORD MemoryBase;
WORD MemorySize; /* In bytes */
// DWORD ROMBase;
// WORD ROMSize; /* In bytes */
BYTE IntLine;
// BYTE DMALine;
EA EthernetAddr;
WORD RequestedMediaSpeed;
WORD DetectedMediaSpeed;
BYTE RequestedMediaType;
BYTE DetectedMediaType;
BYTE RequestedDuplexMode;
BYTE CurrentDuplexMode;
BYTE Filtering;
BYTE MaxTxCount;
BYTE MaxRxCount;
WORD LookAheadSize;
} CFG, *PCFG;
/* Media Type */
#define MEDIA_AUTO_DETECT 0x00
#define MEDIA_BASE_T 0x01
#define MEDIA_BASE_AUI 0x02
#define MEDIA_BASE_2 0x03
#define MEDIA_10_MBPS 0x0A
#define MEDIA_100_MBPS 0x64
#define MEDIA_PENDING 0xFE
#define MEDIA_NONE 0xFF
/* Duplex Mode */
#define DUPLEX_AUTO_NEGOTIATE 0x00
#define DUPLEX_HALF 0x01
#define DUPLEX_FULL 0x02
#define DUPLEX_PENDING 0xFE
#define DUPLEX_NONE 0xFF
/* Filtering */
#define FILTER_INDIVIDUAL_ACCEPT 0x01
#define FILTER_BROADCAST_ACCEPT 0x02
#define FILTER_MULTICAST_ACCEPT 0x04
#define FILTER_PROMISCUOUS_ACCEPT 0x08
/* Transmit Errors */
#define TX_ERR_NO_BUFFER 0x0001
#define TX_ERR_TOO_BIG 0x0002
#define TX_ERR_TOO_MANY_FRAGS 0x0004
#define TX_ERR_SQE_ERROR 0x0008
#define TX_ERR_JABBER 0x0010
#define TX_ERR_LOCK_FAIL 0x0020
#define TX_ERR_EXCESS_COLL 0x0100
#define TX_ERR_UNDERRUN 0x0200
#define TX_ERR_OUT_OF_WIN 0x0400
#define TX_ERR_LOSS_CRS 0x1000
#define TX_ERR_FRAME_ABORT 0x2000
/* Receive Errors */
#define RX_ERR_CRC_ERROR 0x0001
#define RX_ERR_EXTRA_DATA 0x0002
#define RX_ERR_RUNT 0x0004
#define RX_ERR_FRAMING 0x0008
#define RX_ERR_OVERRUN 0x0010
#define RX_ERR_RX_ERR 0x0020
#define RX_ERR_RX_MISS 0x0100
#define RX_ERR_DRIBBLE 0x0200
#define RX_ERR_TOO_MANY_FRAGS 0x0400
#define RX_ERR_NO_BUFFER 0x0800
/* Timer Event Handler Type */
typedef void (* TIMER_EVENT_HANDLER)( PCHIP pChip, WORD TimerID, PVOID pParm );
#define MAX_TIMERS 1
typedef struct
{
NDIS_MINIPORT_TIMER TimerHandle;
WORD TimerActive;
TIMER_EVENT_HANDLER TimerRoutine;
WORD TimerID;
PCHIP pChip;
PVOID pParm;
} VOMINITIMER, *PVOMINITIMER;
typedef struct
{
VOMINITIMER Timers[MAX_TIMERS];
} VOMINIPDATA, *PVOMINIPDATA;
#define VP_MAX_FRAMESIZE 1514
#define VP_MIN_FRAMESIZE 60
#define VP_HEADERSIZE 14
#define CRYSTAL_MCAST_LIST_SIZE 32 // @kml 6/24/99 changed from 6 ro 32
typedef struct txqueueelement
{
PNDIS_PACKET NextPacket;
NDIS_STATUS XmitRC;
} TXQUEUEELEMENT, *PTXQUEUEELEMENT;
typedef struct
{
char McastAddress[ETH_LENGTH_OF_ADDRESS];
} CRYSTALMCASTADDRESS, *PCRYSTALMCASTADDRESS;
typedef struct
{
NDIS_HANDLE vpMiniportAdapterHandle;
PVOID VMHandle;
PVOID VOSHandle;
PCHIP pChip;
UCHAR PermanentNetworkAddress[ETH_LENGTH_OF_ADDRESS];
UCHAR CurrentNetworkAddress[ETH_LENGTH_OF_ADDRESS];
WORD ProtocolLookahead;
ULONG PacketFilter;
ULONG CableConnected;
ULONG CurrentState;
ULONG XmitOKs;
ULONG XmitErrors;
ULONG XmitOneCollisions;
ULONG XmitMoreCollisions;
ULONG XmitMaxCollisions;
ULONG XmitLateCollisions;
ULONG XmitUnderrun;
ULONG XmitLostCRS;
ULONG RcvOKs;
ULONG RcvErrors;
ULONG RcvNoBuffers;
ULONG RcvErrorAlignments;
ULONG RcvCRCErrors;
ULONG RcvOverrun;
WORD XmitQueueDepth;
PNDIS_PACKET TxQueueHead;
WORD CalledFromISR;
CRYSTALMCASTADDRESS McastList[CRYSTAL_MCAST_LIST_SIZE];
ULONG McastListSize;
} VPMINIPDATA, *PVPMINIPDATA;
// This MACRO sets up pvMini_Context and MiniportAdapterHandle from MiniportAdapterContext
#define VPM_SetupMiniContext \
PVPMINIPDATA pvMini_Context = (PVPMINIPDATA)MiniportAdapterContext; \
NDIS_HANDLE MiniportAdapterHandle = pvMini_Context->vpMiniportAdapterHandle; \
PCHIP pChip = pvMini_Context->pChip;
#define VPM_SetupMiniContextFromPchip \
PVPMINIPDATA pvMini_Context = (PVPMINIPDATA)(pChip->pPSD); \
NDIS_HANDLE MiniportAdapterHandle = pvMini_Context->vpMiniportAdapterHandle;
#define UNDERRUN_THRESHOLD 6
#define CRYSTAL_INDICATE_MAXIMUM 1514
#define CRYSTAL_MINIMUM_FRAME_SIZE 16
/* Transmit Request */
typedef struct _TRANSMIT_QUEUE_ELEMENT {
struct _TRANSMIT_QUEUE_ELEMENT *Next; // Ptr to next element in receive queue
WORD PacketSize;
} TRANSMIT_QUEUE_ELEMENT, *PTRANSMIT_QUEUE_ELEMENT;
typedef struct _TRANSMIT_QUEUE {
PTRANSMIT_QUEUE_ELEMENT Head;
PTRANSMIT_QUEUE_ELEMENT Tail;
} TRANSMIT_QUEUE;
#define MAXLOOP 0x8888
#define CRC_PRIME 0xFFFFFFFF;
#define CRC_POLYNOMIAL 0x04C11DB6;
/* Instance Chip Data */
#define FLAG_LP_CANT_AUTO_NEG 0x00000004
typedef struct CHIP_t
{
CFG Config; /* Common chip configuration */
PCD pData; /* Chip Interface private data */
PVPMINIPDATA pPSD; /* Protocol interface private data */
PVOMINIPDATA pOSD; /* Timer private data */
CD lowerdata; // pointed to by pData
VPMINIPDATA higherdata; // pointed to by pPSD
VOMINIPDATA timerdata; // pointed to by pOSD
} CHIP, *PCHIP;
typedef struct {
PCHIP pChip;
WORD FrameSize;
WORD FragCount;
PFRAG pFrag;
} RECEIVE_CONTEXT, *PRECEIVE_CONTEXT;
//
// Used when registering ourselves with NDIS.
//
#define CRYSTAL_NDIS_MAJOR_VERSION 4
#define CRYSTAL_NDIS_MINOR_VERSION 0x0
// Version information exists here, in .RC file, and in NT .INF file
#define CRYSTAL_MAJOR_VERSION 1
#define CRYSTAL_MINOR_VERSION 00
#define CRYSTAL_VERSION_STRING "1.00"
/* Prototypes */
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
static
NDIS_STATUS
CrystalInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE ConfigurationHandle
);
extern
void
CrystalDisableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
extern
void
CrystalEnableInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
extern
void
CrystalHandleInterrupt(
IN NDIS_HANDLE MiniportAdapterContext
);
extern
void
CrystalInterruptService(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueDpc,
IN PVOID Context
);
extern
NDIS_STATUS
CrystalReset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext
);
extern
void
CrystalHalt(
IN NDIS_HANDLE MiniportAdapterContext
);
extern
void
CrystalShutdown(
IN NDIS_HANDLE MiniportAdapterContext
);
extern
BOOLEAN
CrystalCheckForHang(
IN PVOID MiniportAdapterContext
);
extern
NDIS_STATUS
CrystalSend(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_PACKET Packet,
IN UINT SendFlags
);
extern
VOID
CrystalSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets
);
extern
VOID
CrystalGetReturnedPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET pPacket
);
extern
NDIS_STATUS
CrystalTransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE MacReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer
);
extern
NDIS_STATUS
CrystalQueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded
);
extern
NDIS_STATUS
CrystalSetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
WORD VominiStartup(PVOMINIPDATA pOSD, NDIS_HANDLE MiniportAdapterHandle );
void VominiShutdown( PVOID pOSD );
DWORD VominiStartTimer( PCHIP pChip, TIMER_EVENT_HANDLER pEventHandler,
DWORD mSecondDuration, PWORD pTimerID, PVOID pParm );
void VominiStopTimer( PCHIP pChip, WORD TimerID );
void VominiDelay( DWORD mSecondDuration );
extern
NDIS_STATUS
GetNetworkAddress(
IN NDIS_HANDLE ConfigHandle,
OUT PUCHAR CurrentNetworkAddress
);
extern
BYTE
GetDuplexMode(
IN NDIS_HANDLE ConfigHandle
);
extern
BYTE
GetMediaSpeed(
IN NDIS_HANDLE ConfigHandle
);
extern
BYTE
GetInterruptLine(
IN NDIS_HANDLE ConfigHandle
);
//extern
//NDIS_ENVIRONMENT_TYPE
//GetOSType(
// IN NDIS_HANDLE ConfigHandle
// );
VOID
VominiTimerDaemon(
IN PVOID SystemSpecific1,
IN PVOID Context,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
);
BOOL VchipGetConfig( PCHIP pChip);
BOOL VchipStartup( PCHIP pChip );
void VchipChangeLookAhead( PCHIP pChip );
BOOL VchipReset( PCHIP pChip );
void VchipShutdown( PCHIP pChip );
void VchipMulticastDeleteAll( PCHIP pChip );
void VchipMulticastAddAll( PCHIP pChip );
void VchipMulticastAdd( PCHIP pChip, PEA pMulticastAddr );
void VchipMulticastDelete( PCHIP pChip, PEA pMulticastAddr );
void VchipChangeFiltering( PCHIP pChip );
void VpsRecvError( PCHIP pChip, WORD Errors );
WORD VchipISR( PCHIP pChip );
void VchipEnableInterrupts( PCHIP pChip );
void VchipDisableInterrupts( PCHIP pChip );
void VpsMediaChanged( PCHIP pChip );
BOOL VchipSoftReset(PCHIP pChip);
void InitQueues( PCHIP pChip );
void DetectMedia( PCHIP pChip );
// QQQQ void VchipDetectMediaDaemon(PCHIP pChip, WORD TimerID, PVOID pParm);
WORD VchipSend( PCHIP pChip, DWORD SendID, WORD TotalLength);
//
// Used for the debug zones.
//
#ifdef DEBUG
#define ZONE_INIT DEBUGZONE(0)
#define ZONE_RECVERROR DEBUGZONE(1)
#define ZONE_SENDERROR DEBUGZONE(2)
#define ZONE_WARN DEBUGZONE(14)
#define ZONE_ERROR DEBUGZONE(15)
#endif // DEBUG
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -