📄 cs8900a.h
字号:
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 ENQ_PACKET(Packet, Queue) \
if (Queue.Tail == NULL) { \
Queue.Head = Queue.Tail = Packet; \
} else { \
Queue.Tail->Next = Packet; \
Queue.Tail = Packet; \
} \
Queue.Tail->Next = NULL;
#define DEQ_PACKET(pPacket, pQueue) \
if (pPacket != NULL) { \
*pPacket = pQueue.Head; \
if (pQueue.Head != NULL) { \
if (pQueue.Head == pQueue.Tail) { \
pQueue.Tail = pQueue.Head->Next; \
} \
pQueue.Head = pQueue.Head->Next; \
} \
}
#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;
#define CRYSTAL_TRANSMIT_PACKET_MAXIMUM 3
typedef struct _TRANSMIT_QUEUE {
PTRANSMIT_QUEUE_ELEMENT Head;
PTRANSMIT_QUEUE_ELEMENT Tail;
} TRANSMIT_QUEUE;
/* Chip Data */
typedef struct
{
UCHAR RxFlatBuff[CRYSTAL_INDICATE_MAXIMUM+4];
ULONG RxPacketSize;
DWORD NeedToIssueRcvCmpltFlag;
TRANSMIT_QUEUE TransmitQueue;
WORD TransmitBidPending;
WORD TransmitInProgress; // If an element is on the Queue, tx is in progress
WORD TransmitStarted;
WORD TransmitThresholdCount;
WORD TransmitCommand;
WORD StartTX;
WORD CurrentReceiveConfiguration;
WORD Resetting;
WORD ConfigFlags;
WORD DetectMediaTimer;
PVOID PortOffset;
PVOID vIOSpace;
NDIS_MINIPORT_INTERRUPT InterruptObject;
} CD, *PCD;
/* Config Flags */
#define CFGFLG_IOCHRDY 0x0001
#define CFGFLG_DCDC_POLARITY 0x0002
// Media Capability
#define CFGFLG_MEDIA_CAP_BASE_T 0x0010
#define CFGFLG_MEDIA_CAP_BASE_AUI 0x0020
#define CFGFLG_MEDIA_CAP_BASE_2 0x0040
#define CRC_PRIME 0xFFFFFFFF;
#define CRC_POLYNOMIAL 0x04C11DB6;
/* Instance Chip Data */
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;
//
// 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 4
#define CRYSTAL_MINOR_VERSION 0
#define CRYSTAL_VERSION_STRING "4.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
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
);
void CS8900DetectThread(void);
WORD VominiStartup(PVOMINIPDATA pOSD, NDIS_HANDLE MiniportAdapterHandle );
void VominiShutdown( PVOID pOSD );
WORD 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
);
VOID
VominiTimerDaemon(
IN PVOID SystemSpecific1,
IN PVOID Context,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
);
WORD AssignedUserDefinedConfig(PCHIP pChip);
WORD VchipStartup( PCHIP pChip );
WORD VchipInit( PCHIP pChip );
WORD 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 VpsSendError( PCHIP pChip, WORD Errors );
void VpsRecvError( PCHIP pChip, WORD Errors );
WORD VchipISR( PCHIP pChip );
void VchipEnableInterrupts( PCHIP pChip );
void VchipDisableInterrupts( PCHIP pChip );
void VpsMediaChanged( PCHIP pChip );
void VchipTest( PCHIP pChip );
PORT FindNextChip( PCHIP pChip, PORT StartingIOBase );
void InitQueues( PCHIP pChip );
WORD ReadPacketPage( WORD Offset );
void WritePacketPage( WORD Offset, WORD Value );
void DetectMedia( PCHIP pChip );
void VchipDetectMediaDaemon(PCHIP pChip, WORD TimerID, PVOID pParm);
BOOLEAN CrystalTestInternalLoopBack( PCHIP pChip );
NDIS_STATUS VchipFindIOBase( PCHIP pChip );
typedef struct
{
WORD DATA0;
WORD DATA1;
WORD TXCMD;
WORD TXLENGTH;
WORD ISQ;
WORD PAGEIX;
WORD PAGE0;
WORD PAGE1;
} CS8900_REGS;
extern volatile CS8900_REGS *v_pCS8900Regs;
//#ifdef DEBUGMSG
//#undef DEBUGMSG
//#define DEBUGMSG(cond,exp) //(NKDbgPrintfW exp)
//#endif
#endif // _cs8900a_h_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -