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

📄 ndisdevice.h

📁 MICREL 网卡驱动 FOR CE 5.0
💻 H
字号:
/* ---------------------------------------------------------------------------
          Copyright (c) 2003-2006 Micrel, Inc.  All rights reserved.
   ---------------------------------------------------------------------------

    NdisDevice.h - NDIS driver device definitions.

    Author      Date        Description
    THa         12/01/03    Created file.
    THa         09/29/05    Changed descriptor structure.
    THa         02/23/06    Updated for WinCE 5.0.
    THa         04/13/06    Version 1.2.
    THa         07/27/06    Version 1.4 supports NDIS 5.
   ---------------------------------------------------------------------------
*/


#ifndef __NDIS_DEVICE_H
#define __NDIS_DEVICE_H

/* -------------------------------------------------------------------------- */

#ifdef DEF_KS8842
#define NDIS_NAME  "KS8842"
#else
#define NDIS_NAME  "KS8841"
#endif


#ifdef UNDER_CE

//
// Windows CE debug zones
//
#if DBG
#define ZONE_ERROR_BIT      0
#define ZONE_WARN_BIT       1
#define ZONE_FUNC_BIT       2
#define ZONE_INIT_BIT       3
#define ZONE_INTR_BIT       4
#define ZONE_RCV_BIT        5
#define ZONE_XMIT_BIT       6
#define ZONE_LINK_BIT       7

#define ZONE_ERROR_MASK     (1 << ZONE_ERROR_BIT)
#define ZONE_WARN_MASK      (1 << ZONE_WARN_BIT)
#define ZONE_FUNC_MASK      (1 << ZONE_FUNC_BIT)
#define ZONE_INIT_MASK      (1 << ZONE_INIT_BIT)
#define ZONE_INTR_MASK      (1 << ZONE_INTR_BIT)
#define ZONE_RCV_MASK       (1 << ZONE_RCV_BIT)
#define ZONE_XMIT_MASK      (1 << ZONE_XMIT_BIT)
#define ZONE_LINK_MASK      (1 << ZONE_LINK_BIT)

#define ZONE_ERROR          DEBUGZONE(ZONE_ERROR_BIT)
#define ZONE_WARN           DEBUGZONE(ZONE_WARN_BIT)
#define ZONE_FUNC           DEBUGZONE(ZONE_FUNC_BIT)
#define ZONE_INIT           DEBUGZONE(ZONE_INIT_BIT)
#define ZONE_INTR           DEBUGZONE(ZONE_INTR_BIT)
#define ZONE_RCV            DEBUGZONE(ZONE_RCV_BIT)
#define ZONE_XMIT           DEBUGZONE(ZONE_XMIT_BIT)
#define ZONE_LINK           DEBUGZONE(ZONE_LINK_BIT)
#endif
#endif

/* -------------------------------------------------------------------------- */

#if defined( NDIS51_MINIPORT )

#define NDISVER  51

#define NDIS_MAJOR_VERSION  5
#define NDIS_MINOR_VERSION  1

#elif defined( NDIS50_MINIPORT )

#define NDISVER  50

#define NDIS_MAJOR_VERSION  5
#define NDIS_MINOR_VERSION  0

#elif defined( NDIS40_MINIPORT )

#define NDISVER  40

#define NDIS_MAJOR_VERSION  4
#define NDIS_MINOR_VERSION  0

#else

#define NDISVER  30

#define NDIS_MAJOR_VERSION  3
#define NDIS_MINOR_VERSION  0

#endif

#define DRIVER_MAJOR_VERSION    1
#define DRIVER_MINOR_VERSION    4

/* -------------------------------------------------------------------------- */

BOOLEAN MiniportCheckForHang (
    IN  NDIS_HANDLE hAdapterContext );

VOID MiniportDisableInterrupt (
    IN  NDIS_HANDLE hAdapterContext );

VOID MiniportEnableInterrupt (
    IN  NDIS_HANDLE hAdapterContext );

VOID MiniportHandleInterrupt (
    IN  NDIS_HANDLE hAdapterContext );

VOID MiniportISR (
    OUT PBOOLEAN pbInterruptRecognized,
    OUT PBOOLEAN pbQueueDpc,
    IN  PVOID    pContext );

NDIS_STATUS MiniportReset (
    OUT PBOOLEAN    AddressingReset,
    IN  NDIS_HANDLE hAdapterContext );

NDIS_STATUS MiniportTransferData (
    OUT PNDIS_PACKET pPacket,
    OUT PUINT        puiBytesTransferred,
    IN  NDIS_HANDLE  hAdapterContext,
    IN  NDIS_HANDLE  hReceiveContext,
    IN  UINT         uiByteOffset,
    IN  UINT         uiBytesToTransfer );

VOID MiniportReturnPacket (
    IN  NDIS_HANDLE  hAdapterContext,
        PNDIS_PACKET Packet );

// NdisSend.cpp
NDIS_STATUS MiniportSend (
    IN  NDIS_HANDLE  hAdapterContext,
    IN  PNDIS_PACKET pPacket,
    IN  UINT         uiFlags );

VOID MiniportSendPackets (
    IN  NDIS_HANDLE   hAdapterContext,
    IN  PPNDIS_PACKET pPacketArray,
    IN  UINT          uiCount );

/* -------------------------------------------------------------------------- */

#include "hardware.h"

#if (NDISVER >= 50)
#include <pshpack1.h>

#else
#include <packon.h>
#endif

/* -------------------------------------------------------------------------- */

#define TASK_OFFLOAD_CHECKSUM      0x00000001
#define TASK_OFFLOAD_IP_CHECKSUM   0x00000002
#define TASK_OFFLOAD_TCP_CHECKSUM  0x00000004
#define TASK_OFFLOAD_UDP_CHECKSUM  0x00000008


#if (NDISVER >= 50)  ||  defined( UNDER_CE )
// Data structure for Wake Up Packet Pattern
#define MAX_PATTERN_LENGTH          128
#define MAX_WAKE_UP_PACKET          4

typedef struct tWAKE_UP_PACKET
{
    NDIS_PM_PACKET_PATTERN NdisPacketPattern;
    UCHAR MaskAndPattern[ MAX_PATTERN_LENGTH + MAX_PATTERN_LENGTH / 8 ];
} WAKE_UP_PACKET, *PWAKE_UP_PACKET;
#endif


typedef enum {
    CARD_TYPE_PCMCIA,
    CARD_TYPE_PCI,
    CARD_TYPE_PCI_TYPE0
} ECardType;


#define RX_PACKET_ARRAY_SIZE  NUM_OF_RX_DESC

#define NDIS_BUFFER_SIZE   2000
#define MIN_MAP_REGISTERS  4
#define MAX_MAP_REGISTERS  NUM_OF_TX_DESC

typedef struct _MAP_REG
{
    UINT             uiRegister;
    PNDIS_BUFFER     pNdisBuffer;
    struct _MAP_REG* pNext;
} MAP_REG, *PMAP_REG;


typedef struct
{
    ULONG                 ulAllocSize;
    ULONG                 ulPhysical;
    BOOLEAN               bCached;
    PUCHAR                pAllocVirtual;
    PUCHAR                pVirtual;
    NDIS_PHYSICAL_ADDRESS AllocPhysicalAddr;
} SHARED_MEM, *PSHARED_MEM;


typedef struct _DMA_BUFFER
{
#ifndef UNDER_CE
    SINGLE_LIST_ENTRY     listEntry;
#else
    struct _DMA_BUFFER*   pNext;
#endif
    SHARED_MEM            sm;
    ULONG                 ulSize;
    NDIS_PHYSICAL_ADDRESS PhysicalAddr;
    PNDIS_BUFFER          pNdisBuffer;
    PNDIS_PACKET          pNdisPacket;
    PMAP_REG              pMapReg;
} DMA_BUFFER, *PDMA_BUFFER;

#define DMA_BUFFER( pDesc )  (( PDMA_BUFFER )(( pDesc )->pReserved ))


typedef struct
{
    PVOID        pDesc;
    PDMA_BUFFER  pDma;
    PNDIS_PACKET Next;
} PACKET_RESERVED, *PPACKET_RESERVED;

#define RESERVED( Packet )  (( PPACKET_RESERVED )(( Packet )->MiniportReserved ))


typedef struct
{
    NDIS_SPIN_LOCK listLock;

#ifndef UNDER_CE
    SLIST_HEADER   listHead;
#endif

    /* Memory pool for buffers. */
    SHARED_MEM  MemPool;

    /* Array of buffers. */
    PDMA_BUFFER BufArray;

    /* Current buffer being manipulated .*/
    PDMA_BUFFER pCurrent;

#ifdef UNDER_CE
    /* First buffer in the free stack. */
    PDMA_BUFFER pTop;

    /* Number of buffers available for use. */
    int         cnAvail;
#endif

    /* Number of buffers allocated. */
    int         cnAlloc;
} BUFFER_INFO, *PBUFFER_INFO;

/* -------------------------------------------------------------------------- */

typedef struct _NDIS_ADAPTER
{
    NDIS_HANDLE             m_hAdapter;

    NDIS_MINIPORT_INTERRUPT m_Interrupt;

    NDIS_INTERFACE_TYPE     m_BusType;

    NDIS_SPIN_LOCK          m_lockAdapter;
    NDIS_SPIN_LOCK          m_lockReceive;
    NDIS_SPIN_LOCK          m_lockHardware;

    NDIS_MINIPORT_TIMER     m_PeriodTimer;

    HARDWARE                m_Hardware;

    ULONG                   m_ulPacketFilter;
    ULONG                   m_ulPacketsNotAllowed;
    ULONG                   m_ulMaxLookAhead;
    ULONG                   m_ulNdisMediaState;

    // hardware resources
    ULONG                   m_ulMemoryAddress;
    ULONG                   m_ulMemorySize;
    ULONG                   m_ulInterruptNumber;
    ULONG                   m_ulInterruptVector;
    ULONG                   m_ulIOBaseAddress;
    ULONG                   m_ulIOLength;

#if (NDISVER >= 50)  ||  defined( UNDER_CE )
    NDIS_PNP_CAPABILITIES   PNP_Capabilities;
    NDIS_DEVICE_POWER_STATE CurrentPowerState;
    NDIS_DEVICE_POWER_STATE NextPowerState;
    ULONG                   m_ulWakeUpEnable;
    ULONG                   m_ulWakeUpOk;
    ULONG                   m_ulWakeUpError;
    WAKE_UP_PACKET          WakeUpPacket[ MAX_WAKE_UP_PACKET ];
    int                     m_cnWakeUpPacket;
#endif

    ULONG                   m_ulTxChecksum;
    ULONG                   m_ulRxChecksum;

    // member variables used for transmitting
    PNDIS_PACKET            m_pPacketQueueHead;
    PNDIS_PACKET            m_pPacketQueueTail;

    NDIS_HANDLE             m_hPacketPool;
    NDIS_HANDLE             m_hBufferPool;

    SHARED_MEM              m_DescPool;

    BUFFER_INFO             m_RxBufInfo;
    BUFFER_INFO             m_TxBufInfo;
    int                     m_nPME_wait;

    PMAP_REG                m_MapReg;
    PMAP_REG                m_pMapRegTop;
    int                     m_cnMapRegAlloc;
    int                     m_cnMapRegAvail;

    PNDIS_PACKET*           m_PacketArray;
    int                     m_cnPackets;

    ULONG                   m_ulSlot;
    ECardType               m_CardType;

#ifdef UNDER_CE
    BOOL                    m_bPacketFilterSet;

#else
    BOOLEAN                 m_bPacketFilterSet;
#endif
} NDIS_ADAPTER;

typedef struct _NDIS_ADAPTER* PNDIS_ADAPTER;

#if (NDISVER >= 50)
#include <poppack.h>
#else

#ifdef UNDER_CE
    #pragma warning(disable:4103)
    #pragma pack(1)

#else
#include <packoff.h>
#endif
#endif

/* -------------------------------------------------------------------------- */

VOID FreeMemory (
        PNDIS_ADAPTER pAdapter );

NDIS_STATUS InitAdapter (
        PNDIS_ADAPTER pAdapter,
    IN  NDIS_HANDLE   hAdapter,
    IN  NDIS_HANDLE   hConfiguration );

NDIS_STATUS SetupAdapter (
        PNDIS_ADAPTER pAdapter );

void ShutdownAdapter (
    IN  PNDIS_ADAPTER pAdapter );

VOID DeRegisterAdapter (
    PNDIS_ADAPTER pAdapter );

NDIS_STATUS RegisterAdapter (
    PNDIS_ADAPTER pAdapter );


BOOLEAN AcquireAdapter (
    IN  PNDIS_ADAPTER pAdapter,
    IN  BOOLEAN       fWait );

VOID ReleaseAdapter (
    IN  PNDIS_ADAPTER pAdapter );

VOID AdapterGetDescription (
    PVOID* ppSource,
    PUINT  puiLength );

ULONGLONG AdapterReadCounter (
    PNDIS_ADAPTER pAdapter,
    EOidCounter   OidCounter );

// in NdisSend.cpp
ULONG AdapterTransmitQueueLength (
    IN  PNDIS_ADAPTER pAdapter );

#if 0
BOOLEAN AdapterCopyDownPacket (
    IN  PNDIS_ADAPTER pAdapter,
    IN  USHORT        wFID,
    IN  USHORT        wOffset,
    IN  PNDIS_PACKET  pPacket,
    OUT PUINT         puiLength,
    IN  UCHAR         bBAP );
#endif

BOOLEAN AdapterLockSend (
    IN  PNDIS_ADAPTER pAdapter );

void AdapterUnlockSend (
    IN  PNDIS_ADAPTER pAdapter );

void SendNextPacket (
    PNDIS_ADAPTER pAdapter );


void PrintMacAddress (
    PUCHAR bAddr );

NDIS_STATUS GetDeviceMode (
    IN  PNDIS_ADAPTER pAdapter,
    IN  NDIS_OID      Oid,
    IN  PVOID         pBuffer,
    IN  ULONG         ulLen,
    OUT PULONG        pulBytesWritten,
    OUT PULONG        pulBytesNeeded );

NDIS_STATUS SetDeviceMode (
    IN  PNDIS_ADAPTER pAdapter,
    IN  NDIS_OID      Oid,
    IN  PVOID         pBuffer,
    IN  ULONG         ulLen,
    OUT PULONG        pulBytesRead,
    OUT PULONG        pulBytesNeeded );

#ifndef INLINE
PDMA_BUFFER Alloc_DMA_Buffer (
    PBUFFER_INFO pBufInfo,
    PTDesc       pCurrent );

VOID Free_DMA_Buffer (
    PBUFFER_INFO pBufInfo,
    PDMA_BUFFER  pDma );

#else
__inline
PDMA_BUFFER Alloc_DMA_Buffer (
    PBUFFER_INFO pBufInfo,
    PTDesc       pCurrent )
{
    PDMA_BUFFER        pDma;

#ifndef UNDER_CE
    PSINGLE_LIST_ENTRY pEntry;

    pEntry = NdisInterlockedPopEntrySList( &pBufInfo->listHead,
        &pBufInfo->listLock );
    ASSERT( pEntry != NULL );
    pDma = CONTAINING_RECORD( pEntry, DMA_BUFFER, listEntry );

#else
    ASSERT( pBufInfo->cnAvail );
    pDma = pBufInfo->pTop;
    pBufInfo->pTop = pDma->pNext;
    pBufInfo->cnAvail--;
#endif

    /* Link to current descriptor. */
    pCurrent->pReserved = pDma;
    return( pDma );
}  // Alloc_DMA_Buffer


__inline
VOID Free_DMA_Buffer (
    PBUFFER_INFO pBufInfo,
    PDMA_BUFFER  pDma )
{
#ifndef UNDER_CE
    NdisInterlockedPushEntrySList( &pBufInfo->listHead, &pDma->listEntry,
        &pBufInfo->listLock );

#else
    pDma->pNext = pBufInfo->pTop;
    pBufInfo->pTop = pDma;
    pBufInfo->cnAvail++;
#endif
}
#endif


VOID TransmitDone (
    PNDIS_ADAPTER pAdapter );

VOID TransmitReset (
    PNDIS_ADAPTER pAdapter );

typedef struct {
    ULONG cnCount;
    ULONG fUsing;
} TDbgHang;

extern TDbgHang hang[];
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -