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

📄 cs8900a.h

📁 PXA255/270平台的 CS8900网卡驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
   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 + -