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

📄 ndis4cs8950.h

📁 EP9315开发板的Wince6.0的BSP包文件
💻 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 + -